[LON-CAPA-cvs] cvs: loncom /interface loncommon.pm

raeburn raeburn at source.lon-capa.org
Sat Mar 10 19:48:54 EST 2012


raeburn		Sun Mar 11 00:48:54 2012 EDT

  Modified files:              
    /loncom/interface	loncommon.pm 
  Log:
  - Bug 6035. %courses hash returned from &findallcourses() changed.
    %courses changed from hash of hash to hash of hash of an array.
    - outer hash key: courseID, inner hash key: section (or 'none'), inner array
      contains: $role/$cdom/$cnum/ (section=none) or
                $role/$cdom/$cnum/$sec otherwise.
  - when &blockcheck() uses %courses from findallcourses(), will now loop over
    items in inner array when building aggregate privs.       
  
  
Index: loncom/interface/loncommon.pm
diff -u loncom/interface/loncommon.pm:1.1057 loncom/interface/loncommon.pm:1.1058
--- loncom/interface/loncommon.pm:1.1057	Sun Mar  4 15:42:52 2012
+++ loncom/interface/loncommon.pm	Sun Mar 11 00:48:54 2012
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.1057 2012/03/04 15:42:52 foxr Exp $
+# $Id: loncommon.pm,v 1.1058 2012/03/11 00:48:54 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -4017,18 +4017,25 @@
             if ($tstart) {
                 next if ($tstart > $now);
             }
-            my ($cdom,$cnum,$sec,$cnumpart,$secpart,$role,$realsec);
+            my ($cdom,$cnum,$sec,$cnumpart,$secpart,$role);
             (undef,$cdom,$cnumpart,$secpart) = split(/\//,$entry);
+            my $value = $trole.'/'.$cdom.'/';
             if ($secpart eq '') {
                 ($cnum,$role) = split(/_/,$cnumpart); 
                 $sec = 'none';
-                $realsec = '';
+                $value .= $cnum.'/';
             } else {
                 $cnum = $cnumpart;
                 ($sec,$role) = split(/_/,$secpart);
-                $realsec = $sec;
+                $value .= $cnum.'/'.$sec;
+            }
+            if (ref($courses{$cdom.'_'.$cnum}{$sec}) eq 'ARRAY') {
+                unless (grep(/^\Q$value\E$/,@{$courses{$cdom.'_'.$cnum}{$sec}})) {
+                    push(@{$courses{$cdom.'_'.$cnum}{$sec}},$value);
+                }
+            } else {
+                @{$courses{$cdom.'_'.$cnum}{$sec}} = ($value);
             }
-            $courses{$cdom.'_'.$cnum}{$sec} = $trole.'/'.$cdom.'/'.$cnum.'/'.$realsec;
         }
     } else {
         foreach my $key (keys(%env)) {
@@ -4046,11 +4053,19 @@
                     if ($now>$endtime) { $active=0; }
                 }
                 if ($active) {
+                    my $value = $role.'/'.$cdom.'/'.$cnum.'/';
                     if ($sec eq '') {
                         $sec = 'none';
+                    } else {
+                        $value .= $sec;
+                    }
+                    if (ref($courses{$cdom.'_'.$cnum}{$sec}) eq 'ARRAY') {
+                        unless (grep(/^\Q$value\E$/,@{$courses{$cdom.'_'.$cnum}{$sec}})) {
+                            push(@{$courses{$cdom.'_'.$cnum}{$sec}},$value);
+                        }
+                    } else {
+                        @{$courses{$cdom.'_'.$cnum}{$sec}} = ($value);
                     }
-                    $courses{$cdom.'_'.$cnum}{$sec} = 
-                                     $role.'/'.$cdom.'/'.$cnum.'/'.$sec;
                 }
             }
         }
@@ -4143,34 +4158,38 @@
             if ($otheruser) {
                 # Resource belongs to user other than current user.
                 # Assemble privs for that user, and check for 'evb' priv.
-                my ($trole,$tdom,$tnum,$tsec);
-                my $entry = $live_courses{$course}{$sec};
-                if ($entry =~ /^cr/) {
-                    ($trole,$tdom,$tnum,$tsec) = 
-                      ($entry =~ m|^(cr/$match_domain/$match_username/\w+)\./($match_domain)/($match_username)/?(\w*)$|);
-                } else {
-                    ($trole,$tdom,$tnum,$tsec) = split(/\//,$entry);
-                }
-                my ($spec,$area,$trest,%allroles,%userroles);
-                $area = '/'.$tdom.'/'.$tnum;
-                $trest = $tnum;
-                if ($tsec ne '') {
-                    $area .= '/'.$tsec;
-                    $trest .= '/'.$tsec;
-                }
-                $spec = $trole.'.'.$area;
-                if ($trole =~ /^cr/) {
-                    &Apache::lonnet::custom_roleprivs(\%allroles,$trole,
-                                                      $tdom,$spec,$trest,$area);
-                } else {
-                    &Apache::lonnet::standard_roleprivs(\%allroles,$trole,
-                                                       $tdom,$spec,$trest,$area);
-                }
-                my ($author,$adv) = &Apache::lonnet::set_userprivs(\%userroles,\%allroles);
-                if ($userroles{'user.priv.'.$checkrole} =~ /evb\&([^\:]*)/) {
-                    if ($1) {
-                        $no_userblock = 1;
-                        last;
+                my (%allroles,%userroles);
+                if (ref($live_courses{$course}{$sec}) eq 'ARRAY') {
+                    foreach my $entry (@{$live_courses{$course}{$sec}}) { 
+                        my ($trole,$tdom,$tnum,$tsec);
+                        if ($entry =~ /^cr/) {
+                            ($trole,$tdom,$tnum,$tsec) = 
+                                ($entry =~ m|^(cr/$match_domain/$match_username/\w+)\./($match_domain)/($match_username)/?(\w*)$|);
+                        } else {
+                           ($trole,$tdom,$tnum,$tsec) = split(/\//,$entry);
+                        }
+                        my ($spec,$area,$trest);
+                        $area = '/'.$tdom.'/'.$tnum;
+                        $trest = $tnum;
+                        if ($tsec ne '') {
+                            $area .= '/'.$tsec;
+                            $trest .= '/'.$tsec;
+                        }
+                        $spec = $trole.'.'.$area;
+                        if ($trole =~ /^cr/) {
+                            &Apache::lonnet::custom_roleprivs(\%allroles,$trole,
+                                                              $tdom,$spec,$trest,$area);
+                        } else {
+                            &Apache::lonnet::standard_roleprivs(\%allroles,$trole,
+                                                                $tdom,$spec,$trest,$area);
+                        }
+                    }
+                    my ($author,$adv) = &Apache::lonnet::set_userprivs(\%userroles,\%allroles);
+                    if ($userroles{'user.priv.'.$checkrole} =~ /evb\&([^\:]*)/) {
+                        if ($1) {
+                            $no_userblock = 1;
+                            last;
+                        }
                     }
                 }
             } else {




More information about the LON-CAPA-cvs mailing list