Diff for /loncom/interface/loncommon.pm between versions 1.489 and 1.490

version 1.489, 2006/12/08 20:09:29 version 1.490, 2006/12/11 03:43:15
Line 2850  sub findallcourses { Line 2850  sub findallcourses {
                 $cnum = $cnumpart;                  $cnum = $cnumpart;
                 ($sec,$role) = split(/_/,$secpart);                  ($sec,$role) = split(/_/,$secpart);
                 $realsec = $sec;                  $realsec = $sec;
             }                 }
             $courses{$cdom.'_'.$cnum}{$sec} = $trole.'/'.$cdom.'/'.$cnum.'/'.$realsec;              $courses{$cdom.'_'.$cnum}{$sec} = $trole.'/'.$cdom.'/'.$cnum.'/'.$realsec;
         }          }
     } else {      } else {
Line 2885  sub findallcourses { Line 2885  sub findallcourses {
   
 sub blockcheck {  sub blockcheck {
     my ($setters,$activity,$uname,$udom) = @_;      my ($setters,$activity,$uname,$udom) = @_;
     # Retrieve active course roles - course coordinator, instructor, exam proctor, ta, student or custom role.  
       if (!defined($udom)) {
           $udom = $env{'user.domain'};
       }
       if (!defined($uname)) {
           $uname = $env{'user.name'};
       }
   
       my ($startblock,$endblock);
   
       # If uname and udom are for a course, check for blocks in the course.
   
       if (&Apache::lonnet::is_course($udom,$uname)) {
           my %records = &Apache::lonnet::dump('comm_block',$udom,$uname);
           ($startblock,$endblock)=&get_blocks($setters,$activity,$udom,$uname);
           return ($startblock,$endblock);
       }
   
     my %live_courses = &findallcourses(undef,$uname,$udom);      my %live_courses = &findallcourses(undef,$uname,$udom);
   
     # Retrieve blocking times and identity of blocker for active courses      # If uname is for a user, and activity is course-specific, i.e.,
     # of specified user, unless user has 'evb' privilege.      # boards, chat or groups, check for blocking in current course only.
   
     my $startblock = 0;      if (($activity eq 'boards' || $activity eq 'chat' ||
     my $endblock = 0;           $activity eq 'groups') && ($env{'request.course.id'})) {
           foreach my $key (keys(%live_courses)) {
               if ($key ne $env{'request.course.id'}) {
                   delete($live_courses{$key});
               }
           }
       }
   
       my $otheruser = 0;
       my %own_courses;
       if ((($uname ne $env{'user.name'})) || ($udom ne $env{'user.domain'})) {
           # Resource belongs to user other than current user.
           $otheruser = 1;
           # Gather courses for current user
           %own_courses = 
               &findallcourses(undef,$env{'user.name'},$env{'user.domain'});
       }
   
       # Gather active course roles - course coordinator, instructor, 
       # exam proctor, ta, student, or custom role.
   
     foreach my $course (keys(%live_courses)) {      foreach my $course (keys(%live_courses)) {
         my ($cdom,$cnum);          my ($cdom,$cnum);
Line 2901  sub blockcheck { Line 2936  sub blockcheck {
             $cdom = $env{'course.'.$course.'.domain'};              $cdom = $env{'course.'.$course.'.domain'};
             $cnum = $env{'course.'.$course.'.num'};              $cnum = $env{'course.'.$course.'.num'};
         } else {          } else {
            ($cdom,$cnum) = split(/_/,$course);               ($cdom,$cnum) = split(/_/,$course); 
         }          }
         my $no_ownblock = 0;          my $no_ownblock = 0;
         my $no_userblock = 0;          my $no_userblock = 0;
           if ($otheruser) {
               # Check if current user has 'evb' priv for this
               if (defined($own_courses{$course})) {
                   foreach my $sec (keys(%{$own_courses{$course}})) {
                       my $checkrole = 'cm./'.$cdom.'/'.$cnum;
                       if ($sec ne 'none') {
                           $checkrole .= '/'.$sec;
                       }
                       if (&Apache::lonnet::allowed('evb',undef,undef,$checkrole)) {
                           $no_ownblock = 1;
                           last;
                       }
                   }
               }
               # if they have 'evb' priv and are currently not playing student
               next if (($no_ownblock) &&
                    ($env{'request.role'} !~ m{^st\./$cdom/$cnum}));
           }
         foreach my $sec (keys(%{$live_courses{$course}})) {          foreach my $sec (keys(%{$live_courses{$course}})) {
             my $checkrole = 'cm./'.$cdom.'/'.$cnum;              my $checkrole = 'cm./'.$cdom.'/'.$cnum;
             if ($sec ne 'none') {              if ($sec ne 'none') {
                 $checkrole .= '/'.$sec;                  $checkrole .= '/'.$sec;
             }              }
             if ((defined($uname) && ($uname ne $env{'user.name'})) ||              # Resource belongs to user other than current user.
                  (defined($udom) && ($udom ne $env{'user.domain'}))) {               # Assemble privs for that user, and check for 'evb' priv.  
               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 ($trole,$tdom,$tnum,$tsec);
                 my $entry = $live_courses{$course}{$sec};                  my $entry = $live_courses{$course}{$sec};
                 if ($entry =~ /^cr/) {                  if ($entry =~ /^cr/) {
Line 2942  sub blockcheck { Line 2998  sub blockcheck {
                         last;                          last;
                     }                      }
                 }                  }
              } else {              } else {
                   # Resource belongs to current user
                   # Check for 'evb' priv via lonnet::allowed().
                 if (&Apache::lonnet::allowed('evb',undef,undef,$checkrole)) {                  if (&Apache::lonnet::allowed('evb',undef,undef,$checkrole)) {
                     $no_ownblock = 1;                      $no_ownblock = 1;
                     last;                      last;
Line 2954  sub blockcheck { Line 3012  sub blockcheck {
                  ($env{'request.role'} !~ m{^st\./$cdom/$cnum}));                   ($env{'request.role'} !~ m{^st\./$cdom/$cnum}));
         next if ($no_userblock);          next if ($no_userblock);
   
         $setters->{$course} = {};          # Retrieve blocking times and identity of blocker for course
         $setters->{$course}{'staff'} = [];          # of specified user, unless user has 'evb' privilege.
         $setters->{$course}{'times'} = [];  
         my %records = &Apache::lonnet::dump('comm_block',$cdom,$cnum);          ($startblock,$endblock)=&get_blocks($setters,$activity,$cdom,$cnum);
         foreach my $record (keys(%records)) {      }
             my ($start,$end) = ($record =~ m/^(\d+)____(\d+)$/);      return ($startblock,$endblock);
             if ($start <= time && $end >= time) {  }
                 my ($staff_name,$staff_dom,$title,$blocks) =  
                     &parse_block_record($records{$record});  sub get_blocks {
                 if ($blocks->{$activity} eq 'on') {      my ($setters,$activity,$cdom,$cnum) = @_;
                     push(@{$$setters{$course}{'staff'}}, [$staff_name,$staff_dom]);                    push(@{$$setters{$course}{'times'}}, [$start,$end]);      my $startblock = 0;
                     if ( ($startblock == 0) || ($startblock > $1) ) {      my $endblock = 0;
                         $startblock = $1;      my $course = $cdom.'_'.$cnum;
                     }      $setters->{$course} = {};
                     if ( ($endblock == 0) || ($endblock < $2) ) {      $setters->{$course}{'staff'} = [];
                         $endblock = $2;      $setters->{$course}{'times'} = [];
                     }      my %records = &Apache::lonnet::dump('comm_block',$cdom,$cnum);
       foreach my $record (keys(%records)) {
           my ($start,$end) = ($record =~ m/^(\d+)____(\d+)$/);
           if ($start <= time && $end >= time) {
               my ($staff_name,$staff_dom,$title,$blocks) =
                   &parse_block_record($records{$record});
               if ($blocks->{$activity} eq 'on') {
                   push(@{$$setters{$course}{'staff'}},[$staff_name,$staff_dom]);
                   push(@{$$setters{$course}{'times'}}, [$start,$end]);
                   if ( ($startblock == 0) || ($startblock > $1) ) {
                       $startblock = $1;
                   }
                   if ( ($endblock == 0) || ($endblock < $2) ) {
                       $endblock = $2;
                 }                  }
             }              }
         }          }
Line 3020  sub build_block_table { Line 3091  sub build_block_table {
         my %courseinfo=&Apache::lonnet::coursedescription($course);          my %courseinfo=&Apache::lonnet::coursedescription($course);
         for (my $i=0; $i<@{$$setters{$course}{staff}}; $i++) {          for (my $i=0; $i<@{$$setters{$course}{staff}}; $i++) {
             my ($uname,$udom) = @{$$setters{$course}{staff}[$i]};              my ($uname,$udom) = @{$$setters{$course}{staff}[$i]};
             my $fullname = &aboutmewrapper(&plainname($uname,$udom),$uname,$udom);              my $fullname = &plainname($uname,$udom);
               if (defined($env{'user.name'}) && defined($env{'user.domain'})
                   && $env{'user.name'} ne 'public' 
                   && $env{'user.domain'} ne 'public') {
                   $fullname = &aboutmewrapper($fullname,$uname,$udom);
               }
             my ($openblock,$closeblock) = @{$$setters{$course}{times}[$i]};              my ($openblock,$closeblock) = @{$$setters{$course}{times}[$i]};
             $openblock = &Apache::lonlocal::locallocaltime($openblock);              $openblock = &Apache::lonlocal::locallocaltime($openblock);
             $closeblock= &Apache::lonlocal::locallocaltime($closeblock);              $closeblock= &Apache::lonlocal::locallocaltime($closeblock);
             $output .= &Apache::loncommon::start_data_table_row().              $output .= &Apache::loncommon::start_data_table_row().
                        '<td>'.$courseinfo{'description'}.'</td>'.                         '<td>'.$courseinfo{'description'}.'</td>'.
                        '<td>'.$openblock.' to '.$closeblock.'</td>'.                         '<td>'.$openblock.' to '.$closeblock.'</td>'.
                        '<td>'.$fullname.'.</td>'.                         '<td>'.$fullname.'</td>'.
                         &Apache::loncommon::end_data_table_row();                          &Apache::loncommon::end_data_table_row();
         }          }
     }      }
     $output .= &end_data_table();      $output .= &end_data_table();
 }  }
   
   sub blocking_status {
       my ($activity,$uname,$udom) = @_;
       my %setters;
       my ($blocked,$output,$ownitem,$is_course);
       my ($startblock,$endblock)=&blockcheck(\%setters,$activity,$uname,$udom);
       if ($startblock && $endblock) {
           $blocked = 1;
           if (wantarray) {
               my $category;
               if ($activity eq 'boards') {
                   $category = 'Discussion posts in this course';
               } elsif ($activity eq 'blogs') {
                   $category = 'Blogs';
               } elsif ($activity eq 'port') {
                   if (defined($uname) && defined($udom)) {
                       if ($uname eq $env{'user.name'} &&
                           $udom eq $env{'user.domain'}) {
                           $ownitem = 1;
                       }
                   }
                   $is_course = &Apache::lonnet::is_course($udom,$uname);
                   if ($ownitem) { 
                       $category = 'Your portfolio files';  
                   } elsif ($is_course) {
                       my $coursedesc;
                       foreach my $course (keys(%setters)) {
                           my %courseinfo =
                                &Apache::lonnet::coursedescription($course);
                           $coursedesc = $courseinfo{'description'};
                       }
                       $category = "Group files in the course '$coursedesc'";
                   } else {
                       $category = 'Portfolio files belonging to ';
                       if ($env{'user.name'} eq 'public' && 
                           $env{'user.domain'} eq 'public') {
                           $category .= &plainname($uname,$udom);
                       } else {
                           $category .= &aboutmewrapper(&plainname($uname,$udom),$uname,$udom);  
                       }
                   }
               } elsif ($activity eq 'groups') {
                   $category = 'Groups in this course';
               }
               my $showstart = &Apache::lonlocal::locallocaltime($startblock);
               my $showend = &Apache::lonlocal::locallocaltime($endblock);
               $output = '<br />'.&mt('[_1] will be inaccessible between [_2] and [_3] because communication is being blocked.',$category,$showstart,$showend).'<br />';
               if (!($activity eq 'port' && !($ownitem) && !($is_course))) { 
                   $output .= &build_block_table($startblock,$endblock,\%setters);
               }
           }
       }
       if (wantarray) {
           return ($blocked,$output);
       } else {
           return $blocked;
       }
   }
   
 ###############################################  ###############################################
   
 =pod  =pod

Removed from v.1.489  
changed lines
  Added in v.1.490


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>