--- loncom/xml/lonxml.pm 2003/09/08 19:00:09 1.274 +++ loncom/xml/lonxml.pm 2003/10/02 05:45:38 1.283 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # XML Parser Module # -# $Id: lonxml.pm,v 1.274 2003/09/08 19:00:09 albertel Exp $ +# $Id: lonxml.pm,v 1.283 2003/10/02 05:45:38 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -105,6 +105,7 @@ use Apache::loncommon(); use Apache::lonfeedback(); use Apache::lonmsg(); use Apache::loncacc(); +use Apache::lonlocal; #================================================== Main subroutine: xmlparse #debugging control, to turn on debugging modify the correct handler @@ -159,6 +160,12 @@ $Apache::lonxml::usestyle=1; $Apache::lonxml::style_values=''; $Apache::lonxml::style_end_values=''; +#array of ssi calls that need to occur after we are done parsing +@Apache::lonxml::ssi_info=(); + +#should we do the postag variable interpolation +$Apache::lonxml::post_evaluate=1; + sub xmlbegin { my $output=''; if ($ENV{'browser.mathml'}) { @@ -175,113 +182,13 @@ sub xmlbegin { } sub xmlend { - my ($discussiononly,$symb)=@_; - my $discussion=''; - if ($ENV{'request.course.id'}) { - my $crs='/'.$ENV{'request.course.id'}; - if ($ENV{'request.course.sec'}) { - $crs.='_'.$ENV{'request.course.sec'}; - } - $crs=~s/\_/\//g; - my $seeid=&Apache::lonnet::allowed('rin',$crs); - unless ($symb) { - $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'}) { - unless ($discussiononly) { - $discussion.= - '

'; - } - my $idx; - for ($idx=1;$idx<=$contrib{'version'};$idx++) { - my $hidden=($contrib{'hidden'}=~/\.$idx\./); - my $deleted=($contrib{'deleted'}=~/\.$idx\./); - unless ((($hidden) && (!$seeid)) || ($deleted)) { - my $message=$contrib{$idx.':message'}; - $message=~s/\n/\
/g; - $message=&Apache::lontexconvert::msgtexconverted($message); - if ($contrib{$idx.':attachmenturl'}) { - my ($fname,$ft) - =($contrib{$idx.':attachmenturl'}=~/\/(\w+)\.(\w+)$/); - $message.='

Attachment: '.$fname.'.'.$ft.''; - } - if ($message) { - if ($hidden) { - $message=''.$message.''; - } - my $screenname=&Apache::loncommon::screenname( - $contrib{$idx.':sendername'}, - $contrib{$idx.':senderdomain'}); - my $plainname=&Apache::loncommon::nickname( - $contrib{$idx.':sendername'}, - $contrib{$idx.':senderdomain'}); - - my $sender='Anonymous'; - if ((!$contrib{$idx.':anonymous'}) || ($seeid)) { - $sender=&Apache::loncommon::aboutmewrapper( - $plainname, - $contrib{$idx.':sendername'}, - $contrib{$idx.':senderdomain'}).' ('. - $contrib{$idx.':sendername'}.' at '. - $contrib{$idx.':senderdomain'}.')'; - if ($contrib{$idx.':anonymous'}) { - $sender.=' [anonymous] '. - $screenname; - } - if ($seeid) { - if ($hidden) { - $sender.=' Make Visible'; - } else { - $sender.=' Hide'; - } - $sender.=' Delete'; - } - } else { - if ($screenname) { - $sender=''.$screenname.''; - } - } - $discussion.='

'.$sender.' ('. - localtime($contrib{$idx.':timestamp'}). - '):

'.$message. - '

'; - } - } - } - unless ($discussiononly) { - $discussion.='
'; - } - } - if ($discussiononly) { - $discussion.=(< - - - - -
-Note: in anonymous discussion, your name is visible only to -course faculty
- -

-Attachment (128 KB max size): -

