Diff for /loncom/interface/lonblockingstatus.pm between versions 1.4 and 1.6

version 1.4, 2009/07/27 11:30:05 version 1.6, 2009/09/25 13:51:58
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 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(      $r->print( Apache::loncommon::start_page(
         Apache::loncommon::start_page(                    'Communication Blocking Status Information',
             'Communication Blocking Status Information',                    undef, {'only_body' => 1}));
             undef, {'only_body' => 1, }));  
     Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['activity']);  
     my ($blocked, $blocktext) = print_blocking_table($env{'form.activity'});  
     $r->print($blocktext);  
   
       $r->print(blockpage());
       
     $r->print(Apache::loncommon::end_page());      $r->print(Apache::loncommon::end_page());
   
     return OK;      return OK;
 }  }
 sub print_blocking_table{  
     my ($activity,$uname,$udom) = @_;  
   sub blockpage {
   
       # determine what kind of blocking we want details for
       Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['activity']);
       my $activity = $env{'form.activity'};
   
       if ($activity !~ /^[a-z]+$/) { return 'Error'; }
   
   
       # in case of a portfolio block we need to determine the owner of the files
       # we're trying to look at. This information is passed via query string.
       my ($uname, $udom);
   
       if ($activity eq 'port') {
           Apache::loncommon::get_unprocessed_cgi(
               $ENV{'QUERY_STRING'}, ['udom', 'uname'] );
   
           ($uname, $udom) = ($env{'form.uname'}, $env{'form.udom'});
           #TODO sanitize input: $uname, $udom
       }
   
   
       # retrieve start/end of possible active blocking
     my %setters;      my %setters;
     my ($blocked,$output,$ownitem,$is_course);      my ($startblock, $endblock) = Apache::loncommon::blockcheck(
     my ($startblock,$endblock)=&Apache::loncommon::blockcheck(\%setters,$activity,$uname,$udom);                                          \%setters, $activity, $uname, $udom);
     if ($startblock && $endblock) {  
         $blocked = 1;      # nothing to do if there's no active blocking
             my $category;      unless ($startblock && $endblock) { return ''; }
             if ($activity eq 'boards') {  
                 $category = 'Discussion posts in this course';      # lookup $activity -> description
             } elsif ($activity eq 'chat') {                     #possible activity          #corresponding description
                 $category = 'Chat';      my $description = 
             } elsif ($activity eq 'msgdisplay') {                     $activity eq 'boards'     ? 'Discussion posts in this course'
                 $category = 'This message';                   : $activity eq 'chat'       ? 'Chat'
             } elsif ($activity eq 'blogs') {                   : $activity eq 'msgdisplay' ? 'This message'
                 $category = 'Blogs';                   : $activity eq 'blogs'      ? 'Blogs'
             } elsif ($activity eq 'port') {                   : $activity eq 'groups'     ? 'Groups in this course'
                 if (defined($uname) && defined($udom)) {                   : $activity eq 'port'       ? get_portfolio_category(
                     if ($uname eq $env{'user.name'} &&                                                    $uname, $udom, \%setters) 
                         $udom eq $env{'user.domain'}) {                   :                             'Communication';
                         $ownitem = 1;  
                     }      my $showstart = Apache::lonlocal::locallocaltime($startblock);
                 }      my $showend   = Apache::lonlocal::locallocaltime($endblock);
                 $is_course = &Apache::lonnet::is_course($udom,$uname);  
                 if ($ownitem) {      my $output;
                     $category = 'Your portfolio files';      
                 } elsif ($is_course) {      if ( ref($description) ne 'ARRAY' ) { 
                     my $coursedesc;          #default: $description is one of the above descriptions
                     foreach my $course (keys(%setters)) {          $output = mt( $description
                         my %courseinfo =                        . ' will be inaccessible between [_1] and [_2] because'
                              &Apache::lonnet::coursedescription($course);                        . ' communication is being blocked.'
                         $coursedesc = $courseinfo{'description'};                       ,$showstart, $showend);  
                     }      } else {
                     $category = "Group portfolio in the course '$coursedesc'";          # @$description is is the array returned from get_portfolio_category()
                 } else {          # and contains the description (e.g. "Portfolio files belonging to [_1]"
                     $category = 'Portfolio files belonging to ';          # and the value for [_1]
                     if ($env{'user.name'} eq 'public' &&          $output = mt( $$description[0]
                         $env{'user.domain'} eq 'public') {                        . ' will be inaccessible between [_2] and [_3] because'
                         $category .= &plainname($uname,$udom);                        . ' communication is being blocked.'
                     } else {                       ,$$description[1], $showstart, $showend)  
                         $category .= &aboutmewrapper(&plainname($uname,$udom),$uname,$udom);      }
                     }  
                 }      $output = "<p class=\"LC_info\">$output</p>";
             } elsif ($activity eq 'groups') {  
                 $category = 'Groups in this course';      # show a table containing details, except if user is trying to look 
             } else {      # at a different user's portfolio files
                 $category = 'Communication';      if (   $activity ne 'port'                        # no portfolio
             }          || (   $uname eq $env{'user.name'}            # or own portfolio
             my $showstart = &Apache::lonlocal::locallocaltime($startblock);              && $udom  eq $env{'user.domain'} ) 
             my $showend = &Apache::lonlocal::locallocaltime($endblock);          || Apache::lonnet::is_course($udom, $uname) ) # or portfolio of a course
             $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);
                 $output .= &Apache::loncommon::build_block_table($startblock,$endblock,\%setters);      }
   
       return $output;
   }
   
   sub build_block_table {
       my ($startblock,$endblock,$setters) = @_;
       my %lt = &Apache::lonlocal::texthash(
           'cacb' => 'Currently active communication blocks',
           'cour' => 'Course',
           'dura' => 'Duration',
           'blse' => 'Block set by'
       );
       my $output;
       $output  = Apache::loncommon::start_data_table()
                . Apache::loncommon::data_table_caption($lt{'cacb'})
                . Apache::loncommon::start_data_table_header_row()
                . "<th>$lt{'cour'}</th> <th>$lt{'dura'}</th> <th>$lt{'blse'}</th>"
                . Apache::loncommon::end_data_table_header_row();
   
       foreach my $course (keys(%{$setters})) {
           my %courseinfo=&Apache::lonnet::coursedescription($course);
           for (my $i=0; $i<@{$$setters{$course}{staff}}; $i++) {
               my ($uname,$udom) = @{$$setters{$course}{staff}[$i]};
               my $fullname = Apache::loncommon::plainname($uname,$udom);
               if (defined($env{'user.name'}) && defined($env{'user.domain'})
                   && $env{'user.name'} ne 'public'
                   && $env{'user.domain'} ne 'public') 
               {
                   $fullname = Apache::loncommon::aboutmewrapper($fullname,$uname,$udom);
             }              }
               my ($openblock,$closeblock) = @{$$setters{$course}{times}[$i]};
               $openblock = &Apache::lonlocal::locallocaltime($openblock);
               $closeblock= &Apache::lonlocal::locallocaltime($closeblock);
               my $duration = mt('[_1] to [_2]', $openblock, $closeblock);
               $output .= Apache::loncommon::start_data_table_row()
                        . "<td>$courseinfo{'description'}</td>"
                        . "<td>$duration</td>"
                        . "<td>$fullname</td>"
                        . Apache::loncommon::end_data_table_row();
           }
     }      }
     return ($blocked,$output);      $output .= Apache::loncommon::end_data_table();
 }  }
   
 1;  sub get_portfolio_category {
 __END__      my ($uname, $udom, $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;
   
           foreach my $course (keys(%{$setters})) {
               my %courseinfo = Apache::lonnet::coursedescription($course);
               $coursedesc    = $courseinfo{'description'};
           }
   
           return ["Group portfolio 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;
   __END__

Removed from v.1.4  
changed lines
  Added in v.1.6


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