Diff for /loncom/interface/lonblockingmenu.pm between versions 1.4 and 1.11

version 1.4, 2012/03/31 14:15:24 version 1.11, 2014/02/28 19:20:05
Line 87  it is important to use reasonable time w Line 87  it is important to use reasonable time w
 the case of blocks triggered by clicking a button to start a timed quiz,   the case of blocks triggered by clicking a button to start a timed quiz, 
 quiz durations that are of limited duration. This is especially important  quiz durations that are of limited duration. This is especially important
 when blocking prtfolio access, as other courses may require students to use  when blocking prtfolio access, as other courses may require students to use
 the portfolio as a mechanism for submitting assigments.  the portfolio as a mechanism for submitting assignments.
   
 Information about blocks in a course will be cached for 10 minutes, so,  Information about blocks in a course will be cached for 10 minutes, so,
 as with parameters set for resources, it can take up to 10 minutes for  as with parameters set for resources, it can take up to 10 minutes for
Line 135  Outputs: 2 Line 135  Outputs: 2
       $output - Information about changes made.        $output - Information about changes made.
   
   
 =item &enumerate_course_contents()  
   
 Create hashes of maps (for folders/pages) and symbs (for resources) in  
 a course, where keys are numbers (starting with 1) and values are  
 map url, or symb, for an iteration through the course, as seen by  
 a Course Coordinator. Used to generate numerical IDs to facilitate  
 storage of lists of maps or resources to be blocked during an exam.     
   
 Inputs: 3  
       $navmap - navmaps object  
   
       $map_url - reference to hash to contain URLs of maps in course  
   
       $resource_symb - reference to hash to contain symbs for  
                        resources in course  
   
 Outputs: None  
   
 Side Effects: $map_url and $resource_symb hashrefs are populated.  
   
   
 =item &get_dates_from_form()  =item &get_dates_from_form()
   
 Extract start and end dates from web form input for blocks with  Extract start and end dates from web form input for blocks with
Line 238  Output: None Line 217  Output: None
   
 Side Effects: prints web form elements (in a table) for current blocks.   Side Effects: prints web form elements (in a table) for current blocks. 
   
 =item &path_to_trigger()  
   
 Provides hierarchy of names of folders/sub-folders containing the current  
 item identified as an item with an interval timer set, to be used as a   
 trigger.   
   
 Inputs: 3   
      - $navmap - navmaps object  
   
      - $map - url for map (either the trigger itself, or map containing  
                            the resource, which is the trigger).   
   
      - $type - type of trigger: map or resource.  
   
 Outputs: 1 @pathitems - array of folder/subfolder names.    
   
   
 =item &convlim()  =item &convlim()
   
 Convert a time interval used for a timed quiz (in seconds) to  Convert a time interval used for a timed quiz (in seconds) to
Line 405  use Apache::Constants qw(:common :http); Line 367  use Apache::Constants qw(:common :http);
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
 use Apache::lonparmset();  use Apache::lonparmset();
   use Apache::loncourserespicker();
 use HTML::Entities();  use HTML::Entities();
 use Apache::lonlocal;  use Apache::lonlocal;
 use lib '/home/httpd/lib/perl/';  use lib '/home/httpd/lib/perl/';
Line 506  sub handler { Line 469  sub handler {
     }      }
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
         ({href=>'/adm/setblock',          ({href=>'/adm/setblock',
           text=>'Blocking communication/resource access'});            text=>'Blocking communication/content access'});
   
     my $js = &blockingmenu_javascript($blockcount);      my $js = &blockingmenu_javascript($blockcount);
   
