--- loncom/xml/lonxml.pm 2001/08/22 19:21:36 1.123 +++ loncom/xml/lonxml.pm 2001/10/03 12:34:10 1.133 @@ -13,7 +13,10 @@ # 6/12,6/13 H. K. Ng # 6/16 Gerd Kortemeyer # 7/27 H. K. Ng -# 8/7,8/9,8/10,8/11,8/15,8/16,8/17,8/18,8/20 Gerd Kortemeyer +# 8/7,8/9,8/10,8/11,8/15,8/16,8/17,8/18,8/20,8/23,8/24 Gerd Kortemeyer +# Guy Albertelli +# 9/26 Gerd Kortemeyer + package Apache::lonxml; use vars @@ -216,16 +219,17 @@ sub maketoken { } sub printtokenheader { - my ($target,$token,$symb,$tuname,$tudom,$tcrsid)=@_; + my ($target,$token,$tsymb,$tcrsid,$tudom,$tuname)=@_; unless ($token) { return ''; } - unless ($symb) { - $symb=&Apache::lonnet::symbread(); + my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser(); + unless ($tsymb) { + $tsymb=$symb; } unless ($tuname) { - $tuname=$ENV{'user.name'}; - $tudom=$ENV{'user.domain'}; - $tcrsid=$ENV{'request.course.id'}; + $tuname=$name; + $tudom=$domain; + $tcrsid=$courseid; } my %reply=&Apache::lonnet::get('environment', @@ -260,7 +264,11 @@ sub fontsettings() { sub registerurl { my $forcereg=shift; - if ($Apache::lonxml::registered) { return ''; } + if ($ENV{'request.publicaccess'}) { + return + ''; + } + if ($Apache::lonxml::registered && !$forcereg) { return ''; } $Apache::lonxml::registered=1; if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) { my $hwkadd=''; @@ -323,7 +331,7 @@ ENDPARM menu=window.open("","LONCAPAmenu"); menu.currentStale=1; menu.switchbutton - (3,1,'reload.gif','return','location','go(currentURL)'); + (3,1,'reload.gif','return','location','go(currentURL)'); menu.clearbut(7,1); menu.clearbut(7,2); menu.clearbut(7,3); @@ -408,7 +416,9 @@ sub xmlparse { my $finaloutput = &inner_xmlparse($target,\@stack,\@parstack,\@pars, $safeeval,\%style_for_target); - + if ($ENV{'request.uri'}) { + &writeallows($ENV{'request.uri'}); + } return $finaloutput; } @@ -656,11 +666,17 @@ sub setup_globals { my ($target)=@_; $Apache::lonxml::registered = 0; @Apache::lonxml::pwd=(); + @Apache::lonxml::extlinks=(); if ($target eq 'meta') { $Apache::lonxml::redirection = 0; $Apache::lonxml::metamode = 1; $Apache::lonxml::evaluate = 1; $Apache::lonxml::import = 0; + } elsif ($target eq 'answer') { + $Apache::lonxml::redirection = 0; + $Apache::lonxml::metamode = 1; + $Apache::lonxml::evaluate = 1; + $Apache::lonxml::import = 1; } elsif ($target eq 'grade') { &startredirection; $Apache::lonxml::metamode = 0; @@ -875,6 +891,7 @@ sub parstring { } sub writeallows { + unless ($#extlinks>=0) { return; } my $thisurl='/res/'.&Apache::lonnet::declutter(shift); if ($ENV{'httpref.'.$thisurl}) { $thisurl=$ENV{'httpref.'.$thisurl}; @@ -884,7 +901,9 @@ sub writeallows { my %httpref=(); map { $httpref{'httpref.'. - &Apache::lonnet::hreflocation($thisdir,$_)}=$thisurl; } @extlinks; + &Apache::lonnet::hreflocation($thisdir,$_)}=$thisurl; + } @extlinks; + @extlinks=(); &Apache::lonnet::appenv(%httpref); } @@ -1033,10 +1052,11 @@ ENDNOTFOUND unless ($ENV{'request.state'} eq 'published') { $result=&inserteditinfo($result,$filecontents); } + + writeallows($request->uri); $request->print($result); - writeallows($request->uri); return OK; } @@ -1079,7 +1099,25 @@ sub get_param { if ( ! $context ) { $context = -1; } my $args =''; if ( $#$parstack > (-2-$context) ) { $args=$$parstack[$context]; } - return &Apache::run::run("{$args;".'return $'.$param.'}',$safeeval); #' + if ( $args =~ /my \$$param=\"/ ) { + return &Apache::run::run("{$args;".'return $'.$param.'}',$safeeval); #' + } else { + return undef; + } +} + +sub get_param_var { + my ($param,$parstack,$safeeval,$context) = @_; + if ( ! $context ) { $context = -1; } + my $args =''; + if ( $#$parstack > (-2-$context) ) { $args=$$parstack[$context]; } + if ( $args !~ /my \$$param=\"/ ) { return undef; } + my $value=&Apache::run::run("{$args;".'return $'.$param.'}',$safeeval); #' + if ($value =~ /^[\$\@\%]/) { + return &Apache::run::run("return $value",$safeeval,1); + } else { + return $value; + } } sub register_insert {