--- loncom/xml/lonxml.pm 2002/01/30 16:04:04 1.151 +++ loncom/xml/lonxml.pm 2002/05/21 02:26:53 1.171 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # XML Parser Module # -# $Id: lonxml.pm,v 1.151 2002/01/30 16:04:04 albertel Exp $ +# $Id: lonxml.pm,v 1.171 2002/05/21 02:26:53 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -60,15 +60,16 @@ package Apache::lonxml; use vars -qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace); +qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace $prevent_entity_encode); use strict; -use HTML::TokeParser; -use HTML::TreeBuilder; -use Safe; -use Safe::Hole; -use Math::Cephes qw(:trigs :hypers :bessels erf erfc); -use Math::Random qw(:all); -use Opcode; +use HTML::LCParser(); +use HTML::TreeBuilder(); +use HTML::Entities(); +use Safe(); +use Safe::Hole(); +use Math::Cephes(); +use Math::Random(); +use Opcode(); sub register { my ($space,@taglist) = @_; @@ -89,15 +90,15 @@ sub deregister { } use Apache::Constants qw(:common); -use Apache::lontexconvert; -use Apache::style; -use Apache::run; -use Apache::londefdef; -use Apache::scripttag; -use Apache::edit; -use Apache::lonnet; -use Apache::File; -use Apache::loncommon; +use Apache::lontexconvert(); +use Apache::style(); +use Apache::run(); +use Apache::londefdef(); +use Apache::scripttag(); +use Apache::edit(); +use Apache::lonnet(); +use Apache::File(); +use Apache::loncommon(); #================================================== Main subroutine: xmlparse #debugging control, to turn on debugging modify the correct handler @@ -128,6 +129,9 @@ $evaluate = 1; # stores the list of active tag namespaces @namespace=(); +# if 0 all high ASCII characters will be encoded into HTML Entities +$prevent_entity_encode=0; + # has the dynamic menu been updated to know about this resource $Apache::lonxml::registered=0; @@ -175,10 +179,12 @@ sub xmlend { } my $sender='Anonymous'; if ((!$contrib{$idx.':anonymous'}) || ($seeid)) { - $sender=$contrib{$idx.':sendername'}.' at '. - $contrib{$idx.':senderdomain'}; + $sender=$contrib{$idx.':plainname'}.' ('. + $contrib{$idx.':sendername'}.' at '. + $contrib{$idx.':senderdomain'}.')'; if ($contrib{$idx.':anonymous'}) { - $sender.=' (anonymous)'; + $sender.=' [anonymous] '. + $contrib{$idx.':screenname'}; } if ($seeid) { if ($hidden) { @@ -189,6 +195,10 @@ sub xmlend { $symb.':::'.$idx.'">Hide'; } } + } else { + if ($contrib{$idx.':screenname'}) { + $sender=''.$contrib{$idx.':screenname'}.''; + } } $discussion.='
'.$sender.' ('.
localtime($contrib{$idx.':timestamp'}).
@@ -316,44 +326,43 @@ sub fontsettings() {
sub registerurl {
my $forcereg=shift;
- if ($ENV{'request.publicaccess'}) {
+ my $target = shift;
+ my $result = '';
+ if (($ENV{'request.publicaccess'}) ||
+ ($ENV{'REQUEST_URI'} eq '/res/adm/pages/menu.html')) {
return
'';
}
if ($Apache::lonxml::registered && !$forcereg) { return ''; }
$Apache::lonxml::registered=1;
+ my $nothing='';
+ if ($ENV{'browser.type'} eq 'explorer') { $nothing='javascript:void(0);'; }
if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) {
my $hwkadd='';
- if ($ENV{'REQUEST_URI'}=~/\.(problem|exam|quiz|assess|survey|form)$/) {
+ if ($ENV{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form)$/) {
if (&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) {
$hwkadd.=(<
\n");
+ #&Apache::lonxml::debug("Calling sub $sub in $space $metamode");
$sub1="$space\:\:$sub";
($currentstring,$nodefault) = &$sub1($target,$token,$tagstack,
$parstack,$parser,$safeeval,
$style);
} else {
- #&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode
\n");
+ #&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode");
if ($metamode <1) {
if (defined($token->[4]) && ($metamode < 1)) {
$currentstring = $token->[4];
@@ -758,6 +827,11 @@ sub setup_globals {
$Apache::lonxml::metamode = 0;
$Apache::lonxml::evaluate = 0;
$Apache::lonxml::import = 0;
+ } elsif ($target eq 'analyze') {
+ $Apache::lonxml::redirection = 0;
+ $Apache::lonxml::metamode = 0;
+ $Apache::lonxml::evaluate = 1;
+ $Apache::lonxml::import = 1;
} else {
$Apache::lonxml::redirection = 0;
$Apache::lonxml::metamode = 0;
@@ -931,7 +1005,7 @@ sub get_all_text {
sub newparser {
my ($parser,$contentref,$dir) = @_;
- push (@$parser,HTML::TokeParser->new($contentref));
+ push (@$parser,HTML::LCParser->new($contentref));
$$parser['-1']->xml_mode('1');
if ( $dir eq '' ) {
push (@Apache::lonxml::pwd, $Apache::lonxml::pwd[$#Apache::lonxml::pwd]);
@@ -978,16 +1052,8 @@ sub writeallows {
#
sub afterburn {
my $result=shift;
- foreach (split(/&/,$ENV{'QUERY_STRING'})) {
- my ($name, $value) = split(/=/,$_);
- $value =~ tr/+/ /;
- $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
- if (($name eq 'highlight')||($name eq 'anchor')||($name eq 'link')) {
- unless ($ENV{'form.'.$name}) {
- $ENV{'form.'.$name}=$value;
- }
- }
- }
+ &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+ ['highlight','anchor','link']);
if ($ENV{'form.highlight'}) {
foreach (split(/\,/,$ENV{'form.highlight'})) {
my $anchorname=$_;
@@ -1049,19 +1115,23 @@ SIMPLECONTENT
sub inserteditinfo {
my ($result,$filecontents)=@_;
- $filecontents =~ s::</textarea>:ig;
+ $filecontents = &HTML::Entities::encode($filecontents);
# my $editheader='Edit below
';
+ my $buttons=(<
',@_)."
\n";
+ # If printing in construction space, put the error inside
+ print "ERROR:".join("\n",@_)."\n";
} else {
print "An Error occured while processing this resource. The instructor has been notified.
";
#notify author
@@ -1185,6 +1283,7 @@ sub get_param {
if ( ! $context ) { $context = -1; }
my $args ='';
if ( $#$parstack > (-2-$context) ) { $args=$$parstack[$context]; }
+ if ( ! $args ) { return undef; }
if ( $args =~ /my \$$param=\"/ ) {
return &Apache::run::run("{$args;".'return $'.$param.'}',$safeeval); #'
} else {