version 1.471, 2008/02/15 12:59:50
|
version 1.499, 2009/10/04 03:36:08
|
Line 37
|
Line 37
|
# to any other parties under any circumstances. |
# to any other parties under any circumstances. |
# |
# |
|
|
|
=pod |
|
|
|
=head1 NAME |
|
|
|
Apache::lonxml |
|
|
|
=head1 SYNOPSIS |
|
|
|
XML Parsing Module |
|
|
|
This is part of the LearningOnline Network with CAPA project |
|
described at http://www.lon-capa.org. |
|
|
|
|
|
=head1 SUBROUTINES |
|
|
|
=cut |
|
|
|
|
|
|
package Apache::lonxml; |
package Apache::lonxml; |
use vars |
use vars |
Line 90 use Apache::lonfeedback();
|
Line 109 use Apache::lonfeedback();
|
use Apache::lonmsg(); |
use Apache::lonmsg(); |
use Apache::loncacc(); |
use Apache::loncacc(); |
use Apache::lonmaxima(); |
use Apache::lonmaxima(); |
|
use Apache::lonr(); |
use Apache::lonlocal; |
use Apache::lonlocal; |
|
|
#==================================== Main subroutine: xmlparse |
#==================================== Main subroutine: xmlparse |
Line 361 sub xmlparse {
|
Line 381 sub xmlparse {
|
$safeeval,\%style_for_target,1); |
$safeeval,\%style_for_target,1); |
|
|
if (@stack) { |
if (@stack) { |
&warning("At end of file some tags were still left unclosed, ". |
&warning(&mt('At end of file some tags were still left unclosed:'). |
'<tt><'.join('></tt>, <tt><',reverse(@stack)). |
' <tt><'.join('></tt>, <tt><',reverse(@stack)). |
'></tt>'); |
'></tt>'); |
} |
} |
if ($env{'request.uri'}) { |
if ($env{'request.uri'}) { |
Line 379 sub xmlparse {
|
Line 399 sub xmlparse {
|
} |
} |
&init_state(); |
&init_state(); |
if ($env{'form.return_only_error_and_warning_counts'}) { |
if ($env{'form.return_only_error_and_warning_counts'}) { |
|
if ($env{'request.filename'}=~/\.(html|htm|xml)$/i) { |
|
my $error=&verify_html($content_file_string); |
|
if ($error) { $errorcount++; } |
|
} |
return "$errorcount:$warningcount"; |
return "$errorcount:$warningcount"; |
} |
} |
return $finaloutput; |
return $finaloutput; |
Line 482 sub inner_xmlparse {
|
Line 506 sub inner_xmlparse {
|
while ($token->[1] ne $$stack['-1'] && ($#$stack > -1)) { |
while ($token->[1] ne $$stack['-1'] && ($#$stack > -1)) { |
my $lasttag=$$stack[-1]; |
my $lasttag=$$stack[-1]; |
if ($token->[1] =~ /^\Q$lasttag\E$/i) { |
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; |
last; |
} else { |
} 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); |
&end_tag($stack,$parstack,$token); |
} |
} |
} |
} |
Line 501 sub inner_xmlparse {
|
Line 525 sub inner_xmlparse {
|
if (!$Apache::lonxml::usestyle) { |
if (!$Apache::lonxml::usestyle) { |
$extras=$Apache::lonxml::style_values; |
$extras=$Apache::lonxml::style_values; |
} |
} |
if ( $#$parstack > -1 ) { |
if ( $#$parstack > -1 ) { |
$result=&Apache::run::evaluate($result,$safeeval,$extras.$$parstack[-1]); |
$result=&Apache::run::evaluate($result,$safeeval,$extras.$$parstack[-1]); |
} else { |
} else { |
$result= &Apache::run::evaluate($result,$safeeval,$extras); |
$result= &Apache::run::evaluate($result,$safeeval,$extras); |
} |
} |
} |
} |
$Apache::lonxml::post_evaluate=1; |
$Apache::lonxml::post_evaluate=1; |
|
|
Line 654 sub setup_globals {
|
Line 678 sub setup_globals {
|
$Apache::lonxml::request=$request; |
$Apache::lonxml::request=$request; |
$errorcount=0; |
$errorcount=0; |
$warningcount=0; |
$warningcount=0; |
|
$Apache::lonxml::internal_error=0; |
$Apache::lonxml::default_homework_loaded=0; |
$Apache::lonxml::default_homework_loaded=0; |
$Apache::lonxml::usestyle=1; |
$Apache::lonxml::usestyle=1; |
&init_counter(); |
&init_counter(); |
Line 714 sub init_safespace {
|
Line 739 sub init_safespace {
|
$safeeval->permit(":base_math"); |
$safeeval->permit(":base_math"); |
$safeeval->permit("sort"); |
$safeeval->permit("sort"); |
$safeeval->permit("time"); |
$safeeval->permit("time"); |
|
$safeeval->permit("caller"); |
$safeeval->deny("rand"); |
$safeeval->deny("rand"); |
$safeeval->deny("srand"); |
$safeeval->deny("srand"); |
$safeeval->deny(":base_io"); |
$safeeval->deny(":base_io"); |
Line 730 sub init_safespace {
|
Line 756 sub init_safespace {
|
$safehole->wrap(\&Apache::lonmaxima::maxima_cas_formula_fix,$safeeval, |
$safehole->wrap(\&Apache::lonmaxima::maxima_cas_formula_fix,$safeeval, |
'&maxima_cas_formula_fix'); |
'&maxima_cas_formula_fix'); |
|
|
|
$safehole->wrap(\&Apache::lonr::r_eval,$safeeval,'&r_eval'); |
|
$safehole->wrap(\&Apache::lonr::Rentry,$safeeval,'&Rentry'); |
|
$safehole->wrap(\&Apache::lonr::Rarray,$safeeval,'&Rarray'); |
|
$safehole->wrap(\&Apache::lonr::r_check,$safeeval,'&r_check'); |
|
$safehole->wrap(\&Apache::lonr::r_cas_formula_fix,$safeeval, |
|
'&r_cas_formula_fix'); |
|
|
$safehole->wrap(\&Apache::caparesponse::capa_formula_fix,$safeeval, |
$safehole->wrap(\&Apache::caparesponse::capa_formula_fix,$safeeval, |
'&capa_formula_fix'); |
'&capa_formula_fix'); |
|
|
|
$safehole->wrap(\&Apache::lonlocal::locallocaltime,$safeeval, |
|
'&locallocaltime'); |
|
|
$safehole->wrap(\&Math::Cephes::asin,$safeeval,'&asin'); |
$safehole->wrap(\&Math::Cephes::asin,$safeeval,'&asin'); |
$safehole->wrap(\&Math::Cephes::acos,$safeeval,'&acos'); |
$safehole->wrap(\&Math::Cephes::acos,$safeeval,'&acos'); |
$safehole->wrap(\&Math::Cephes::atan,$safeeval,'&atan'); |
$safehole->wrap(\&Math::Cephes::atan,$safeeval,'&atan'); |
Line 1007 sub get_id {
|
Line 1043 sub get_id {
|
my ($parstack,$safeeval)=@_; |
my ($parstack,$safeeval)=@_; |
my $id= &Apache::lonxml::get_param('id',$parstack,$safeeval); |
my $id= &Apache::lonxml::get_param('id',$parstack,$safeeval); |
if ($env{'request.state'} eq 'construct' && $id =~ /([._]|[^\w\d\s[:punct:]])/) { |
if ($env{'request.state'} eq 'construct' && $id =~ /([._]|[^\w\d\s[:punct:]])/) { |
&error(&mt("ID "[_1]" contains invalid characters, IDs are only allowed to contain letters, numbers, spaces and -",'<tt>'.$id.'</tt>')); |
&error(&mt('ID [_1] contains invalid characters. IDs are only allowed to contain letters, numbers, spaces and -','"<tt>'.$id.'</tt>"')); |
} |
} |
if ($id =~ /^\s*$/) { $id = $Apache::lonxml::curdepth; } |
if ($id =~ /^\s*$/) { $id = $Apache::lonxml::curdepth; } |
return $id; |
return $id; |
Line 1076 Optional Arguments:
|
Line 1112 Optional Arguments:
|
|
|
sub increment_counter { |
sub increment_counter { |
my ($increment, $part_response) = @_; |
my ($increment, $part_response) = @_; |
|
if ($env{'form.grade_noincrement'}) { return; } |
if (!defined($increment) || $increment le 0) { |
if (!defined($increment) || $increment le 0) { |
$increment = 1; |
$increment = 1; |
} |
} |
Line 1117 sub init_counter {
|
Line 1154 sub init_counter {
|
} |
} |
|
|
sub store_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; |
$Apache::lonxml::counter_changed=0; |
return ''; |
return ''; |
} |
} |
Line 1138 sub store_counter {
|
Line 1175 sub store_counter {
|
|
|
sub restore_problem_counter { |
sub restore_problem_counter { |
if (defined($state)) { |
if (defined($state)) { |
&Apache::lonnet::appenv(('form.counter' => $state)); |
&Apache::lonnet::appenv({'form.counter' => $state}); |
} |
} |
} |
} |
sub get_problem_counter { |
sub get_problem_counter { |
Line 1375 sub writeallows {
|
Line 1412 sub writeallows {
|
&Apache::lonnet::hreflocation($thisdir,&unescape($_))}=$thisurl; |
&Apache::lonnet::hreflocation($thisdir,&unescape($_))}=$thisurl; |
} |
} |
@extlinks=(); |
@extlinks=(); |
&Apache::lonnet::appenv(%httpref); |
&Apache::lonnet::appenv(\%httpref); |
} |
} |
|
|
sub register_ssi { |
sub register_ssi { |
Line 1442 sub storefile {
|
Line 1479 sub storefile {
|
$fh->close(); |
$fh->close(); |
return 1; |
return 1; |
} else { |
} else { |
&warning("Unable to save file $file"); |
&warning(&mt('Unable to save file [_1]','<tt>'.$file.'</tt>')); |
return 0; |
return 0; |
} |
} |
} |
} |
Line 1475 SIMPLECONTENT
|
Line 1512 SIMPLECONTENT
|
return $filecontents; |
return $filecontents; |
} |
} |
|
|
|
sub createnewjs { |
|
my $filecontents=(<<SIMPLECONTENT); |
|
<script type="text/javascript" language="Javascript"> |
|
|
|
</script> |
|
SIMPLECONTENT |
|
return $filecontents; |
|
} |
|
|
|
sub verify_html { |
|
my ($filecontents)=@_; |
|
if ($filecontents!~/(?:\<|\<\;)(?:html|xml)[^\<]*(?:\>|\>\;)/is) { |
|
return &mt('File does not have [_1] or [_2] starting tag','<html>','<xml>'); |
|
} |
|
if ($filecontents!~/(?:\<|\<\;)\/(?:html|xml)(?:\>|\>\;)/is) { |
|
return &mt('File does not have [_1] or [_2] ending tag','<html>','<xml>'); |
|
} |
|
if ($filecontents!~/(?:\<|\<\;)(?:body|frameset)[^\<]*(?:\>|\>\;)/is) { |
|
return &mt('File does not have [_1] or [_2] starting tag','<body>','<frameset>'); |
|
} |
|
if ($filecontents!~/(?:\<|\<\;)\/(?:body|frameset)[^\<]*(?:\>|\>\;)/is) { |
|
return &mt('File does not have [_1] or [_2] ending tag','<body>','<frameset>'); |
|
} |
|
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 { |
sub inserteditinfo { |
my ($filecontents, $filetype, $filename)=@_; |
my ($filecontents, $filetype, $filename)=@_; |
$filecontents = &HTML::Entities::encode($filecontents,'<>&"'); |
$filecontents = &HTML::Entities::encode($filecontents,'<>&"'); |
# my $editheader='<a href="#editsection">Edit below</a><hr />'; |
|
my $xml_help = ''; |
my $xml_help = ''; |
my $initialize=''; |
my $initialize=''; |
my $textarea_id = 'filecont'; |
my $textarea_id = 'filecont'; |
|
my $dragmath_button; |
my ($add_to_onload, $add_to_onresize); |
my ($add_to_onload, $add_to_onresize); |
$initialize=&Apache::lonhtmlcommon::spellheader(); |
$initialize=&Apache::lonhtmlcommon::spellheader(); |
if ($filetype eq 'html' |
if ($filetype eq 'html' |
Line 1520 FULLPAGE
|
Line 1606 FULLPAGE
|
} |
} |
</script> |
</script> |
FULLPAGE |
FULLPAGE |
|
if ($filetype eq 'html') { |
|
$initialize .= "\n".&Apache::lonhtmlcommon::dragmath_js('EditMathPopup'); |
|
$dragmath_button = &Apache::lonhtmlcommon::dragmath_button('filecont',1); |
|
} |
} |
} |
|
|
$add_to_onload = 'initDocument();'; |
$add_to_onload = 'initDocument();'; |
Line 1538 FULLPAGE
|
Line 1628 FULLPAGE
|
my $spelllink .=&Apache::lonhtmlcommon::spelllink('xmledit','filecont'); |
my $spelllink .=&Apache::lonhtmlcommon::spelllink('xmledit','filecont'); |
my $textarea_events = &Apache::edit::element_change_detection(); |
my $textarea_events = &Apache::edit::element_change_detection(); |
my $form_events = &Apache::edit::form_change_detection(); |
my $form_events = &Apache::edit::form_change_detection(); |
|
my $htmlerror; |
|
if ($filetype eq 'html') { |
|
$htmlerror=&verify_html($filecontents); |
|
if ($htmlerror) { |
|
$htmlerror='<span class="LC_error">'.$htmlerror.'</span>'; |
|
} |
|
} |
my $editfooter=(<<ENDFOOTER); |
my $editfooter=(<<ENDFOOTER); |
$initialize |
$initialize |
<a name="editsection" /> |
<a name="editsection" /> |
Line 1552 $initialize
|
Line 1649 $initialize
|
<div class="LC_edit_problem_discards"> |
<div class="LC_edit_problem_discards"> |
<input type="submit" name="discardview" accesskey="d" value="$lt{'dv'}" /> |
<input type="submit" name="discardview" accesskey="d" value="$lt{'dv'}" /> |
<input type="submit" name="Undo" accesskey="u" value="$lt{'un'}" /> |
<input type="submit" name="Undo" accesskey="u" value="$lt{'un'}" /> |
$spelllink |
$dragmath_button $spelllink $htmlerror |
</div> |
</div> |
<div class="LC_edit_problem_saves"> |
<div class="LC_edit_problem_saves"> |
<input type="submit" name="savethisfile" accesskey="s" value="$lt{'st'}" /> |
<input type="submit" name="savethisfile" accesskey="s" value="$lt{'st'}" /> |
Line 1599 sub get_target {
|
Line 1696 sub get_target {
|
|
|
sub handler { |
sub handler { |
my $request=shift; |
my $request=shift; |
|
|
my $target=&get_target(); |
my $target=&get_target(); |
|
|
$Apache::lonxml::debug=$env{'user.debug'}; |
$Apache::lonxml::debug=$env{'user.debug'}; |
|
|
&Apache::loncommon::content_type($request,'text/html'); |
&Apache::loncommon::content_type($request,'text/html'); |
Line 1610 sub handler {
|
Line 1706 sub handler {
|
$request->set_last_modified(&Apache::lonnet::metadata($request->uri, |
$request->set_last_modified(&Apache::lonnet::metadata($request->uri, |
'lastrevisiondate')); |
'lastrevisiondate')); |
} |
} |
|
# Embedded Flash movies 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; |
$request->send_http_header; |
|
|
return OK if $request->header_only; |
return OK if $request->header_only; |
Line 1617 sub handler {
|
Line 1728 sub handler {
|
|
|
my $file=&Apache::lonnet::filelocation("",$request->uri); |
my $file=&Apache::lonnet::filelocation("",$request->uri); |
my $filetype; |
my $filetype; |
if ($file =~ /\.sty$/) { |
if ($file =~ /\.(sty|css|js|txt)$/) { |
$filetype='sty'; |
$filetype=$1; |
} else { |
} else { |
$filetype='html'; |
$filetype='html'; |
} |
} |
|
|
# |
# |
# Edit action? Save file. |
# Edit action? Save file. |
# |
# |
Line 1629 sub handler {
|
Line 1741 sub handler {
|
if ($env{'form.savethisfile'} || $env{'form.viewmode'} || $env{'form.Undo'}) { |
if ($env{'form.savethisfile'} || $env{'form.viewmode'} || $env{'form.Undo'}) { |
my $html_file=&Apache::lonnet::getfile($file); |
my $html_file=&Apache::lonnet::getfile($file); |
my $error = &Apache::lonhomework::handle_save_or_undo($request, \$html_file, \$env{'form.filecont'}); |
my $error = &Apache::lonhomework::handle_save_or_undo($request, \$html_file, \$env{'form.filecont'}); |
|
if ($env{'form.savethisfile'}) { |
|
$env{'form.editmode'}='Edit'; #force edit mode |
|
} |
} |
} |
} |
} |
my %mystyle; |
my %mystyle; |
Line 1637 sub handler {
|
Line 1752 sub handler {
|
if ($filecontents eq -1) { |
if ($filecontents eq -1) { |
my $start_page=&Apache::loncommon::start_page('File Error'); |
my $start_page=&Apache::loncommon::start_page('File Error'); |
my $end_page=&Apache::loncommon::end_page(); |
my $end_page=&Apache::loncommon::end_page(); |
my $fnf=&mt('File not found'); |
my $errormsg='<p class="LC_error">' |
|
.&mt('File not found: [_1]' |
|
,'<span class="LC_filename">'.$file.'</span>') |
|
.'</p>'; |
$result=(<<ENDNOTFOUND); |
$result=(<<ENDNOTFOUND); |
$start_page |
$start_page |
<b>$fnf: $file</b> |
$errormsg |
$end_page |
$end_page |
ENDNOTFOUND |
ENDNOTFOUND |
$filecontents=''; |
$filecontents=''; |
if ($env{'request.state'} ne 'published') { |
if ($env{'request.state'} ne 'published') { |
if ($filetype eq 'sty') { |
if ($filetype eq 'sty') { |
$filecontents=&createnewsty(); |
$filecontents=&createnewsty(); |
} else { |
} elsif ($filetype eq 'js') { |
|
$filecontents=&createnewjs(); |
|
} elsif (($filetype ne 'css') && ($filetype ne 'txt')) { |
$filecontents=&createnewhtml(); |
$filecontents=&createnewhtml(); |
} |
} |
$env{'form.editmode'}='Edit'; #force edit mode |
$env{'form.editmode'}='Edit'; #force edit mode |
Line 1663 ENDNOTFOUND
|
Line 1783 ENDNOTFOUND
|
['editmode']); |
['editmode']); |
} |
} |
if (!$env{'form.editmode'} || $env{'form.viewmode'} || $env{'form.discardview'}) { |
if (!$env{'form.editmode'} || $env{'form.viewmode'} || $env{'form.discardview'}) { |
&Apache::structuretags::reset_problem_globals(); |
if ($filetype eq 'html' || $filetype eq 'sty') { |
$result = &Apache::lonxml::xmlparse($request,$target,$filecontents, |
&Apache::structuretags::reset_problem_globals(); |
'',%mystyle); |
$result = &Apache::lonxml::xmlparse($request,$target, |
|
$filecontents,'',%mystyle); |
# .html files may contain <problem> or <Task> need to clean |
# .html files may contain <problem> or <Task> need to clean |
# up if it did |
# up if it did |
&Apache::structuretags::reset_problem_globals(); |
&Apache::structuretags::reset_problem_globals(); |
&Apache::lonhomework::finished_parsing(); |
&Apache::lonhomework::finished_parsing(); |
|
} else { |
|
$result = $filecontents; |
|
} |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['rawmode']); |
['rawmode']); |
if ($env{'form.rawmode'}) { $result = $filecontents; } |
if ($env{'form.rawmode'}) { $result = $filecontents; } |
if ($filetype eq 'sty') { |
if ($filetype ne 'html') { |
my $controls = |
my $nochgview = 1; |
($env{'request.state'} eq 'construct') ? &Apache::londefdef::edit_controls() |
my $controls = ''; |
: ''; |
if ($env{'request.state'} eq 'construct') { |
my %options = ('bgcolor' => '#FFFFFF'); |
$controls = &Apache::loncommon::head_subbox( |
$result = |
&Apache::loncommon::CSTR_pageheader() |
&Apache::loncommon::start_page(undef,undef,\%options). |
.&Apache::londefdef::edit_controls($nochgview)); |
$controls. |
} |
$result. |
if ($filetype ne 'sty') { |
&Apache::loncommon::end_page(); |
$result =~ s/</</g; |
} |
$result =~ s/>/>/g; |
} |
$result = '<table class="LC_sty_begin">'. |
|
'<tr><td><b><pre>'.$result. |
|
'</pre></b></td></tr></table>'; |
|
} |
|
if ($env{'environment.remote'} eq 'off') { |
|
my $brcrum; |
|
if ($env{'request.state'} eq 'construct') { |
|
$brcrum = [{'href' => &Apache::loncommon::authorspace(), |
|
'text' => 'Construction Space'}, |
|
{'href' => '', |
|
'text' => 'Editor'}]; |
|
} else { |
|
$brcrum = ''; # FIXME: Where are we? |
|
} |
|
my %options = ('bread_crumbs' => $brcrum, |
|
'bgcolor' => '#FFFFFF'); |
|
$result = |
|
&Apache::loncommon::start_page(undef,undef,\%options) |
|
.$controls |
|
.$result |
|
.&Apache::loncommon::end_page(); |
|
} else { |
|
$result = $controls.$result; |
|
} |
|
} |
|
} |
} |
} |
|
|
# |
# |
Line 1701 ENDNOTFOUND
|
Line 1850 ENDNOTFOUND
|
|
|
my %options = |
my %options = |
('add_entries' => |
('add_entries' => |
{'onresize' => $add_to_onresize, |
{'onresize' => $add_to_onresize, |
'onload' => $add_to_onload, }); |
'onload' => $add_to_onload, }); |
|
|
|
$options{'bread_crumbs'} = [{ |
|
'href' => &Apache::loncommon::authorspace(), |
|
'text' => 'Construction Space'}, |
|
{'href' => '', |
|
'text' => 'HTML Editor'}]; |
|
|
if ($env{'environment.remote'} ne 'off') { |
if ($env{'environment.remote'} ne 'off') { |
$options{'bgcolor'} = '#FFFFFF'; |
$options{'bgcolor'} = '#FFFFFF'; |
Line 1713 ENDNOTFOUND
|
Line 1868 ENDNOTFOUND
|
&Apache::loncommon::resize_textarea_js(); |
&Apache::loncommon::resize_textarea_js(); |
my $start_page = &Apache::loncommon::start_page(undef,$js, |
my $start_page = &Apache::loncommon::start_page(undef,$js, |
\%options); |
\%options); |
$result=$start_page. |
$result = $start_page |
&Apache::lonxml::message_location(). |
.&Apache::loncommon::head_subbox( |
$edit_info. |
&Apache::loncommon::CSTR_pageheader()) |
&Apache::loncommon::end_page(); |
.&Apache::lonxml::message_location() |
} |
.$edit_info |
|
.&Apache::loncommon::end_page(); |
|
} |
} |
} |
if ($filetype eq 'html') { &writeallows($request->uri); } |
if ($filetype eq 'html') { &writeallows($request->uri); } |
|
|
Line 1735 sub display_title {
|
Line 1892 sub display_title {
|
$title = $env{'request.filename'}; |
$title = $env{'request.filename'}; |
$title = substr($title, rindex($title, '/') + 1); |
$title = substr($title, rindex($title, '/') + 1); |
} |
} |
$result = "<script type='text/javascript'>top.document.title = '$title - LON-CAPA Construction Space';</script>"; |
$result = "<script type='text/javascript'>top.document.title = '$title - LON-CAPA " |
|
.&mt('Construction Space')."';</script>"; |
} |
} |
return $result; |
return $result; |
} |
} |
Line 1772 sub error {
|
Line 1930 sub error {
|
|
|
$errorcount++; |
$errorcount++; |
|
|
|
$Apache::lonxml::internal_error=1; |
|
|
if (defined($Apache::inputtags::part)) { |
if (defined($Apache::inputtags::part)) { |
if ( @Apache::inputtags::response ) { |
if ( @Apache::inputtags::response ) { |
push(@errors, |
push(@errors, |
Line 1788 sub error {
|
Line 1948 sub error {
|
if ( &show_error_warn_msg() ) { |
if ( &show_error_warn_msg() ) { |
# If printing in construction space, put the error inside <pre></pre> |
# If printing in construction space, put the error inside <pre></pre> |
push(@Apache::lonxml::error_messages, |
push(@Apache::lonxml::error_messages, |
$Apache::lonxml::warnings_error_header. |
$Apache::lonxml::warnings_error_header |
"<b>ERROR:</b>".join("<br />\n",@errors)."<br />\n"); |
.'<div class="LC_error">' |
|
.'<b>'.&mt('ERROR:').' </b>'.join("<br />\n",@errors) |
|
."</div>\n"); |
$Apache::lonxml::warnings_error_header=''; |
$Apache::lonxml::warnings_error_header=''; |
} else { |
} else { |
my $errormsg; |
my $errormsg; |
my ($symb)=&Apache::lonnet::symbread(); |
my ($symb)=&Apache::lonnet::symbread(); |
if ( !$symb ) { |
if ( !$symb ) { |
#public or browsers |
#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'}; |
my $host=$Apache::lonnet::perlvar{'lonHostID'}; |
push(@errors, "The error occurred on host <tt>$host</tt>"); |
push(@errors, |
|
&mt("The error occurred on host [_1]", |
|
"<tt>$host</tt>")); |
|
|
my $msg = join('<br />', @errors); |
my $msg = join('<br />', @errors); |
|
|
Line 1833 sub error {
|
Line 1997 sub error {
|
} |
} |
} |
} |
if ($env{'request.role.adv'}) { |
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 { |
} 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 />"); |
push(@Apache::lonxml::error_messages,"<b>$errormsg</b> <br />"); |
Line 1848 sub warning {
|
Line 2012 sub warning {
|
if ($env{'form.grade_target'} ne 'tex') { |
if ($env{'form.grade_target'} ne 'tex') { |
if ( &show_error_warn_msg() ) { |
if ( &show_error_warn_msg() ) { |
push(@Apache::lonxml::warning_messages, |
push(@Apache::lonxml::warning_messages, |
$Apache::lonxml::warnings_error_header. |
$Apache::lonxml::warnings_error_header |
"<b>W</b>ARNING<b>:</b>".join('<br />',@_)."<br />\n"); |
.'<div class="LC_warning">' |
|
.&mt('[_1]W[_2]ARNING','<b>','</b>')."<b>:</b> ".join('<br />',@_) |
|
."</div>\n" |
|
); |
$Apache::lonxml::warnings_error_header=''; |
$Apache::lonxml::warnings_error_header=''; |
} |
} |
} |
} |
Line 2074 sub get_tag {
|
Line 2241 sub get_tag {
|
return $insertlist{"$tagnum.tag"}; |
return $insertlist{"$tagnum.tag"}; |
} |
} |
|
|
|
############################################################ |
|
# PDF-FORM-METHODS |
|
|
|
=pod |
|
|
|
=item &print_pdf_radiobutton(fieldname, value, text) |
|
|
|
Returns a latexline to generate a PDF-Form-Radiobutton with Text. |
|
|
|
$fieldname: PDF internalname of the radiobutton |
|
$value: Value of radiobutton (read when dumping the PDF data) |
|
$text: Text on the rightside of the radiobutton |
|
|
|
=cut |
|
sub print_pdf_radiobutton { |
|
my $result = ''; |
|
my ($fieldName, $value, $text) = @_; |
|
$result .= '\begin{tabularx}{\textwidth}{p{0cm}X}'."\n"; |
|
$result .= '\radioButton[\symbolchoice{circle}]{'. |
|
$fieldName.'}{10bp}{10bp}{'.$value.'}&'.$text."\n"; |
|
$result .= '\end{tabularx}' . "\n"; |
|
$result .= '\hspace{2mm}' . "\n"; |
|
return $result; |
|
} |
|
|
|
|
|
=pod |
|
|
|
=item &print_pdf_start_combobox(fieldname) |
|
|
|
Starts a latexline to generate a PDF-Form-Combobox with text. |
|
|
|
$fieldname: PDF internal name of the Combobox |
|
|
|
=cut |
|
sub print_pdf_start_combobox { |
|
my $result; |
|
my ($fieldName) = @_; |
|
$result .= '\begin{tabularx}{\textwidth}{p{2.5cm}X}'."\n"; |
|
$result .= '\comboBox[]{'.$fieldName.'}{2.3cm}{14bp}{'; # |
|
|
|
return $result; |
|
} |
|
|
|
|
|
=pod |
|
|
|
=item &print_pdf_add_combobox_option(options) |
|
|
|
Generates a latexline to add Options to a PDF-Form-ComboBox. |
|
|
|
$option: PDF internal name of the Combobox-Option |
|
|
|
=cut |
|
sub print_pdf_add_combobox_option { |
|
|
|
my $result; |
|
my ($option) = @_; |
|
|
|
$result .= '('.$option.')'; |
|
|
|
return $result; |
|
} |
|
|
|
|
|
=pod |
|
|
|
=item &print_pdf_end_combobox(text) { |
|
|
|
Returns latexcode to end a PDF-Form-Combobox with text. |
|
|
|
=cut |
|
sub print_pdf_end_combobox { |
|
my $result; |
|
my ($text) = @_; |
|
|
|
$result .= '}&'.$text."\\\\\n"; |
|
$result .= '\end{tabularx}' . "\n"; |
|
$result .= '\hspace{2mm}' . "\n"; |
|
return $result; |
|
} |
|
|
|
|
|
=pod |
|
|
|
=item &print_pdf_hiddenField(fieldname, user, domain) |
|
|
|
Returns a latexline to generate a PDF-Form-hiddenField with userdata. |
|
|
|
$fieldname label for hiddentextfield |
|
$user: name of user |
|
$domain: domain of user |
|
|
|
=cut |
|
sub print_pdf_hiddenfield { |
|
my $result; |
|
my ($fieldname, $user, $domain) = @_; |
|
|
|
$result .= '\textField [\F{\FHidden}\F{-\FPrint}\V{'.$domain.'&'.$user.'}]{'.$fieldname.'}{0in}{0in}'."\n"; |
|
|
|
return $result; |
|
} |
|
|
1; |
1; |
__END__ |
__END__ |
|
|
|
|