Diff for /rat/lonpage.pm between versions 1.125 and 1.136

version 1.125, 2017/09/29 19:18:18 version 1.136, 2020/03/05 16:45:32
Line 44  use Apache::lonhomework; Line 44  use Apache::lonhomework;
 use Apache::lonparmset;  use Apache::lonparmset;
 use Apache::lonenc();  use Apache::lonenc();
 use HTML::TokeParser;  use HTML::TokeParser;
   use HTML::Entities();
 use GDBM_File;  use GDBM_File;
 use Apache::lonsequence;  use Apache::lonsequence;
 use lib '/home/httpd/lib/perl/';  use lib '/home/httpd/lib/perl/';
Line 187  sub handler { Line 188  sub handler {
       if (-e "$fn.db") {        if (-e "$fn.db") {
           my %buttonshide;            my %buttonshide;
           my $hostname = $r->hostname();            my $hostname = $r->hostname();
             my $lonhost = $r->dir_config('lonHostID');
             my $ip = &Apache::lonnet::get_host_ip($lonhost);
           if (tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER(),0640)) {            if (tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER(),0640)) {
 # ------------------------------------------------------------------- Hash tied  # ------------------------------------------------------------------- Hash tied
               my $firstres=$hash{'map_start_'.$requrl};                my $firstres=$hash{'map_start_'.$requrl};
Line 304  sub handler { Line 307  sub handler {
                       foreach (@colcont) {                        foreach (@colcont) {
                           my $src=$hash{'src_'.$_};                            my $src=$hash{'src_'.$_};
                           my $plainsrc = $src;                            my $plainsrc = $src;
                             my $anchor;
                             if ($hash{'ext_'.$_} eq 'true:') {
                                 $cellexternal{$_}=($hash{'ext_'.$_} eq 'true:');
                                 $src =~ s{^/ext/}{http://};
                                 $src =~ s{http://https://}{https://};
                                 if ($src =~ /(\#[^#]+)$/) {
                                     $anchor = $1;
                                     $src =~ s/\#[^#]+$//;
                                 }
                             }
                             my $unencsrc = $src;
                           my ($extension)=($src=~/\.(\w+)$/);                            my ($extension)=($src=~/\.(\w+)$/);
   $cellexternal{$_}=($hash{'ext_'.$_} eq 'true:');  
   if ($hash{'encrypted_'.$_}) {    if ($hash{'encrypted_'.$_}) {
       $src=&Apache::lonenc::encrypted($src);        $src=&Apache::lonenc::encrypted($src);
   }    }
                           my ($mapid,$resid)=split(/\./,$_);                            my ($mapid,$resid)=split(/\./,$_);
                           my $symb=&Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},$resid,$src);                            my $symb=&Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},$resid,$plainsrc);
                           unless ($env{'request.role.adv'}) {                            unless ($env{'request.role.adv'}) {
                               $buttonshide{$symb} = &Apache::lonnet::EXT("resource.0.buttonshide",$symb);                                $buttonshide{$symb} = &Apache::lonnet::EXT("resource.0.buttonshide",$symb);
                           }                            }
                           $cellemb{$_}=                            $cellemb{$_}=
       &Apache::loncommon::fileembstyle($extension);        &Apache::loncommon::fileembstyle($extension);
                           if ($cellexternal{$_}) {                            if ($cellexternal{$_}) {
                               unless (($target eq 'tex') || ($target eq 'tex_answer')) {                                if (($target eq 'tex') || ($target eq 'tex_answer')) {
                                   $ssibody{$_} = <<ENDEXT;                                    my $shown = $src.$anchor;
 <iframe src="$src" width="100%">No iframe support!</iframe>                                    if (($hash{'encrypted_'.$_}) && (!$env{'request.role.adv'})) {
                                         $shown = &mt('URL not shown (encrypted)');
                                     }
                                     my $title=&Apache::lonnet::gettitle($symb);
                                     $title = &Apache::lonxml::latex_special_symbols($title);
                                     $shown = &Apache::lonxml::latex_special_symbols($shown);
                                     $ssibody{$_} = ' \strut \\\\ \textit{'.$title.'} \strut \\\\ '.$shown.'\\\\';
                                 } else {
                                     my $showsrc = $src;
                                     my ($is_pdf,$title,$linktext);
                                     if ($unencsrc =~ /\.pdf$/i) {
                                         $is_pdf = 1;
                                     }
                                     if (($hash{'encrypted_'.$_}) && ($symb)) {
                                         $title=&Apache::lonnet::gettitle(&Apache::lonenc::encrypted($symb));
                                     } else {
                                         $title=&Apache::lonnet::gettitle($symb);
                                     }
                                     if ($env{'browser.mobile'}) {
                                         if ($is_pdf) {
                                             $linktext = &mt('Link to PDF (for mobile devices)');
                                             $ssibody{$_} = &create_extlink($unencsrc,$anchor,$title,$linktext);
                                         } else {
                                             $linktext = &mt('Link to resource');
                                             $ssibody{$_} = &create_extlink($unencsrc,$anchor,$title,$linktext);
                                         }
                                     } else {
                                         my $absolute = $env{'request.use_absolute'};
                                         my $uselink = &Apache::loncommon::is_nonframeable($unencsrc,$absolute,$hostname,$ip);
                                         if (($uselink) || (($ENV{'SERVER_PORT'} == 443) && ($unencsrc =~ m{^http://}))) {
                                             $linktext = &mt('Link to resource');
                                             $ssibody{$_} =  &create_extlink($unencsrc,$anchor,$title,$linktext);
                                         } else {
                                             if (($hash{'encrypted_'.$_}) && ($symb) && (!$env{'request.role.adv'})) {
                                                 $showsrc .= '?symb='.&Apache::lonenc::encrypted($symb);
                                             } elsif ($anchor) {
                                                 $showsrc .= $anchor
                                             }
                                             $ssibody{$_} = <<ENDEXT;
   <iframe src="$showsrc" width="100%" height="300px">No iframe support!</iframe>
 ENDEXT  ENDEXT
                                         }
                                     }
                               }                                }
                           } elsif ($cellemb{$_} eq 'ssi') {                            } elsif ($cellemb{$_} eq 'ssi') {
 # --------------------------------------------------------- This is an SSI cell  # --------------------------------------------------------- This is an SSI cell
       my $prefix=$_.'_';        my $prefix='p_'.$_.'_';
                               my $idprefix= join('_',($mapid,$resid,''));                                my $idprefix= 'p_'.join('_',($mapid,$resid,''));
                               my %posthash=('request.prefix' => $prefix,                                my %posthash=('request.prefix' => $prefix,
     'LONCAPA_INTERNAL_no_discussion' => 'true',      'LONCAPA_INTERNAL_no_discussion' => 'true',
     'symb' => $symb);      'symb' => $symb);
Line 338  ENDEXT Line 392  ENDEXT
   $posthash{'rndseed'}=$env{'form.rndseed'};    $posthash{'rndseed'}=$env{'form.rndseed'};
                                   $posthash{'answer_output_mode'} = $env{'form.answer_output_mode'};                                    $posthash{'answer_output_mode'} = $env{'form.answer_output_mode'};
       }        }
       my $submitted=exists($env{'form.all_submit'});        my $submitted=$env{'form.all_submit_pressed'};
       if (!$submitted) {        if (!$submitted) {
   foreach my $key (keys(%env)) {    foreach my $key (keys(%env)) {
       if ($key=~/^form.\Q$prefix\Esubmit_/) {        if ($key=~/^\Qform.$prefix\Esubmit_(.+)_pressed$/) {
   $submitted=1;last;                                            if ($env{$key}) {
                                                 $submitted=1;
                                                 last;
                                             }
       }        }
   }                                    }
       }        }
                               if ($submitted) {                                if ($submitted) {
   foreach my $key (keys(%env)) {    foreach my $key (keys(%env)) {
       if ($key=~/^form.\Q$prefix\E/) {        if ($key=~/^\Qform.$prefix\E/) {
   my $name=$key;    my $name=$key;
   $name=~s/^form.\Q$prefix\E//;    $name=~s/^\Qform.$prefix\E//;
   $posthash{$name}=$env{$key};    $posthash{$name}=$env{$key};
       }                                        }
   }    }
   if (exists($env{'form.all_submit'})) {    if ($env{'form.all_submit_pressed'}) {
       $posthash{'all_submit'}='yes';        $posthash{'all_submit'}='yes';
   }    }
       }        } elsif ($env{'form.'.$prefix.'markaccess'} eq 'yes') {
                     $posthash{'markaccess'} = $env{'form.'.$prefix.'markaccess'};
                 }
                               my $output=Apache::lonnet::ssi($src,%posthash);                                my $output=Apache::lonnet::ssi($src,%posthash);
       $output=~s|//(\s*<!--)? BEGIN LON-CAPA Internal.+?// END LON-CAPA Internal\s*(-->)?\s||gs;        $output=~s|//(\s*<!--)? BEGIN LON-CAPA Internal.+?// END LON-CAPA Internal\s*(-->)?\s||gs;
                               if (($target eq 'tex') || ($target eq 'tex_answer')) {                                if (($target eq 'tex') || ($target eq 'tex_answer')) {
Line 465  ENDEXT Line 524  ENDEXT
                                   $output=~                                    $output=~
                                       s/(\Q<td class="LC_status_\E)(\Qsubmit_\E)([^\"]*)(\s*[^\"]*"\>)/$1$idprefix$2$3$4/g;                                        s/(\Q<td class="LC_status_\E)(\Qsubmit_\E)([^\"]*)(\s*[^\"]*"\>)/$1$idprefix$2$3$4/g;
                                   if ($nuploads) {                                    if ($nuploads) {
                                       $output=~  
                                           s/\<(input[^\>]+name=\"\Q$prefix\EHWFILE[^\>]+)\s*id\s*\=\s*[\'\"]*([^\'\"]+)[\'\"]*([^\)]*)\>/\<$1 id="$prefix$2" $3\>/gsi;  
                                        ($turninpaths{$prefix},$multiresps{$prefix}) =                                          ($turninpaths{$prefix},$multiresps{$prefix}) = 
                                            &Apache::loncommon::get_turnedin_filepath($symb,$env{'user.name'},$env{'user.domain'});                                             &Apache::loncommon::get_turnedin_filepath($symb,$env{'user.name'},$env{'user.domain'});
                                        if ($turninparent eq '') {                                         if ($turninparent eq '') {
Line 620  ENDEXT Line 677  ENDEXT
   "\n</script>\n";    "\n</script>\n";
   }    }
                           if (($nforms) && ($nuploads)) {                            if (($nforms) && ($nuploads)) {
                               $allscript .= &Apache::lonhtmlcommon::file_submissionchk_js(\%turninpaths,\%multiresps);                                $allscript .= &Apache::lonhtmlcommon::file_submissionchk_js(\%turninpaths,\%multiresps).
                                               '<script type="text/javascript" '.
                                               'src="/res/adm/includes/file_upload.js"></script>';
                           }                            }
                           if (($nforms) && (&Apache::lonhtmlcommon::htmlareabrowser())) {                            if (($nforms) && (&Apache::lonhtmlcommon::htmlareabrowser())) {
                               my %textarea_args = (                                my %textarea_args = (
Line 638  ENDEXT Line 697  ENDEXT
                                             '// ]]>'.                                              '// ]]>'.
                                             "\n</script>\n";                                              "\n</script>\n";
                           }                            }
                             &Apache::lonhtmlcommon::clear_breadcrumb_tools();
                           if (keys(%hastimeleft)) {                            if (keys(%hastimeleft)) {
                               my (%uniquetimes,%uniquedisplays);                                my (%uniquetimes,%uniquedisplays);
                               foreach my $item (values(%hastimeleft)) {                                foreach my $item (values(%hastimeleft)) {
Line 776  ENDEXT Line 836  ENDEXT
       }                     }             
       $r->print('>');        $r->print('>');
   }    }
                                   unless (($cellexternal{$rid}) &&                                     $r->print($ssibody{$rid});
                                           ($target eq 'tex') && ($target eq 'tex_answer')) {  
                                       $r->print($ssibody{$rid});  
                                   }  
   unless (($target eq 'tex') || ($target eq 'tex_answer')) {    unless (($target eq 'tex') || ($target eq 'tex_answer')) {
       $r->print('</font>');        $r->print('</font>');
                                   }                                    }
Line 840  ENDEXT Line 897  ENDEXT
                           $r->print(                            $r->print(
                   '<input name="all_submit" value="'.&mt('Submit All').'" type="'.                    '<input name="all_submit" value="'.&mt('Submit All').'" type="'.
   (($nforms>1)?'submit':'hidden').'"'.$class.' id="all_submit" />'.    (($nforms>1)?'submit':'hidden').'"'.$class.' id="all_submit" />'.
                             '<input type="hidden" name="all_submit_pressed" '.
                             'id="all_submit_pressed" value="" />'.
                           '<div id="msg_all_submit" style="display:none">'.                            '<div id="msg_all_submit" style="display:none">'.
                           &mt('Processing your submission ...').'</div></form>');                            &mt('Processing your submission ...').'</div></form>');
                       }                        }
Line 880  ENDEXT Line 939  ENDEXT
 sub get_buttons {  sub get_buttons {
     my ($hash,$rid,$buttonshide,$hostname) = @_;      my ($hash,$rid,$buttonshide,$hostname) = @_;
   
     my $metainfo = '';  
     my $esrc=&Apache::lonnet::declutter($hash->{'src_'.$rid});  
     my ($mapid,$resid)=split(/\./,$rid);      my ($mapid,$resid)=split(/\./,$rid);
     my $symb=&Apache::lonnet::encode_symb($hash->{'map_id_'.$mapid},      my $symb=&Apache::lonnet::encode_symb($hash->{'map_id_'.$mapid},
   $resid,    $resid,
   $hash->{'src_'.$rid});    $hash->{'src_'.$rid});
       my $aname;
       if (($hash->{'encrypted_'.$rid}) && (!$env{'request.role.adv'})) {
           $aname = 'LC_'.$rid;
       } else {
           $aname = &escape($symb);
       }
       my $metainfo = '<a name="'.$aname.'"></a>';
     unless ($env{'request.role.adv'}) {      unless ($env{'request.role.adv'}) {
         if ($buttonshide->{$symb} eq 'yes') {          if ($buttonshide->{$symb} eq 'yes') {
             return;              return $metainfo;
         }          }
     }      }
       my $crs_sec = $env{'request.course.id'} . (($env{'request.course.sec'} ne '')
                                                  ? "/$env{'request.course.sec'}"
                                                  : '');
       my $esrc=&Apache::lonnet::declutter($hash->{'src_'.$rid});
     if ($hash->{'encrypted_'.$rid}) {      if ($hash->{'encrypted_'.$rid}) {
  $symb=&Apache::lonenc::encrypted($symb);  
  $esrc=&Apache::lonenc::encrypted($esrc);   $esrc=&Apache::lonenc::encrypted($esrc);
     }      }
     if ($hash->{'src_'.$rid} !~ m-^/uploaded/-      if ($hash->{'src_'.$rid} !~ m-^/uploaded/-
         && $hash->{'src_'.$rid} !~ m{^https?://}          && $hash->{'src_'.$rid} !~ m{^/ext/}
  && !$env{'request.enc'}   && !$env{'request.enc'}
  && ($env{'request.role.adv'}   && ($env{'request.role.adv'}
     || !$hash->{'encrypted_'.$rid})) {       || !$hash->{'encrypted_'.$rid})) { 
  $metainfo .='<a name="'.&escape($symb).'" />'.   $metainfo .='<a name="'.&escape($symb).'"></a>'.
     '<a href="'.$hash->{'src_'.$rid}.'.meta'.'" target="LONcatInfo">'.      '<a href="'.$hash->{'src_'.$rid}.'.meta'.'" target="LONcatInfo">'.
             '<img src="/res/adm/pages/catalog.png" class="LC_icon"'.              '<img src="/res/adm/pages/catalog.png" class="LC_icon"'.
             ' alt="'.&mt('Show Metadata').'"'.              ' alt="'.&mt('Show Metadata').'"'.
Line 908  sub get_buttons { Line 975  sub get_buttons {
     '</a>';      '</a>';
     }      }
     if (($hash->{'src_'.$rid} !~ m{^/uploaded/}) &&      if (($hash->{'src_'.$rid} !~ m{^/uploaded/}) &&
         ($hash->{'src_'.$rid} !~ m{^https?://})) {          ($hash->{'src_'.$rid} !~ m{^/ext/})) {
         $metainfo .= '<a href="/adm/evaluate?postdata='.          $metainfo .= '<a href="/adm/evaluate?postdata='.
     &escape($esrc).      &escape($esrc).
     '" target="LONcatInfo">'.      '" target="LONcatInfo">'.
Line 920  sub get_buttons { Line 987  sub get_buttons {
     if (($hash->{'src_'.$rid}=~/$LONCAPA::assess_re/) &&      if (($hash->{'src_'.$rid}=~/$LONCAPA::assess_re/) &&
  ($hash->{'src_'.$rid} !~ m-^/uploaded/-)) {   ($hash->{'src_'.$rid} !~ m-^/uploaded/-)) {
   
  if (&Apache::lonnet::allowed('mgr',$env{'request.course.id'})) {   if ((&Apache::lonnet::allowed('mgr',$crs_sec)) ||
               (&Apache::lonnet::allowed('vgr',$crs_sec))) {
     $metainfo.=      $metainfo.=
  '<a href="/adm/grades?symb='.&escape($symb).   '<a href="/adm/grades?symb='.&escape($symb).
 #               '&command=submission" target="LONcatInfo">'.  #               '&command=submission" target="LONcatInfo">'.
Line 928  sub get_buttons { Line 996  sub get_buttons {
                 '<img src="/adm/lonMisc/subm_button.png" class="LC_icon"'.                  '<img src="/adm/lonMisc/subm_button.png" class="LC_icon"'.
                 ' alt="'.&mt('View Submissions for a Student or a Group of Students').'"'.                  ' alt="'.&mt('View Submissions for a Student or a Group of Students').'"'.
                 ' title="'.&mt('View Submissions for a Student or a Group of Students').'" />'.                  ' title="'.&mt('View Submissions for a Student or a Group of Students').'" />'.
  '</a>'.   '</a>';
           }
           if (&Apache::lonnet::allowed('mgr',$crs_sec)) {
               $metainfo.=
  '<a href="/adm/grades?symb='.&escape($symb).   '<a href="/adm/grades?symb='.&escape($symb).
 #               '&command=gradingmenu" target="LONcatInfo">'.  #               '&command=gradingmenu" target="LONcatInfo">'.
  '&command=gradingmenu">'.   '&command=gradingmenu">'.
Line 937  sub get_buttons { Line 1008  sub get_buttons {
                 ' title="'.&mt('Content Grades').'" />'.                  ' title="'.&mt('Content Grades').'" />'.
  '</a>';   '</a>';
  }   }
  if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) {   if ((&Apache::lonnet::allowed('opa',$crs_sec)) ||
               (&Apache::lonnet::allowed('vpa',$crs_sec))) {
     $metainfo.=      $metainfo.=
  '<a href="/adm/parmset?symb='.&escape($symb).   '<a href="/adm/parmset?symb='.&escape($symb).
 #               '" target="LONcatInfo">'.  #               '" target="LONcatInfo">'.
Line 978  sub get_buttons { Line 1050  sub get_buttons {
             if ((&Apache::lonnet::allowed('cre','/')) &&              if ((&Apache::lonnet::allowed('cre','/')) &&
                 (&Apache::lonnet::metadata($url,'sourceavail') eq 'open')) {                  (&Apache::lonnet::metadata($url,'sourceavail') eq 'open')) {
                 $viewsrcbutton = 1;                  $viewsrcbutton = 1;
             } elsif (&Apache::lonnet::allowed('vxc',$env{'request.course.id'})) {              } elsif (&Apache::lonnet::allowed('vxc',$crs_sec)) {
                 if ($url =~ m{^\Q/res/$cdom/\E($LONCAPA::match_username)/}) {                  if ($url =~ m{^\Q/res/$cdom/\E($LONCAPA::match_username)/}) {
                     my $auname = $1;                      my $auname = $1;
                     if (($env{'request.course.adhocsrcaccess'} ne '') &&                      if (($env{'request.course.adhocsrcaccess'} ne '') &&
                         (grep(/^\Q$auname\E$/,split(/,/,$env{'request.course.adhocsrcaccess'})))) {                          (grep(/^\Q$auname\E$/,split(/,/,$env{'request.course.adhocsrcaccess'})))) {
                         $viewsrcbutton = 1;                          $viewsrcbutton = 1;
                       } elsif ((&Apache::lonnet::metadata($url,'sourceavail') eq 'open') &&
                                (&Apache::lonnet::allowed('bre',$crs_sec))) {
                           $viewsrcbutton = 1;
                     }                      }
                 }                  }
             }              }
Line 1046  $collapse Line 1121  $collapse
 <span id="ddcountexpand" class="LC_menubuttons_inline_text" >$expand</span>  <span id="ddcountexpand" class="LC_menubuttons_inline_text" >$expand</span>
 <img src="/res/adm/pages/timer.png" title="$desc" class="LC_icon" alt="$alttxt" /><span class="LC_menubuttons_inline_text">$title</span></a>  <img src="/res/adm/pages/timer.png" title="$desc" class="LC_icon" alt="$alttxt" /><span class="LC_menubuttons_inline_text">$title</span></a>
 END  END
     &Apache::lonhtmlcommon::clear_breadcrumb_tools();  
     &Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$output);      &Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$output);
     return;      return;
 }  }
   
   sub create_extlink {
       my ($url,$anchor,$title,$linktext) = @_;
       my $shownlink;
       unless ($title eq '') {
           $shownlink = '<span style="font-weight:bold;">'.$title.'</span><br />';
       }
       my $dest = &HTML::Entities::encode($url.$anchor,'&<>"');
       $shownlink .= '<a href="'.$dest.'">'.$linktext.'</a>';
       return $shownlink;
   }
   
 1;  1;
 __END__  __END__

Removed from v.1.125  
changed lines
  Added in v.1.136


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.