--- loncom/xml/lonxml.pm	2006/11/23 02:26:43	1.426
+++ loncom/xml/lonxml.pm	2006/12/24 22:13:20	1.434
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # XML Parser Module 
 #
-# $Id: lonxml.pm,v 1.426 2006/11/23 02:26:43 banghart Exp $
+# $Id: lonxml.pm,v 1.434 2006/12/24 22:13:20 raeburn 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  
@@ -674,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');
@@ -780,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,'&LONCAPA_INTERNAL_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");
@@ -1334,9 +1343,13 @@ FULLPAGE
       my $titledisplay=&display_title();
       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);
 $cleanbut
+<input type="submit" name="discardview" accesskey="d"  value="$lt{'dv'}" />
+<input type="submit" name="Undo" accesskey="u"  value="$lt{'un'}" /><hr>
 <input type="submit" name="savethisfile" accesskey="s"  value="$lt{'st'}" />
 <input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" />
 BUTTONS
@@ -1416,14 +1429,10 @@ sub handler {
 #
 # Edit action? Save file.
 #
-    unless ($env{'request.state'} eq 'published') {
-	if ($env{'form.savethisfile'} || $env{'form.viewmode'}) {
-	    if (&storefile($file,$env{'form.filecont'})) {
-		&Apache::lonxml::info("<font COLOR=\"#0000FF\">".
-				      &mt('Updated').": ".
-				      &Apache::lonlocal::locallocaltime(time).
-				      " </font>");
-	    } 
+    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;
@@ -1457,7 +1466,8 @@ ENDNOTFOUND
             &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
 						    ['editmode']);
 	}
-	if (!$env{'form.editmode'} || $env{'form.viewmode'}) {
+	&Apache::lonnet::logthis("edit mode is ".$env{'form.editmode'});
+	if (!$env{'form.editmode'} || $env{'form.viewmode'} || $env{'form.discardview'}) {
 	    $result = &Apache::lonxml::xmlparse($request,$target,$filecontents,
 						'',%mystyle);
 	    undef($Apache::lonhomework::parsing_a_task);
@@ -1471,7 +1481,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 = ();
@@ -1571,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,'','','','',
+                        \$sentmessage,$symb,$title,1);
 		    &Apache::lonnet::put('nohist_xmlerrornotifications',
 					 {$key => $now},
 					 $cdom,$cnum);