Line 515  sub handler { Line 478  sub handler {
         &Apache::lonhtmlcommon::breadcrumbs('Blocking communication/content access'));          &Apache::lonhtmlcommon::breadcrumbs('Blocking communication/content access'));
   
     my $usertype;      my $usertype;
     my $crstype = &Apache::loncommon::course_type();  
     if ($crstype eq 'Community') {      if ($crstype eq 'Community') {
         $usertype = 'members';          $usertype = 'members';
     } else {      } else {
Line 526  sub handler { Line 488  sub handler {
             'cbds' => 'Blocking communication and/or content access during exams',              'cbds' => 'Blocking communication and/or content access during exams',
             'prev' => "For the duration of an exam, or a timed quiz, students in this course can be prevented from:",              'prev' => "For the duration of an exam, or a timed quiz, students in this course can be prevented from:",
             'blca' => "Blocks can potentially interrupt legitimate communication between $usertype who are also both enrolled in a different LON-CAPA $lctype.",              'blca' => "Blocks can potentially interrupt legitimate communication between $usertype who are also both enrolled in a different LON-CAPA $lctype.",
             'pobl' => "Portfolio blocking can impact a student's ability to complete assigments in courses besides your own. Please use this feature wisely.",              'pobl' => "Portfolio blocking can impact a student's ability to complete assignments in courses besides your own. Please use this feature wisely.",
             'actt' => "Action to take:",              'actt' => "Action to take:",
             'addn' => 'Add new blocking event',              'addn' => 'Add new blocking event',
             'mexb' => 'Modify existing blocking event(s)',               'mexb' => 'Modify existing blocking event(s)', 
Line 565  sub handler { Line 527  sub handler {
             '<li>'.&mt("displaying LON-CAPA messages sent by other $usertype in the $lctype").'</li>'."\n".              '<li>'.&mt("displaying LON-CAPA messages sent by other $usertype in the $lctype").'</li>'."\n".
             '<li>'.&mt("displaying or posting to LON-CAPA discussion boards or live chat in the $lctype").'</li>'."\n".              '<li>'.&mt("displaying or posting to LON-CAPA discussion boards or live chat in the $lctype").'</li>'."\n".
             '<li>'.&mt('accessing content in LON-CAPA portfolios or blogs').'</li>'."\n".              '<li>'.&mt('accessing content in LON-CAPA portfolios or blogs').'</li>'."\n".
               '<li>'.&mt("generating printouts of $lctype content").'</li>'.
             '<li>'.&mt("accessing $lctype content in specified folders or resources").'</li>'.              '<li>'.&mt("accessing $lctype content in specified folders or resources").'</li>'.
             '</ul>'.              '</ul>'.
             '<p class="LC_warning">'.$lt{'blca'}.'<br />'.$lt{'pobl'}.'</p>'              '<p class="LC_warning">'.$lt{'blca'}.'<br />'.$lt{'pobl'}.'</p>'
Line 681  sub blockstore { Line 644  sub blockstore {
     my $changestotal = 0;      my $changestotal = 0;
     my $addtimer = 0;      my $addtimer = 0;
     my %blocking = ();      my %blocking = ();
     my (%map_url,%resource_symb,$output);      my (%map_url,%resource_symb,%titles,$output);
     $output = '<h3>'.$lt{'head'}.'</h3>';      $output = '<h3>'.$lt{'head'}.'</h3>';
     if ($env{'form.blockaction'} eq 'modify') {      if ($env{'form.blockaction'} eq 'modify') {
         foreach my $envkey (keys(%env)) {          foreach my $envkey (keys(%env)) {
Line 707  sub blockstore { Line 670  sub blockstore {
         $output = $lt{'unna'}.' '.$lt{'ncwm'}.'</br>';          $output = $lt{'unna'}.' '.$lt{'ncwm'}.'</br>';
         return ($changestotal,$output);          return ($changestotal,$output);
     }      }
     &enumerate_course_contents($navmap,\%map_url,\%resource_symb);      &Apache::loncourserespicker::enumerate_course_contents($navmap,\%map_url,\%resource_symb,\%titles,'examblock');
     foreach my $key (keys(%removals)) {      foreach my $key (keys(%removals)) {
         my $hashkey = $env{'form.key_'.$key};          my $hashkey = $env{'form.key_'.$key};
         &Apache::lonnet::del('comm_block',["$hashkey"],          &Apache::lonnet::del('comm_block',["$hashkey"],
Line 754  sub blockstore { Line 717  sub blockstore {
                 if ($blockdocs) {                  if ($blockdocs) {
                     &check_release_required('docs');                      &check_release_required('docs');
                 }                  }
                   if (ref($blocktypes) eq 'HASH') {
                       if ($blocktypes->{'printout'} eq 'on') {
                           &check_release_required('printout');
                       }
                   }
                 if (exists($removals{$key})) {                  if (exists($removals{$key})) {
                     $modtotal ++;                      $modtotal ++;
                 } else {                  } else {
Line 812  sub blockstore { Line 780  sub blockstore {
     return ($changestotal,$output);      return ($changestotal,$output);
 }  }
   
 sub enumerate_course_contents {  
     my ($navmap,$map_url,$resource_symb) = @_;  
     if ((ref($navmap)) && (ref($map_url) eq 'HASH') &&   
         (ref($resource_symb) eq 'HASH')) {  
         my $it = $navmap->getIterator(undef,undef,undef,1,undef,undef);  
         my $count = 0;  
         while (my $curRes = $it->next()) {  
             if (ref($curRes)) {  
                 $count ++;  
                 my $symb = $curRes->symb();  
                 my $ressymb = $symb;  
                 if ($ressymb =~ m|adm/($match_domain)/($match_username)/(\d+)/bulletinboard$|) {  
                     unless ($ressymb =~ m|adm/wrapper/adm|) {  
                         $ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.  
                                    '/bulletinboard';  
                     }  
                 }  
                 if (($curRes->is_sequence()) || ($curRes->is_page())) {  
                     $map_url->{$count} = (&Apache::lonnet::decode_symb($symb))[2];  
                 } else {  
                     $resource_symb->{$count} = $ressymb;  
                 }  
             }  
         }  
     }  
     return;  
 }  
   
 sub get_dates_from_form {  sub get_dates_from_form {
     my $item = shift;      my $item = shift;
     my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate_'.$item);      my $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate_'.$item);
Line 928  sub check_release_required { Line 868  sub check_release_required {
 sub display_blocker_status {  sub display_blocker_status {
     my ($r,$records,$ltext,$intervals,$navmap,$errormsg,$blockcount) = @_;      my ($r,$records,$ltext,$intervals,$navmap,$errormsg,$blockcount) = @_;
     my $parmcount = 0;      my $parmcount = 0;
     my (%map_url,%resource_symb,%lookups);      my (%map_url,%resource_symb,%titles,%lookups);
     &enumerate_course_contents($navmap,\%map_url,\%resource_symb);      &Apache::loncourserespicker::enumerate_course_contents($navmap,\%map_url,\%resource_symb,\%titles,'examblock');
     %{$lookups{'maps'}} = reverse(%map_url);      %{$lookups{'maps'}} = reverse(%map_url);
     %{$lookups{'resources'}} = reverse(%resource_symb);      %{$lookups{'resources'}} = reverse(%resource_symb);
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
Line 1123  END Line 1063  END
     return;      return;
 }  }
   
 sub path_to_trigger {  
     my ($navmap,$map,$type) = @_;  
     my @pathitems;  
     if (ref($navmap)) {  
         my $mapres = $navmap->getResourceByUrl($map);  
         if (ref($mapres)) {  
             my $pcslist = $mapres->map_hierarchy();  
             if ($pcslist ne '') {  
                 my @pcs = split(/,/,$pcslist);  
                 foreach my $pc (@pcs) {      
                     if ($pc == 1) {  
                         push(@pathitems,&mt('Main Course Documents'));  
                     } else {  
                         my $res = $navmap->getByMapPc($pc);  
                         if (ref($res)) {  
                             my $title = $res->compTitle();  
                             $title =~ s/\W+/_/g;  
                             if ($title ne '') {  
                                 push(@pathitems,$title);  
                             }  
                         }  
                     }  
                 }  
             }  
         }  
         if ($type eq 'resource') {  
             if ($mapres->{ID} eq '0.0') {  
                 push(@pathitems,&mt('Main Course Documents'));  
             } else {  
                 my $maptitle = $mapres->compTitle();  
                 $maptitle =~ s/\W+/_/g;  
                 if ($maptitle ne '') {  
                     push(@pathitems,$maptitle);  
                 }  
             }  
         }  
     }  
     return @pathitems;  
 }  
   
 sub convlim {  sub convlim {
     my ($timelimit) = @_;      my ($timelimit) = @_;
     my $output;  
     my @order = ('days','hours','minutes','seconds');      my @order = ('days','hours','minutes','seconds');
     my %catlimits = (       my %catlimits = ( 
                       days    => 86400,                        days    => 86400,
Line 1175  sub convlim { Line 1074  sub convlim {
     my @toshow;      my @toshow;
     foreach my $cat (@order) {      foreach my $cat (@order) {
         if ($cat eq 'seconds') {          if ($cat eq 'seconds') {
             last if ($timelimit <= 0);              if ($timelimit > 0) {
                   push(@toshow,&mt("[_1] $cat",$timelimit));
               }
         } elsif ($timelimit >= $catlimits{$cat}) {          } elsif ($timelimit >= $catlimits{$cat}) {
             my $val = int($timelimit/$catlimits{$cat});              my $val = int($timelimit/$catlimits{$cat});
             if ($val > 0) {              if ($val > 0) {
                 push(@toshow,&mt("[_1] $cat",$val));                  push(@toshow,&mt("[_1] $cat",$val));
             }              }
             $timelimit =- $val*$catlimits{$cat};              $timelimit -= $val*$catlimits{$cat};
         }          }
     }      }
     my $output = join(', ',@toshow);      my $output = join(', ',@toshow);
Line 1452  sub show_timer_path { Line 1353  sub show_timer_path {
     return unless(ref($navmap));      return unless(ref($navmap));
     my @pathitems;      my @pathitems;
     if ($type eq 'map') {      if ($type eq 'map') {
         @pathitems = &path_to_trigger($navmap,$item,$type);          @pathitems = 
               &Apache::loncommon::get_folder_hierarchy($navmap,$item);
     } elsif ($type eq 'resource') {      } elsif ($type eq 'resource') {
         my ($map,$id,$resource) = &Apache::lonnet::decode_symb($item);          my ($map,$id,$resource) = &Apache::lonnet::decode_symb($item);
         @pathitems = &path_to_trigger($navmap,$map,$type);          @pathitems = 
               &Apache::loncommon::get_folder_hierarchy($navmap,$map,1);
     }      }
     if (@pathitems) {      if (@pathitems) {
         return join(' &raquo; ',@pathitems);          return join(' &raquo; ',@pathitems);
Line 1471  sub blocktype_text { Line 1374  sub blocktype_text {
         'port' => 'Portfolio',          'port' => 'Portfolio',
         'groups' => 'Groups',          'groups' => 'Groups',
         'blogs' => 'Blogs',          'blogs' => 'Blogs',
         'docs' => 'Content',           'docs' => 'Content',
           'printout' => 'Printouts',
     );      );
     my $typeorder = ['com','chat','boards','port','groups','blogs','docs'];      my $typeorder = ['com','chat','boards','port','groups','blogs','printout','docs'];
     return ($typeorder,\%types);      return ($typeorder,\%types);
 }  }
   

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


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