version 1.527, 2011/12/09 21:21:43
|
version 1.546, 2014/02/06 17:14:33
|
Line 113 use Apache::lonr();
|
Line 113 use Apache::lonr();
|
use Apache::lonlocal; |
use Apache::lonlocal; |
use Apache::lonhtmlcommon(); |
use Apache::lonhtmlcommon(); |
use Apache::functionplotresponse(); |
use Apache::functionplotresponse(); |
|
use Apache::lonnavmaps(); |
|
|
#==================================== Main subroutine: xmlparse |
#==================================== Main subroutine: xmlparse |
|
|
Line 143 $metamode = 0;
|
Line 144 $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 210 sub xmlend {
|
Line 211 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 301 sub xmlparse {
|
Line 306 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(); |
Line 644 sub setup_globals {
|
Line 653 sub setup_globals {
|
|
|
sub init_safespace { |
sub init_safespace { |
my ($target,$safeeval,$safehole,$safeinit) = @_; |
my ($target,$safeeval,$safehole,$safeinit) = @_; |
$safeeval->reval('use Math::Complex;'); |
|
$safeeval->reval('use LaTeX::Table;'); |
$safeeval->reval('use LaTeX::Table;'); |
$safeeval->deny_only(':dangerous'); |
$safeeval->deny_only(':dangerous'); |
|
$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 1354 sub do_registered_ssi {
|
Line 1363 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 1505 sub renderingoptions {
|
Line 1516 sub renderingoptions {
|
} |
} |
|
|
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); |
my ($add_to_onload, $add_to_onresize); |
my ($add_to_onload, $add_to_onresize); |
$initialize=&Apache::lonhtmlcommon::spellheader(); |
$initialize=&Apache::lonhtmlcommon::spellheader(); |
if (($filetype eq 'html') && (&Apache::lonhtmlcommon::htmlareabrowser())) { |
if (($filetype eq 'html') && (&Apache::lonhtmlcommon::htmlareabrowser())) { |
Line 1530 sub inserteditinfo {
|
Line 1541 sub inserteditinfo {
|
// ]]> |
// ]]> |
</script> |
</script> |
FULLPAGE |
FULLPAGE |
|
my $textareaclass; |
if ($filetype eq 'html') { |
if ($filetype eq 'html') { |
|
my $context; |
|
if ($env{'request.course.id'}) { |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
if ($uri =~ m{^\Q/uploaded/$cdom/$cnum/portfolio/syllabus/\E}) { |
|
$context = '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"'; |
|
} |
|
} |
|
} |
|
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"; |
|
} |
|
} |
$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 1542 FULLPAGE
|
Line 1579 FULLPAGE
|
} |
} |
|
|
my $titledisplay=&display_title(); |
my $titledisplay=&display_title(); |
my $textareaclass; |
|
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', |
Line 1558 FULLPAGE
|
Line 1594 FULLPAGE
|
$htmlerror='<span class="LC_error">'.$htmlerror.'</span>'; |
$htmlerror='<span class="LC_error">'.$htmlerror.'</span>'; |
} |
} |
if (&Apache::lonhtmlcommon::htmlareabrowser()) { |
if (&Apache::lonhtmlcommon::htmlareabrowser()) { |
$textareaclass = 'class="LC_richDefaultOff"'; |
unless ($textareaclass) { |
|
$textareaclass = 'class="LC_richDefaultOff"'; |
|
} |
} |
} |
} |
} |
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"> |
<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 1575 $initialize
|
Line 1613 $initialize
|
<div class="LC_edit_problem_discards"> |
<div class="LC_edit_problem_discards"> |
<input type="submit" name="discardview" accesskey="d" value="$lt{'dv'}" /> |
<input type="submit" name="discardview" accesskey="d" value="$lt{'dv'}" /> |
<input type="submit" name="Undo" accesskey="u" value="$lt{'un'}" /> |
<input type="submit" name="Undo" accesskey="u" value="$lt{'un'}" /> |
$htmlerror $dragmath_button |
$htmlerror $deps_button $dragmath_button |
</div> |
</div> |
<div class="LC_edit_problem_saves"> |
<div class="LC_edit_problem_saves"> |
<input type="submit" name="savethisfile" accesskey="s" value="$lt{'st'}" /> |
<input type="submit" name="savethisfile" accesskey="s" value="$lt{'st'}" /> |
Line 1588 $initialize
|
Line 1626 $initialize
|
$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);; |
} |
} |
Line 1659 sub handler {
|
Line 1696 sub handler {
|
} 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') { |
if ($filetype eq 'sty') { |
$breadcrumbtext = 'Style File Editor'; |
$breadcrumbtext = 'Style File Editor'; |
} elsif ($filetype eq 'js') { |
} elsif ($filetype eq 'js') { |
Line 1761 ENDNOTFOUND
|
Line 1816 ENDNOTFOUND
|
my $brcrum; |
my $brcrum; |
if ($env{'request.state'} eq 'construct') { |
if ($env{'request.state'} eq 'construct') { |
$brcrum = [{'href' => &Apache::loncommon::authorspace($request->uri), |
$brcrum = [{'href' => &Apache::loncommon::authorspace($request->uri), |
'text' => 'Construction Space'}, |
'text' => 'Authoring Space'}, |
{'href' => '', |
{'href' => '', |
'text' => $breadcrumbtext}]; |
'text' => $breadcrumbtext}]; |
} else { |
} else { |
Line 1784 ENDNOTFOUND
|
Line 1839 ENDNOTFOUND
|
unless ($env{'request.state'} eq 'published') { |
unless ($env{'request.state'} eq 'published') { |
if ($env{'form.editmode'} && (!($env{'form.viewmode'})) && (!($env{'form.discardview'}))) |
if ($env{'form.editmode'} && (!($env{'form.viewmode'})) && (!($env{'form.discardview'}))) |
{ |
{ |
my $displayfile=$request->uri; |
my ($displayfile,$url,$symb,$itemtitle,$action); |
$displayfile=~s/^\/[^\/]*//; |
$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' => |
Line 1798 ENDNOTFOUND
|
Line 1879 ENDNOTFOUND
|
if ($env{'request.state'} eq 'construct') { |
if ($env{'request.state'} eq 'construct') { |
$options{'bread_crumbs'} = [{ |
$options{'bread_crumbs'} = [{ |
'href' => &Apache::loncommon::authorspace($request->uri), |
'href' => &Apache::loncommon::authorspace($request->uri), |
'text' => 'Construction Space'}, |
'text' => 'Authoring Space'}, |
{'href' => '', |
{'href' => '', |
'text' => $breadcrumbtext}]; |
'text' => $breadcrumbtext}]; |
$header = &Apache::loncommon::head_subbox( |
$header = &Apache::loncommon::head_subbox( |
Line 1833 sub display_title {
|
Line 1914 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 1920 sub error {
|
Line 2037 sub error {
|
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 1943 sub error {
|
Line 2060 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 1988 sub add_messages {
|
Line 2105 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 2005 sub get_param {
|
Line 2131 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 2166 sub description {
|
Line 2293 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 { |