--- rat/lonpage.pm 2020/07/18 21:49:35 1.111.2.10.2.2 +++ rat/lonpage.pm 2022/01/04 19:37:55 1.111.2.13.2.1 @@ -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.111.2.13.2.1 2022/01/04 19:37:55 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=(); @@ -441,6 +443,7 @@ ENDEXT my $bodydef=0; my $thisxml=0; my @rlinks=(); + my @css_hrefs=(); if ($output=~/\?xml/) { $isxml=1; $thisxml=1; @@ -483,6 +486,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 +656,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; @@ -710,7 +743,7 @@ ENDEXT $uniquetimes{$item} = 1; } } - if (scalar(keys(%uniquetimes)) == 1) { + if (scalar(keys(%uniquetimes)) == 1) { my (%uniquedisplays,%uniquedones,$currdisp,$donebuttontime, $donebuttonextras); if (keys(%countdowndisp)) { @@ -763,6 +796,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 +1043,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.= '