Diff for /loncom/interface/londocs.pm between versions 1.616 and 1.617

version 1.616, 2016/11/26 19:40:44 version 1.617, 2016/11/29 03:01:04
Line 142  sub clean { Line 142  sub clean {
     return $title;      return $title;
 }  }
   
   sub default_folderpath {
       my ($coursenum,$coursedom,$navmapref) = @_;
       return unless ($coursenum && $coursedom && ref($navmapref));
   # Check if entire course is hidden and/or encrypted
       my ($hiddenmap,$encryptmap,$folderpath,$hiddentop);
       my $toplevel = "uploaded/$coursedom/$coursenum/default.sequence";
       unless (ref($$navmapref)) {
           $$navmapref = Apache::lonnavmaps::navmap->new();
       }
       if (ref($$navmapref)) {
           if (lc($$navmapref->get_mapparam(undef,$toplevel,"0.hiddenresource")) eq 'yes') {
               my $filterFunc = sub { my $res = shift; return (!$res->randomout() && !$res->is_map()) };
               my @resources = $$navmapref->retrieveResources($toplevel,$filterFunc,1,1);
               unless (@resources) {
                   $hiddenmap = 1;
                   unless ($env{'request.role.adv'}) {
                       $hiddentop = 1;
                       if ($env{'form.folder'}) {
                           undef($env{'form.folder'});
                       }
                   }
               }
           }
           if (lc($$navmapref->get_mapparam(undef,$toplevel,"0.encrypturl")) eq 'yes') {
               $encryptmap = 1;
           }
       }
       unless ($hiddentop) {
           $folderpath='default&'.&escape(&mt('Main Content')).
                       '::'.$hiddenmap.':'.$encryptmap.'::';
       }
       if (wantarray) {
           return ($folderpath,$hiddentop);
       } else {
           return $folderpath;
       }
   }
   
 sub dumpcourse {  sub dumpcourse {
     my ($r) = @_;      my ($r) = @_;
Line 879  sub log_docs { Line 915  sub log_docs {
 sub docs_change_log {  sub docs_change_log {
     my ($r,$coursenum,$coursedom,$folder,$allowed,$crstype,$iconpath,$canedit)=@_;      my ($r,$coursenum,$coursedom,$folder,$allowed,$crstype,$iconpath,$canedit)=@_;
     my $supplementalflag=($env{'form.folderpath'}=~/^supplemental/);      my $supplementalflag=($env{'form.folderpath'}=~/^supplemental/);
       my $navmap; 
     my $js = '<script type="text/javascript">'."\n".      my $js = '<script type="text/javascript">'."\n".
              '// <![CDATA['."\n".               '// <![CDATA['."\n".
              &Apache::loncommon::display_filter_js('docslog')."\n".               &Apache::loncommon::display_filter_js('docslog')."\n".
              &editing_js($env{'user.domain'},$env{'user.name'},$supplementalflag,               &editing_js($env{'user.domain'},$env{'user.name'},$supplementalflag,
                          $coursedom,$coursenum,'','',$canedit)."\n".                           $coursedom,$coursenum,'','',$canedit,\$navmap)."\n".
              &history_tab_js()."\n".               &history_tab_js()."\n".
              &Apache::lonratedt::editscript('simple')."\n".               &Apache::lonratedt::editscript('simple')."\n".
              '// ]]>'."\n".               '// ]]>'."\n".
Line 899  sub docs_change_log { Line 936  sub docs_change_log {
     }      }
     my $folderpath=$env{'form.folderpath'};      my $folderpath=$env{'form.folderpath'};
     if ($folderpath eq '') {      if ($folderpath eq '') {
         $folderpath = 'default&'.&escape(&mt('Main Content').':::::');          $folderpath = &default_folderpath($coursenum,$coursedom,\$navmap);
     }      }
       undef($navmap);
     $pathitem = '<input type="hidden" name="folderpath" value="'.      $pathitem = '<input type="hidden" name="folderpath" value="'.
                 &HTML::Entities::encode($folderpath,'<>&"').'" />';                  &HTML::Entities::encode($folderpath,'<>&"').'" />';
     my $readfile="/uploaded/$coursedom/$coursenum/$folder.$container";      my $readfile="/uploaded/$coursedom/$coursenum/$folder.$container";
Line 3297  sub editor { Line 3335  sub editor {
         if ($url =~ m{/uploaded/.+\.(page|sequence)$}) {          if ($url =~ m{/uploaded/.+\.(page|sequence)$}) {
             push(@allmapidx,$res);              push(@allmapidx,$res);
         }          }
   
         $output .= &entryline($idx,$name,$url,$folder,$allowed,$res,          $output .= &entryline($idx,$name,$url,$folder,$allowed,$res,
                               $coursenum,$coursedom,$crstype,                                $coursenum,$coursedom,$crstype,
                               $pathitem,$supplementalflag,$container,                                $pathitem,$supplementalflag,$container,
Line 3930  END Line 3969  END
  }   }
     }      }
   
     my ($editlink,$extresform,$anchor);      my ($editlink,$extresform,$anchor,$hiddenres);
     my $orig_url = $url;      my $orig_url = $url;
     $orig_url=~s{http(&colon;|:)//https(&colon;|:)//}{https$2//};      $orig_url=~s{http(&colon;|:)//https(&colon;|:)//}{https$2//};
     $url=~s{^http(|s)(&colon;|:)//}{/adm/wrapper/ext/};      $url=~s{^http(|s)(&colon;|:)//}{/adm/wrapper/ext/};
Line 3964  END Line 4003  END
                         }                          }
                     }                      }
                 }                  }
                 $url.=(($url=~/\?/)?'&':'?').'symb='.&HTML::Entities::encode($shownsymb,'"<>&');                  unless ($env{'request.role.adv'}) {
                       if ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i) {
                           $url = '';
                       }
                       if (&Apache::lonnet::EXT('resource.0.hiddenresource',$symb) =~ /^yes$/i) {
                           $url = '';
                           $hiddenres = 1;
                       }
                   }
                   if ($url ne '') {
                       $url.=(($url=~/\?/)?'&':'?').'symb='.&HTML::Entities::encode($shownsymb,'"<>&');
                   }
             } elsif (!$env{'request.role.adv'}) {              } elsif (!$env{'request.role.adv'}) {
                 my $checkencrypt;                  my $checkencrypt;
                 if (((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i) ||                  if (((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i) ||
Line 4007  END Line 4057  END
         }          }
     }      }
     my ($rand_pick_text,$rand_order_text,$hiddenfolder);      my ($rand_pick_text,$rand_order_text,$hiddenfolder);
       my $filterFunc = sub { my $res = shift; return (!$res->randomout() && !$res->is_map()) };
     if ($isfolder || $ispage || $extension eq 'sequence' || $extension eq 'page') {      if ($isfolder || $ispage || $extension eq 'sequence' || $extension eq 'page') {
  my $foldername=&escape($foldertitle);   my $foldername=&escape($foldertitle);
  my $folderpath=$env{'form.folderpath'};   my $folderpath=$env{'form.folderpath'};
Line 4015  END Line 4066  END
             $folderpath.=$containerarg.'&'.$foldername;              $folderpath.=$containerarg.'&'.$foldername;
             $url.='folderpath='.&escape($folderpath);              $url.='folderpath='.&escape($folderpath);
         } else {          } else {
 # Append randompick number, hidden, and encrypted with ":" to foldername,              my $rpicknum = (&LONCAPA::map::getparameter($orderidx,
 # so it gets transferred between levels                                                          'parameter_randompick'))[0];
     $folderpath.=$containerarg.'&'.$foldername.              my $randorder = ((&LONCAPA::map::getparameter($orderidx,
                                               ':'.(&LONCAPA::map::getparameter($orderidx,                                                'parameter_randomorder'))[0]=~/^yes$/i);
                                               'parameter_randompick'))[0]              my $hiddenmap = ((&LONCAPA::map::getparameter($orderidx,
                                                .':'.((&LONCAPA::map::getparameter($orderidx,                                                'parameter_hiddenresource'))[0]=~/^yes$/i);
                                               'parameter_hiddenresource'))[0]=~/^yes$/i)              my $encryptmap = ((&LONCAPA::map::getparameter($orderidx,
                                                .':'.((&LONCAPA::map::getparameter($orderidx,                                                'parameter_encrypturl'))[0]=~/^yes$/i);
                                               'parameter_encrypturl'))[0]=~/^yes$/i)              unless ($hiddenmap) {
                                                .':'.((&LONCAPA::map::getparameter($orderidx,                  unless (ref($$navmapref)) {
                                               'parameter_randomorder'))[0]=~/^yes$/i)                      $$navmapref = Apache::lonnavmaps::navmap->new();
                                                .':'.$ispage;                  }
             if (!$env{'request.role.adv'}) {                  if (ref($$navmapref)) {
                 if (lc((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]) eq 'yes') {                      if (lc($$navmapref->get_mapparam(undef,$folderurl,"0.hiddenresource")) eq 'yes') {
                     $url = '';                          my @resources = $$navmapref->retrieveResources($folderurl,$filterFunc,1,1);
                     $hiddenfolder = 1;                          unless (@resources) {
                 } else {                              $hiddenmap = 1;
                     unless (ref($$navmapref)) {                              unless ($env{'request.role.adv'}) {  
                         $$navmapref = Apache::lonnavmaps::navmap->new();                                  $url = '';
                     }                                  $hiddenfolder = 1;
                     if (ref($$navmapref)) {                              }
                         if (lc($$navmapref->get_mapparam(undef,$folderurl,"0.hiddenresource")) eq 'yes') {  
                             $url = '';  
                             $hiddenfolder = 1;  
                         }                          }
                     }                      }
                 }                  }
             }              }
               unless ($encryptmap) {
                   if (lc($$navmapref->get_mapparam(undef,$folderurl,"0.encrypturl")) eq 'yes') {
                       $encryptmap = 1;
                   }
               }
               
   # Append randompick number, hidden, and encrypted with ":" to foldername,
   # so it gets transferred between levels
       $folderpath.=$containerarg.'&'.$foldername.
                            ':'.$rpicknum.':'.$hiddenmap.':'.$encryptmap.':'.$randorder.':'.$ispage;
             unless ($url eq '') {              unless ($url eq '') {
                 $url.='folderpath='.&escape($folderpath);                  $url.='folderpath='.&escape($folderpath);
             }              }
             my $rpicknum = (&LONCAPA::map::getparameter($orderidx,  
                                                         'parameter_randompick'))[0];  
             my $rpckchk;              my $rpckchk;
             if ($rpicknum) {              if ($rpicknum) {
                 $rpckchk = ' checked="checked"';                  $rpckchk = ' checked="checked"';
Line 4067  $form_common."\n". Line 4123  $form_common."\n".
             $rand_pick_text .= '</span></span>'.              $rand_pick_text .= '</span></span>'.
                                $form_end;                                 $form_end;
             my $ro_set;              my $ro_set;
             if ((&LONCAPA::map::getparameter($orderidx,'parameter_randomorder'))[0]=~/^yes$/i) {              if ($randorder) {
                 $ro_set = 'checked="checked"';                  $ro_set = 'checked="checked"';
                 if (($ishash) && (ref($filtersref->{'randomorder'}) eq 'ARRAY')) {                  if (($ishash) && (ref($filtersref->{'randomorder'}) eq 'ARRAY')) {
                     push(@{$filtersref->{'randomorder'}},$orderidx);                      push(@{$filtersref->{'randomorder'}},$orderidx);
Line 4167  $form_end; Line 4223  $form_end;
        $line.=&Apache::loncommon::modal_link(&js_escape($url.(($url=~/\?/)?'&amp;':'?').'inhibitmenu=yes'.         $line.=&Apache::loncommon::modal_link(&js_escape($url.(($url=~/\?/)?'&amp;':'?').'inhibitmenu=yes'.
                                              (($anchor ne '')?$anchor:'')),                                               (($anchor ne '')?$anchor:'')),
                                              $title,600,500);                                               $title,600,500);
     } elsif ($hiddenfolder) {      } elsif (($hiddenfolder) || ($hiddenres)) {
        $line.=$title.' <span class="LC_warning LC_docs_reinit_warn">'.&mt('(Hidden)').'</span>';         $line.=$title.' <span class="LC_warning LC_docs_reinit_warn">'.&mt('(Hidden)').'</span>';
     } else {      } else {
        $line.=$title.' <span class="LC_docs_reinit_warn">'.$reinit.'</span>';         $line.=$title.' <span class="LC_docs_reinit_warn">'.$reinit.'</span>';
Line 5108  sub handler { Line 5164  sub handler {
     my $containertag;      my $containertag;
     my $pathitem;      my $pathitem;
     my %ltitools;      my %ltitools;
       my $hiddentop;
     my $navmap;      my $navmap;
     my $hiddentop;       my $filterFunc = sub { my $res = shift; return (!$res->randomout() && !$res->is_map()) };
   
 # Do we directly jump somewhere?  # Do we directly jump somewhere?
   
    if (($env{'form.command'} eq 'direct') || ($env{'form.command'} eq 'directnav')) {     if (($env{'form.command'} eq 'direct') || ($env{'form.command'} eq 'directnav')) {
        if ($env{'form.symb'} ne '') {         if ($env{'form.symb'} ne '') {
            $env{'form.folderpath'}=             $env{'form.folderpath'}=
                &Apache::loncommon::symb_to_docspath($env{'form.symb'});                 &Apache::loncommon::symb_to_docspath($env{'form.symb'},\$navmap);
            &Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} =>             &Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} =>
                $env{'form.command'}.'_'.$env{'form.symb'}});                 $env{'form.command'}.'_'.$env{'form.symb'}});
        } elsif ($env{'form.supppath'} ne '') {         } elsif ($env{'form.supppath'} ne '') {
Line 5125  sub handler { Line 5181  sub handler {
                $env{'form.command'}.'_'.$env{'form.supppath'}});                 $env{'form.command'}.'_'.$env{'form.supppath'}});
        }         }
    } elsif ($env{'form.command'} eq 'editdocs') {     } elsif ($env{'form.command'} eq 'editdocs') {
        $env{'form.folderpath'} = 'default&'.         $env{'form.folderpath'} = &default_folderpath($coursenum,$coursedom,\$navmap);
                                  &escape(&mt('Main Content').':::::');  
        &Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} => $env{'form.command'}});         &Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} => $env{'form.command'}});
    } elsif ($env{'form.command'} eq 'editsupp') {     } elsif ($env{'form.command'} eq 'editsupp') {
        $env{'form.folderpath'} = 'supplemental&'.         $env{'form.folderpath'} = &supplemental_base();
                                   &escape('Supplemental Content');  
        &Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} => '/adm/supplemental'});         &Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} => '/adm/supplemental'});
    } elsif ($env{'form.command'} eq 'contents') {     } elsif ($env{'form.command'} eq 'contents') {
        &Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} => '/adm/navmaps'});         &Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} => '/adm/navmaps'});
