Diff for /loncom/interface/lonblockingstatus.pm between versions 1.5 and 1.21

version 1.5, 2009/07/27 12:12:48 version 1.21, 2021/11/30 17:35:10
Line 32  use strict; Line 32  use strict;
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common);
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonnet;  use Apache::lonnet;
 use GDBM_File;  
 use POSIX qw(strftime mktime);  
 use Apache::lonmenu();  
 use Apache::lonenc();  
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonnet();  
 use HTML::Entities;  
 use Apache::lonhtmlcommon();  
 use Apache::loncoursedata();  
 use Apache::lontexconvert();  
 use Apache::lonclonecourse();  
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
 use DateTime::TimeZone;  
 use DateTime::Locale::Catalog;  
   
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
     Apache::loncommon::no_cache($r);      &Apache::loncommon::no_cache($r);
     Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
   
     $r->send_http_header;      $r->send_http_header;
     return OK if $r->header_only;      return OK if $r->header_only;
   
     $r->print(      my (%activities,$activity,$origurl,$origsymb);
         Apache::loncommon::start_page(      map { $activities{$_} = 1; } ('boards','chat','com','blogs','about','groups','port','printout','docs','grades','passwd','search');
             'Communication Blocking Status Information',  
             undef, {'only_body' => 1, }));      # determine what kind of blocking we want details for
     Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['activity']);      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['activity','url','symb']);
     my $blocktext = get_blocking_table($env{'form.activity'});      $activity = $env{'form.activity'};
     $r->print($blocktext);  
       my $title = 'Communication Blocking Status Information';
   
       if (($activity eq 'docs') || ($activity eq 'printout') ||
           ($activity eq 'grades') || ($activity eq 'passwd') ||
           ($activity eq 'search')) {
           $title = 'Blocking Status Information';
           if ($activity eq 'docs') {
               $origurl = $env{'form.url'};
               $origsymb = $env{'form.symb'};
           }
       }
       $r->print(&Apache::loncommon::start_page($title,undef,
                                               {'only_body' => 1}));
   
       if (($activity eq '') || (!$activities{$activity})) {
           $r->print('<p class="LC_error">'.&mt('Error: unknown activity type blocked').'</p>');
       } elsif (($activity eq 'docs') && ($origurl eq '') && ($origsymb eq '')) {
           $r->print('<p class="LC_error">'.&mt('Error: could not determine what content was blocked from access').'</p>');
       } else {
           my $clientip = &Apache::lonnet::get_requestor_ip($r);
           $r->print(&blockpage($activity,$origurl,$origsymb,$clientip));
       }
   
       $r->print(&Apache::loncommon::end_page());
   
     $r->print(Apache::loncommon::end_page());  
     return OK;      return OK;
 }  }
 sub get_blocking_table{  
     my ($activity,$uname,$udom) = @_;  sub blockpage {
     my %setters;      my ($activity,$origurl,$origsymb,$clientip) = @_;
     my ($blocked,$output,$ownitem,$is_course);  
     my ($startblock,$endblock)=&Apache::loncommon::blockcheck(\%setters,$activity,$uname,$udom);      # in case of a portfolio block we need to determine the owner of the files
     if ($startblock && $endblock) {      # we're trying to look at. This information is passed via query string.
         $blocked = 1;      my ($uname, $udom);
             my $category;  
             if ($activity eq 'boards') {      if (($activity eq 'port') || ($activity eq 'about') ||
                 $category = 'Discussion posts in this course';          (($activity eq 'passwd') && ($env{'user.name'} eq 'public') && ($env{'user.domain'} eq 'public'))) {
             } elsif ($activity eq 'chat') {          &Apache::loncommon::get_unprocessed_cgi(
                 $category = 'Chat';              $ENV{'QUERY_STRING'}, ['udom', 'uname'] );
             } elsif ($activity eq 'msgdisplay') {  
                 $category = 'This message';          ($uname, $udom) = ($env{'form.uname'}, $env{'form.udom'});
             } elsif ($activity eq 'blogs') {          if (($uname !~ /^$match_username$/) || ($udom !~ /^$match_domain$/)) {
                 $category = 'Blogs';              if ($activity eq 'port') {
             } elsif ($activity eq 'port') {                  return '<span class="LC_error">'.
                 if (defined($uname) && defined($udom)) {                         &mt('Information about the owner of the portfolio files you were trying to view was missing or invalid.').
                     if ($uname eq $env{'user.name'} &&                         '</span><br />'.
                         $udom eq $env{'user.domain'}) {                         &mt('Without valid owner information, the reason why access is blocked can not be determined');
                         $ownitem = 1;              } elsif ($activity eq 'about') {
                     }                  return '<span class="LC_error">'.
                 }                         &mt('The username and/or domain for the User Information page you were trying to view was missing or invalid.').
                 $is_course = &Apache::lonnet::is_course($udom,$uname);                         '</span><br />'.
                 if ($ownitem) {                         &mt('Without valid information, the reason why access is blocked can not be determined');
                     $category = 'Your portfolio files';              } else {
                 } elsif ($is_course) {                  return '<span class="LC_error">'.
                     my $coursedesc;                         &mt('Information about the username and/or domain for which you were trying to reset a password was missing or invalid.').
                     foreach my $course (keys(%setters)) {                         '</span><br />'.
                         my %courseinfo =                         &mt('Without valid information, the reason why access is blocked can not be determined');
                              &Apache::lonnet::coursedescription($course);              }
                         $coursedesc = $courseinfo{'description'};          }
                     }      }
                     $category = "Group portfolio in the course '$coursedesc'";  
                 } else {      # retrieve start/end of possible active blocking
                     $category = 'Portfolio files belonging to ';      my (%setters,$startblock,$endblock,$triggerblock,$by_ip,$blockdom);
                     if ($env{'user.name'} eq 'public' &&  
                         $env{'user.domain'} eq 'public') {      if ($activity eq 'docs') {
                         $category .= &plainname($uname,$udom);          my ($cdom,$cnum);
                     } else {          if ($env{'request.course.id'}) {
                         $category .= &aboutmewrapper(&plainname($uname,$udom),$uname,$udom);              $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
                     }              $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
           }
           my $cancheck;
           if (($cdom ne '') && ($cnum ne '')) {
               if ($origsymb =~ m{^uploaded/($match_domain)/($match_courseid)/}) {
                   my ($crsdom,$crsnum) = ($1,$2);
                   if (($cdom eq $crsdom) && ($cnum eq $crsnum)) {
                       $cancheck = 1;
                 }                  }
             } elsif ($activity eq 'groups') {  
                 $category = 'Groups in this course';  
             } else {              } else {
                 $category = 'Communication';                  $cancheck = 1;
               }
           }
           if ($cancheck) {
               ($startblock,$endblock,$triggerblock) =
                   &Apache::loncommon::blockcheck(\%setters,$activity,$clientip,$cnum,$cdom,$origurl,1,$origsymb,'blockingstatus');
           } else {
               return '<p class="LC_info">'.&mt('Could not determine why access is blocked.').'</p>';
           }
       } else {
           ($startblock,$endblock,$triggerblock,$by_ip,$blockdom) =
               &Apache::loncommon::blockcheck(\%setters,$activity,$clientip,$uname,$udom,$origurl,undef,$origsymb,'blockingstatus');
       }
   
       # nothing to do if there's no active blocking
       unless (($startblock && $endblock) || ($by_ip)) {
           if ($activity eq 'docs') {
               return '<p class="LC_info">'.&mt('Content no longer blocked from access').'</p>';
           }
           return '<p class="LC_info">'.&mt('Access no longer blocked for this activity').'</p>';
       }
   
       # lookup $activity -> description
                      #possible activity          #corresponding description
       my %descs = (
                      boards     => 'Discussion posts in this course',
                      chat       => 'Chat Room',
                      com        => 'This message',
                      blogs      => 'Blogs',
                      about      => 'User information pages',
                      groups     => 'Groups in this course',
                      printout   => 'Printout generation',
                      docs       => 'Course Content',
                      passwd     => 'Changing of passwords',
                      grades     => 'Course Gradebook',
                      search     => 'Content Search',
                   );
   
       if ($activity eq 'groups' || $activity eq 'boards') {
           if (&Apache::loncommon::course_type() eq 'Community') {
               $descs{'boards'} = 'Discussion posts in this community';
               $descs{'groups'} = 'Groups in this community';
               $descs{'docs'} = 'Community Content';
               $descs{'grades'} = 'Community Gradebook';
           }
       }
   
       my $description = $descs{$activity};
       if ($activity eq 'port') {
           $description = &get_portfolio_category($uname,$udom,$by_ip,\%setters);
       }
       if ($description eq '') {
           $description = 'Communication';
       }
   
       my ($showstart,$showend,$output);
       unless ($by_ip) {
           $showstart = Apache::lonlocal::locallocaltime($startblock);
           $showend   = Apache::lonlocal::locallocaltime($endblock);
       }
   
       if ( ref($description) ne 'ARRAY' ) {
           #default: $description is one of the above descriptions
           if ($activity eq 'docs') {
               $output=&mt( 'Access to the content page you are attempting to'
                            . ' view will be unavailable between [_1] and [_2] because'
                            . ' access to selected '.$description.' is being blocked.'
                            ,$showstart, $showend);
           } elsif (($activity eq 'printout') || ($activity eq 'passwd') ||
                    ($activity eq 'grades') || ($activity eq 'search') ||
                    ($activity eq 'about')) {
               if ($by_ip) {
                   $output = mt( $description
                                 . ' unavailable from your current IP address: [_1] '
                                 . 'because this functionality is being blocked for certain IP address(es).'
                                 ,$clientip);
               } else {
                   $output = mt( $description
                                 . ' will be unavailable between [_1] and [_2] because'
                                 . ' this functionality is being blocked.'
                                 ,$showstart, $showend);
               }
           } else {
               if ($by_ip) {
                   $output = mt( $description
                                 . ' unavailable from your current IP address: [_1] '
                                 . 'because communication is being blocked for certain IP address(es).'
                                 ,$clientip);
               } else {
                   $output = mt( $description
                                 . ' will be inaccessible between [_1] and [_2] because'
                                 . ' communication is being blocked.'
                                 ,$showstart, $showend);
             }              }
             my $showstart = &Apache::lonlocal::locallocaltime($startblock);          }
             my $showend = &Apache::lonlocal::locallocaltime($endblock);      } else {
             $output = '<br />'.&mt('[_1] will be inaccessible between [_2] and [_3] because communication is being blocked.',$category,$showstart,$showend).'<br />';          # @$description is is the array returned from get_portfolio_category()
             if (!($activity eq 'port' && !($ownitem) && !($is_course))) {          # and contains the description (e.g. "Portfolio files belonging to [_1]"
                 $output .= build_block_table($startblock,$endblock,\%setters);          # and the value for [_1]
           if ($by_ip) {
               $output = mt( $$description[0]
                             . ' are inaccessible from your current IP address: [_2] '
                             . 'because communication is being blocked for certain IP address(es).'
                             , $$description[1], $clientip);
           } else {
               $output = mt( $$description[0]
                             . ' will be inaccessible between [_2] and [_3] because'
                             . ' communication is being blocked.'
                             ,$$description[1], $showstart, $showend);
           }
       }
   
       $output = "<p class=\"LC_info\">$output</p>";
   
       # show a table containing details, except if user is trying to look
       # at a different user's portfolio files
       if (   $activity ne 'port'                        # no portfolio
           || (   $uname eq $env{'user.name'}            # or own portfolio
               && $udom  eq $env{'user.domain'} ) 
           || Apache::lonnet::is_course($udom, $uname) ) # or portfolio of a course
       {
           if ($by_ip) {
               my $showdom = &Apache::lonnet::domain($blockdom);
               if ($showdom eq '') {
                   $showdom = $blockdom
             }              }
               $output .= '<br />'.
                          &mt('This restriction was set by an administrator in the [_1] LON-CAPA domain.'
                             ,$showdom);
           } else {
               $output .= &build_block_table(\%setters);
           }
     }      }
   
     return $output;      return $output;
 }  }
   
 sub build_block_table {  sub build_block_table {
     my ($startblock,$endblock,$setters) = @_;      my ($setters) = @_;
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
         'cacb' => 'Currently active communication blocks',          'cacb' => 'Currently active communication/content blocks',
         'cour' => 'Course',          'cour' => 'Course',
         'dura' => 'Duration',          'dura' => 'Duration',
         'blse' => 'Block set by'          'blse' => 'Block set by'
     );      );
     my $output;      my $output;
     $output = '<br />'.$lt{'cacb'}.':<br />';      $output  = Apache::loncommon::start_data_table()
     $output .= Apache::loncommon::start_data_table();               . Apache::loncommon::data_table_caption($lt{'cacb'})
     $output .= '               . Apache::loncommon::start_data_table_header_row()
 <tr>               . "<th>$lt{'cour'}</th> <th>$lt{'dura'}</th> <th>$lt{'blse'}</th>"
  <th>'.$lt{'cour'}.'</th>               . Apache::loncommon::end_data_table_header_row();
  <th>'.$lt{'dura'}.'</th>  
  <th>'.$lt{'blse'}.'</th>  
 </tr>  
 ';  
     foreach my $course (keys(%{$setters})) {      foreach my $course (keys(%{$setters})) {
         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++) {
Line 148  sub build_block_table { Line 287  sub build_block_table {
             my $fullname = Apache::loncommon::plainname($uname,$udom);              my $fullname = Apache::loncommon::plainname($uname,$udom);
             if (defined($env{'user.name'}) && defined($env{'user.domain'})              if (defined($env{'user.name'}) && defined($env{'user.domain'})
                 && $env{'user.name'} ne 'public'                  && $env{'user.name'} ne 'public'
                 && $env{'user.domain'} ne 'public') {                  && $env{'user.domain'} ne 'public') 
               {
                 $fullname = Apache::loncommon::aboutmewrapper($fullname,$uname,$udom);                  $fullname = Apache::loncommon::aboutmewrapper($fullname,$uname,$udom);
             }              }
               my $triggertype = $$setters{$course}{triggers}[$i];
               if ($triggertype) {
                   $fullname .= &mt(' (triggered by you when starting timer)');
               }
             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().              my $duration = mt('[_1] to [_2]', $openblock, $closeblock);
                        '<td>'.$courseinfo{'description'}.'</td>'.              $output .= Apache::loncommon::start_data_table_row()
                        '<td>'.$openblock.' to '.$closeblock.'</td>'.                       . "<td>$courseinfo{'description'}</td>"
                        '<td>'.$fullname.'</td>'.                       . "<td>$duration</td>"
                         &Apache::loncommon::end_data_table_row();                       . "<td>$fullname</td>"
                        . Apache::loncommon::end_data_table_row();
         }          }
     }      }
     $output .= Apache::loncommon::end_data_table();      $output .= Apache::loncommon::end_data_table();
 }  }
   
   sub get_portfolio_category {
       my ($uname, $udom, $by_ip, $setters) = @_;
   
       if ($uname eq $env{'user.name'} && $udom eq $env{'user.domain'}) {
           # user's portolfio files
   
           return 'Your portfolio files';
   
       } elsif (Apache::lonnet::is_course($udom, $uname)) {
           # group portfolio files
   
           my $coursedesc;
   
           if ($by_ip) {
               my %courseinfo = Apache::lonnet::coursedescription($udom.'_'.$uname);
               $coursedesc    = $courseinfo{'description'};
           } else {
               foreach my $course (keys(%{$setters})) {
                   my %courseinfo = Apache::lonnet::coursedescription($course);
                   $coursedesc    = $courseinfo{'description'};
               }
           }
   
           return ["Group portfolio files in the course '[_1]'", $coursedesc];
           
       } else {
           # different user's portfolio files
           
           my $plainname = Apache::loncommon::plainname($uname, $udom);
   
           unless (   $env{'user.name'}   eq 'public' 
                   && $env{'user.domain'} eq 'public' ) 
           {
               $plainname = Apache::loncommon::aboutmewrapper(
                               $plainname, $uname, $udom);
           }
   
           return ['Portfolio files belonging to [_1]', $plainname];
       }
   }
   
 1;  1;
 __END__  __END__

Removed from v.1.5  
changed lines
  Added in v.1.21


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