Diff for /rat/lonpage.pm between versions 1.134 and 1.140

version 1.134, 2020/03/03 01:16:31 version 1.140, 2022/06/29 17:51:10
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 101  sub tracetable { Line 102  sub tracetable {
             } else {              } else {
                 $sofar++;                  $sofar++;
                 if ($hash{'src_'.$rid}) {                  if ($hash{'src_'.$rid}) {
                     my $brepriv=&Apache::lonnet::allowed('bre',$hash{'src_'.$rid});                      my ($mapid,$resid)=split(/\./,$rid);
                       my $symb = &Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},$resid,$hash{'src_'.$rid});
                       my $brepriv=&Apache::lonnet::allowed('bre',$hash{'src_'.$rid},$symb);
                     if (($brepriv eq '2') || ($brepriv eq 'F')) {                      if (($brepriv eq '2') || ($brepriv eq 'F')) {
                         if (defined($rows[$sofar])) {                          if (defined($rows[$sofar])) {
                             $rows[$sofar].='&'.$rid;                              $rows[$sofar].='&'.$rid;
Line 187  sub handler { Line 190  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 273  sub handler { Line 278  sub handler {
                   my %ssilink=();                    my %ssilink=();
                   my %ssivlink=();                    my %ssivlink=();
                   my %ssialink=();                    my %ssialink=();
                     my %cssrefs=();
                     my %httpref=();
             
                   my %cellemb=();                    my %cellemb=();
                   my %cellexternal=();                    my %cellexternal=();
Line 304  sub handler { Line 311  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:') {                            if ($hash{'ext_'.$_} eq 'true:') {
                               $cellexternal{$_}=($hash{'ext_'.$_} eq 'true:');                                $cellexternal{$_}=($hash{'ext_'.$_} eq 'true:');
                               $src =~ s{^/ext/}{http://};                                $src =~ s{^/ext/}{http://};
                               $src =~ s{http://https://}{https://};                                $src =~ s{http://https://}{https://};
                                 if ($src =~ /(\#[^#]+)$/) {
                                     $anchor = $1;
                                     $src =~ s/\#[^#]+$//;
                                 }
                           }                            }
                             my $unencsrc = $src;
                           my ($extension)=($src=~/\.(\w+)$/);                            my ($extension)=($src=~/\.(\w+)$/);
   if ($hash{'encrypted_'.$_}) {    if ($hash{'encrypted_'.$_}) {
       $src=&Apache::lonenc::encrypted($src);        $src=&Apache::lonenc::encrypted($src);
Line 322  sub handler { Line 335  sub handler {
       &Apache::loncommon::fileembstyle($extension);        &Apache::loncommon::fileembstyle($extension);
                           if ($cellexternal{$_}) {                            if ($cellexternal{$_}) {
                               if (($target eq 'tex') || ($target eq 'tex_answer')) {                                if (($target eq 'tex') || ($target eq 'tex_answer')) {
                                   my $shown = $src;                                    my $shown = $src.$anchor;
                                   if ($hash{'encrypted_'.$_}) {                                    if (($hash{'encrypted_'.$_}) && (!$env{'request.role.adv'})) {
                                       $shown = &mt('URL not shown (encrypted)');                                        $shown = &mt('URL not shown (encrypted)');
                                   }                                    }
                                   my $title=&Apache::lonnet::gettitle($symb);                                    my $title=&Apache::lonnet::gettitle($symb);
                                   $title = &Apache::lonxml::latex_special_symbols($title);                                    $title = &Apache::lonxml::latex_special_symbols($title);
                                     $shown = &Apache::lonxml::latex_special_symbols($shown);
                                   $ssibody{$_} = ' \strut \\\\ \textit{'.$title.'} \strut \\\\ '.$shown.'\\\\';                                    $ssibody{$_} = ' \strut \\\\ \textit{'.$title.'} \strut \\\\ '.$shown.'\\\\';
                               } else {                                } else {
                                   my $showsrc = $src;                                    my $showsrc = $src;
                                     my ($is_pdf,$title,$linktext);
                                     if ($unencsrc =~ /\.pdf$/i) {
                                         $is_pdf = 1;
                                     }
                                   if (($hash{'encrypted_'.$_}) && ($symb)) {                                    if (($hash{'encrypted_'.$_}) && ($symb)) {
                                       $showsrc .= '?symb='.&Apache::lonenc::encrypted($symb);                                        $title=&Apache::lonnet::gettitle(&Apache::lonenc::encrypted($symb));
                                     } else {
                                         $title=&Apache::lonnet::gettitle($symb);
                                   }                                    }
                                   $ssibody{$_} = <<ENDEXT;                                    if ($env{'browser.mobile'}) {
 <iframe src="$showsrc" width="100%">No iframe support!</iframe>                                        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
Line 400  ENDEXT Line 442  ENDEXT
                               my $bodydef=0;                                my $bodydef=0;
                               my $thisxml=0;                                my $thisxml=0;
                               my @rlinks=();                                my @rlinks=();
                                 my @css_hrefs=();
                               if ($output=~/\?xml/) {                                if ($output=~/\?xml/) {
                                  $isxml=1;                                   $isxml=1;
                                  $thisxml=1;                                   $thisxml=1;
Line 442  ENDEXT Line 485  ENDEXT
                                            ($bodydef==0)) {                                             ($bodydef==0)) {
       $allscript.="\n\n"        $allscript.="\n\n"
                                                 .$parser->get_text('/script');                                                  .$parser->get_text('/script');
                                     } elsif (($token->[1] eq 'link') &&
                                              ($bodydef==0)) {
                                         if (($token->[2]->{'href'} !~ m{^/adm/}) &&
                                             ($token->[2]->{'rel'} eq 'stylesheet')) {
                                                 $css_hrefs[$#css_hrefs+1]=
                                                     $token->[2]->{'href'};
   
                                         }
                                   }                                    }
         }          }
       }        }
Line 604  ENDEXT Line 655  ENDEXT
                      $output=~s/(\"|\'|\=\s*)$_(\"|\'|\s|\>)/$1$newlocation$2/;                       $output=~s/(\"|\'|\=\s*)$_(\"|\'|\s|\>)/$1$newlocation$2/;
   }    }
       }        }
                                 foreach my $css_href (@css_hrefs) {
                                     next if ($css_href eq '');
                                     unless ($css_href =~ m{https?://}) {
                                         my $proburl = &Apache::lonnet::clutter($plainsrc);
                                         unless ($css_href =~ m{^/}) {
                                             my $probdir = $proburl;
                                             $probdir=~s/\/[^\/]*$//;
                                             $css_href = &Apache::lonnet::hreflocation($probdir,$css_href);
                                         }
                                         if ($css_href =~ m{^/(res|uploaded)/}) {
                                             unless (($env{'httpref.'.$css_href}) ||
                                                     ($httpref{'httpref.'.$css_href}) ||
                                                     (&Apache::lonnet::is_on_map($css_href))) {
                                                 if ($env{'httpref.'.$proburl}) {
                                                     $proburl = $env{'httpref.'.$proburl};
                                                 }
                                                 $httpref{'httpref.'.$css_href} = $proburl;
                                             }
                                         }
                                     }
                                     $cssrefs{$css_href} = 1;
                                 }
 # -------------------------------------------------- Deal with Applet codebases  # -------------------------------------------------- Deal with Applet codebases
   $output=~s/(\<applet[^\>]+)(codebase\=[^\S\>]+)*([^\>]*)\>/$1.($2?$2:' codebase="'.$thisdir.'"').$3.'>'/gei;    $output=~s/(\<applet[^\>]+)(codebase\=[^\S\>]+)*([^\>]*)\>/$1.($2?$2:' codebase="'.$thisdir.'"').$3.'>'/gei;
       $ssibody{$_}=$output;        $ssibody{$_}=$output;
Line 722  ENDEXT Line 795  ENDEXT
                                   }                                    }
                               }                                }
                           }                            }
                             if (keys(%cssrefs)) {
                                 my $links;
                                 if (keys(%cssrefs)) {
                                     foreach my $css_href (keys(%cssrefs)) {
                                         next unless ($css_href =~ m{^(/res/|/uploaded/|https?://)});
                                         $links .= '<link rel="stylesheet" type="text/css" href="'.$css_href.'" />'."\n";
                                     }
                                 }
                                 if ($links) {
                                     if (keys(%httpref)) {
                                         &Apache::lonnet::appenv(\%httpref);
                                     }
                                     $allscript .= "\n$links";
                                 }
                             }
 # ------------------------------------------------------------------ Start body  # ------------------------------------------------------------------ Start body
   $r->print(&Apache::loncommon::start_page(undef,$allscript,    $r->print(&Apache::loncommon::start_page(undef,$allscript,
    {'force_register' => 1,     {'force_register' => 1,
Line 798  ENDEXT Line 886  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 904  ENDEXT Line 989  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 {
           my $shownsymb = $symb;
           if ($symb =~ /\#([^\#]+)$/) {
               my $escan = &escape('#');
               $shownsymb =~ s/#([^\#]+)$/$escan$1/;
           }
           $aname = &escape($shownsymb);
       }
       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 '')      my $crs_sec = $env{'request.course.id'} . (($env{'request.course.sec'} ne '')
                                                ? "/$env{'request.course.sec'}"                                                 ? "/$env{'request.course.sec'}"
                                                : '');                                                 : '');
       my $esrc=&Apache::lonnet::declutter($hash->{'src_'.$rid});
     if ($hash->{'encrypted_'.$rid}) {      if ($hash->{'encrypted_'.$rid}) {
  $esrc=&Apache::lonenc::encrypted($esrc);   $esrc=&Apache::lonenc::encrypted($esrc);
     }      }
Line 926  sub get_buttons { Line 1022  sub get_buttons {
  && !$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).'"></a>'.   $metainfo .= '<a href="'.$hash->{'src_'.$rid}.'.meta'.'" '.
     '<a href="'.$hash->{'src_'.$rid}.'.meta'.'" target="LONcatInfo">'.      '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').'"'.
             ' title="'.&mt('Show Metadata').'" />'.              ' title="'.&mt('Show Metadata').'" />'.
Line 1084  END Line 1180  END
     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.134  
changed lines
  Added in v.1.140


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.