--- loncom/xml/lonxml.pm	2008/05/02 22:00:12	1.477
+++ loncom/xml/lonxml.pm	2009/10/04 03:42:42	1.484.4.3
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # XML Parser Module 
 #
-# $Id: lonxml.pm,v 1.477 2008/05/02 22:00:12 www Exp $
+# $Id: lonxml.pm,v 1.484.4.3 2009/10/04 03:42:42 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -361,8 +361,8 @@ sub xmlparse {
 				   $safeeval,\%style_for_target,1);
 
  if (@stack) {
-     &warning("At end of file some tags were still left unclosed, ".
-	      '<tt>&lt;'.join('&gt;</tt>, <tt>&lt;',reverse(@stack)).
+     &warning(&mt('At end of file some tags were still left unclosed:').
+	      ' <tt>&lt;'.join('&gt;</tt>, <tt>&lt;',reverse(@stack)).
 	      '&gt;</tt>');
  }
  if ($env{'request.uri'}) {
@@ -486,10 +486,10 @@ sub inner_xmlparse {
 	    while ($token->[1] ne $$stack['-1'] && ($#$stack > -1)) {
 		my $lasttag=$$stack[-1];
 		if ($token->[1] =~ /^\Q$lasttag\E$/i) {
-		    &Apache::lonxml::warning('Using tag &lt;/'.$token->[1].'&gt; on line '.$token->[3].' as end tag to &lt;'.$$stack[-1].'&gt;');
+		    &Apache::lonxml::warning(&mt('Using tag [_1] on line [_2] as end tag to [_3]','&lt;/'.$token->[1].'&gt;','.$token->[3].','&lt;'.$$stack[-1].'&gt;'));
 		    last;
 		} else {
-		    &Apache::lonxml::warning('Found tag &lt;/'.$token->[1].'&gt; on line '.$token->[3].' when looking for &lt;/'.$$stack[-1].'&gt; in file');
+                    &Apache::lonxml::warning(&mt('Found tag [_1] on line [_2] when looking for [_3] in file.','&lt;/'.$token->[1].'&gt;',$token->[3],'&lt;/'.$$stack[-1].'&gt;'));
 		    &end_tag($stack,$parstack,$token);
 		}
 	    }
@@ -658,6 +658,7 @@ sub setup_globals {
   $Apache::lonxml::request=$request;
   $errorcount=0;
   $warningcount=0;
+  $Apache::lonxml::internal_error=0;
   $Apache::lonxml::default_homework_loaded=0;
   $Apache::lonxml::usestyle=1;
   &init_counter();
@@ -718,6 +719,7 @@ sub init_safespace {
   $safeeval->permit(":base_math");
   $safeeval->permit("sort");
   $safeeval->permit("time");
+  $safeeval->permit("caller");
   $safeeval->deny("rand");
   $safeeval->deny("srand");
   $safeeval->deny(":base_io");
@@ -737,6 +739,9 @@ sub init_safespace {
   $safehole->wrap(\&Apache::caparesponse::capa_formula_fix,$safeeval,
 		  '&capa_formula_fix');
 
+  $safehole->wrap(\&Apache::lonlocal::locallocaltime,$safeeval,
+                  '&locallocaltime');
+
   $safehole->wrap(\&Math::Cephes::asin,$safeeval,'&asin');
   $safehole->wrap(\&Math::Cephes::acos,$safeeval,'&acos');
   $safehole->wrap(\&Math::Cephes::atan,$safeeval,'&atan');
@@ -1080,7 +1085,7 @@ Optional Arguments:
 
 sub increment_counter {
     my ($increment, $part_response) = @_;
-    if ($env{'form.grade_target'} eq 'analyze') { return; }
+    if ($env{'form.grade_noincrement'}) { return; }
     if (!defined($increment) || $increment le 0) {
 	$increment = 1;
     }
@@ -1447,7 +1452,7 @@ sub storefile {
         $fh->close();
         return 1;
     } else {
-	&warning("Unable to save file $file");
+	&warning(&mt('Unable to save file [_1]','<tt>'.$file.'</tt>'));
 	return 0;
     }
 }
@@ -1497,6 +1502,30 @@ sub verify_html {
     return '';
 }
 
+sub renderingoptions {
+    my %langchoices=('' => '');
+    foreach (&Apache::loncommon::languageids()) {
+        if (&Apache::loncommon::supportedlanguagecode($_)) {
+            $langchoices{&Apache::loncommon::supportedlanguagecode($_)}
+                       = &Apache::loncommon::plainlanguagedescription($_);
+        }
+    }
+    return
+       '<span class="LC_nobreak">'.
+       &mt('Language:').' '.
+       &Apache::loncommon::select_form($env{'form.languages'},'languages',
+                                                     %langchoices).'
+     </span>
+     <span class="LC_nobreak">'.
+       &mt('Math Rendering:').' '.
+       &Apache::loncommon::select_form($env{'form.texengine'},'texengine',
+                                                     ('' => '',
+                                                      'tth' => 'tth (TeX to HTML)',
+                                                      'jsMath' => 'jsMath',
+                                                      'mimetex' => 'mimetex (Convert to Images)')).'
+     </span>';
+}
+
 sub inserteditinfo {
       my ($filecontents, $filetype, $filename)=@_;
       $filecontents = &HTML::Entities::encode($filecontents,'<>&"');
@@ -1558,9 +1587,12 @@ FULLPAGE
       my $spelllink .=&Apache::lonhtmlcommon::spelllink('xmledit','filecont');
       my $textarea_events = &Apache::edit::element_change_detection();
       my $form_events     = &Apache::edit::form_change_detection();
-      my $htmlerror=&verify_html($filecontents);
-      if ($htmlerror) {
-         $htmlerror='<span class="LC_error">'.$htmlerror.'</span>';
+      my $htmlerror;
+      if ($filetype eq 'html') {
+          $htmlerror=&verify_html($filecontents);
+          if ($htmlerror) {
+              $htmlerror='<span class="LC_error">'.$htmlerror.'</span>';
+          }
       }
       my $editfooter=(<<ENDFOOTER);
 $initialize
@@ -1634,6 +1666,21 @@ sub handler {
 	$request->set_last_modified(&Apache::lonnet::metadata($request->uri,
 							      'lastrevisiondate'));
     }
+    # Embedded Flash movies (e.g., from Camtasia) served from https will not display in IE
+    #   if XML config file has expired from cache.
+    if ($ENV{'SERVER_PORT'} == 443) {
+        if ($request->uri =~ /\.xml$/) {
+            my ($httpbrowser,$clientbrowser) =
+                &Apache::loncommon::decode_user_agent($request);
+            if ($clientbrowser =~ /^explorer$/i) {
+                delete $request->headers_out->{'Cache-control'};
+                delete $request->headers_out->{'Pragma'};
+                my $expiration = time + 60;
+                my $date=strftime("%a, %d %b %Y %H:%M:%S GMT",gmtime($expiration));
+                $request->headers_out->set("Expires" => $date);
+            }
+        }
+    }
     $request->send_http_header;
     
     return OK if $request->header_only;
@@ -1800,6 +1847,8 @@ sub error {
 
     $errorcount++;
 
+    $Apache::lonxml::internal_error=1;
+
     if (defined($Apache::inputtags::part)) {
 	if ( @Apache::inputtags::response ) {
 	    push(@errors,
@@ -1816,15 +1865,17 @@ sub error {
     if ( &show_error_warn_msg() ) {
 	# If printing in construction space, put the error inside <pre></pre>
 	push(@Apache::lonxml::error_messages,
-	     $Apache::lonxml::warnings_error_header.
-             "<b>".&mt('ERROR:')."</b>".join("<br />\n",@errors)."<br />\n");
+	     $Apache::lonxml::warnings_error_header
+             .'<div class="LC_error">'
+             .'<b>'.&mt('ERROR:').' </b>'.join("<br />\n",@errors)
+             ."</div>\n");
 	$Apache::lonxml::warnings_error_header='';
     } else {
 	my $errormsg;
 	my ($symb)=&Apache::lonnet::symbread();
 	if ( !$symb ) {
 	    #public or browsers
-	    $errormsg=&mt("An error occured while processing this resource. The author has been notified.");
+	    $errormsg=&mt("An error occurred while processing this resource. The author has been notified.");
 	}
 	my $host=$Apache::lonnet::perlvar{'lonHostID'};
 	push(@errors,
@@ -1863,9 +1914,9 @@ sub error {
 		}
 	    }
 	    if ($env{'request.role.adv'}) {
-		$errormsg=&mt("An error occured while processing this resource. The course personnel ([_1]) and the author have been notified.",join(', ',@userlist));
+		$errormsg=&mt("An error occurred while processing this resource. The course personnel ([_1]) and the author have been notified.",join(', ',@userlist));
 	    } else {
-		$errormsg=&mt("An error occured while processing this resource. The instructor has been notified.");
+		$errormsg=&mt("An error occurred while processing this resource. The instructor has been notified.");
 	    }
 	}
 	push(@Apache::lonxml::error_messages,"<b>$errormsg</b> <br />");
@@ -1878,8 +1929,11 @@ sub warning {
     if ($env{'form.grade_target'} ne 'tex') {
 	if ( &show_error_warn_msg() ) {
 	    push(@Apache::lonxml::warning_messages,
-		 $Apache::lonxml::warnings_error_header.
-		 "<b>W</b>ARNING<b>:</b>".join('<br />',@_)."<br />\n");
+		 $Apache::lonxml::warnings_error_header
+                .'<div class="LC_warning">'
+                .&mt('[_1]W[_2]ARNING','<b>','</b>')."<b>:</b> ".join('<br />',@_)
+                ."</div>\n"
+                );
 	    $Apache::lonxml::warnings_error_header='';
 	}
     }