--- loncom/xml/lonxml.pm 2013/03/11 21:37:10 1.538 +++ loncom/xml/lonxml.pm 2015/02/22 18:40:18 1.552 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # XML Parser Module # -# $Id: lonxml.pm,v 1.538 2013/03/11 21:37:10 raeburn Exp $ +# $Id: lonxml.pm,v 1.552 2015/02/22 18:40:18 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -144,7 +144,7 @@ $metamode = 0; # turns on and of run::evaluate actually derefencing var refs $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=(); # stores the list of active tag namespaces @@ -229,11 +229,10 @@ sub xmlend { } sub printalltags { - my $temp; - foreach $temp (sort keys %Apache::lonxml::alltags) { - &Apache::lonxml::debug("$temp -- ". - join(',',@{ $Apache::lonxml::alltags{$temp} })); - } + foreach my $temp (sort(keys(%Apache::lonxml::alltags))) { + &Apache::lonxml::debug("$temp -- ". + join(',',@{ $Apache::lonxml::alltags{$temp} })); + } } sub xmlparse { @@ -306,8 +305,12 @@ sub xmlparse { &clean_safespace($safeeval); if (@script_var_displays) { - my $scriptoutput = join('',@script_var_displays); - $finaloutput=~s{(\s*)\s*$}{$scriptoutput$1}s; + if ($finaloutput =~ m{\s*\s*$}s) { + my $scriptoutput = join('',@script_var_displays); + $finaloutput=~s{(\s*)\s*$}{$scriptoutput$1}s; + } else { + $finaloutput .= join('',@script_var_displays); + } undef(@script_var_displays); } &init_state(); @@ -651,7 +654,7 @@ sub init_safespace { my ($target,$safeeval,$safehole,$safeinit) = @_; $safeeval->reval('use LaTeX::Table;'); $safeeval->deny_only(':dangerous'); - $safeeval->reval('use Math::Complex;'); + $safeeval->reval('use LONCAPA::LCMathComplex;'); $safeeval->permit_only(":default"); $safeeval->permit("entereval"); $safeeval->permit(":base_math"); @@ -810,7 +813,10 @@ sub init_safespace { $safeeval->permit("require"); $safeinit .= ';$external::target="'.$target.'";'; &Apache::run::run($safeinit,$safeeval); - &initialize_rndseed($safeeval); + my $rawrndseed = &initialize_rndseed($safeeval); + if ($target eq 'grade') { + $Apache::lonhomework::rawrndseed = $rawrndseed; + } } sub clean_safespace { @@ -849,6 +855,7 @@ sub initialize_rndseed { my $safeinit = '$external::randomseed="'.$rndseed.'";'; &Apache::lonxml::debug("Setting rndseed to $rndseed"); &Apache::run::run($safeinit,$safeeval); + return $rndseed; } sub default_homework_load { @@ -1323,7 +1330,7 @@ sub extlink { if (!$exact) { $res=&Apache::lonnet::hreflocation($Apache::lonxml::pwd[-1],$res); } - push(@Apache::lonxml::extlinks,$res) + push(@Apache::lonxml::extlinks,$res); } sub writeallows { @@ -1359,7 +1366,9 @@ sub do_registered_ssi { sub add_script_result { my ($display) = @_; - push(@script_var_displays, $display); + if ($display ne '') { + push(@script_var_displays, $display); + } } # @@ -1510,33 +1519,57 @@ sub renderingoptions { } sub inserteditinfo { - my ($filecontents,$filetype,$filename,$symb,$itemtitle,$folderpath,$uri) = @_; + my ($filecontents,$filetype,$filename,$symb,$itemtitle,$folderpath,$uri,$action) = @_; $filecontents = &HTML::Entities::encode($filecontents,'<>&"'); my $xml_help = ''; my $initialize=''; my $textarea_id = 'filecont'; - my ($dragmath_button,$deps_button); - my ($add_to_onload, $add_to_onresize); + my ($dragmath_button,$deps_button,$context,$cnum,$cdom,$add_to_onload, + $add_to_onresize,$init_dragmath); $initialize=&Apache::lonhtmlcommon::spellheader(); - if (($filetype eq 'html') && (&Apache::lonhtmlcommon::htmlareabrowser())) { - my $lang = &Apache::lonhtmlcommon::htmlarea_lang(); - my %textarea_args = ( - fullpage => 'true', - dragmath => 'math', - ); - $initialize .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args); + if ($filetype eq 'html') { + if ($env{'request.course.id'}) { + $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + if ($uri =~ m{^\Q/uploaded/$cdom/$cnum/portfolio/syllabus/\E}) { + $context = 'syllabus'; + } + } + 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 + my $textareaclass; if ($filetype eq 'html') { - if ($symb || $folderpath) { + 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, @@ -1549,11 +1582,14 @@ FULLPAGE $add_to_onresize = "resize_textarea('$textarea_id','LC_aftertextarea');"; 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 $textareaclass; my %lt=&Apache::lonlocal::texthash('st' => 'Save and Edit', 'vi' => 'Save and View', 'dv' => 'Discard Edits and View', @@ -1569,13 +1605,19 @@ FULLPAGE $htmlerror=''.$htmlerror.''; } if (&Apache::lonhtmlcommon::htmlareabrowser()) { - $textareaclass = 'class="LC_richDefaultOff"'; + unless ($textareaclass) { + $textareaclass = 'class="LC_richDefaultOff"'; + } } } + my $undo; + unless ($uri =~ m{^/uploaded/}) { + $undo = ''."\n"; + } my $editfooter=(< -
+
$filename @@ -1585,8 +1627,7 @@ $initialize
- - $htmlerror $deps_button $dragmath_button + $undo $htmlerror $deps_button $dragmath_button
@@ -1599,7 +1640,6 @@ $initialize $titledisplay
- ENDFOOTER return ($editfooter,$add_to_onload,$add_to_onresize);; } @@ -1675,6 +1715,19 @@ sub handler { &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') { @@ -1701,6 +1754,7 @@ sub handler { } } } + my $inhibit_menu; my %mystyle; my $result = ''; my $filecontents=&Apache::lonnet::getfile($file); @@ -1758,8 +1812,15 @@ ENDNOTFOUND &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['rawmode']); if ($env{'form.rawmode'}) { $result = $filecontents; } + if (($env{'request.state'} eq 'construct') && + (($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'})) { + (!$env{'form.return_only_error_and_warning_counts'}) && + (!$inhibit_menu)) { my $nochgview = 1; my $controls = ''; if ($env{'request.state'} eq 'construct') { @@ -1777,7 +1838,7 @@ ENDNOTFOUND my $brcrum; if ($env{'request.state'} eq 'construct') { $brcrum = [{'href' => &Apache::loncommon::authorspace($request->uri), - 'text' => 'Construction Space'}, + 'text' => 'Authoring Space'}, {'href' => '', 'text' => $breadcrumbtext}]; } else { @@ -1797,30 +1858,40 @@ ENDNOTFOUND # # 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'}))) { - my ($displayfile,$url,$symb,$itemtitle); + my ($displayfile,$url,$symb,$itemtitle,$action); $displayfile=$request->uri; if ($request->uri =~ m{^/uploaded/}) { if ($env{'request.course.id'}) { - my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; - my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; - if ($request->uri =~ m{^\Q/uploaded/$cdom/$cnum/\Esupplemental/}) { + 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'); } } - ($symb,$itemtitle,$displayfile) = - &get_courseupload_hierarchy($request->uri, - $env{'form.folderpath'},$env{'form.title'}); + 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)= &inserteditinfo($filecontents,$filetype,$displayfile,$symb, - $itemtitle,$env{'form.folderpath'},$request->uri); + $itemtitle,$env{'form.folderpath'},$request->uri,$action); my %options = ('add_entries' => @@ -1830,7 +1901,7 @@ ENDNOTFOUND if ($env{'request.state'} eq 'construct') { $options{'bread_crumbs'} = [{ 'href' => &Apache::loncommon::authorspace($request->uri), - 'text' => 'Construction Space'}, + 'text' => 'Authoring Space'}, {'href' => '', 'text' => $breadcrumbtext}]; $header = &Apache::loncommon::head_subbox( @@ -1865,7 +1936,7 @@ sub display_title { $title = substr($title, rindex($title, '/') + 1); } $result = ""; + .&mt('Authoring Space')."';"; } return $result; } @@ -1986,7 +2057,7 @@ sub error { my $declutter=&Apache::lonnet::declutter($env{'request.filename'}); my $baseurl = &Apache::lonnet::clutter($declutter); my @userlist; - foreach (keys %users) { + foreach (keys(%users)) { my ($user,$domain) = split(/:/, $_); push(@userlist,"$user:$domain"); my $key=$declutter.'_'.$user.'_'.$domain; @@ -2244,7 +2315,7 @@ sub description { sub helpinfo { my ($token)=@_; my $tag = &get_tag($token); - return ($insertlist{$tag.'.helpfile'}, $insertlist{$tag.'.helpdesc'}); + return ($insertlist{$tag.'.helpfile'}, &mt($insertlist{$tag.'.helpdesc'})); } sub get_tag { 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.