- -ENDDISCUSS - $discussion.=&Apache::lonfeedback::generate_preview_button(); - } - } + my $mode='xml'; + my $status='OPEN'; + if ($Apache::lonhomework::parsing_a_problem) { + $mode='problem'; + $status=$Apache::inputtags::status[-1]; } - return $discussion.($discussiononly?'':''); + return &Apache::lonfeedback::list_discussion().''; } sub tokeninputfield { @@ -452,6 +359,7 @@ sub xmlparse { if ($ENV{'request.uri'}) { &writeallows($ENV{'request.uri'}); } + &do_registered_ssi(); if ($Apache::lonxml::counter_changed) { &store_counter() } return $finaloutput; } @@ -572,7 +480,7 @@ sub inner_xmlparse { &Apache::lonxml::error("Unknown token event :$token->[0]:$token->[1]:"); } #evaluate variable refs in result - if ($result ne "") { + if ($Apache::lonxml::post_evaluate &&$result ne "") { my $extras; if (!$Apache::lonxml::usestyle) { $extras=$Apache::lonxml::style_values; @@ -583,6 +491,8 @@ sub inner_xmlparse { $result= &Apache::run::evaluate($result,$safeeval,$extras); } } + $Apache::lonxml::post_evaluate=1; + if (($token->[0] eq 'T') || ($token->[0] eq 'C') || ($token->[0] eq 'D') ) { #Style file definitions should be correct if ($target eq 'tex' && ($Apache::lonxml::usestyle)) { @@ -591,9 +501,9 @@ sub inner_xmlparse { } # Encode any high ASCII characters - if (!$Apache::lonxml::prevent_entity_encode) { - $result=&HTML::Entities::encode($result,"\200-\377"); - } +# if (!$Apache::lonxml::prevent_entity_encode) { +# $result=&HTML::Entities::encode($result,"\200-\377"); +# } if ($Apache::lonxml::redirection) { $Apache::lonxml::outputstack['-1'] .= $result; } else { @@ -702,6 +612,8 @@ sub setup_globals { &init_counter(); @Apache::lonxml::pwd=(); @Apache::lonxml::extlinks=(); + @Apache::lonxml::ssi_info=(); + $Apache::lonxml::post_evaluate=1; if ($target eq 'meta') { $Apache::lonxml::redirection = 0; $Apache::lonxml::metamode = 1; @@ -892,7 +804,7 @@ sub decreasedepth { $Apache::lonxml::olddepth=$Apache::lonxml::depth+1; } if ( $Apache::lonxml::depth < -1) { - &Apache::lonxml::warning("Missing tags, unable to properly run file."); + &Apache::lonxml::warning(&mt("Missing tags, unable to properly run file.")); $Apache::lonxml::depth='-1'; } my $curdepth=join('_',@Apache::lonxml::depthcounter); @@ -955,17 +867,13 @@ sub store_counter { sub get_all_text { my($tag,$pars,$style)= @_; - &Apache::lonxml::debug("Got a ".ref($pars)); my $gotfullstack=1; if (ref($pars) ne 'ARRAY') { $gotfullstack=0; $pars=[$pars]; } - &Apache::lonxml::debug("Got a ".ref($style)); if (ref($style) ne 'HASH') { $style={}; - } else { - &Apache::lonhomework::showhash(%$style); } my $depth=0; my $token; @@ -989,7 +897,7 @@ sub get_all_text { } elsif ($token->[0] eq 'E') { if ( $token->[1] =~ /^$tag$/i) { $depth--; } #skip sending back the last end tag - if ($depth == 0 && exists($$style{'/'.$token->[1]})) { + if ($depth == 0 && exists($$style{'/'.$token->[1]}) && $Apache::lonxml::usestyle) { my $string= ''. $$style{'/'.$token->[1]}. @@ -1097,6 +1005,19 @@ sub writeallows { &Apache::lonnet::appenv(%httpref); } +sub register_ssi { + my ($url,%form)=@_; + push (@Apache::lonxml::ssi_info,{'url'=>$url,'form'=>\%form}); + return ''; +} + +sub do_registered_ssi { + foreach my $info (@Apache::lonxml::ssi_info) { + my %form=%{ $info->{'form'}}; + my $url=$info->{'url'}; + &Apache::lonnet::ssi($url,%form); + } +} # # Afterburner handles anchors, highlights and links # @@ -1187,21 +1108,24 @@ sub inserteditinfo { } my $cleanbut = ''; if ($filetype eq 'html') { - $cleanbut=''; + $cleanbut=''; } my $titledisplay=&display_title(); + my %lt=&Apache::lonlocal::texthash('st' => 'Save this', + 'vi' => 'View', + 'ed' => 'Edit'); my $buttons=(< - + + BUTTONS my $editfooter=(<
$xml_help - + $buttons

$buttons @@ -1249,9 +1173,9 @@ sub handler { $Apache::lonxml::debug=$ENV{'user.debug'}; if ($ENV{'browser.mathml'}) { - $request->content_type('text/xml'); + &Apache::loncommon::content_type($request,'text/xml'); } else { - $request->content_type('text/html'); + &Apache::loncommon::content_type($request,'text/html'); } &Apache::loncommon::no_cache($request); $request->send_http_header;