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

raeburn raeburn at source.lon-capa.org
Sat Mar 31 10:19:24 EDT 2012


raeburn		Sat Mar 31 14:19:24 2012 EDT

  Modified files:              
    /loncom/interface	lonblockingstatus.pm 
  Log:
  - Bug 6518
   - Exam blocks can also block access to specified folders and/or resources
     for the duration of an exam.
   - The start time for blocking can be based on activation of the timer for
     a specific timed quiz item (map or resource specific).
  
  
Index: loncom/interface/lonblockingstatus.pm
diff -u loncom/interface/lonblockingstatus.pm:1.7 loncom/interface/lonblockingstatus.pm:1.8
--- loncom/interface/lonblockingstatus.pm:1.7	Fri Feb 19 10:20:03 2010
+++ loncom/interface/lonblockingstatus.pm	Sat Mar 31 14:19:24 2012
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # displays the blocking status table
 #
-# $Id: lonblockingstatus.pm,v 1.7 2010/02/19 10:20:03 bisitz Exp $
+# $Id: lonblockingstatus.pm,v 1.8 2012/03/31 14:19:24 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -33,80 +33,119 @@
 use Apache::loncommon();
 use Apache::lonnet;
 use Apache::lonlocal;
+use LONCAPA qw(:DEFAULT :match);
 
 sub handler {
     my $r = shift;
-    Apache::loncommon::no_cache($r);
-    Apache::loncommon::content_type($r,'text/html');
+    &Apache::loncommon::no_cache($r);
+    &Apache::loncommon::content_type($r,'text/html');
 
     $r->send_http_header;
     return OK if $r->header_only;
 
-    $r->print( Apache::loncommon::start_page(
-                  'Communication Blocking Status Information',
-                  undef, {'only_body' => 1}));
+    my (%activities,$activity,$origurl);
+    map { $activities{$_} = 1; } ('boards','chat','msgdisplay','blogs','groups','port','docs');
 
-    $r->print(blockpage());
+    # determine what kind of blocking we want details for
+    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['activity','url']);
+    $activity = $env{'form.activity'};
+
+    my $title = 'Communication Blocking Status Information';
+
+    if ($activity eq 'docs') {
+        $title = 'Blocking Status Information';
+        $origurl = $env{'form.url'};
+    }
+    $r->print(&Apache::loncommon::start_page($title,undef,
+                                            {'only_body' => 1}));
+
+    if (($activity eq '') || (!$activities{$activity})) {
+        $r->print('<span class="LC_error">'.&mt('Error: unknown activity type blocked').'</span>');
+    } else {
+        $r->print(&blockpage($activity,$origurl));
+    }
     
-    $r->print(Apache::loncommon::end_page());
+    $r->print(&Apache::loncommon::end_page());
 
     return OK;
 }
 
 
 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'; }
-
+    my ($activity,$origurl) = @_;
 
     # 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(
+        &Apache::loncommon::get_unprocessed_cgi(
             $ENV{'QUERY_STRING'}, ['udom', 'uname'] );
 
         ($uname, $udom) = ($env{'form.uname'}, $env{'form.udom'});
-        #TODO sanitize input: $uname, $udom
+        if (($uname !~ /^$match_username$/) || ($udom !~ /^$match_domain$/)) {
+            return '<span class="LC_error">'.
+                   &mt('Information about the owner of the portfolio files you were trying to view was missing or invalid.').
+                   '</span><br />'.
+                   &mt('Without valid owner information, the reason why access is blocked can not be determined'); 
+        }
     }
 
 
     # retrieve start/end of possible active blocking
     my %setters;
-    my ($startblock, $endblock) = Apache::loncommon::blockcheck(
-                                        \%setters, $activity, $uname, $udom);
+    my ($startblock,$endblock,$triggerblock) = 
+        &Apache::loncommon::blockcheck(\%setters,$activity,$uname,$udom,$url);
 
     # nothing to do if there's no active blocking
     unless ($startblock && $endblock) { return ''; }
 
     # lookup $activity -> description
                    #possible activity          #corresponding description
-    my $description = 
-                   $activity eq 'boards'     ? 'Discussion posts in this course'
-                 : $activity eq 'chat'       ? 'Chat Room'
-                 : $activity eq 'msgdisplay' ? 'This message'
-                 : $activity eq 'blogs'      ? 'Blogs'
-                 : $activity eq 'groups'     ? 'Groups in this course'
-                 : $activity eq 'port'       ? get_portfolio_category(
-                                                  $uname, $udom, \%setters) 
-                 :                             'Communication';
+    my %descs = (
+                   boards     => 'Discussion posts in this course',
+                   chat       => 'Chat Room',
+                   msgdisplay => 'This message',
+                   blogs      => 'Blogs',
+                   groups     => 'Groups in this course',
+                   docs       => 'Course Content',
+                );
+
+    if ($activity eq 'groups' || $activity eq 'boards') {
+        if (&course_type() eq 'Community') {
+            $descs{'boards'} = 'Discussion posts in this community',
+            $descs{'groups'} = 'Groups in this community',
+            $descs{'docs'} = 'Community Content',  
+        }
+    }
+
+    my $description = $descs{$activity};
+    if ($activity eq 'port') {
+        $description = &get_portfolio_category($uname,$udom,\%setters);
+    }
+    if ($description eq '') {
+        $description = 'Communication';
+    }
 
     my $showstart = Apache::lonlocal::locallocaltime($startblock);
     my $showend   = Apache::lonlocal::locallocaltime($endblock);
 
     my $output;
     
-    if ( ref($description) ne 'ARRAY' ) { 
+    if ( ref($description) ne 'ARRAY' ) {
         #default: $description is one of the above descriptions
-        $output = mt( $description
-                      . ' will be inaccessible between [_1] and [_2] because'
-                      . ' communication is being blocked.'
-                     ,$showstart, $showend);  
+        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);
+            }
+        } else {
+            $output = mt( $description
+                          . ' will be inaccessible between [_1] and [_2] because'
+                          . ' communication is being blocked.'
+                          ,$showstart, $showend);  
+        }
     } else {
         # @$description is is the array returned from get_portfolio_category()
         # and contains the description (e.g. "Portfolio files belonging to [_1]"
@@ -126,14 +165,14 @@
             && $udom  eq $env{'user.domain'} ) 
         || Apache::lonnet::is_course($udom, $uname) ) # or portfolio of a course
     {
-        $output .= build_block_table($startblock,$endblock,\%setters);
+        $output .= &build_block_table(\%setters);
     }
 
     return $output;
 }
 
 sub build_block_table {
-    my ($startblock,$endblock,$setters) = @_;
+    my ($setters) = @_;
     my %lt = &Apache::lonlocal::texthash(
         'cacb' => 'Currently active communication blocks',
         'cour' => 'Course',
@@ -158,6 +197,10 @@
             {
                 $fullname = Apache::loncommon::aboutmewrapper($fullname,$uname,$udom);
             }
+            my $triggertype = $$setters{$course}{times}[$i];
+            if ($triggertype) {
+                $fullname .= &mt(' (triggered by you when starting timer)'); 
+            }
             my ($openblock,$closeblock) = @{$$setters{$course}{times}[$i]};
             $openblock = &Apache::lonlocal::locallocaltime($openblock);
             $closeblock= &Apache::lonlocal::locallocaltime($closeblock);




More information about the LON-CAPA-cvs mailing list