Line 5178  sub handler { Line 5232  sub handler {
         ($env{'form.folderpath'} ne '') && (!$supplementalflag)) {          ($env{'form.folderpath'} ne '') && (!$supplementalflag)) {
         my $folderurl;          my $folderurl;
         my @pathitems = split(/\&/,$env{'form.folderpath'});          my @pathitems = split(/\&/,$env{'form.folderpath'});
         my $container = $pathitems[-2];          my $folder = $pathitems[-2];
         if ($container ne '') {          if ($folder eq '') {
             $folderurl = "uploaded/$coursedom/$coursenum/$container";              undef($env{'form.folderpath'});
           } else {
               $folderurl = "uploaded/$coursedom/$coursenum/$folder";
             if ((split(/\:/,$pathitems[-1]))[4]) {              if ((split(/\:/,$pathitems[-1]))[4]) {
                 $folderurl .= '.page';                  $folderurl .= '.page';
             } else {              } else {
                 $folderurl .= '.sequence';                  $folderurl .= '.sequence';
             }              }
             $navmap = Apache::lonnavmaps::navmap->new();              unless (ref($navmap)) {
                   $navmap = Apache::lonnavmaps::navmap->new();
               }
             if (ref($navmap)) {              if (ref($navmap)) {
                 if (lc($navmap->get_mapparam(undef,$folderurl,"0.hiddenresource")) eq 'yes') {                  if (lc($navmap->get_mapparam(undef,$folderurl,"0.hiddenresource")) eq 'yes') {
                     undef($env{'form.folderpath'});                      my @resources = $navmap->retrieveResources($folderurl,$filterFunc,1,1);
                       unless (@resources) {
                           undef($env{'form.folderpath'});
                       }
                 }                  }
             }              }
         } else {  
             undef($env{'form.folderpath'});      
         }          }
     }      }
   
