--- loncom/xml/lonxml.pm 2008/03/21 18:52:28 1.473.2.1 +++ 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.473.2.1 2008/03/21 18:52:28 raeburn 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, ". - '<'.join('>, <',reverse(@stack)). + &warning(&mt('At end of file some tags were still left unclosed:'). + ' <'.join('>, <',reverse(@stack)). '>'); } 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 </'.$token->[1].'> on line '.$token->[3].' as end tag to <'.$$stack[-1].'>'); + &Apache::lonxml::warning(&mt('Using tag [_1] on line [_2] as end tag to [_3]','</'.$token->[1].'>','.$token->[3].','<'.$$stack[-1].'>')); last; } else { - &Apache::lonxml::warning('Found tag </'.$token->[1].'> on line '.$token->[3].' when looking for </'.$$stack[-1].'> in file'); + &Apache::lonxml::warning(&mt('Found tag [_1] on line [_2] when looking for [_3] in file.','</'.$token->[1].'>',$token->[3],'</'.$$stack[-1].'>')); &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,6 +1085,7 @@ Optional Arguments: sub increment_counter { my ($increment, $part_response) = @_; + if ($env{'form.grade_noincrement'}) { return; } if (!defined($increment) || $increment le 0) { $increment = 1; } @@ -1121,7 +1127,7 @@ sub init_counter { } sub store_counter { - &Apache::lonnet::appenv(('form.counter' => $Apache::lonxml::counter)); + &Apache::lonnet::appenv({'form.counter' => $Apache::lonxml::counter}); $Apache::lonxml::counter_changed=0; return ''; } @@ -1142,7 +1148,7 @@ sub store_counter { sub restore_problem_counter { if (defined($state)) { - &Apache::lonnet::appenv(('form.counter' => $state)); + &Apache::lonnet::appenv({'form.counter' => $state}); } } sub get_problem_counter { @@ -1379,7 +1385,7 @@ sub writeallows { &Apache::lonnet::hreflocation($thisdir,&unescape($_))}=$thisurl; } @extlinks=(); - &Apache::lonnet::appenv(%httpref); + &Apache::lonnet::appenv(\%httpref); } sub register_ssi { @@ -1446,7 +1452,7 @@ sub storefile { $fh->close(); return 1; } else { - &warning("Unable to save file $file"); + &warning(&mt('Unable to save file [_1]',''.$file.'')); return 0; } } @@ -1496,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 + ''. + &mt('Language:').' '. + &Apache::loncommon::select_form($env{'form.languages'},'languages', + %langchoices).' + + '. + &mt('Math Rendering:').' '. + &Apache::loncommon::select_form($env{'form.texengine'},'texengine', + ('' => '', + 'tth' => 'tth (TeX to HTML)', + 'jsMath' => 'jsMath', + 'mimetex' => 'mimetex (Convert to Images)')).' + '; +} + sub inserteditinfo { my ($filecontents, $filetype, $filename)=@_; $filecontents = &HTML::Entities::encode($filecontents,'<>&"'); @@ -1557,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=''.$htmlerror.''; + my $htmlerror; + if ($filetype eq 'html') { + $htmlerror=&verify_html($filecontents); + if ($htmlerror) { + $htmlerror=''.$htmlerror.''; + } } my $editfooter=(<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; @@ -1761,7 +1809,8 @@ sub display_title { $title = $env{'request.filename'}; $title = substr($title, rindex($title, '/') + 1); } - $result = ""; + $result = ""; } return $result; } @@ -1798,6 +1847,8 @@ sub error { $errorcount++; + $Apache::lonxml::internal_error=1; + if (defined($Apache::inputtags::part)) { if ( @Apache::inputtags::response ) { push(@errors, @@ -1814,18 +1865,22 @@ sub error { if ( &show_error_warn_msg() ) { # If printing in construction space, put the error inside

 	push(@Apache::lonxml::error_messages,
-	     $Apache::lonxml::warnings_error_header.
-	     "ERROR:".join("
\n",@errors)."
\n"); + $Apache::lonxml::warnings_error_header + .'
' + .''.&mt('ERROR:').' '.join("
\n",@errors) + ."
\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, "The error occurred on host $host"); + push(@errors, + &mt("The error occurred on host [_1]", + "$host")); my $msg = join('
', @errors); @@ -1859,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,"$errormsg
"); @@ -1874,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. - "WARNING:".join('
',@_)."
\n"); + $Apache::lonxml::warnings_error_header + .'
' + .&mt('[_1]W[_2]ARNING','','').": ".join('
',@_) + ."
\n" + ); $Apache::lonxml::warnings_error_header=''; } }