--- loncom/xml/lonxml.pm 2006/10/17 15:11:37 1.423
+++ loncom/xml/lonxml.pm 2007/01/29 23:51:04 1.437
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# XML Parser Module
#
-# $Id: lonxml.pm,v 1.423 2006/10/17 15:11:37 albertel Exp $
+# $Id: lonxml.pm,v 1.437 2007/01/29 23:51:04 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -88,6 +88,7 @@ use Apache::loncommon();
use Apache::lonfeedback();
use Apache::lonmsg();
use Apache::loncacc();
+use Apache::lonmaxima();
use Apache::lonlocal;
#================================================== Main subroutine: xmlparse
@@ -342,6 +343,11 @@ sub xmlparse {
my $finaloutput = &inner_xmlparse($target,\@stack,\@parstack,\@pars,
$safeeval,\%style_for_target,1);
+ if (@stack) {
+ &warning("At end of file some tags were still left unclosed, ".
+ '<'.join('>, <',reverse(@stack)).
+ '>');
+ }
if ($env{'request.uri'}) {
&writeallows($env{'request.uri'});
}
@@ -669,6 +675,14 @@ sub init_safespace {
'&chem_standard_order');
$safehole->wrap(\&Apache::response::check_status,$safeeval,'&check_status');
+ $safehole->wrap(\&Apache::lonmaxima::maxima_eval,$safeeval,'&maxima_eval');
+ $safehole->wrap(\&Apache::lonmaxima::maxima_check,$safeeval,'&maxima_check');
+ $safehole->wrap(\&Apache::lonmaxima::maxima_cas_formula_fix,$safeeval,
+ '&maxima_cas_formula_fix');
+
+ $safehole->wrap(\&Apache::caparesponse::capa_formula_fix,$safeeval,
+ '&capa_formula_fix');
+
$safehole->wrap(\&Math::Cephes::asin,$safeeval,'&asin');
$safehole->wrap(\&Math::Cephes::acos,$safeeval,'&acos');
$safehole->wrap(\&Math::Cephes::atan,$safeeval,'&atan');
@@ -775,8 +789,8 @@ sub init_safespace {
$safehole->wrap(\&Apache::lonnet::logthis,$safeeval,'&LONCAPA_INTERNAL_LOGTHIS');
$safehole->wrap(\&Apache::inputtags::finalizeawards,$safeeval,'&LONCAPA_INTERNAL_FINALIZEAWARDS');
$safehole->wrap(\&Apache::caparesponse::get_sigrange,$safeeval,'&LONCAPA_INTERNAL_get_sigrange');
- use Data::Dumper;
- $safehole->wrap(\&Data::Dumper::Dumper,$safeeval,'&Dumper');
+# use Data::Dumper;
+# $safehole->wrap(\&Data::Dumper::Dumper,$safeeval,'&LONCAPA_INTERNAL_Dumper');
#need to inspect this class of ops
# $safeeval->deny(":base_orig");
$safeeval->permit("require");
@@ -1327,11 +1341,15 @@ FULLPAGE
my $cleanbut = '';
my $titledisplay=&display_title();
- my %lt=&Apache::lonlocal::texthash('st' => 'Save this',
- 'vi' => 'View',
+ my %lt=&Apache::lonlocal::texthash('st' => 'Save and Edit',
+ 'vi' => 'Save and View',
+ 'dv' => 'Discard Edits and View',
+ 'un' => 'undo',
'ed' => 'Edit');
my $buttons=(<
+
BUTTONS
@@ -1411,14 +1429,10 @@ sub handler {
#
# Edit action? Save file.
#
- unless ($env{'request.state'} eq 'published') {
- if ($env{'form.savethisfile'}) {
- if (&storefile($file,$env{'form.filecont'})) {
- &Apache::lonxml::info("".
- &mt('Updated').": ".
- &Apache::lonlocal::locallocaltime(time).
- " ");
- }
+ if (!($env{'request.state'} eq 'published')) {
+ if ($env{'form.savethisfile'} || $env{'form.viewmode'} || $env{'form.Undo'}) {
+ my $html_file=&Apache::lonnet::getfile($file);
+ my $error = &Apache::lonhomework::handle_save_or_undo($request, \$html_file, \$env{'form.filecont'});
}
}
my %mystyle;
@@ -1452,7 +1466,7 @@ ENDNOTFOUND
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
['editmode']);
}
- if (!$env{'form.editmode'} || $env{'form.viewmode'}) {
+ if (!$env{'form.editmode'} || $env{'form.viewmode'} || $env{'form.discardview'}) {
$result = &Apache::lonxml::xmlparse($request,$target,$filecontents,
'',%mystyle);
undef($Apache::lonhomework::parsing_a_task);
@@ -1466,7 +1480,8 @@ ENDNOTFOUND
# Edit action? Insert editing commands
#
unless ($env{'request.state'} eq 'published') {
- if ($env{'form.editmode'} && (!($env{'form.viewmode'}))) {
+ if ($env{'form.editmode'} && (!($env{'form.viewmode'})) && (!($env{'form.discardview'})))
+ {
my $displayfile=$request->uri;
$displayfile=~s/^\/[^\/]*//;
my %options = ();
@@ -1556,6 +1571,7 @@ sub error {
my $cdom=$env{'course.'.$env{'request.course.id'}.'.domain'};
my (undef,%users)=&Apache::lonfeedback::decide_receiver(undef,0,1,1,1);
my $declutter=&Apache::lonnet::declutter($env{'request.filename'});
+ my $baseurl = &Apache::lonnet::clutter($declutter);
my @userlist;
foreach (keys %users) {
my ($user,$domain) = split(/:/, $_);
@@ -1566,8 +1582,11 @@ sub error {
$cdom,$cnum);
my $now=time;
if ($now-$lastnotified{$key}>86400) {
+ my $title = &Apache::lonnet::gettitle($symb);
+ my $sentmessage;
&Apache::lonmsg::user_normal_msg($user,$domain,
- "Error [$declutter]",$msg);
+ "Error [$title]",$msg,'',$baseurl,'','',
+ \$sentmessage,$symb,$title,1);
&Apache::lonnet::put('nohist_xmlerrornotifications',
{$key => $now},
$cdom,$cnum);
@@ -1687,13 +1706,13 @@ sub register_insert {
my ($tag,$descrip,$color,$function,$show,$helpfile,$helpdesc) = split(/,/, $line);
if ($tag) {
$insertlist{"$tagnum.tag"} = $tag;
- $insertlist{"$tagnum.description"} = $descrip;
- $insertlist{"$tagnum.color"} = $color;
- $insertlist{"$tagnum.function"} = $function;
+ $insertlist{"$tag.description"} = $descrip;
+ $insertlist{"$tag.color"} = $color;
+ $insertlist{"$tag.function"} = $function;
if (!defined($show)) { $show='yes'; }
- $insertlist{"$tagnum.show"}= $show;
- $insertlist{"$tagnum.helpfile"} = $helpfile;
- $insertlist{"$tagnum.helpdesc"} = $helpdesc;
+ $insertlist{"$tag.show"}= $show;
+ $insertlist{"$tag.helpfile"} = $helpfile;
+ $insertlist{"$tag.helpdesc"} = $helpdesc;
$insertlist{"$tag.num"}=$tagnum;
$tagnum++;
}
@@ -1707,7 +1726,7 @@ sub register_insert {
for (my $j=0;$j <=$#which;$j++) {
if ( $which[$j] eq 'Y' ) {
if ($insertlist{"$j.show"} ne 'no') {
- push(@{ $insertlist{"$tag.which"} },$j);
+ push(@{ $insertlist{"$tag.which"} },$insertlist{"$j.tag"});
}
}
}
@@ -1716,30 +1735,31 @@ sub register_insert {
}
sub description {
- my ($token)=@_;
- my $tagnum;
- my $tag=$token->[1];
- foreach my $namespace (reverse @Apache::lonxml::namespace) {
- my $testtag=$namespace.'::'.$tag;
- $tagnum=$insertlist{"$testtag.num"};
- if (defined($tagnum)) { last; }
- }
- if (!defined ($tagnum)) { $tagnum=$Apache::lonxml::insertlist{"$tag.num"}; }
- return $insertlist{$tagnum.'.description'};
+ my ($token)=@_;
+ my $tag = &get_tag($token);
+ return $insertlist{$tag.'.description'};
}
# Returns a list containing the help file, and the description
sub helpinfo {
- my ($token)=@_;
- my $tagnum;
- my $tag=$token->[1];
- foreach my $namespace (reverse @Apache::lonxml::namespace) {
- my $testtag=$namespace.'::'.$tag;
- $tagnum=$insertlist{"$testtag.num"};
- if (defined($tagnum)) { last; }
- }
- if (!defined ($tagnum)) { $tagnum=$Apache::lonxml::insertlist{"$tag.num"}; }
- return ($insertlist{$tagnum.'.helpfile'}, $insertlist{$tagnum.'.helpdesc'});
+ my ($token)=@_;
+ my $tag = &get_tag($token);
+ return ($insertlist{$tag.'.helpfile'}, $insertlist{$tag.'.helpdesc'});
+}
+
+sub get_tag {
+ my ($token)=@_;
+ my $tagnum;
+ my $tag=$token->[1];
+ foreach my $namespace (reverse(@Apache::lonxml::namespace)) {
+ my $testtag = $namespace.'::'.$tag;
+ $tagnum = $insertlist{"$testtag.num"};
+ last if (defined($tagnum));
+ }
+ if (!defined($tagnum)) {
+ $tagnum = $Apache::lonxml::insertlist{"$tag.num"};
+ }
+ return $insertlist{"$tagnum.tag"};
}
1;