version 1.531.2.11, 2013/09/22 02:41:23
|
version 1.577, 2025/02/19 23:39:38
|
Line 1
|
Line 1
|
# The LearningOnline Network with CAPA |
# The LearningOnline Network with CAPA |
# XML Parser Module |
# XML Parser Module |
# |
# |
# $Id$ |
# $Id$ |
# |
# |
Line 25
|
Line 25
|
# |
# |
# http://www.lon-capa.org/ |
# http://www.lon-capa.org/ |
# |
# |
# Copyright for TtHfunc and TtMfunc by Ian Hutchinson. |
# Copyright for TtHfunc and TtMfunc by Ian Hutchinson. |
# TtHfunc and TtMfunc (the "Code") may be compiled and linked into |
# TtHfunc and TtMfunc (the "Code") may be compiled and linked into |
# binary executable programs or libraries distributed by the |
# binary executable programs or libraries distributed by the |
# Michigan State University (the "Licensee"), but any binaries so |
# Michigan State University (the "Licensee"), but any binaries so |
# distributed are hereby licensed only for use in the context |
# distributed are hereby licensed only for use in the context |
# of a program or computational system for which the Licensee is the |
# of a program or computational system for which the Licensee is the |
# primary author or distributor, and which performs substantial |
# primary author or distributor, and which performs substantial |
# additional tasks beyond the translation of (La)TeX into HTML. |
# additional tasks beyond the translation of (La)TeX into HTML. |
# The C source of the Code may not be distributed by the Licensee |
# The C source of the Code may not be distributed by the Licensee |
# to any other parties under any circumstances. |
# to any other parties under any circumstances. |
Line 57 described at http://www.lon-capa.org.
|
Line 57 described at http://www.lon-capa.org.
|
|
|
|
|
|
|
package Apache::lonxml; |
package Apache::lonxml; |
use vars |
use vars |
qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace $errorcount $warningcount); |
qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace $errorcount $warningcount); |
use strict; |
use strict; |
Line 69 use Safe();
|
Line 69 use Safe();
|
use Safe::Hole(); |
use Safe::Hole(); |
use Math::Cephes(); |
use Math::Cephes(); |
use Math::Random(); |
use Math::Random(); |
|
use Math::Calculus::Expression(); |
|
use Number::FormatEng(); |
use Opcode(); |
use Opcode(); |
use POSIX qw(strftime); |
use POSIX qw(strftime); |
use Time::HiRes qw( gettimeofday tv_interval ); |
use Time::HiRes qw( gettimeofday tv_interval ); |
Line 115 use Apache::lonhtmlcommon();
|
Line 117 use Apache::lonhtmlcommon();
|
use Apache::functionplotresponse(); |
use Apache::functionplotresponse(); |
use Apache::lonnavmaps(); |
use Apache::lonnavmaps(); |
|
|
#==================================== Main subroutine: xmlparse |
#==================================== Main subroutine: xmlparse |
|
|
#debugging control, to turn on debugging modify the correct handler |
#debugging control, to turn on debugging modify the correct handler |
|
|
Line 144 $metamode = 0;
|
Line 146 $metamode = 0;
|
# turns on and of run::evaluate actually derefencing var refs |
# turns on and of run::evaluate actually derefencing var refs |
$evaluate = 1; |
$evaluate = 1; |
|
|
# data structure for eidt mode, determines what tags can go into what other tags |
# data structure for edit mode, determines what tags can go into what other tags |
%insertlist=(); |
%insertlist=(); |
|
|
# stores the list of active tag namespaces |
# stores the list of active tag namespaces |
Line 206 sub xmlend {
|
Line 208 sub xmlend {
|
if ($Apache::lonhomework::parsing_a_problem || |
if ($Apache::lonhomework::parsing_a_problem || |
$Apache::lonhomework::parsing_a_task ) { |
$Apache::lonhomework::parsing_a_task ) { |
$mode='problem'; |
$mode='problem'; |
$status=$Apache::inputtags::status[-1]; |
$status=$Apache::inputtags::status[-1]; |
} |
} |
my $discussion; |
my $discussion; |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
Line 228 sub xmlend {
|
Line 230 sub xmlend {
|
return $discussion; |
return $discussion; |
} |
} |
|
|
sub tokeninputfield { |
|
my $defhost=$Apache::lonnet::perlvar{'lonHostID'}; |
|
$defhost=~tr/a-z/A-Z/; |
|
return (<<ENDINPUTFIELD) |
|
<script type="text/javascript"> |
|
function updatetoken() { |
|
var comp=new Array; |
|
var barcode=unescape(document.tokeninput.barcode.value); |
|
comp=barcode.split('*'); |
|
if (typeof(comp[0])!="undefined") { |
|
document.tokeninput.codeone.value=comp[0]; |
|
} |
|
if (typeof(comp[1])!="undefined") { |
|
document.tokeninput.codetwo.value=comp[1]; |
|
} |
|
if (typeof(comp[2])!="undefined") { |
|
comp[2]=comp[2].toUpperCase(); |
|
document.tokeninput.codethree.value=comp[2]; |
|
} |
|
document.tokeninput.barcode.value=''; |
|
} |
|
</script> |
|
<form method="post" name="tokeninput" action=""> |
|
<table border="2" bgcolor="#FFFFBB"> |
|
<tr><th>DocID Checkin</th></tr> |
|
<tr><td> |
|
<table> |
|
<tr> |
|
<td>Scan in Barcode</td> |
|
<td><input type="text" size="22" name="barcode" |
|
onchange="updatetoken()"/></td> |
|
</tr> |
|
<tr><td><i>or</i> Type in DocID</td> |
|
<td> |
|
<input type="text" size="5" name="codeone" /> |
|
<b><font size="+2">*</font></b> |
|
<input type="text" size="5" name="codetwo" /> |
|
<b><font size="+2">*</font></b> |
|
<input type="text" size="10" name="codethree" value="$defhost" |
|
onchange="this.value=this.value.toUpperCase()" /> |
|
</td></tr> |
|
</table> |
|
</td></tr> |
|
<tr><td><input type="submit" value="Check in DocID" /></td></tr> |
|
</table> |
|
</form> |
|
ENDINPUTFIELD |
|
} |
|
|
|
sub maketoken { |
|
my ($symb,$tuname,$tudom,$tcrsid)=@_; |
|
unless ($symb) { |
|
$symb=&Apache::lonnet::symbread(); |
|
} |
|
unless ($tuname) { |
|
$tuname=$env{'user.name'}; |
|
$tudom=$env{'user.domain'}; |
|
$tcrsid=$env{'request.course.id'}; |
|
} |
|
return &Apache::lonnet::checkout($symb,$tuname,$tudom,$tcrsid); |
|
} |
|
|
|
sub printtokenheader { |
|
my ($target,$token,$tsymb,$tcrsid,$tudom,$tuname)=@_; |
|
unless ($token) { return ''; } |
|
|
|
my ($symb,$courseid,$domain,$name) = &Apache::lonnet::whichuser(); |
|
unless ($tsymb) { |
|
$tsymb=$symb; |
|
} |
|
unless ($tuname) { |
|
$tuname=$name; |
|
$tudom=$domain; |
|
$tcrsid=$courseid; |
|
} |
|
|
|
my $plainname=&Apache::loncommon::plainname($tuname,$tudom); |
|
|
|
if ($target eq 'web') { |
|
my %idhash=&Apache::lonnet::idrget($tudom,($tuname)); |
|
return |
|
'<img align="right" src="/cgi-bin/barcode.png?encode='.$token.'" />'. |
|
&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; |
|
} |
|
} |
|
|
|
sub printalltags { |
sub printalltags { |
my $temp; |
foreach my $temp (sort(keys(%Apache::lonxml::alltags))) { |
foreach $temp (sort keys %Apache::lonxml::alltags) { |
&Apache::lonxml::debug("$temp -- ". |
&Apache::lonxml::debug("$temp -- ". |
join(',',@{ $Apache::lonxml::alltags{$temp} })); |
join(',',@{ $Apache::lonxml::alltags{$temp} })); |
} |
} |
|
} |
} |
|
|
sub xmlparse { |
sub xmlparse { |
Line 400 sub xmlparse {
|
Line 307 sub xmlparse {
|
&clean_safespace($safeeval); |
&clean_safespace($safeeval); |
|
|
if (@script_var_displays) { |
if (@script_var_displays) { |
my $scriptoutput = join('',@script_var_displays); |
if ($finaloutput =~ m{</body>\s*</html>\s*$}s) { |
$finaloutput=~s{(</body>\s*</html>)\s*$}{$scriptoutput$1}s; |
my $scriptoutput = join('',@script_var_displays); |
|
$finaloutput=~s{(</body>\s*</html>)\s*$}{$scriptoutput$1}s; |
|
} else { |
|
$finaloutput .= join('',@script_var_displays); |
|
} |
undef(@script_var_displays); |
undef(@script_var_displays); |
} |
} |
&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) { |
if ($env{'request.filename'}=~/\.(html|htm|xml)$/i) { |
my $error=&verify_html($content_file_string); |
my $error=&verify_html($content_file_string); |
if ($error) { $errorcount++; } |
if ($error) { $errorcount++; } |
} |
} |
Line 432 sub latex_special_symbols {
|
Line 343 sub latex_special_symbols {
|
$string=~s/([^\\])\&/$1\\\&/g; |
$string=~s/([^\\])\&/$1\\\&/g; |
$string=~s/([^\\])\#/$1\\\#/g; |
$string=~s/([^\\])\#/$1\\\#/g; |
$string =~ s/_/\\_/g; # _ -> \_ |
$string =~ s/_/\\_/g; # _ -> \_ |
$string =~ s/\^/\\\^{}/g; # ^ -> \^{} |
$string =~ s/\^/\\\^{}/g; # ^ -> \^{} |
} else { |
} else { |
$string=~s/\\/\\ensuremath{\\backslash}/g; |
$string=~s/\\/\\ensuremath{\\backslash}/g; |
$string=~s/\\\%|\%/\\\%/g; |
$string=~s/\\\%|\%/\\\%/g; |
$string=~s/\\{|{/\\{/g; |
$string=~s/\\\{|\{/\\{/g; |
$string=~s/\\}|}/\\}/g; |
$string=~s/\\}|}/\\}/g; |
$string=~s/\\ensuremath\\{\\backslash\\}/\\ensuremath{\\backslash}/g; |
$string=~s/\\ensuremath\\\{\\backslash\\}/\\ensuremath{\\backslash}/g; |
$string=~s/\\\$|\$/\\\$/g; |
$string=~s/\\\$|\$/\\\$/g; |
$string=~s/\\\_|\_/\\\_/g; |
$string=~s/\\\_|\_/\\\_/g; |
$string=~s/([^\\]|^)(\~|\^)/$1\\$2\\strut /g; |
$string=~s/([^\\]|^)(\~|\^)/$1\\$2\\strut /g; |
Line 459 sub inner_xmlparse {
|
Line 370 sub inner_xmlparse {
|
my $result; |
my $result; |
my $token; |
my $token; |
my $dontpop=0; |
my $dontpop=0; |
|
my $lastdontpop; |
|
my $lastendtag; |
my $startredirection = $Apache::lonxml::redirection; |
my $startredirection = $Apache::lonxml::redirection; |
while ( $#$pars > -1 ) { |
while ( $#$pars > -1 ) { |
while ($token = $$pars['-1']->get_token) { |
while ($token = $$pars['-1']->get_token) { |
Line 554 sub inner_xmlparse {
|
Line 467 sub inner_xmlparse {
|
} |
} |
$result = ''; |
$result = ''; |
|
|
if ($token->[0] eq 'E' && !$dontpop) { |
if ($token->[0] eq 'E') { |
&end_tag($stack,$parstack,$token); |
if ($dontpop) { |
|
$lastdontpop = $token; |
|
} else { |
|
$lastendtag = $token->[1]; |
|
&end_tag($stack,$parstack,$token); |
|
} |
} |
} |
$dontpop=0; |
$dontpop=0; |
} |
} |
if ($#$pars > -1) { |
if ($#$pars > -1) { |
pop @$pars; |
pop @$pars; |
pop @Apache::lonxml::pwd; |
pop @Apache::lonxml::pwd; |
} |
} |
} |
} |
|
|
|
if (($#$stack == 0) && ($stack->[0] eq 'physnet') && ($target eq 'web') && |
|
($lastendtag eq 'LONCAPA_INTERNAL_TURN_STYLE_ON')) { |
|
if ((ref($lastdontpop) eq 'ARRAY') && ($lastdontpop->[1] eq 'physnet')) { |
|
&end_tag($stack,$parstack,$lastdontpop); |
|
} |
|
} |
|
|
# if ($target eq 'meta') { |
# if ($target eq 'meta') { |
# $finaloutput.=&endredirection; |
# $finaloutput.=&endredirection; |
# } |
# } |
Line 581 sub inner_xmlparse {
|
Line 506 sub inner_xmlparse {
|
if ($target eq 'modified') { |
if ($target eq 'modified') { |
# if modfied, handle startpart and endpart |
# if modfied, handle startpart and endpart |
$finaloutput=~s/\<startpartmarker[^\>]*\>(.*)\<endpartmarker[^\>]*\>/<part>$1<\/part>/gs; |
$finaloutput=~s/\<startpartmarker[^\>]*\>(.*)\<endpartmarker[^\>]*\>/<part>$1<\/part>/gs; |
} |
} |
return $finaloutput; |
return $finaloutput; |
} |
} |
|
|
## |
## |
## Looks to see if there is a subroutine defined for this tag. If so, call it, |
## Looks to see if there is a subroutine defined for this tag. If so, call it, |
## otherwise do not call it as we do not know what it is. |
## otherwise do not call it as we do not know what it is. |
## |
## |
Line 672 sub callsub {
|
Line 597 sub callsub {
|
sub init_state { |
sub init_state { |
undef(%state); |
undef(%state); |
} |
} |
|
|
sub set_state { |
sub set_state { |
my ($key,$value) = @_; |
my ($key,$value) = @_; |
$state{$key} = $value; |
$state{$key} = $value; |
Line 745 sub init_safespace {
|
Line 670 sub init_safespace {
|
my ($target,$safeeval,$safehole,$safeinit) = @_; |
my ($target,$safeeval,$safehole,$safeinit) = @_; |
$safeeval->reval('use LaTeX::Table;'); |
$safeeval->reval('use LaTeX::Table;'); |
$safeeval->deny_only(':dangerous'); |
$safeeval->deny_only(':dangerous'); |
$safeeval->reval('use Math::Complex;'); |
$safeeval->reval('use LONCAPA::LCMathComplex;'); |
$safeeval->permit_only(":default"); |
$safeeval->permit_only(":default"); |
$safeeval->permit("entereval"); |
$safeeval->permit("entereval"); |
|
$safeeval->permit("hintseval"); |
$safeeval->permit(":base_math"); |
$safeeval->permit(":base_math"); |
$safeeval->permit("sort"); |
$safeeval->permit("sort"); |
$safeeval->permit("time"); |
$safeeval->permit("time"); |
Line 774 sub init_safespace {
|
Line 700 sub init_safespace {
|
$safehole->wrap(\&Apache::lonr::r_check,$safeeval,'&r_check'); |
$safehole->wrap(\&Apache::lonr::r_check,$safeeval,'&r_check'); |
$safehole->wrap(\&Apache::lonr::r_cas_formula_fix,$safeeval, |
$safehole->wrap(\&Apache::lonr::r_cas_formula_fix,$safeeval, |
'&r_cas_formula_fix'); |
'&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'); |
|
|
Line 800 sub init_safespace {
|
Line 726 sub init_safespace {
|
$safehole->wrap(\&Math::Cephes::y1,$safeeval,'&y1'); |
$safehole->wrap(\&Math::Cephes::y1,$safeeval,'&y1'); |
$safehole->wrap(\&Math::Cephes::yn,$safeeval,'&yn'); |
$safehole->wrap(\&Math::Cephes::yn,$safeeval,'&yn'); |
$safehole->wrap(\&Math::Cephes::yv,$safeeval,'&yv'); |
$safehole->wrap(\&Math::Cephes::yv,$safeeval,'&yv'); |
|
|
$safehole->wrap(\&Math::Cephes::bdtr ,$safeeval,'&bdtr' ); |
$safehole->wrap(\&Math::Cephes::bdtr ,$safeeval,'&bdtr' ); |
$safehole->wrap(\&Math::Cephes::bdtrc ,$safeeval,'&bdtrc' ); |
$safehole->wrap(\&Math::Cephes::bdtrc ,$safeeval,'&bdtrc' ); |
$safehole->wrap(\&Math::Cephes::bdtri ,$safeeval,'&bdtri' ); |
$safehole->wrap(\&Math::Cephes::bdtri ,$safeeval,'&bdtri' ); |
Line 896 sub init_safespace {
|
Line 822 sub init_safespace {
|
$safehole->wrap(\&Apache::functionplotresponse::fpr_objectcoords,$safeeval,'&fpr_objectcoords'); |
$safehole->wrap(\&Apache::functionplotresponse::fpr_objectcoords,$safeeval,'&fpr_objectcoords'); |
$safehole->wrap(\&Apache::functionplotresponse::fpr_vectorlength,$safeeval,'&fpr_vectorlength'); |
$safehole->wrap(\&Apache::functionplotresponse::fpr_vectorlength,$safeeval,'&fpr_vectorlength'); |
$safehole->wrap(\&Apache::functionplotresponse::fpr_vectorangle,$safeeval,'&fpr_vectorangle'); |
$safehole->wrap(\&Apache::functionplotresponse::fpr_vectorangle,$safeeval,'&fpr_vectorangle'); |
|
$safehole->wrap(\&Math::Calculus::Expression::math_calculus_expression,$safeeval,'&math_calculus_expression'); |
|
$safehole->wrap(\&Number::FormatEng::format_eng,$safeeval,'&number_format_eng'); |
|
$safehole->wrap(\&Number::FormatEng::format_pref,$safeeval,'&number_format_pref'); |
|
|
# use Data::Dumper; |
# use Data::Dumper; |
# $safehole->wrap(\&Data::Dumper::Dumper,$safeeval,'&LONCAPA_INTERNAL_Dumper'); |
# $safehole->wrap(\&Data::Dumper::Dumper,$safeeval,'&LONCAPA_INTERNAL_Dumper'); |
Line 904 sub init_safespace {
|
Line 833 sub init_safespace {
|
$safeeval->permit("require"); |
$safeeval->permit("require"); |
$safeinit .= ';$external::target="'.$target.'";'; |
$safeinit .= ';$external::target="'.$target.'";'; |
&Apache::run::run($safeinit,$safeeval); |
&Apache::run::run($safeinit,$safeeval); |
&initialize_rndseed($safeeval); |
my $rawrndseed = &initialize_rndseed($safeeval); |
|
if ($target eq 'grade') { |
|
$Apache::lonhomework::rawrndseed = $rawrndseed; |
|
} |
} |
} |
|
|
sub clean_safespace { |
sub clean_safespace { |
Line 943 sub initialize_rndseed {
|
Line 875 sub initialize_rndseed {
|
my $safeinit = '$external::randomseed="'.$rndseed.'";'; |
my $safeinit = '$external::randomseed="'.$rndseed.'";'; |
&Apache::lonxml::debug("Setting rndseed to $rndseed"); |
&Apache::lonxml::debug("Setting rndseed to $rndseed"); |
&Apache::run::run($safeinit,$safeeval); |
&Apache::run::run($safeinit,$safeeval); |
|
return $rndseed; |
} |
} |
|
|
sub default_homework_load { |
sub default_homework_load { |
Line 1064 sub decreasedepth {
|
Line 997 sub decreasedepth {
|
sub get_id { |
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\s\-])/) { |
&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; } |
Line 1140 sub increment_counter {
|
Line 1073 sub increment_counter {
|
} |
} |
$Apache::lonxml::counter += $increment; |
$Apache::lonxml::counter += $increment; |
|
|
# If the caller supplied the response_id parameter, |
# If the caller supplied the response_id parameter, |
# Maintain its counter.. creating if necessary. |
# Maintain its counter.. creating if necessary. |
|
|
if (defined($part_response)) { |
if (defined($part_response)) { |
Line 1261 sub set_bubble_lines {
|
Line 1194 sub set_bubble_lines {
|
|
|
=item get_bubble_line_hash |
=item get_bubble_line_hash |
|
|
Returns the current bubble line hash. This is assumed to |
Returns the current bubble line hash. This is assumed to |
be small so we return a copy |
be small so we return a copy |
|
|
|
|
Line 1287 sub get_all_text {
|
Line 1220 sub get_all_text {
|
my $depth=0; |
my $depth=0; |
my $token; |
my $token; |
my $result=''; |
my $result=''; |
if ( $tag =~ m:^/: ) { |
if ( $tag =~ m:^/: ) { |
my $tag=substr($tag,1); |
my $tag=substr($tag,1); |
#&Apache::lonxml::debug("have:$tag:"); |
#&Apache::lonxml::debug("have:$tag:"); |
my $top_empty=0; |
my $top_empty=0; |
while (($depth >=0) && ($#$pars > -1) && (!$top_empty)) { |
while (($depth >=0) && ($#$pars > -1) && (!$top_empty)) { |
Line 1389 sub newparser {
|
Line 1322 sub newparser {
|
push (@Apache::lonxml::pwd, $Apache::lonxml::pwd[$#Apache::lonxml::pwd]); |
push (@Apache::lonxml::pwd, $Apache::lonxml::pwd[$#Apache::lonxml::pwd]); |
} else { |
} else { |
push (@Apache::lonxml::pwd, $dir); |
push (@Apache::lonxml::pwd, $dir); |
} |
} |
} |
} |
|
|
sub parstring { |
sub parstring { |
Line 1406 sub parstring {
|
Line 1339 sub parstring {
|
push(@values,"\"$val\""); |
push(@values,"\"$val\""); |
} |
} |
} |
} |
my $var_init = |
my $var_init = |
(@vars) ? 'my ('.join(',',@vars).') = ('.join(',',@values).');' |
(@vars) ? 'my ('.join(',',@vars).') = ('.join(',',@values).');' |
: ''; |
: ''; |
return $var_init; |
return $var_init; |
Line 1417 sub extlink {
|
Line 1350 sub extlink {
|
if (!$exact) { |
if (!$exact) { |
$res=&Apache::lonnet::hreflocation($Apache::lonxml::pwd[-1],$res); |
$res=&Apache::lonnet::hreflocation($Apache::lonxml::pwd[-1],$res); |
} |
} |
push(@Apache::lonxml::extlinks,$res) |
push(@Apache::lonxml::extlinks,$res); |
} |
} |
|
|
sub writeallows { |
sub writeallows { |
Line 1453 sub do_registered_ssi {
|
Line 1386 sub do_registered_ssi {
|
|
|
sub add_script_result { |
sub add_script_result { |
my ($display) = @_; |
my ($display) = @_; |
push(@script_var_displays, $display); |
if ($display ne '') { |
|
push(@script_var_displays, $display); |
|
} |
} |
} |
|
|
# |
# |
Line 1545 SIMPLECONTENT
|
Line 1480 SIMPLECONTENT
|
|
|
sub verify_html { |
sub verify_html { |
my ($filecontents)=@_; |
my ($filecontents)=@_; |
my ($is_html,$is_xml); |
my ($is_html,$is_xml,$is_physnet); |
if ($filecontents =~/(?:\<|\<\;)\?xml[^\<]*\?(?:\>|\>\;)/is) { |
if ($filecontents =~/(?:\<|\<\;)\?xml[^\<]*\?(?:\>|\>\;)/is) { |
$is_xml = 1; |
$is_xml = 1; |
} elsif ($filecontents =~/(?:\<|\<\;)html(?:\s+[^\<]+|\s*)(?:\>|\>\;)/is) { |
} elsif ($filecontents =~/(?:\<|\<\;)html(?:\s+[^\<]+|\s*)(?:\>|\>\;)/is) { |
$is_html = 1; |
$is_html = 1; |
|
} elsif ($filecontents =~/(?:\<|\<\;)physnet[^\<]*(?:\>|\>\;)/is) { |
|
$is_physnet = 1; |
} |
} |
unless ($is_xml || $is_html) { |
unless ($is_xml || $is_html || $is_physnet) { |
return &mt('File does not have [_1] or [_2] starting tag','<html>','<?xml ?>'); |
return &mt('File does not have [_1] or [_2] starting tag','<html>','<?xml ?>'); |
} |
} |
if ($is_html) { |
if ($is_html) { |
Line 1597 sub renderingoptions {
|
Line 1534 sub renderingoptions {
|
('' => '', |
('' => '', |
'tth' => 'tth (TeX to HTML)', |
'tth' => 'tth (TeX to HTML)', |
'MathJax' => 'MathJax', |
'MathJax' => 'MathJax', |
'jsMath' => 'jsMath', |
|
'mimetex' => 'mimetex (Convert to Images)')}). |
'mimetex' => 'mimetex (Convert to Images)')}). |
'</span>'; |
'</span>'; |
return $output; |
return $output; |
Line 1609 sub inserteditinfo {
|
Line 1545 sub inserteditinfo {
|
my $xml_help = ''; |
my $xml_help = ''; |
my $initialize=''; |
my $initialize=''; |
my $textarea_id = 'filecont'; |
my $textarea_id = 'filecont'; |
my ($dragmath_button,$deps_button); |
my ($dragmath_button,$deps_button,$context,$cnum,$cdom,$add_to_onload, |
my ($add_to_onload, $add_to_onresize); |
$add_to_onresize,$init_dragmath); |
$initialize=&Apache::lonhtmlcommon::spellheader(); |
$initialize=&Apache::lonhtmlcommon::spellheader(); |
if (($filetype eq 'html') && (&Apache::lonhtmlcommon::htmlareabrowser())) { |
if ($filetype eq 'html') { |
my $lang = &Apache::lonhtmlcommon::htmlarea_lang(); |
if ($env{'request.course.id'}) { |
my %textarea_args = ( |
$cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
fullpage => 'true', |
$cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
dragmath => 'math', |
if ($uri =~ m{^\Q/uploaded/$cdom/$cnum/portfolio/syllabus/\E}) { |
); |
$context = 'syllabus'; |
$initialize .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args); |
} |
|
} |
|
if (&Apache::lonhtmlcommon::htmlareabrowser()) { |
|
my $lang = &Apache::lonhtmlcommon::htmlarea_lang(); |
|
my %textarea_args = ( |
|
fullpage => 'true', |
|
dragmath => 'math', |
|
); |
|
$initialize .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args); |
|
if ($context eq 'syllabus') { |
|
$init_dragmath = "editmath_visibility('filecont','none')"; |
|
} |
|
} |
} |
} |
$initialize .= (<<FULLPAGE); |
$initialize .= (<<FULLPAGE); |
<script type="text/javascript"> |
<script type="text/javascript"> |
// <![CDATA[ |
// <![CDATA[ |
function initDocument() { |
function initDocument() { |
resize_textarea('$textarea_id','LC_aftertextarea'); |
resize_textarea('$textarea_id','LC_aftertextarea'); |
|
$init_dragmath |
} |
} |
// ]]> |
// ]]> |
</script> |
</script> |
FULLPAGE |
FULLPAGE |
my $textareaclass; |
my $textareaclass; |
if ($filetype eq 'html') { |
if ($filetype eq 'html') { |
my $context; |
if ($context eq 'syllabus') { |
if ($env{'request.course.id'}) { |
$deps_button = &Apache::lonhtmlcommon::dependencies_button()."\n"; |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
$initialize .= |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
&Apache::lonhtmlcommon::dependencycheck_js(undef,&mt('Syllabus'), |
if ($uri =~ m{^\Q/uploaded/$cdom/$cnum/portfolio/syllabus/\E}) { |
$uri,undef, |
$context = 'syllabus'; |
"/public/$cdom/$cnum/syllabus"). |
$deps_button = &Apache::lonhtmlcommon::dependencies_button()."\n"; |
"\n"; |
$initialize .= |
if (&Apache::lonhtmlcommon::htmlareabrowser()) { |
&Apache::lonhtmlcommon::dependencycheck_js(undef,&mt('Syllabus'), |
$textareaclass = 'class="LC_richDefaultOn"'; |
$uri,undef, |
|
"/public/$cdom/$cnum/syllabus"). |
|
"\n"; |
|
if (&Apache::lonhtmlcommon::htmlareabrowser()) { |
|
$textareaclass = 'class="LC_richDefaultOn"'; |
|
} |
|
} |
|
} |
|
unless ($context eq 'syllabus') { |
|
if ($symb || $folderpath) { |
|
$deps_button = &Apache::lonhtmlcommon::dependencies_button()."\n"; |
|
$initialize .= |
|
&Apache::lonhtmlcommon::dependencycheck_js($symb,$itemtitle, |
|
undef,$folderpath,$uri)."\n"; |
|
} |
} |
|
} elsif ($symb || $folderpath) { |
|
$deps_button = &Apache::lonhtmlcommon::dependencies_button()."\n"; |
|
$initialize .= |
|
&Apache::lonhtmlcommon::dependencycheck_js($symb,$itemtitle, |
|
undef,$folderpath,$uri)."\n"; |
} |
} |
$dragmath_button = '<span id="math_filecont">'.&Apache::lonhtmlcommon::dragmath_button('filecont',1).'</span>'; |
$dragmath_button = '<span id="math_filecont">'.&Apache::lonhtmlcommon::dragmath_button('filecont',1).'</span>'; |
$initialize .= "\n".&Apache::lonhtmlcommon::dragmath_js('EditMathPopup'); |
$initialize .= "\n".&Apache::lonhtmlcommon::dragmath_js('EditMathPopup'); |
Line 1663 FULLPAGE
|
Line 1603 FULLPAGE
|
$add_to_onresize = "resize_textarea('$textarea_id','LC_aftertextarea');"; |
$add_to_onresize = "resize_textarea('$textarea_id','LC_aftertextarea');"; |
|
|
if ($filetype eq 'html') { |
if ($filetype eq 'html') { |
$xml_help=&Apache::loncommon::helpLatexCheatsheet(); |
my $not_author; |
|
if ($uri =~ m{^/uploaded/}) { |
|
$not_author = 1; |
|
} |
|
$xml_help=&Apache::loncommon::helpLatexCheatsheet(undef,undef,$not_author); |
} |
} |
|
|
my $titledisplay=&display_title(); |
my $titledisplay=&display_title(); |
my %lt=&Apache::lonlocal::texthash('st' => 'Save and Edit', |
my %lt=&Apache::lonlocal::texthash('st' => 'Save and Edit', |
'vi' => 'Save and View', |
'vi' => 'Save and View', |
'dv' => 'Discard Edits and View', |
'dv' => 'Discard Edits and View', |
'un' => 'undo', |
'un' => 'Undo', |
'ed' => 'Edit'); |
'ed' => 'Edit', |
|
'ew' => 'Edit with Daxe', |
|
'er' => 'Editor'); |
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(); |
Line 1679 FULLPAGE
|
Line 1625 FULLPAGE
|
if ($filetype eq 'html') { |
if ($filetype eq 'html') { |
$htmlerror=&verify_html($filecontents); |
$htmlerror=&verify_html($filecontents); |
if ($htmlerror) { |
if ($htmlerror) { |
$htmlerror='<span class="LC_error">'.$htmlerror.'</span>'; |
$htmlerror=(' 'x3).' <span class="LC_error">'.$htmlerror.'</span>'; |
} |
} |
if (&Apache::lonhtmlcommon::htmlareabrowser()) { |
if (&Apache::lonhtmlcommon::htmlareabrowser()) { |
unless ($textareaclass) { |
unless ($textareaclass) { |
Line 1687 FULLPAGE
|
Line 1633 FULLPAGE
|
} |
} |
} |
} |
} |
} |
|
my ($undo,$daxebutton,%onclick); |
|
foreach my $item ('discard','undo','daxe') { |
|
$onclick{$item} = 'onclick="still_ask=true;setmode(this.form,'."'$item'".')"'; |
|
} |
|
foreach my $item ('saveedit','saveview') { |
|
$onclick{$item} = 'onclick="is_submit=true;setmode(this.form,'."'$item'".')"'; |
|
} |
|
unless ($uri =~ m{^/uploaded/}) { |
|
$undo = '<input type="button" name="undo" accesskey="u" value="'.$lt{'un'}.'" '. |
|
$onclick{'undo'}.' />'."\n"; |
|
} |
|
$initialize .= &setmode_javascript(); |
|
if ($filetype eq 'html') { |
|
my %editors = &Apache::loncommon::permitted_editors($uri); |
|
if ($editors{'daxe'}) { |
|
$daxebutton = '<input type="button" name="editwithdaxe" accesskey="w" value="'.$lt{'ew'}.'" '. |
|
$onclick{'daxe'}.' />'."\n"; |
|
} |
|
} |
my $editfooter=(<<ENDFOOTER); |
my $editfooter=(<<ENDFOOTER); |
$initialize |
$initialize |
<a name="editsection" /> |
<a name="editsection" /> |
<form $form_events method="post" name="xmledit" action="$action"> |
<form $form_events method="post" name="xmledit" action="$action"> |
|
<input type="hidden" name="problemmode" value="edit" /> |
<div class="LC_edit_problem_editxml_header"> |
<div class="LC_edit_problem_editxml_header"> |
<table class="LC_edit_problem_header_title"><tr><td> |
<table class="LC_edit_problem_header_title"><tr><td> |
$filename |
$filename |
Line 1698 $initialize
|
Line 1664 $initialize
|
$xml_help |
$xml_help |
</td></tr> |
</td></tr> |
</table> |
</table> |
<div class="LC_edit_problem_discards"> |
<div style="float:right"> |
<input type="submit" name="discardview" accesskey="d" value="$lt{'dv'}" /> |
<input type="button" name="savethisfile" accesskey="s" value="$lt{'st'}" $onclick{'saveedit'} /> |
<input type="submit" name="Undo" accesskey="u" value="$lt{'un'}" /> |
<input type="button" name="viewmode" accesskey="v" value="$lt{'vi'}" $onclick{'saveview'} /> |
$htmlerror $deps_button $dragmath_button |
|
</div> |
</div> |
<div class="LC_edit_problem_saves"> |
<div> |
<input type="submit" name="savethisfile" accesskey="s" value="$lt{'st'}" /> |
<input type="button" name="discardview" accesskey="d" value="$lt{'dv'}" $onclick{'discard'} /> |
<input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" /> |
$undo $deps_button $daxebutton $dragmath_button $htmlerror |
</div> |
</div> |
</div> |
</div> |
<textarea $textarea_events style="width:100%" cols="80" rows="44" name="filecont" id="filecont" $textareaclass>$filecontents</textarea><br />$spelllink |
<textarea $textarea_events style="width:100%" cols="80" rows="44" name="filecont" id="filecont" $textareaclass>$filecontents</textarea><br /><label for="filecont" class="LC_visually_hidden">$lt{'er'}</label>$spelllink |
<div id="LC_aftertextarea"> |
<div id="LC_aftertextarea"> |
<br /> |
<br /> |
$titledisplay |
$titledisplay |
</div> |
</div> |
</form> |
</form> |
ENDFOOTER |
ENDFOOTER |
return ($editfooter,$add_to_onload,$add_to_onresize);; |
return ($editfooter,$add_to_onload,$add_to_onresize); |
|
} |
|
|
|
sub setmode_javascript { |
|
return <<"ENDSCRIPT"; |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
function setmode(form,probmode) { |
|
if (probmode == 'daxe') { |
|
var url = new URL(document.location.href); |
|
window.location = url.protocol+'//'+url.hostname+'/daxepage'+url.pathname; |
|
} else { |
|
var initial = form.problemmode.value; |
|
form.problemmode.value = probmode; |
|
form.submit(); |
|
form.problemmode.value = initial; |
|
} |
|
} |
|
// ]]> |
|
</script> |
|
ENDSCRIPT |
|
} |
|
|
|
sub seteditor_javascript { |
|
my ($is_course_doc,$is_supp,$supp_path,$supp_title) = @_; |
|
my $symb; |
|
if ($is_course_doc) { |
|
if (!$is_supp) { |
|
($symb) = &Apache::lonnet::whichuser(); |
|
if ($symb) { |
|
$symb = &escape($symb); |
|
} |
|
} |
|
} |
|
return <<"ENDSCRIPT"; |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
function seteditmode(form,editor) { |
|
var querystr = ''; |
|
var supplemental = '$is_supp'; |
|
var coursedoc = '$is_course_doc'; |
|
if (coursedoc) { |
|
if (supplemental) { |
|
var supppath = '$supp_path'; |
|
var supptitle = '$supp_title'; |
|
if (supppath) { |
|
querystr = 'folderpath='+supppath; |
|
} |
|
if (supptitle) { |
|
if (querystr) { |
|
querystr += '&'; |
|
} |
|
querystr += 'title='+supptitle; |
|
} |
|
} |
|
} |
|
if (editor == 'daxe') { |
|
var url = new URL(document.location.href); |
|
var newloc = url.protocol+'//'+url.hostname+'/daxepage'+url.pathname; |
|
if (querystr) { |
|
if (/\\?/.test(url.pathname)) { |
|
newloc += '&'; |
|
} else { |
|
newloc += '?'; |
|
} |
|
newloc += querystr; |
|
} |
|
window.location = newloc; |
|
} else { |
|
if (coursedoc) { |
|
var curraction = form.action; |
|
var idx = curraction.indexOf('?'); |
|
if (idx !== -1) { |
|
form.action = curraction.substring(0,idx); |
|
} |
|
form.action += '?forceedit=1®ister=1'; |
|
if (querystr) { |
|
form.action += '&'+querystr; |
|
} |
|
} |
|
if (editor == 'edit') { |
|
form.editmode.value = editor; |
|
} else { |
|
form.editmode.value = ''; |
|
} |
|
form.submit(); |
|
} |
|
} |
|
// ]]> |
|
</script> |
|
ENDSCRIPT |
} |
} |
|
|
sub get_target { |
sub get_target { |
Line 1750 sub handler {
|
Line 1805 sub handler {
|
|
|
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'); |
&Apache::loncommon::no_cache($request); |
&Apache::loncommon::no_cache($request); |
if ($env{'request.state'} eq 'published') { |
if ($env{'request.state'} eq 'published') { |
Line 1758 sub handler {
|
Line 1813 sub handler {
|
'lastrevisiondate')); |
'lastrevisiondate')); |
} |
} |
# Embedded Flash movies from Camtasia served from https will not display in IE |
# Embedded Flash movies from Camtasia served from https will not display in IE |
# if XML config file has expired from cache. |
# if XML config file has expired from cache. |
if ($ENV{'SERVER_PORT'} == 443) { |
if ($ENV{'SERVER_PORT'} == 443) { |
if ($request->uri =~ /\.xml$/) { |
if ($request->uri =~ /\.xml$/) { |
my ($httpbrowser,$clientbrowser) = |
my ($httpbrowser,$clientbrowser) = |
Line 1773 sub handler {
|
Line 1828 sub handler {
|
} |
} |
} |
} |
$request->send_http_header; |
$request->send_http_header; |
|
|
return OK if $request->header_only; |
return OK if $request->header_only; |
|
|
|
|
Line 1820 sub handler {
|
Line 1875 sub handler {
|
# Edit action? Save file. |
# Edit action? Save file. |
# |
# |
if (!($env{'request.state'} eq 'published')) { |
if (!($env{'request.state'} eq 'published')) { |
if ($env{'form.savethisfile'} || $env{'form.viewmode'} || $env{'form.Undo'}) { |
if (($env{'form.problemmode'} eq 'saveedit') || |
|
($env{'form.problemmode'} eq 'saveview') || |
|
($env{'form.problemmode'} eq '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'}) { |
if ($env{'form.problemmode'} eq 'saveedit') { |
$env{'form.editmode'}='Edit'; #force edit mode |
$env{'form.editmode'}='edit'; #force edit mode |
} |
} |
} |
} |
} |
} |
|
my $inhibit_menu; |
my %mystyle; |
my %mystyle; |
my $result = ''; |
my $result = ''; |
my $filecontents=&Apache::lonnet::getfile($file); |
my $filecontents=&Apache::lonnet::getfile($file); |
if ($filecontents eq -1) { |
if ($filecontents eq -1) { |
my $start_page=&Apache::loncommon::start_page('File Error'); |
my ($start_page,$end_page,$errormsg); |
my $end_page=&Apache::loncommon::end_page(); |
$start_page=&Apache::loncommon::start_page('File Error'); |
my $errormsg='<p class="LC_error">' |
if ($target eq 'web') { |
.&mt('File not found: [_1]' |
$start_page .= '<div class="LC_landmark" style="clear:both" role="menu">'. |
,'<span class="LC_filename">'.$file.'</span>') |
'<h1 class="LC_visually_hidden">'. |
.'</p>'; |
&mt('File not found').'</h1>'; |
|
$end_page = '</div>'; |
|
} |
|
$end_page .= &Apache::loncommon::end_page(); |
|
$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 |
$errormsg |
$errormsg |
Line 1852 ENDNOTFOUND
|
Line 1917 ENDNOTFOUND
|
} elsif ($filetype ne 'css' && $filetype ne 'txt' && $filetype ne 'tex') { |
} elsif ($filetype ne 'css' && $filetype ne 'txt' && $filetype ne 'tex') { |
$filecontents=&createnewhtml(); |
$filecontents=&createnewhtml(); |
} |
} |
$env{'form.editmode'}='Edit'; #force edit mode |
$env{'form.editmode'}='edit'; #force edit mode |
} |
} |
} else { |
} else { |
unless ($env{'request.state'} eq 'published') { |
unless ($env{'request.state'} eq 'published') { |
Line 1864 ENDNOTFOUND
|
Line 1929 ENDNOTFOUND
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['editmode']); |
['editmode']); |
} |
} |
if (!$env{'form.editmode'} || $env{'form.viewmode'} || $env{'form.discardview'}) { |
if ((!$env{'form.editmode'}) || |
|
($env{'form.problemmode'} eq 'saveview') || |
|
($env{'form.problemmode'} eq 'discard')) { |
if ($filetype eq 'html' || $filetype eq 'sty') { |
if ($filetype eq 'html' || $filetype eq 'sty') { |
&Apache::structuretags::reset_problem_globals(); |
&Apache::structuretags::reset_problem_globals(); |
$result = &Apache::lonxml::xmlparse($request,$target, |
$result = &Apache::lonxml::xmlparse($request,$target, |
Line 1885 ENDNOTFOUND
|
Line 1952 ENDNOTFOUND
|
&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 ne 'html') && |
if (($env{'request.state'} eq 'construct') && |
(!$env{'form.return_only_error_and_warning_counts'})) { |
(($filetype eq 'css') || ($filetype eq 'js')) && ($ENV{'HTTP_REFERER'})) { |
|
if ($ENV{'HTTP_REFERER'} =~ m{^https?\://[^\/]+/priv/$LONCAPA::match_domain/$LONCAPA::match_username/[^\?]+\.(x?html?|swf)(|\?)[^\?]*$}) { |
|
$inhibit_menu = 1; |
|
} |
|
} |
|
if (($filetype ne 'html') && |
|
(!$env{'form.return_only_error_and_warning_counts'}) && |
|
(!$inhibit_menu)) { |
my $nochgview = 1; |
my $nochgview = 1; |
my $controls = ''; |
my $controls = ''; |
if ($env{'request.state'} eq 'construct') { |
if ($env{'request.state'} eq 'construct') { |
Line 1903 ENDNOTFOUND
|
Line 1977 ENDNOTFOUND
|
} |
} |
my $brcrum; |
my $brcrum; |
if ($env{'request.state'} eq 'construct') { |
if ($env{'request.state'} eq 'construct') { |
$brcrum = [{'href' => &Apache::loncommon::authorspace($request->uri), |
my $text = 'Authoring Space'; |
'text' => 'Authoring Space'}, |
my $href = &Apache::loncommon::authorspace($request->uri); |
|
if ($env{'request.course.id'}) { |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
if ($href eq "/priv/$cdom/$cnum/") { |
|
$text = 'Course Authoring Space'; |
|
} |
|
} |
|
$brcrum = [{'href' => $href, |
|
'text' => $text,}, |
{'href' => '', |
{'href' => '', |
'text' => $breadcrumbtext}]; |
'text' => $breadcrumbtext}]; |
} else { |
} else { |
Line 1924 ENDNOTFOUND
|
Line 2007 ENDNOTFOUND
|
# |
# |
# Edit action? Insert editing commands |
# Edit action? Insert editing commands |
# |
# |
unless ($env{'request.state'} eq 'published') { |
unless (($env{'request.state'} eq 'published') || ($inhibit_menu)) { |
if ($env{'form.editmode'} && (!($env{'form.viewmode'})) && (!($env{'form.discardview'}))) |
if (($env{'form.editmode'}) && |
{ |
(!($env{'form.problemmode'} eq 'saveview')) && |
|
(!($env{'form.problemmode'} eq 'discard'))) { |
my ($displayfile,$url,$symb,$itemtitle,$action); |
my ($displayfile,$url,$symb,$itemtitle,$action); |
$displayfile=$request->uri; |
$displayfile=$request->uri; |
if ($request->uri =~ m{^/uploaded/}) { |
if ($request->uri =~ m{^/uploaded/}) { |
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
if ($request->uri =~ m{^\Q/uploaded/$cdom/$cnum/supplemental/\E}) { |
if ($request->uri =~ m{^\Q/uploaded/$cdom/$cnum/\E(docs|supplemental)/}) { |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
if ($1 eq 'supplemental') { |
['folderpath','title']); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
|
['folderpath','title']); |
|
} |
|
if (($env{'request.state'} eq 'edit') && ($env{'form.editmode'} eq 'edit') && |
|
($filetype eq 'html')) { |
|
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
|
} |
} elsif ($request->uri =~ m{^\Q/uploaded/$cdom/$cnum/portfolio/syllabus/\E(.+)$}) { |
} elsif ($request->uri =~ m{^\Q/uploaded/$cdom/$cnum/portfolio/syllabus/\E(.+)$}) { |
my $filename = $1; |
my $filename = $1; |
if ($1 eq 'loncapa.html') { |
if ($1 eq 'loncapa.html') { |
Line 1946 ENDNOTFOUND
|
Line 2036 ENDNOTFOUND
|
} |
} |
} |
} |
unless ($itemtitle) { |
unless ($itemtitle) { |
($symb,$itemtitle,$displayfile) = |
($symb,$itemtitle,$displayfile) = |
&get_courseupload_hierarchy($request->uri, |
&get_courseupload_hierarchy($request->uri, |
$env{'form.folderpath'}, |
$env{'form.folderpath'}, |
$env{'form.title'}); |
$env{'form.title'}); |
Line 1959 ENDNOTFOUND
|
Line 2049 ENDNOTFOUND
|
&inserteditinfo($filecontents,$filetype,$displayfile,$symb, |
&inserteditinfo($filecontents,$filetype,$displayfile,$symb, |
$itemtitle,$env{'form.folderpath'},$request->uri,$action); |
$itemtitle,$env{'form.folderpath'},$request->uri,$action); |
|
|
my %options = |
my %options = |
('add_entries' => |
('add_entries' => |
{'onresize' => $add_to_onresize, |
{'onresize' => $add_to_onresize, |
'onload' => $add_to_onload, }); |
'onload' => $add_to_onload, }); |
my $header; |
my $header; |
if ($env{'request.state'} eq 'construct') { |
if ($env{'request.state'} eq 'construct') { |
|
my $text = 'Authoring Space'; |
|
my $href = &Apache::loncommon::authorspace($request->uri); |
|
if ($env{'request.course.id'}) { |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
if ($href eq "/priv/$cdom/$cnum/") { |
|
$text = 'Course Authoring Space'; |
|
} |
|
} |
$options{'bread_crumbs'} = [{ |
$options{'bread_crumbs'} = [{ |
'href' => &Apache::loncommon::authorspace($request->uri), |
'href' => $href, |
'text' => 'Authoring Space'}, |
'text' => $text}, |
{'href' => '', |
{'href' => '', |
'text' => $breadcrumbtext}]; |
'text' => $breadcrumbtext}]; |
$header = &Apache::loncommon::head_subbox( |
$header = &Apache::loncommon::head_subbox( |
Line 1989 ENDNOTFOUND
|
Line 2088 ENDNOTFOUND
|
|
|
&Apache::lonxml::add_messages(\$result); |
&Apache::lonxml::add_messages(\$result); |
$request->print($result); |
$request->print($result); |
|
|
return OK; |
return OK; |
} |
} |
|
|
Line 2022 sub get_courseupload_hierarchy {
|
Line 2121 sub get_courseupload_hierarchy {
|
} |
} |
if ($title) { |
if ($title) { |
push(@pathitems,&unescape($title)); |
push(@pathitems,&unescape($title)); |
|
$itemtitle = $title; |
} |
} |
$displaypath = join(' » ',@pathitems); |
$displaypath = join(' » ',@pathitems); |
} else { |
} else { |
Line 2059 sub debug {
|
Line 2159 sub debug {
|
} |
} |
|
|
sub show_error_warn_msg { |
sub show_error_warn_msg { |
if (($env{'request.filename'} eq |
if (($env{'request.filename'} eq |
$Apache::lonnet::perlvar{'lonDocRoot'}.'/res/lib/templates/simpleproblem.problem') && |
$Apache::lonnet::perlvar{'lonDocRoot'}.'/res/lib/templates/simpleproblem.problem') && |
(&Apache::lonnet::allowed('mdc',$env{'request.course.id'}))) { |
(&Apache::lonnet::allowed('mdc',$env{'request.course.id'}))) { |
return 1; |
return 1; |
Line 2123 sub error {
|
Line 2223 sub error {
|
my $declutter=&Apache::lonnet::declutter($env{'request.filename'}); |
my $declutter=&Apache::lonnet::declutter($env{'request.filename'}); |
my $baseurl = &Apache::lonnet::clutter($declutter); |
my $baseurl = &Apache::lonnet::clutter($declutter); |
my @userlist; |
my @userlist; |
foreach (keys %users) { |
foreach (keys(%users)) { |
my ($user,$domain) = split(/:/, $_); |
my ($user,$domain) = split(/:/, $_); |
push(@userlist,"$user:$domain"); |
push(@userlist,"$user:$domain"); |
my $key=$declutter.'_'.$user.'_'.$domain; |
my $key=$declutter.'_'.$user.'_'.$domain; |
Line 2154 sub error {
|
Line 2254 sub error {
|
|
|
sub warning { |
sub warning { |
$warningcount++; |
$warningcount++; |
|
|
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, |
Line 2169 sub warning {
|
Line 2269 sub warning {
|
} |
} |
|
|
sub info { |
sub info { |
if ($env{'form.grade_target'} ne 'tex' |
if ($env{'form.grade_target'} ne 'tex' |
&& $env{'request.state'} eq 'construct') { |
&& $env{'request.state'} eq 'construct') { |
push(@Apache::lonxml::info_messages,join('<br />',@_)."<br />\n"); |
push(@Apache::lonxml::info_messages,join('<br />',@_)."<br />\n"); |
} |
} |
Line 2194 sub add_messages {
|
Line 2294 sub add_messages {
|
|
|
sub get_param { |
sub get_param { |
my ($param,$parstack,$safeeval,$context,$case_insensitive, $noelide) = @_; |
my ($param,$parstack,$safeeval,$context,$case_insensitive, $noelide) = @_; |
|
|
if ( ! $context ) { $context = -1; } |
if ( ! $context ) { $context = -1; } |
my $args =''; |
my $args =''; |
if ( $#$parstack > (-2-$context) ) { $args=$$parstack[$context]; } |
if ( $#$parstack > (-2-$context) ) { $args=$$parstack[$context]; } |
Line 2201 sub get_param {
|
Line 2302 sub get_param {
|
$args=$Apache::lonxml::style_values.$args; |
$args=$Apache::lonxml::style_values.$args; |
} |
} |
|
|
|
|
if ($noelide) { |
if ($noelide) { |
$args =~ s/'\$/'\\\$/g; |
# $args =~ s/\\'/'/g; |
|
$args =~ s/'\$/'\\\$/g; |
} |
} |
|
|
if ( ! $args ) { return undef; } |
if ( ! $args ) { return undef; } |
if ( $case_insensitive ) { |
if ( $case_insensitive ) { |
if ($args =~ s/(my (?:.*))(\$\Q$param\E[,\)])/$1.lc($2)/ei) { |
if ($args =~ s/(my (?:.*))(\$\Q$param\E[,\)])/$1.lc($2)/ei) { |
|
|
return &Apache::run::run("{$args;".'return $'.$param.'}', |
return &Apache::run::run("{$args;".'return $'.$param.'}', |
$safeeval); #' |
$safeeval); #' |
} else { |
} else { |
Line 2215 sub get_param {
|
Line 2319 sub get_param {
|
} |
} |
} else { |
} else { |
if ( $args =~ /my .*\$\Q$param\E[,\)]/ ) { |
if ( $args =~ /my .*\$\Q$param\E[,\)]/ ) { |
|
|
return &Apache::run::run("{$args;".'return $'.$param.'}', |
return &Apache::run::run("{$args;".'return $'.$param.'}', |
$safeeval); #' |
$safeeval); #' |
} else { |
} else { |
Line 2296 sub register_insert_xml {
|
Line 2401 sub register_insert_xml {
|
} |
} |
} |
} |
} |
} |
|
|
# parse the allows and ignore tags set to <show>no</show> |
# parse the allows and ignore tags set to <show>no</show> |
foreach my $tag (@alltags) { |
foreach my $tag (@alltags) { |
next if (!exists($insertlist{$tag.'.allow'})); |
next if (!exists($insertlist{$tag.'.allow'})); |
Line 2318 sub register_insert {
|
Line 2423 sub register_insert {
|
|
|
sub dump_insertlist { |
sub dump_insertlist { |
my ($ext) = @_; |
my ($ext) = @_; |
open(XML,">/tmp/insertlist.xml.$ext"); |
open(XML,">","/tmp/insertlist.xml.$ext"); |
print XML ("<insertlist>"); |
print XML ("<insertlist>"); |
my $i=0; |
my $i=0; |
|
|
Line 2376 sub description {
|
Line 2481 sub description {
|
sub helpinfo { |
sub helpinfo { |
my ($token)=@_; |
my ($token)=@_; |
my $tag = &get_tag($token); |
my $tag = &get_tag($token); |
return ($insertlist{$tag.'.helpfile'}, $insertlist{$tag.'.helpdesc'}); |
return ($insertlist{$tag.'.helpfile'}, &mt($insertlist{$tag.'.helpdesc'})); |
} |
} |
|
|
sub get_tag { |
sub get_tag { |
Line 2402 sub get_tag {
|
Line 2507 sub get_tag {
|
=item &print_pdf_radiobutton(fieldname, value) |
=item &print_pdf_radiobutton(fieldname, value) |
|
|
Returns a latexline to generate a PDF-Form-Radiobutton. |
Returns a latexline to generate a PDF-Form-Radiobutton. |
Note: Radiobuttons with equal names are automaticly grouped |
Note: Radiobuttons with equal names are automaticly grouped |
in a selection-group. |
in a selection-group. |
|
|
$fieldname: PDF internalname of the radiobutton(group) |
$fieldname: PDF internalname of the radiobutton(group) |
Line 2429 sub print_pdf_start_combobox {
|
Line 2534 sub print_pdf_start_combobox {
|
my $result; |
my $result; |
my ($fieldName) = @_; |
my ($fieldName) = @_; |
$result .= '\begin{tabularx}{\textwidth}{p{2.5cm}X}'."\n"; |
$result .= '\begin{tabularx}{\textwidth}{p{2.5cm}X}'."\n"; |
$result .= '\comboBox[]{'.$fieldName.'}{2.3cm}{14bp}{'; # |
$result .= '\comboBox[]{'.$fieldName.'}{2.3cm}{14bp}{'; # |
|
|
return $result; |
return $result; |
} |
} |
Line 2447 $option: PDF internal name of the Combob
|
Line 2552 $option: PDF internal name of the Combob
|
sub print_pdf_add_combobox_option { |
sub print_pdf_add_combobox_option { |
|
|
my $result; |
my $result; |
my ($option) = @_; |
my ($option) = @_; |
|
|
$result .= '('.$option.')'; |
$result .= '('.$option.')'; |
|
|
return $result; |
return $result; |
} |
} |
|
|