version 1.494.4.1, 2009/08/13 04:30:56
|
version 1.567, 2023/11/28 04:48:14
|
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 111 use Apache::loncacc();
|
Line 113 use Apache::loncacc();
|
use Apache::lonmaxima(); |
use Apache::lonmaxima(); |
use Apache::lonr(); |
use Apache::lonr(); |
use Apache::lonlocal; |
use Apache::lonlocal; |
|
use Apache::lonhtmlcommon(); |
|
use Apache::functionplotresponse(); |
|
use Apache::lonnavmaps(); |
|
|
#==================================== Main subroutine: xmlparse |
#==================================== Main subroutine: xmlparse |
|
|
Line 141 $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 208 sub xmlend {
|
Line 213 sub xmlend {
|
my $discussion; |
my $discussion; |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['LONCAPA_INTERNAL_no_discussion']); |
['LONCAPA_INTERNAL_no_discussion']); |
if (! exists($env{'form.LONCAPA_INTERNAL_no_discussion'}) || |
if ( |
$env{'form.LONCAPA_INTERNAL_no_discussion'} ne 'true') { |
( (!exists($env{'form.LONCAPA_INTERNAL_no_discussion'})) |
|
|| ($env{'form.LONCAPA_INTERNAL_no_discussion'} ne 'true') |
|
) |
|
&& ($env{'form.inhibitmenu'} ne 'yes') |
|
) { |
$discussion=&Apache::lonfeedback::list_discussion($mode,$status); |
$discussion=&Apache::lonfeedback::list_discussion($mode,$status); |
} |
} |
if ($target eq 'tex') { |
if ($target eq 'tex') { |
Line 221 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"> |
|
<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 394 sub xmlparse {
|
Line 307 sub xmlparse {
|
&clean_safespace($safeeval); |
&clean_safespace($safeeval); |
|
|
if (@script_var_displays) { |
if (@script_var_displays) { |
$finaloutput .= join('',@script_var_displays); |
if ($finaloutput =~ m{</body>\s*</html>\s*$}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(); |
Line 429 sub latex_special_symbols {
|
Line 347 sub latex_special_symbols {
|
} 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 452 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 547 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 570 sub inner_xmlparse {
|
Line 502 sub inner_xmlparse {
|
} |
} |
if (($ENV{'QUERY_STRING'}) && ($target eq 'web')) { |
if (($ENV{'QUERY_STRING'}) && ($target eq 'web')) { |
$finaloutput=&afterburn($finaloutput); |
$finaloutput=&afterburn($finaloutput); |
|
} |
|
if ($target eq 'modified') { |
|
# if modfied, handle startpart and endpart |
|
$finaloutput=~s/\<startpartmarker[^\>]*\>(.*)\<endpartmarker[^\>]*\>/<part>$1<\/part>/gs; |
} |
} |
return $finaloutput; |
return $finaloutput; |
} |
} |
Line 732 sub setup_globals {
|
Line 668 sub setup_globals {
|
|
|
sub init_safespace { |
sub init_safespace { |
my ($target,$safeeval,$safehole,$safeinit) = @_; |
my ($target,$safeeval,$safehole,$safeinit) = @_; |
|
$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(":base_math"); |
$safeeval->permit(":base_math"); |
Line 876 sub init_safespace {
|
Line 813 sub init_safespace {
|
$safehole->wrap(\&Apache::lonnet::logthis,$safeeval,'&LONCAPA_INTERNAL_LOGTHIS'); |
$safehole->wrap(\&Apache::lonnet::logthis,$safeeval,'&LONCAPA_INTERNAL_LOGTHIS'); |
$safehole->wrap(\&Apache::inputtags::finalizeawards,$safeeval,'&LONCAPA_INTERNAL_FINALIZEAWARDS'); |
$safehole->wrap(\&Apache::inputtags::finalizeawards,$safeeval,'&LONCAPA_INTERNAL_FINALIZEAWARDS'); |
$safehole->wrap(\&Apache::caparesponse::get_sigrange,$safeeval,'&LONCAPA_INTERNAL_get_sigrange'); |
$safehole->wrap(\&Apache::caparesponse::get_sigrange,$safeeval,'&LONCAPA_INTERNAL_get_sigrange'); |
|
$safehole->wrap(\&Apache::functionplotresponse::fpr_val,$safeeval,'&fpr_val'); |
|
$safehole->wrap(\&Apache::functionplotresponse::fpr_f,$safeeval,'&fpr_f'); |
|
$safehole->wrap(\&Apache::functionplotresponse::fpr_dfdx,$safeeval,'&fpr_dfdx'); |
|
$safehole->wrap(\&Apache::functionplotresponse::fpr_d2fdx2,$safeeval,'&fpr_d2fdx2'); |
|
$safehole->wrap(\&Apache::functionplotresponse::fpr_vectorcoords,$safeeval,'&fpr_vectorcoords'); |
|
$safehole->wrap(\&Apache::functionplotresponse::fpr_objectcoords,$safeeval,'&fpr_objectcoords'); |
|
$safehole->wrap(\&Apache::functionplotresponse::fpr_vectorlength,$safeeval,'&fpr_vectorlength'); |
|
$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'); |
#need to inspect this class of ops |
#need to inspect this class of ops |
Line 883 sub init_safespace {
|
Line 832 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 922 sub initialize_rndseed {
|
Line 874 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 { |
my ($safeeval)=@_; |
my ($safeeval)=@_; |
&Apache::lonxml::debug('Loading default_homework'); |
&Apache::lonxml::debug('Loading default_homework'); |
my $default=&Apache::lonnet::getfile('/home/httpd/html/res/adm/includes/default_homework.lcpm'); |
my $default=&Apache::lonnet::getfile($Apache::lonnet::perlvar{'lonIncludes'}. |
|
'/default_homework.lcpm'); |
if ($default eq -1) { |
if ($default eq -1) { |
&Apache::lonxml::error("<b>Unable to find <i>default_homework.lcpm</i></b>"); |
&Apache::lonxml::error("<b>Unable to find <i>default_homework.lcpm</i></b>"); |
} else { |
} else { |
Line 1042 sub decreasedepth {
|
Line 996 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; } |
return $id; |
return $id; |
Line 1097 the current 'bubble line number' is stor
|
Line 1051 the current 'bubble line number' is stor
|
The value of it is stored in $Apache:lonxml::counter when live and |
The value of it is stored in $Apache:lonxml::counter when live and |
stored back to env after done. |
stored back to env after done. |
|
|
=item &increment_counter($increment); |
=item &increment_counter($increment, $part_response); |
|
|
Increments the internal counter environment variable a specified amount |
Increments the internal counter environment variable a specified amount |
|
|
Line 1395 sub extlink {
|
Line 1349 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 1431 sub do_registered_ssi {
|
Line 1385 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 1523 SIMPLECONTENT
|
Line 1479 SIMPLECONTENT
|
|
|
sub verify_html { |
sub verify_html { |
my ($filecontents)=@_; |
my ($filecontents)=@_; |
if ($filecontents!~/(?:\<|\<\;)(?:html|xml)[^\<]*(?:\>|\>\;)/is) { |
my ($is_html,$is_xml,$is_physnet); |
return &mt('File does not have [_1] or [_2] starting tag','<html>','<xml>'); |
if ($filecontents =~/(?:\<|\<\;)\?xml[^\<]*\?(?:\>|\>\;)/is) { |
} |
$is_xml = 1; |
if ($filecontents!~/(?:\<|\<\;)\/(?:html|xml)(?:\>|\>\;)/is) { |
} elsif ($filecontents =~/(?:\<|\<\;)html(?:\s+[^\<]+|\s*)(?:\>|\>\;)/is) { |
return &mt('File does not have [_1] or [_2] ending tag','<html>','<xml>'); |
$is_html = 1; |
} |
} elsif ($filecontents =~/(?:\<|\<\;)physnet[^\<]*(?:\>|\>\;)/is) { |
if ($filecontents!~/(?:\<|\<\;)(?:body|frameset)[^\<]*(?:\>|\>\;)/is) { |
$is_physnet = 1; |
return &mt('File does not have [_1] or [_2] starting tag','<body>','<frameset>'); |
} |
} |
unless ($is_xml || $is_html || $is_physnet) { |
if ($filecontents!~/(?:\<|\<\;)\/(?:body|frameset)[^\<]*(?:\>|\>\;)/is) { |
return &mt('File does not have [_1] or [_2] starting tag','<html>','<?xml ?>'); |
return &mt('File does not have [_1] or [_2] ending tag','<body>','<frameset>'); |
} |
|
if ($is_html) { |
|
if ($filecontents!~/(?:\<|\<\;)\/html(?:\>|\>\;)/is) { |
|
return &mt('File does not have [_1] ending tag','<html>'); |
|
} |
|
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 ''; |
return ''; |
} |
} |
Line 1546 sub renderingoptions {
|
Line 1512 sub renderingoptions {
|
= &Apache::loncommon::plainlanguagedescription($_); |
= &Apache::loncommon::plainlanguagedescription($_); |
} |
} |
} |
} |
return |
my $output; |
'<span class="LC_nobreak">'. |
unless ($env{'form.forceedit'}) { |
&mt('Language:').' '. |
$output .= |
&Apache::loncommon::select_form($env{'form.languages'},'languages', |
'<span class="LC_nobreak">'. |
%langchoices).' |
&mt('Language:').' '. |
</span> |
&Apache::loncommon::select_form( |
<span class="LC_nobreak">'. |
$env{'form.languages'}, |
|
'languages', |
|
{&Apache::lonlocal::texthash(%langchoices)}). |
|
'</span>'; |
|
} |
|
$output .= |
|
' <span class="LC_nobreak">'. |
&mt('Math Rendering:').' '. |
&mt('Math Rendering:').' '. |
&Apache::loncommon::select_form($env{'form.texengine'},'texengine', |
&Apache::loncommon::select_form( |
('' => '', |
$env{'form.texengine'}, |
'tth' => 'tth (TeX to HTML)', |
'texengine', |
'jsMath' => 'jsMath', |
{&Apache::lonlocal::texthash |
'mimetex' => 'mimetex (Convert to Images)')).' |
('' => '', |
</span>'; |
'tth' => 'tth (TeX to HTML)', |
|
'MathJax' => 'MathJax', |
|
'mimetex' => 'mimetex (Convert to Images)')}). |
|
'</span>'; |
|
return $output; |
} |
} |
|
|
sub inserteditinfo { |
sub inserteditinfo { |
my ($filecontents, $filetype, $filename)=@_; |
my ($filecontents,$filetype,$filename,$symb,$itemtitle,$folderpath,$uri,$action) = @_; |
$filecontents = &HTML::Entities::encode($filecontents,'<>&"'); |
$filecontents = &HTML::Entities::encode($filecontents,'<>&"'); |
my $xml_help = ''; |
my $xml_help = ''; |
my $initialize=''; |
my $initialize=''; |
my $textarea_id = 'filecont'; |
my $textarea_id = 'filecont'; |
my $dragmath_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' |
if ($filetype eq 'html') { |
&& (!&Apache::lonhtmlcommon::htmlareablocked() && |
if ($env{'request.course.id'}) { |
&Apache::lonhtmlcommon::htmlareabrowser())) { |
$cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
$textarea_id .= '___Frame'; |
$cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $lang = &Apache::lonhtmlcommon::htmlarea_lang(); |
if ($uri =~ m{^\Q/uploaded/$cdom/$cnum/portfolio/syllabus/\E}) { |
$initialize.=(<<FULLPAGE); |
$context = 'syllabus'; |
<script type="text/javascript"> |
} |
lonca |
} |
function initDocument() { |
if (&Apache::lonhtmlcommon::htmlareabrowser()) { |
var oFCKeditor = new FCKeditor('filecont'); |
my $lang = &Apache::lonhtmlcommon::htmlarea_lang(); |
oFCKeditor.Config['CustomConfigurationsPath'] = '/fckeditor/loncapaconfig.js' ; |
my %textarea_args = ( |
oFCKeditor.Config['FullPage'] = true |
fullpage => 'true', |
oFCKeditor.Config['AutoDetectLanguage'] = false; |
dragmath => 'math', |
oFCKeditor.Config['DefaultLanguage'] = "$lang"; |
); |
oFCKeditor.ReplaceTextarea(); |
$initialize .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args); |
} |
if ($context eq 'syllabus') { |
function check_if_dirty(editor) { |
$init_dragmath = "editmath_visibility('filecont','none')"; |
if (editor.IsDirty()) { |
} |
unClean(); |
} |
} |
} |
} |
$initialize .= (<<FULLPAGE); |
function FCKeditor_OnComplete(editor) { |
|
editor.Events.AttachEvent("OnSelectionChange",check_if_dirty); |
|
resize_textarea('$textarea_id','LC_aftertextarea'); |
|
} |
|
</script> |
|
FULLPAGE |
|
} else { |
|
$initialize.=(<<FULLPAGE); |
|
<script type="text/javascript"> |
<script type="text/javascript"> |
|
// <![CDATA[ |
function initDocument() { |
function initDocument() { |
resize_textarea('$textarea_id','LC_aftertextarea'); |
resize_textarea('$textarea_id','LC_aftertextarea'); |
|
$init_dragmath |
} |
} |
|
// ]]> |
</script> |
</script> |
FULLPAGE |
FULLPAGE |
if ($filetype eq 'html') { |
my $textareaclass; |
$initialize .= "\n".&Apache::lonhtmlcommon::dragmath_js('EditMathPopup'); |
if ($filetype eq 'html') { |
$dragmath_button = &Apache::lonhtmlcommon::dragmath_button('filecont',1); |
if ($context eq 'syllabus') { |
|
$deps_button = &Apache::lonhtmlcommon::dependencies_button()."\n"; |
|
$initialize .= |
|
&Apache::lonhtmlcommon::dependencycheck_js(undef,&mt('Syllabus'), |
|
$uri,undef, |
|
"/public/$cdom/$cnum/syllabus"). |
|
"\n"; |
|
if (&Apache::lonhtmlcommon::htmlareabrowser()) { |
|
$textareaclass = 'class="LC_richDefaultOn"'; |
|
} |
|
} 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>'; |
|
$initialize .= "\n".&Apache::lonhtmlcommon::dragmath_js('EditMathPopup'); |
} |
} |
|
|
$add_to_onload = 'initDocument();'; |
$add_to_onload = 'initDocument();'; |
$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', |
my $spelllink .=&Apache::lonhtmlcommon::spelllink('xmledit','filecont'); |
'ew' => 'Edit with Daxe'); |
|
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; |
my $htmlerror; |
Line 1634 FULLPAGE
|
Line 1625 FULLPAGE
|
if ($htmlerror) { |
if ($htmlerror) { |
$htmlerror='<span class="LC_error">'.$htmlerror.'</span>'; |
$htmlerror='<span class="LC_error">'.$htmlerror.'</span>'; |
} |
} |
|
if (&Apache::lonhtmlcommon::htmlareabrowser()) { |
|
unless ($textareaclass) { |
|
$textareaclass = 'class="LC_richDefaultOff"'; |
|
} |
|
} |
|
} |
|
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(); |
|
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"> |
<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 1646 $initialize
|
Line 1662 $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'} /> |
$dragmath_button $spelllink $htmlerror |
|
</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 $htmlerror $deps_button $daxebutton $dragmath_button |
</div> |
</div> |
</div> |
</div> |
<textarea $textarea_events style="width:100%" cols="80" rows="44" name="filecont" id="filecont">$filecontents</textarea> |
<textarea $textarea_events style="width:100%" cols="80" rows="44" name="filecont" id="filecont" $textareaclass>$filecontents</textarea><br />$spelllink |
<div id="LC_aftertextarea"> |
<div id="LC_aftertextarea"> |
<br /> |
<br /> |
$titledisplay |
$titledisplay |
</div> |
</div> |
</form> |
</form> |
</body> |
|
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 { |
|
return <<"ENDSCRIPT"; |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
function seteditmode(form,editor) { |
|
if (editor == 'daxe') { |
|
var url = new URL(document.location.href); |
|
window.location = url.protocol+'//'+url.hostname+'/daxepage'+url.pathname; |
|
} else { |
|
form.editmode.value = editor; |
|
form.submit(); |
|
} |
|
} |
|
// ]]> |
|
</script> |
|
ENDSCRIPT |
} |
} |
|
|
sub get_target { |
sub get_target { |
Line 1706 sub handler {
|
Line 1758 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; |
|
|
|
|
my $file=&Apache::lonnet::filelocation("",$request->uri); |
my $file=&Apache::lonnet::filelocation("",$request->uri); |
my $filetype; |
my ($filetype,$breadcrumbtext); |
if ($file =~ /\.(sty|css|js|txt)$/) { |
if ($file =~ /\.(sty|css|js|txt|tex)$/) { |
$filetype=$1; |
$filetype=$1; |
} else { |
} else { |
$filetype='html'; |
$filetype='html'; |
} |
} |
|
unless ($env{'request.uri'}) { |
|
$env{'request.uri'}=$request->uri; |
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
|
['todocs']); |
|
} |
|
my ($cdom,$cnum); |
|
if ($env{'request.course.id'}) { |
|
$cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
$cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
if ($filetype eq 'html') { |
|
if ($request->uri =~ m{^\Q/uploaded/$cdom/$cnum/portfolio/syllabus/\E.+$}) { |
|
if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) { |
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
|
['editmode']); |
|
} |
|
} |
|
} |
|
} |
|
if ($filetype eq 'sty') { |
|
$breadcrumbtext = 'Style File Editor'; |
|
} elsif ($filetype eq 'js') { |
|
$breadcrumbtext = 'Javascript Editor'; |
|
} elsif ($filetype eq 'css') { |
|
$breadcrumbtext = 'CSS Editor'; |
|
} elsif ($filetype eq 'txt') { |
|
$breadcrumbtext = 'Text Editor'; |
|
} elsif ($filetype eq 'tex') { |
|
$breadcrumbtext = 'TeX Editor'; |
|
} else { |
|
$breadcrumbtext = 'HTML Editor'; |
|
} |
|
|
# |
# |
# 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=&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=''; |
Line 1749 ENDNOTFOUND
|
Line 1853 ENDNOTFOUND
|
$filecontents=&createnewsty(); |
$filecontents=&createnewsty(); |
} elsif ($filetype eq 'js') { |
} elsif ($filetype eq 'js') { |
$filecontents=&createnewjs(); |
$filecontents=&createnewjs(); |
} elsif (($filetype ne 'css') && ($filetype ne 'txt')) { |
} 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 1764 ENDNOTFOUND
|
Line 1868 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 1773 ENDNOTFOUND
|
Line 1879 ENDNOTFOUND
|
# 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(); |
|
} elsif ($filetype eq 'tex') { |
|
$result = &Apache::lontexconvert::converted(\$filecontents, |
|
$env{'form.texengine'}); |
|
if ($env{'form.return_only_error_and_warning_counts'}) { |
|
$result = "$errorcount:$warningcount"; |
|
} |
} else { |
} else { |
$result = $filecontents; |
$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 ne 'html') { |
if (($env{'request.state'} eq 'construct') && |
my $nochgview = 1; |
(($filetype eq 'css') || ($filetype eq 'js')) && ($ENV{'HTTP_REFERER'})) { |
my $controls = |
if ($ENV{'HTTP_REFERER'} =~ m{^https?\://[^\/]+/priv/$LONCAPA::match_domain/$LONCAPA::match_username/[^\?]+\.(x?html?|swf)(|\?)[^\?]*$}) { |
($env{'request.state'} eq 'construct') ? &Apache::londefdef::edit_controls($nochgview) |
$inhibit_menu = 1; |
: ''; |
} |
if ($filetype ne 'sty') { |
} |
|
if (($filetype ne 'html') && |
|
(!$env{'form.return_only_error_and_warning_counts'}) && |
|
(!$inhibit_menu)) { |
|
my $nochgview = 1; |
|
my $controls = ''; |
|
if ($env{'request.state'} eq 'construct') { |
|
$controls = &Apache::loncommon::head_subbox( |
|
&Apache::loncommon::CSTR_pageheader() |
|
.&Apache::londefdef::edit_controls($nochgview)); |
|
} |
|
if ($filetype ne 'sty' && $filetype ne 'tex') { |
$result =~ s/</</g; |
$result =~ s/</</g; |
$result =~ s/>/>/g; |
$result =~ s/>/>/g; |
$result = '<table class="LC_sty_begin">'. |
$result = '<table class="LC_sty_begin">'. |
'<tr><td><b><pre>'.$result. |
'<tr><td><b><pre>'.$result. |
'</pre></b></td></tr></table>'; |
'</pre></b></td></tr></table>'; |
} |
} |
if ($env{'environment.remote'} eq 'off') { |
my $brcrum; |
my %options = ('bgcolor' => '#FFFFFF'); |
if ($env{'request.state'} eq 'construct') { |
$result = |
my $text = 'Authoring Space'; |
&Apache::loncommon::start_page(undef,undef,\%options). |
my $href = &Apache::loncommon::authorspace($request->uri); |
$controls. |
if ($env{'request.course.id'}) { |
$result. |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
&Apache::loncommon::end_page(); |
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' => '', |
|
'text' => $breadcrumbtext}]; |
} else { |
} else { |
$result = $controls.$result; |
$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(); |
} |
} |
} |
} |
} |
} |
|
|
# |
# |
# 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')) && |
my $displayfile=$request->uri; |
(!($env{'form.problemmode'} eq 'discard'))) { |
$displayfile=~s/^\/[^\/]*//; |
my ($displayfile,$url,$symb,$itemtitle,$action); |
|
$displayfile=$request->uri; |
|
if ($request->uri =~ m{^/uploaded/}) { |
|
if ($env{'request.course.id'}) { |
|
if ($request->uri =~ m{^\Q/uploaded/$cdom/$cnum/supplemental/\E}) { |
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
|
['folderpath','title']); |
|
} elsif ($request->uri =~ m{^\Q/uploaded/$cdom/$cnum/portfolio/syllabus/\E(.+)$}) { |
|
my $filename = $1; |
|
if ($1 eq 'loncapa.html') { |
|
$displayfile = &mt('Syllabus (minimal template)'); |
|
$action = $request->uri.'?forceedit=1'; |
|
} else { |
|
$displayfile = &mt('Syllabus file: [_1]',$1); |
|
} |
|
$itemtitle = &mt('Syllabus'); |
|
} |
|
} |
|
unless ($itemtitle) { |
|
($symb,$itemtitle,$displayfile) = |
|
&get_courseupload_hierarchy($request->uri, |
|
$env{'form.folderpath'}, |
|
$env{'form.title'}); |
|
} |
|
} else { |
|
$displayfile=~s/^\/[^\/]*//; |
|
} |
|
|
my ($edit_info, $add_to_onload, $add_to_onresize)= |
my ($edit_info, $add_to_onload, $add_to_onresize)= |
&inserteditinfo($filecontents,$filetype,$displayfile); |
&inserteditinfo($filecontents,$filetype,$displayfile,$symb, |
|
$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; |
if ($env{'environment.remote'} ne 'off') { |
if ($env{'request.state'} eq 'construct') { |
$options{'bgcolor'} = '#FFFFFF'; |
my $text = 'Authoring Space'; |
$options{'only_body'} = 1; |
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'} = [{ |
|
'href' => $href, |
|
'text' => $text}, |
|
{'href' => '', |
|
'text' => $breadcrumbtext}]; |
|
$header = &Apache::loncommon::head_subbox( |
|
&Apache::loncommon::CSTR_pageheader()); |
|
} |
my $js = |
my $js = |
&Apache::edit::js_change_detection(). |
&Apache::edit::js_change_detection(). |
&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(). |
.$header |
$edit_info. |
.&Apache::lonxml::message_location() |
&Apache::loncommon::end_page(); |
.$edit_info |
|
.&Apache::loncommon::end_page(); |
} |
} |
} |
} |
if ($filetype eq 'html') { &writeallows($request->uri); } |
if ($filetype eq 'html') { &writeallows($request->uri); } |
|
|
&Apache::lonxml::add_messages(\$result); |
&Apache::lonxml::add_messages(\$result); |
$request->print($result); |
$request->print($result); |
|
|
Line 1854 sub display_title {
|
Line 2034 sub display_title {
|
$title = substr($title, rindex($title, '/') + 1); |
$title = substr($title, rindex($title, '/') + 1); |
} |
} |
$result = "<script type='text/javascript'>top.document.title = '$title - LON-CAPA " |
$result = "<script type='text/javascript'>top.document.title = '$title - LON-CAPA " |
.&mt('Construction Space')."';</script>"; |
.&mt('Authoring Space')."';</script>"; |
} |
} |
return $result; |
return $result; |
} |
} |
|
|
|
sub get_courseupload_hierarchy { |
|
my ($url,$folderpath,$title) = @_; |
|
my ($symb,$itemtitle,$displaypath); |
|
if ($env{'request.course.id'}) { |
|
if ($folderpath =~ /^supplemental/) { |
|
my @folders = split(/\&/,$folderpath); |
|
my @pathitems; |
|
while (@folders) { |
|
my $folder=shift(@folders); |
|
my $foldername=shift(@folders); |
|
$foldername =~ s/\:(\d*)\:(\w*)\:(\w*):(\d*)\:?(\d*)$//; |
|
push(@pathitems,&unescape($foldername)); |
|
} |
|
if ($title) { |
|
push(@pathitems,&unescape($title)); |
|
} |
|
$displaypath = join(' » ',@pathitems); |
|
} else { |
|
$symb = &Apache::lonnet::symbread($url); |
|
my ($map,$id,$res)=&Apache::lonnet::decode_symb($symb); |
|
my $navmap=Apache::lonnavmaps::navmap->new; |
|
if (ref($navmap)) { |
|
my $res = $navmap->getBySymb($symb); |
|
if (ref($res)) { |
|
my @pathitems = |
|
&Apache::loncommon::get_folder_hierarchy($navmap,$map,1); |
|
$itemtitle = $res->compTitle(); |
|
push(@pathitems,$itemtitle); |
|
$displaypath = join(' » ',@pathitems); |
|
} |
|
} |
|
} |
|
} |
|
return ($symb,$itemtitle,$displaypath); |
|
} |
|
|
sub debug { |
sub debug { |
if ($Apache::lonxml::debug eq "1") { |
if ($Apache::lonxml::debug eq "1") { |
$|=1; |
$|=1; |
Line 1875 sub debug {
|
Line 2091 sub debug {
|
} |
} |
|
|
sub show_error_warn_msg { |
sub show_error_warn_msg { |
if ($env{'request.filename'} eq '/home/httpd/html/res/lib/templates/simpleproblem.problem' && |
if (($env{'request.filename'} eq |
&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) { |
$Apache::lonnet::perlvar{'lonDocRoot'}.'/res/lib/templates/simpleproblem.problem') && |
|
(&Apache::lonnet::allowed('mdc',$env{'request.course.id'}))) { |
return 1; |
return 1; |
} |
} |
return (($Apache::lonxml::debug eq 1) || |
return (($Apache::lonxml::debug eq 1) || |
Line 1938 sub error {
|
Line 2155 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; |
my %lastnotified=&Apache::lonnet::get('nohist_xmlerrornotifications', |
my %lastnotified=&Apache::lonnet::get('nohist_xmlerrornotifications', |
[$key], |
[$key], |
Line 1963 sub error {
|
Line 2180 sub error {
|
$errormsg=&mt("An error occurred 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,"<span class=\"LC_warning\">$errormsg</span><br />"); |
} |
} |
} |
} |
|
|
Line 2008 sub add_messages {
|
Line 2225 sub add_messages {
|
} |
} |
|
|
sub get_param { |
sub get_param { |
my ($param,$parstack,$safeeval,$context,$case_insensitive) = @_; |
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]; } |
if ( ! $Apache::lonxml::usestyle ) { |
if ( ! $Apache::lonxml::usestyle ) { |
$args=$Apache::lonxml::style_values.$args; |
$args=$Apache::lonxml::style_values.$args; |
} |
} |
|
|
|
|
|
if ($noelide) { |
|
# $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 2025 sub get_param {
|
Line 2251 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 2071 sub register_insert_xml {
|
Line 2298 sub register_insert_xml {
|
while (my $token = $parser->get_token()) { |
while (my $token = $parser->get_token()) { |
if ($token->[0] eq 'S') { |
if ($token->[0] eq 'S') { |
my $key; |
my $key; |
if ($token->[1] eq 'tag') { |
if ($token->[1] eq 'tag') { |
$tag = $token->[2]{'name'}; |
$tag = $token->[2]{'name'}; |
$insertlist{"$tagnum.tag"} = $tag; |
if (defined($tag)) { |
$insertlist{"$tag.num"} = $tagnum; |
$insertlist{$tagnum.'.tag'} = $tag; |
push(@alltags,$tag); |
$insertlist{$tag.'.num'} = $tagnum; |
|
push(@alltags,$tag); |
|
} |
} elsif ($in_help && $token->[1] eq 'file') { |
} elsif ($in_help && $token->[1] eq 'file') { |
$key = $tag.'.helpfile'; |
$key = $tag.'.helpfile'; |
} elsif ($in_help && $token->[1] eq 'description') { |
} elsif ($in_help && $token->[1] eq 'description') { |
Line 2107 sub register_insert_xml {
|
Line 2336 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'})); |
my $allow = $insertlist{"$tag.allow"}; |
my $allow = $insertlist{$tag.'.allow'}; |
foreach my $element (split(',',$allow)) { |
foreach my $element (split(',',$allow)) { |
$element =~ s/(^\s*|\s*$ )//gx; |
$element =~ s/(^\s*|\s*$ )//gx; |
if (!exists($insertlist{"$element.show"}) |
if (!exists($insertlist{$element.'.show'}) |
|| $insertlist{"$element.show"} ne 'no') { |
|| $insertlist{$element.'.show'} ne 'no') { |
push(@{ $insertlist{$tag.'.which'} },$element); |
push(@{ $insertlist{$tag.'.which'} },$element); |
} |
} |
} |
} |
Line 2126 sub register_insert {
|
Line 2355 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 2184 sub description {
|
Line 2413 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 2207 sub get_tag {
|
Line 2436 sub get_tag {
|
|
|
=pod |
=pod |
|
|
=item &print_pdf_radiobutton(fieldname, value, text) |
=item &print_pdf_radiobutton(fieldname, value) |
|
|
Returns a latexline to generate a PDF-Form-Radiobutton with Text. |
Returns a latexline to generate a PDF-Form-Radiobutton. |
|
Note: Radiobuttons with equal names are automaticly grouped |
|
in a selection-group. |
|
|
$fieldname: PDF internalname of the radiobutton |
$fieldname: PDF internalname of the radiobutton(group) |
$value: Value of radiobutton (read when dumping the PDF data) |
$value: Value of radiobutton |
$text: Text on the rightside of the radiobutton |
|
|
|
=cut |
=cut |
sub print_pdf_radiobutton { |
sub print_pdf_radiobutton { |
my $result = ''; |
my ($fieldname, $value) = @_; |
my ($fieldName, $value, $text) = @_; |
return '\radioButton[\symbolchoice{circle}]{' |
$result .= '\begin{tabularx}{\textwidth}{p{0cm}X}'."\n"; |
.$fieldname.'}{10bp}{10bp}{'.$value.'}'; |
$result .= '\radioButton[\symbolchoice{circle}]{'. |
|
$fieldName.'}{10bp}{10bp}{'.$value.'}&'.$text."\n"; |
|
$result .= '\end{tabularx}' . "\n"; |
|
$result .= '\hspace{2mm}' . "\n"; |
|
return $result; |
|
} |
} |
|
|
|
|