--- rat/lonpage.pm 2020/03/06 20:04:01 1.138
+++ rat/lonpage.pm 2023/09/11 13:26:26 1.144
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Page Handler
#
-# $Id: lonpage.pm,v 1.138 2020/03/06 20:04:01 raeburn Exp $
+# $Id: lonpage.pm,v 1.144 2023/09/11 13:26:26 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -102,7 +102,9 @@ sub tracetable {
} else {
$sofar++;
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 (defined($rows[$sofar])) {
$rows[$sofar].='&'.$rid;
@@ -266,6 +268,7 @@ sub handler {
my $nforms=0;
my $nuploads=0;
my $ntimers=0;
+ my $hasnumresp;
my %turninpaths;
my %multiresps;
my $turninparent;
@@ -276,6 +279,8 @@ sub handler {
my %ssilink=();
my %ssivlink=();
my %ssialink=();
+ my %cssrefs=();
+ my %httpref=();
my %cellemb=();
my %cellexternal=();
@@ -438,6 +443,7 @@ ENDEXT
my $bodydef=0;
my $thisxml=0;
my @rlinks=();
+ my @css_hrefs=();
if ($output=~/\?xml/) {
$isxml=1;
$thisxml=1;
@@ -480,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'};
+
+ }
}
}
}
@@ -499,6 +513,11 @@ ENDEXT
$ntimers++;
$hastimer = 1;
}
+ unless ($hasnumresp) {
+ if ($output=~/\]+class\s*=\s*['"]*[^'">]*LC_numresponse_text\W/) {
+ $hasnumresp = 1;
+ }
+ }
$output=~
s/\<((?:input|select|button|textarea)[^\>]+)name\s*\=\s*[\'\"]*([^\'\"]+)[\'\"]*([^\>]*)\>/\<$1 name="$prefix$2" $3\>/gsi;
$output=~
@@ -642,13 +661,35 @@ 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/(\