--- loncom/xml/lonxml.pm	2003/09/19 20:29:29	1.279
+++ loncom/xml/lonxml.pm	2003/11/06 19:24:11	1.291
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # XML Parser Module 
 #
-# $Id: lonxml.pm,v 1.279 2003/09/19 20:29:29 albertel Exp $
+# $Id: lonxml.pm,v 1.291 2003/11/06 19:24:11 sakharuk Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -96,6 +96,7 @@ use Apache::style();
 use Apache::run();
 use Apache::londefdef();
 use Apache::scripttag();
+use Apache::languagetags();
 use Apache::edit();
 use Apache::inputtags();
 use Apache::outputtags();
@@ -105,6 +106,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 +161,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'}) {
@@ -273,13 +281,13 @@ sub printtokenheader {
         my %idhash=&Apache::lonnet::idrget($tudom,($tuname));
 	return 
  '<img align="right" src="/cgi-bin/barcode.png?encode='.$token.'" />'.
-               'Checked out for '.$plainname.
-               '<br />User: '.$tuname.' at '.$tudom.
-	       '<br />ID: '.$idhash{$tuname}.
-	       '<br />CourseID: '.$tcrsid.
-	       '<br />Course: '.$ENV{'course.'.$tcrsid.'.description'}.
-               '<br />DocID: '.$token.
-               '<br />Time: '.localtime().'<hr />';
+               &mt('Checked out for').' '.$plainname.
+               '<br />'.&mt('User').': '.$tuname.' at '.$tudom.
+	       '<br />'.&mt('ID').': '.$idhash{$tuname}.
+	       '<br />'.&mt('CourseID').': '.$tcrsid.
+	       '<br />'.&mt('Course').': '.$ENV{'course.'.$tcrsid.'.description'}.
+               '<br />'.&mt('DocID').': '.$token.
+               '<br />'.&mt('Time').': '.&Apache::lonlocal::locallocaltime().'<hr />';
     } else {
         return $token;
     }
@@ -312,6 +320,7 @@ sub xmlparse {
  &Apache::inputtags::initialize_inputtags();
  &Apache::outputtags::initialize_outputtags();
  &Apache::edit::initialize_edit();
+ &Apache::londefdef::initialize_londefdef();
 
 #
 # do we have a course style file?
@@ -328,6 +337,13 @@ sub xmlparse {
                           &Apache::style::styleparser($target,$styletext));
        }
     }
+ } elsif ($ENV{'construction_space_style'} && ($ENV{'request.state'} eq 'construct')) {
+     my $location=&Apache::lonnet::filelocation('',$ENV{'construction_space_style'});
+     my $styletext=&Apache::lonnet::getfile($location);
+       if ($styletext ne '-1') {
+          %style_for_target = (%style_for_target,
+                          &Apache::style::styleparser($target,$styletext));
+      }
  }
 #&printalltags();
  my @pars = ();
@@ -352,6 +368,7 @@ sub xmlparse {
  if ($ENV{'request.uri'}) {
     &writeallows($ENV{'request.uri'});
  }
+ &do_registered_ssi();
  if ($Apache::lonxml::counter_changed) { &store_counter() }
  return $finaloutput;
 }
@@ -385,7 +402,7 @@ sub latex_special_symbols {
 	$string =~ s/_/ /g;
     } else {
 	$string=~s/\\ /\\char92 /g;
-	$string=~s/\^/\\char94 /g;
+	$string=~s/\^/\\\^ /g;
 	$string=~s/\~/\\char126 /g;
 	$string=~s/(&[^A-Za-z\#])/\\$1/g;
 	$string=~s/([^&])\#/$1\\#/g;
@@ -472,7 +489,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;
@@ -483,6 +500,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)) {
@@ -602,6 +621,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;
@@ -645,6 +666,7 @@ sub init_safespace {
   $safeeval->permit("entereval");
   $safeeval->permit(":base_math");
   $safeeval->permit("sort");
+  $safeeval->permit("time");
   $safeeval->deny(":base_io");
   $safehole->wrap(\&Apache::scripttag::xmlparse,$safeeval,'&xmlparse');
   $safehole->wrap(\&Apache::outputtags::multipart,$safeeval,'&multipart');
@@ -792,7 +814,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);
@@ -855,17 +877,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;
@@ -889,7 +907,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=
 			    '<LONCAPA_INTERNAL_TURN_STYLE_OFF end="yes" />'.
 				$$style{'/'.$token->[1]}.
@@ -997,6 +1015,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
 #
@@ -1036,6 +1067,7 @@ ENDSCRIPT
 
 sub storefile {
     my ($file,$contents)=@_;
+    &Apache::lonnet::correct_line_ends(\$contents);
     if (my $fh=Apache::File->new('>'.$file)) {
 	print $fh $contents;
         $fh->close();
@@ -1087,21 +1119,24 @@ sub inserteditinfo {
       }
       my $cleanbut = '';
       if ($filetype eq 'html') {
-	  $cleanbut='<input type="submit" name="attemptclean" 
-                       value="Save and then attempt to clean HTML" />';
+	  $cleanbut='<input type="submit" name="attemptclean" value="'.
+	      &mt('Save and then attempt to clean HTML').'" />';
       }
       my $titledisplay=&display_title();
+      my %lt=&Apache::lonlocal::texthash('st' => 'Save this',
+					 'vi' => 'View',
+					 'ed' => 'Edit');
       my $buttons=(<<BUTTONS);
 $cleanbut
-<input type="submit" name="savethisfile" value="Save this" />
-<input type="submit" name="viewmode" value="View" />
+<input type="submit" name="savethisfile" value="$lt{'st'}" />
+<input type="submit" name="viewmode" value="$lt{'vi'}" />
 BUTTONS
       my $editfooter=(<<ENDFOOTER);
 <hr />
 <a name="editsection" />
 <form method="post">
 $xml_help
-<input type="hidden" name="editmode" value="Edit" />
+<input type="hidden" name="editmode" value="$lt{'ed'}" />
 $buttons<br />
 <textarea cols="80" rows="40" name="filecont">$filecontents</textarea>
 <br />$buttons
@@ -1149,9 +1184,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;
@@ -1172,7 +1207,8 @@ sub handler {
     unless ($ENV{'request.state'} eq 'published') {
 	if (($ENV{'form.savethisfile'}) || ($ENV{'form.attemptclean'})) {
 	    if (&storefile($file,$ENV{'form.filecont'})) {
-		$request->print("<font COLOR=\"#0000FF\">Updated: ". strftime("%d %b %H:%M:%S",localtime())." </font>");
+		$request->print("<font COLOR=\"#0000FF\">".&mt('Updated').": ".
+&Apache::lonlocal::locallocaltime(time)." </font>");
 	    } 
 	}
     }
@@ -1180,13 +1216,15 @@ sub handler {
     my $result = '';
     my $filecontents=&Apache::lonnet::getfile($file);
     if ($filecontents eq -1) {
+	my $bodytag=&Apache::loncommon::bodytag('File Error');
+	my $fnf=&mt('File not found');
 	$result=(<<ENDNOTFOUND);
 <html>
 <head>
-<title>File not found</title>
+<title>$fnf</title>
 </head>
-<body bgcolor="#FFFFFF">
-<b>File not found: $file</b>
+$bodytag
+<b>$fnf: $file</b>
 </body>
 </html>
 ENDNOTFOUND