Line 5202  sub handler { Line 5261  sub handler {
     unless ($env{'form.folderpath'}) {      unless ($env{'form.folderpath'}) {
        if ($supplementalflag) {         if ($supplementalflag) {
           $env{'form.folderpath'}=&supplemental_base();            $env{'form.folderpath'}=&supplemental_base();
        } else {         } elsif ($allowed) {
           $env{'form.folderpath'}='default&'.&escape(&mt('Main Content').            ($env{'form.folderpath'},$hiddentop) = &default_folderpath($coursenum,$coursedom,\$navmap);
                                   ':::::');  
           if (($allowed) && (!$env{'request.role.adv'})) {  
 # If allowed and user's role is not advanced check entire course is not hidden  
               unless (ref($navmap)) {  
                   $navmap = Apache::lonnavmaps::navmap->new();  
               }  
               if (ref($navmap)) {  
                   if (lc($navmap->get_mapparam(undef,"uploaded/$coursedom/$coursenum/default.sequence",  
                                                "0.hiddenresource")) eq 'yes') {  
                       undef($env{'form.folderpath'});  
                       $hiddentop = 1;  
                       if ($env{'form.folder'}) {  
                           undef($env{'form.folder'});  
                       }  
                   }  
               }  
           }  
        }         }
     }      }
   
   
 # Store this  # Store this
     unless ($toolsflag) {      unless ($toolsflag) {
         if (($allowed) && ($env{'form.folderpath'} ne '')) {          if (($allowed) && ($env{'form.folderpath'} ne '')) {
Line 5245  sub handler { Line 5286  sub handler {
         } else {          } else {
             if ($env{'form.folder'} eq '' ||              if ($env{'form.folder'} eq '' ||
                 $env{'form.folder'} eq 'supplemental') {                  $env{'form.folder'} eq 'supplemental') {
                 $folderpath='default&'.                  if ($env{'form.folder'} eq 'supplemental') {
                             &escape(&mt('Main Content').':::::');                      $folderpath=&supplemental_base();
                   } elsif (!$hiddentop) {
                       $folderpath='default&'.
                                    &escape(&mt('Main Content').':::::');
                   }
             }              }
         }          }
         $containertag = '<input type="hidden" name="folderpath" value="" />';          $containertag = '<input type="hidden" name="folderpath" value="" />';
Line 5299  sub handler { Line 5344  sub handler {
             %ltitools = &Apache::lonnet::get_domain_ltitools($coursedom);              %ltitools = &Apache::lonnet::get_domain_ltitools($coursedom);
             my $posslti = keys(%ltitools);              my $posslti = keys(%ltitools);
     $script .= &editing_js($udom,$uname,$supplementalflag,$coursedom,$coursenum,$posslti,      $script .= &editing_js($udom,$uname,$supplementalflag,$coursedom,$coursenum,$posslti,
                                    $londocroot,$canedit).                                     $londocroot,$canedit,\$navmap).
                        &history_tab_js().                         &history_tab_js().
                        &inject_data_js().                         &inject_data_js().
                        &Apache::lonhtmlcommon::resize_scrollbox_js('docs',$tabidstr,$tid).                         &Apache::lonhtmlcommon::resize_scrollbox_js('docs',$tabidstr,$tid).
Line 5331  sub handler { Line 5376  sub handler {
                                                 {'force_register' => $showdoc,}));                                                  {'force_register' => $showdoc,}));
     } elsif ($toolsflag) {      } elsif ($toolsflag) {
         my ($breadtext,$breadtitle);          my ($breadtext,$breadtitle);
         $breadtext = "$crstype Contents";          $breadtext = "$crstype Editor";
         if ($canedit) {          if ($canedit) {
             $breadtitle = 'Editing '.$crstype.' Contents';              $breadtitle = 'Editing '.$crstype.' Contents';
         } else {          } else {
Line 5351  sub handler { Line 5396  sub handler {
                                                 {'bread_crumbs' => $brcrum,}));                                                  {'bread_crumbs' => $brcrum,}));
     } else {      } else {
         my ($breadtext,$breadtitle,$helpitem);          my ($breadtext,$breadtitle,$helpitem);
         $breadtext = "$crstype Contents";          $breadtext = "$crstype Editor";
         if ($canedit) {          if ($canedit) {
             $breadtitle = 'Editing '.$crstype.' Contents';              $breadtitle = 'Editing '.$crstype.' Contents';
             $helpitem = 'Docs_Adding_Course_Doc';              $helpitem = 'Docs_Adding_Course_Doc';
Line 6172  unless ($container eq 'page') { Line 6217  unless ($container eq 'page') {
           my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype,            my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype,
                               $supplementalflag,\%orderhash,$iconpath,$pathitem,                                $supplementalflag,\%orderhash,$iconpath,$pathitem,
                               \%ltitools,$canedit,\$navmap,$hiddentop);                                \%ltitools,$canedit,\$navmap,$hiddentop);
             undef($navmap);
           if ($error) {            if ($error) {
              $r->print('<p><span class="LC_error">'.$error.'</span></p>');               $r->print('<p><span class="LC_error">'.$error.'</span></p>');
           }            }
Line 6319  my %suporderhash = ( Line 6365  my %suporderhash = (
         if ($supplementalflag) {          if ($supplementalflag) {
            my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype,             my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype,
                                $supplementalflag,\%suporderhash,$iconpath,$pathitem,                                 $supplementalflag,\%suporderhash,$iconpath,$pathitem,
                                \%ltitools,$canedit,\$navmap);                                 \%ltitools,$canedit);
            if ($error) {             if ($error) {
               $r->print('<p><span class="LC_error">'.$error.'</span></p>');                $r->print('<p><span class="LC_error">'.$error.'</span></p>');
            } else {             } else {
Line 6713  END Line 6759  END
 }  }
   
 sub editing_js {  sub editing_js {
     my ($udom,$uname,$supplementalflag,$coursedom,$coursenum,$posslti,$londocroot,$canedit) = @_;      my ($udom,$uname,$supplementalflag,$coursedom,$coursenum,$posslti,$londocroot,$canedit,$navmapref) = @_;
     my %js_lt = &Apache::lonlocal::texthash(      my %js_lt = &Apache::lonlocal::texthash(
                                           p_mnf => 'Name of New Folder',                                            p_mnf => 'Name of New Folder',
                                           t_mnf => 'New Folder',                                            t_mnf => 'New Folder',
Line 6766  sub editing_js { Line 6812  sub editing_js {
     if (&HTML::Entities::decode($env{'environment.internal.'.$env{'request.course.id'}.'.docs_folderpath.folderpath'}) =~ /\:1$/) {      if (&HTML::Entities::decode($env{'environment.internal.'.$env{'request.course.id'}.'.docs_folderpath.folderpath'}) =~ /\:1$/) {
         $main_container_page = 1;          $main_container_page = 1;
     }      }
     my $toplevelmain =       my $backtourl;
         &escape(&mt('Main Content').':::::');      my $toplevelmain = &escape(&default_folderpath($coursenum,$coursedom,$navmapref));
     my $toplevelsupp = &supplemental_base();      my $toplevelsupp = &supplemental_base();
   
     my $backtourl;  
     if ($env{'docs.exit.'.$env{'request.course.id'}} =~ /^direct_(.+)$/) {      if ($env{'docs.exit.'.$env{'request.course.id'}} =~ /^direct_(.+)$/) {
         my $caller = $1;          my $caller = $1;
         if ($caller =~ /^supplemental/) {          if ($caller =~ /^supplemental/) {

Removed from v.1.616  
changed lines
  Added in v.1.617


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