--- rat/lonpage.pm 2020/07/18 21:49:35 1.111.2.10.2.2 +++ rat/lonpage.pm 2020/11/10 23:55:32 1.139 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Page Handler # -# $Id: lonpage.pm,v 1.111.2.10.2.2 2020/07/18 21:49:35 raeburn Exp $ +# $Id: lonpage.pm,v 1.139 2020/11/10 23:55:32 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -202,7 +202,7 @@ sub handler { my ($pagesymb,$courseid,$domain,$name)=&Apache::lonnet::whichuser(); unless ($pagesymb) { $pagesymb=&Apache::lonnet::symbread($requrl); - } + } if ($pagesymb && ($courseid ne '') && ($domain ne '') && ($name ne '')) { my %times=&Apache::lonnet::get('firstaccesstimes', [$courseid."\0".$pagesymb], @@ -276,6 +276,8 @@ sub handler { my %ssilink=(); my %ssivlink=(); my %ssialink=(); + my %cssrefs=(); + my %httpref=(); my %cellemb=(); my %cellexternal=(); @@ -379,7 +381,7 @@ ENDEXT } elsif ($cellemb{$_} eq 'ssi') { # --------------------------------------------------------- This is an SSI cell my $prefix='p_'.$_.'_'; - my $idprefix='p_'.join('_',($mapid,$resid,'')); + my $idprefix= 'p_'.join('_',($mapid,$resid,'')); my %posthash=('request.prefix' => $prefix, 'LONCAPA_INTERNAL_no_discussion' => 'true', 'symb' => $symb); @@ -417,9 +419,6 @@ ENDEXT } elsif ($env{'form.'.$prefix.'markaccess'} eq 'yes') { $posthash{'markaccess'} = $env{'form.'.$prefix.'markaccess'}; } - if ($env{'environment.remote'} eq 'on') { - $posthash{'inhibitmenu'} = 'yes'; - } my $output=Apache::lonnet::ssi($src,%posthash); $output=~s|//(\s*)?\s||gs; if (($target eq 'tex') || ($target eq 'tex_answer')) { @@ -441,6 +440,7 @@ ENDEXT my $bodydef=0; my $thisxml=0; my @rlinks=(); + my @css_hrefs=(); if ($output=~/\?xml/) { $isxml=1; $thisxml=1; @@ -483,6 +483,14 @@ ENDEXT ($bodydef==0)) { $allscript.="\n\n" .$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'}; + + } } } } @@ -645,6 +653,28 @@ ENDEXT $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 $output=~s/(\]+)(codebase\=[^\S\>]+)*([^\>]*)\>/$1.($2?$2:' codebase="'.$thisdir.'"').$3.'>'/gei; $ssibody{$_}=$output; @@ -657,7 +687,7 @@ ENDEXT &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; $r->print(&Apache::loncommon::start_page(undef,undef, - {'force_register' => 1})); + {'force_register' => 1,})); $r->print(&mt('This page is either empty or it only contains resources that are currently hidden').'. '); $r->print('

'.&mt('Please use the LON-CAPA navigation arrows to move to another item in the course'). &Apache::loncommon::end_page()); @@ -763,6 +793,21 @@ ENDEXT } } } + if (keys(%cssrefs)) { + my $links; + if (keys(%cssrefs)) { + foreach my $css_href (keys(%cssrefs)) { + next unless ($css_href =~ m{^(/res/|/uploaded/|https?://)}); + $links .= ''."\n"; + } + } + if ($links) { + if (keys(%httpref)) { + &Apache::lonnet::appenv(\%httpref); + } + $allscript .= "\n$links"; + } + } # ------------------------------------------------------------------ Start body $r->print(&Apache::loncommon::start_page(undef,$allscript, {'force_register' => 1, @@ -995,7 +1040,7 @@ sub get_buttons { if (($hash->{'src_'.$rid}=~/$LONCAPA::assess_re/) && ($hash->{'src_'.$rid} !~ m-^/uploaded/-)) { - if ((&Apache::lonnet::allowed('mgr',$crs_sec)) || + if ((&Apache::lonnet::allowed('mgr',$crs_sec)) || (&Apache::lonnet::allowed('vgr',$crs_sec))) { $metainfo.= ''. '&command=gradingmenu">'. ''.&mt('Content Grades').''. - ''; - } - if ((&Apache::lonnet::allowed('opa',$crs_sec)) || + ''; + } + if ((&Apache::lonnet::allowed('opa',$crs_sec)) || (&Apache::lonnet::allowed('vpa',$crs_sec))) { $metainfo.= '