--- loncom/xml/lonxml.pm 2001/07/12 15:26:03 1.101 +++ loncom/xml/lonxml.pm 2001/08/07 16:54:14 1.106 @@ -12,12 +12,15 @@ # 6/2,6/3,6/8,6/9 Gerd Kortemeyer # 6/12,6/13 H. K. Ng # 6/16 Gerd Kortemeyer +# 7/27 H. K. Ng +# 8/7 Gerd Kortemeyer package Apache::lonxml; use vars qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace); use strict; use HTML::TokeParser; +use HTML::TreeBuilder; use Safe; use Safe::Hole; use Math::Cephes qw(:trigs :hypers :bessels erf erfc); @@ -92,7 +95,31 @@ sub xmlbegin { } sub xmlend { - return ''; + my $discussion=''; + if ($ENV{'request.course.id'}) { + my $symb=&Apache::lonnet::symbread(); + if ($symb) { + my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'}, + $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, + $ENV{'course.'.$ENV{'request.course.id'}.'.num'}); + if ($contrib{'version'}) { + $discussion.= + '

Course Discussion of Resource

'; + my $idx; + for ($idx=1;$idx<=$contrib{'version'};$idx++) { + my $message=$contrib{$idx.':message'}; + $message=~s/\n/\
/g; + $discussion.='

'.$contrib{$idx.':sendername'}.' at '. + $contrib{$idx.':senderdomain'}.' ('. + localtime($contrib{$idx.':timestamp'}). + '):

'.$message. + '

'; + } + $discussion.='
'; + } + } + } + return $discussion.''; } sub fontsettings() { @@ -107,6 +134,7 @@ sub fontsettings() { sub registerurl { my $forcereg=shift; if ($Apache::lonxml::registered) { return ''; } + $Apache::lonxml::registered=1; if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) { my $hwkadd=''; if ($ENV{'REQUEST_URI'}=~/\.(problem|exam|quiz|assess|survey|form)$/) { @@ -255,6 +283,26 @@ sub xmlparse { return $finaloutput; } +sub htmlclean { + my $raw=shift; + + my $tree = HTML::TreeBuilder->new; + $tree->ignore_unknown(0); + + $tree->parse($raw); + my %emptyhash=(); + + my $output= $tree->as_HTML(undef,' ',\%emptyhash), "\n"; + + $output=~s/\<(br|hr|img)([^\>\/]*)\>/\<$1$2 \/\>/gis; + $output=~s/\<\/(br|hr|img)\>//gis; + $output=~s/\<[\/]*(body|head|html)\>//gis; + + $tree = $tree->delete; + + return $output; +} + sub inner_xmlparse { my ($target,$stack,$parstack,$pars,$safeeval,$style_for_target)=@_; &Apache::lonxml::debug('Reentrant parser starting, again?'); @@ -513,6 +561,7 @@ sub init_safespace { $safeeval->permit(":base_math"); $safeeval->permit("sort"); $safeeval->deny(":base_io"); + $safehole->wrap(\&Apache::scripttag::xmlparse,$safeeval,'&xmlparse'); $safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT'); $safehole->wrap(\&Math::Cephes::asin,$safeeval,'&asin');