version 1.524, 2014/11/24 02:36:26
|
version 1.533, 2015/04/10 08:22:21
|
Line 224 sub end_tex {
|
Line 224 sub end_tex {
|
} |
} |
|
|
sub homework_js { |
sub homework_js { |
|
my ($postsubmit,$timeout); |
|
if (($env{'request.course.id'}) && ($env{'request.state'} ne 'construct')) { |
|
my $crstype; |
|
if (&Apache::loncommon::course_type() eq 'Community') { |
|
$crstype = 'community'; |
|
} else { |
|
if ($env{'course.'.$env{'request.course.id'}.'.internal.coursecode'}) { |
|
$crstype = 'official'; |
|
} elsif ($env{'course.'.$env{'request.course.id'}.'.internal.textbook'}) { |
|
$crstype = 'textbook'; |
|
} else { |
|
$crstype = 'unofficial'; |
|
} |
|
} |
|
$postsubmit = $env{'course.'.$env{'request.course.id'}.'.internal.postsubmit'}; |
|
if ($postsubmit eq '') { |
|
my %domdefs = &Apache::lonnet::get_domain_defaults($env{'course.'.$env{'request.course.id'}.'.domain'}); |
|
$postsubmit = $domdefs{'postsubmit'}; |
|
unless ($postsubmit eq 'off') { |
|
$timeout = $domdefs{$crstype.'postsubtimeout'}; |
|
} |
|
} elsif ($postsubmit eq '0') { |
|
$postsubmit = 'off'; |
|
} elsif ($postsubmit eq '1') { |
|
$postsubmit = 'on'; |
|
$timeout = $env{'course.'.$env{'request.course.id'}.'.internal.postsubtimeout'}; |
|
if ($timeout eq '') { |
|
my %domdefs = &Apache::lonnet::get_domain_defaults($env{'course.'.$env{'request.course.id'}.'.domain'}); |
|
$timeout = $domdefs{$crstype.'postsubtimeout'}; |
|
} |
|
} |
|
if ($timeout eq '') { |
|
$timeout = 60; |
|
} |
|
} else { |
|
my %domdefs = &Apache::lonnet::get_domain_defaults($env{'request.role.domain'}); |
|
$postsubmit = $domdefs{'postsubmit'}; |
|
unless ($postsubmit eq 'off') { |
|
$timeout = 60; |
|
} |
|
} |
|
my $jstimeout = 0; |
|
if ($timeout) { |
|
$jstimeout = 1000 * $timeout; |
|
} |
return &Apache::loncommon::resize_textarea_js(). |
return &Apache::loncommon::resize_textarea_js(). |
|
&Apache::loncommon::colorfuleditor_js(). |
&setmode_javascript(). |
&setmode_javascript(). |
<<'JS'; |
<<"JS"; |
<script type="text/javascript"> |
<script type="text/javascript"> |
// <![CDATA[ |
// <![CDATA[ |
function setSubmittedPart (part,prefix) { |
function setSubmittedPart (part,prefix) { |
Line 241 function setSubmittedPart (part,prefix)
|
Line 287 function setSubmittedPart (part,prefix)
|
} |
} |
} |
} |
|
|
|
function disableAutoComplete (id) { |
|
var field = document.getElementById(id); |
|
if (field != null && field != undefined){ |
|
if ('autocomplete' in field) { |
|
field.autocomplete = "off"; |
|
} else { |
|
field.setAttribute("autocomplete", "off"); |
|
} |
|
} |
|
} |
|
|
function image_response_click (which, e) { |
function image_response_click (which, e) { |
init_geometry(); |
init_geometry(); |
if (!e) { e = window.event; } //IE |
if (!e) { e = window.event; } //IE |
Line 257 function image_response_click (which, e)
|
Line 314 function image_response_click (which, e)
|
|
|
var submithandled = 0; |
var submithandled = 0; |
var keypresshandled = 0; |
var keypresshandled = 0; |
|
var postsubmit = '$postsubmit'; |
|
|
$(document).ready(function(){ |
\$(document).ready(function(){ |
|
if (postsubmit != 'off') { |
$(document).keypress(function(event){ |
\$(document).keypress(function(event){ |
var keycode = (event.keyCode ? event.keyCode : event.which); |
var keycode = (event.keyCode ? event.keyCode : event.which); |
if ((keycode == '13') && (keypresshandled == 0)) { |
if ((keycode == '13') && (keypresshandled == 0)) { |
if ( $( document.activeElement ).hasClass("LC_textline") ) { |
if ( \$( document.activeElement ).hasClass("LC_textline") ) { |
keypresshandled = 1; |
keypresshandled = 1; |
var idsArray = $( document.activeElement ).attr("id").split(/HWVAL_/); |
var idsArray = \$( document.activeElement ).attr("id").split(/HWVAL_/); |
if (idsArray.length) { |
if (idsArray.length) { |
event.preventDefault(); |
event.preventDefault(); |
var itemsArray = idsArray[1].split(/_/); |
var itemsArray = idsArray[1].split(/_/); |
var buttonId = idsArray[0]+'submit_'+itemsArray[0]; |
var buttonId = idsArray[0]+'submit_'+itemsArray[0]; |
$("#"+buttonId).trigger("click"); |
\$("#"+buttonId).trigger("click"); |
} |
} |
} |
} |
} |
} |
}); |
}); |
|
|
$(document).delegate('form :submit', 'click', function( event ) { |
\$(document).delegate('form :submit', 'click', function( event ) { |
if ( $( this ).hasClass( "LC_hwk_submit" ) ) { |
if ( \$( this ).hasClass( "LC_hwk_submit" ) ) { |
var buttonId = this.id; |
var buttonId = this.id; |
|
var timeout = $jstimeout; |
if (submithandled == 0) { |
if (submithandled == 0) { |
submithandled = 1; |
submithandled = 1; |
$( "#msg_"+buttonId ).css({"display": "inline","background-color": "#87cefa", |
\$( "#msg_"+buttonId ).css({"display": "inline","background-color": "#87cefa", |
"color": "black","padding": "2px"}) ; |
"color": "black","padding": "2px"}) ; |
if (( $(this.form).id == "LC_page" ) && ($('input[name="all_submit"]').length )) { |
if (( \$(this.form).id == "LC_page" ) && (\$('input[name="all_submit"]').length )) { |
if (buttonId != "all_submit") { |
if (buttonId != "all_submit") { |
$( ".LC_status_"+buttonId ).hide(); |
\$( ".LC_status_"+buttonId ).hide(); |
if (( "#"+buttonId+"_pressed" ).length) { |
if (( "#"+buttonId+"_pressed" ).length) { |
$( "#"+buttonId+"_pressed" ).val( "1" ); |
\$( "#"+buttonId+"_pressed" ).val( "1" ); |
} |
} |
} |
} |
} else { |
} else { |
$( ".LC_status_"+buttonId ).hide(); |
\$( ".LC_status_"+buttonId ).hide(); |
} |
} |
$(this.form).submit(); |
\$(this.form).submit(); |
$( ".LC_hwk_submit" ).prop( "disabled", true); |
\$( ".LC_hwk_submit" ).prop( "disabled", true); |
$( ".LC_textline" ).prop( "readonly", "readonly"); |
\$( ".LC_textline" ).prop( "readonly", "readonly"); |
event.preventDefault(); |
event.preventDefault(); |
|
|
|
if (timeout > 0) { |
|
setTimeout(function(){ |
|
\$( "#msg_"+buttonId ).css({"display": "none"}); |
|
if (( \$(this.form).id == "LC_page" ) && (\$('input[name="all_submit"]').length )) { |
|
if (buttonId != "all_submit") { |
|
if (( "#"+buttonId+"_pressed" ).length) { |
|
\$( "#"+buttonId+"_pressed" ).val( "" ); |
|
} |
|
} |
|
} |
|
\$( ".LC_hwk_submit" ).prop( "disabled", false); |
|
\$( ".LC_textline" ).prop( "readonly", false); |
|
submithandled = 0; |
|
keypresshandled = 0; |
|
}, timeout); |
|
} |
return true; |
return true; |
} |
} |
} |
} |
}); |
}); |
|
} |
}); |
}); |
|
|
// ]]> |
// ]]> |
Line 346 sub page_start {
|
Line 423 sub page_start {
|
$extra_head .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args); |
$extra_head .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args); |
} |
} |
my $is_task = ($env{'request.uri'} =~ /\.task$/); |
my $is_task = ($env{'request.uri'} =~ /\.task$/); |
my $needs_upload; |
my ($needs_upload,$partlist); |
my ($symb)= &Apache::lonnet::whichuser(); |
my ($symb)= &Apache::lonnet::whichuser(); |
my ($map,$resid,$resurl)=&Apache::lonnet::decode_symb($symb); |
my ($map,$resid,$resurl)=&Apache::lonnet::decode_symb($symb); |
if ($is_task) { |
if ($is_task) { |
Line 364 sub page_start {
|
Line 441 sub page_start {
|
unless ($is_page) { |
unless ($is_page) { |
$needs_upload = 1; |
$needs_upload = 1; |
} |
} |
|
if ((ref($tagstack) eq 'ARRAY') && ($tagstack->[-1] eq 'problem')) { |
|
my $res = $navmap->getBySymb($symb); |
|
if (ref($res)) { |
|
$partlist = $res->parts(); |
|
} |
|
} |
} |
} |
} |
} |
} else { |
} else { |
Line 375 sub page_start {
|
Line 458 sub page_start {
|
if (ref($mapres)) { |
if (ref($mapres)) { |
$is_page = $mapres->is_page(); |
$is_page = $mapres->is_page(); |
} |
} |
unless ($is_page) { |
if ($is_page) { |
|
if ((ref($tagstack) eq 'ARRAY') && ($tagstack->[-1] eq 'problem')) { |
|
my $res = $navmap->getBySymb($symb); |
|
if (ref($res)) { |
|
$partlist = $res->parts(); |
|
} |
|
} |
|
} else { |
my $res = $navmap->getBySymb($symb); |
my $res = $navmap->getBySymb($symb); |
if (ref($res)) { |
if (ref($res)) { |
my $partlist = $res->parts(); |
$partlist = $res->parts(); |
if (ref($partlist) eq 'ARRAY') { |
if (ref($partlist) eq 'ARRAY') { |
foreach my $part (@{$partlist}) { |
foreach my $part (@{$partlist}) { |
my @types = $res->responseType($part); |
my @types = $res->responseType($part); |
Line 419 sub page_start {
|
Line 509 sub page_start {
|
"if (typeof swmenu != 'undefined') {swmenu.currentURL=null;}\n". |
"if (typeof swmenu != 'undefined') {swmenu.currentURL=null;}\n". |
&Apache::loncommon::browser_and_searcher_javascript(). |
&Apache::loncommon::browser_and_searcher_javascript(). |
"\n</script>\n"; |
"\n</script>\n"; |
|
if ($target eq 'edit') { |
|
$extra_head .= &Apache::edit::js_update_linknum(); |
|
} |
} |
} |
} |
} |
|
|
Line 511 sub page_start {
|
Line 604 sub page_start {
|
"\t".'<input type="hidden" name="symb" value="'.$symb.'" />'."\n"; |
"\t".'<input type="hidden" name="symb" value="'.$symb.'" />'."\n"; |
} |
} |
} |
} |
return ($page_start,$form_tag_start); |
return ($page_start,$form_tag_start,$partlist); |
} |
} |
|
|
#use Time::HiRes(); |
#use Time::HiRes(); |
Line 542 sub get_resource_name {
|
Line 635 sub get_resource_name {
|
} |
} |
|
|
sub setup_rndseed { |
sub setup_rndseed { |
my ($safeeval,$target)=@_; |
my ($safeeval,$target,$probpartlist)=@_; |
my ($symb)=&Apache::lonnet::whichuser(); |
my ($symb)=&Apache::lonnet::whichuser(); |
my ($questiontype,$set_safespace,$rndseed); |
my ($questiontype,$set_safespace,$rndseed); |
if ($target eq 'analyze') { |
if ($target eq 'analyze') { |
Line 603 sub setup_rndseed {
|
Line 696 sub setup_rndseed {
|
} |
} |
unless (($target eq 'analyze') && (defined($rndseed))) { |
unless (($target eq 'analyze') && (defined($rndseed))) { |
$rndseed=&Apache::lonnet::rndseed(); |
$rndseed=&Apache::lonnet::rndseed(); |
my $curr_try = $Apache::lonhomework::history{"resource.$Apache::inputtags::part.tries"}; |
my $partfortries = $Apache::inputtags::part; |
|
if (ref($probpartlist) eq 'ARRAY') { |
|
if ((@{$probpartlist} == 1) && ($probpartlist->[0] ne $Apache::inputtags::part)) { |
|
$partfortries = $probpartlist->[0]; |
|
} |
|
} |
|
my $curr_try = $Apache::lonhomework::history{"resource.$partfortries.tries"}; |
if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') { |
if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') { |
$curr_try ++; |
$curr_try ++; |
} |
} |
Line 611 sub setup_rndseed {
|
Line 710 sub setup_rndseed {
|
$rndseed = $1; |
$rndseed = $1; |
} |
} |
if ($curr_try) { |
if ($curr_try) { |
my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries"); |
my $reqtries = &Apache::lonnet::EXT("resource.$partfortries.randomizeontries"); |
if (($reqtries =~ /^\d+$/) && ($reqtries > 1)) { |
if (($reqtries =~ /^\d+$/) && ($reqtries > 1)) { |
my $inc = int(($curr_try-1)/$reqtries); |
my $inc = int(($curr_try-1)/$reqtries); |
$rndseed += $inc; |
$rndseed += $inc; |
Line 621 sub setup_rndseed {
|
Line 720 sub setup_rndseed {
|
} |
} |
} |
} |
$set_safespace = 1; |
$set_safespace = 1; |
|
if ($target eq 'grade') { |
|
$Apache::lonhomework::rawrndseed = $rndseed; |
|
} |
} |
} |
if ($set_safespace) { |
if ($set_safespace) { |
if ($safeeval) { |
if ($safeeval) { |
Line 675 sub problem_edit_buttons {
|
Line 777 sub problem_edit_buttons {
|
return $result; |
return $result; |
} |
} |
|
|
|
sub insert_menu_datastructure { |
|
|
|
my $template_menu = &template_dropdown_datastructure(); |
|
my $responseblock_menu = &responseblock_dropdown_datastructure(); |
|
my $conditional_scripting = &conditional_scripting_datastructure(); |
|
my $misc = &misc_datastructure(); |
|
|
|
my @menu = ($template_menu, $responseblock_menu, $conditional_scripting, $misc); |
|
return \@menu; |
|
|
|
} |
|
|
|
sub template_dropdown_datastructure { |
|
# gathering the all templates and their path, title, category and help topic |
|
my @templates = &Apache::lonhomework::get_template_list('problem'); |
|
# template category => title |
|
my %tmplthash = (); |
|
# template title => path |
|
my %tmpltcontent = (); |
|
|
|
foreach my $template (@templates){ |
|
# put in hash if the template is not empty |
|
unless ($template->[1] eq ''){ |
|
push(@{$tmplthash{$template->[2]}}, $template->[1]); |
|
push(@{$tmpltcontent{$template->[1]}},$template->[0]); |
|
} |
|
} |
|
|
|
my $catList = []; |
|
foreach my $cat (sort keys %tmplthash) { |
|
my $catItems = []; |
|
foreach my $title (sort @{$tmplthash{$cat}}) { |
|
my $path = $tmpltcontent{$title}->[0]; |
|
my $code; |
|
open(FH, "<:encoding(UTF-8)", $path); |
|
while(<FH>){ |
|
$code.= $_ unless $_ =~ /(<problem>)|(<\/problem>)/; |
|
} |
|
close(FH); |
|
|
|
if ($code ne '') { |
|
my $href = 'javascript:insertText(\'' . &convert_for_js(&HTML::Entities::encode($code)) . '\')'; |
|
my $currItem = [$href, $title, undef]; |
|
push @{$catItems}, $currItem; |
|
} |
|
} |
|
push @{$catList}, [$catItems, $cat, undef]; |
|
} |
|
|
|
my $templDropdown = [$catList, &mt("Complete Problem Templates"), undef]; |
|
return $templDropdown; |
|
} |
|
|
|
sub responseblock_dropdown_datastructure { |
|
|
|
my $mathCat = [ |
|
[ |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_formularesponse())) . "\')", &mt("Formula Response"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_functionplotresponse())) . "\')", &mt("Function Plot Response"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_mathresponse())) . "\')", &mt("Math Response"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_numericalresponse())) . "\')", &mt("Numerical Response"), undef] |
|
], |
|
&mt("Math"), |
|
undef |
|
]; |
|
|
|
my $miscCat = [ |
|
[ |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_imageresponse())) . "\')", &mt("Click on Image"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_customresponse())) . "\')", &mt("Custom Response"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_externalresponse())) . "\')", &mt("External Response"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_matchresponse())) . "\')", &mt("Match Response"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_radiobuttonresponse())) . "\')", &mt("One out of N Statement"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_optionresponse())) . "\')", &mt("Optionresponse"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_rankresponse())) . "\')", &mt("Rank Values"), undef] |
|
], |
|
&mt("Misc"), |
|
undef |
|
]; |
|
|
|
my $chemCat = [ |
|
[ |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_reactionresponse())) . "\')", &mt("Chemical Reaction"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_organicresponse())) . "\')", &mt("Organic Structure"), undef] |
|
], |
|
&mt("Chemical"), |
|
undef |
|
]; |
|
|
|
my $textCat = [ |
|
[ |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_stringresponse())) . "\')", &mt("String Response"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_essayresponse())) . "\')", &mt("Essay"), undef] |
|
], |
|
&mt("Text"), |
|
undef |
|
]; |
|
|
|
my $cats = [[$mathCat, $miscCat, $chemCat, $textCat], &mt("Response Types"), undef]; |
|
return $cats; |
|
} |
|
|
|
|
|
sub conditional_scripting_datastructure { |
|
# TODO: corresponding routines should be used for the javascript:insertText parts |
|
# instead of the placeholder routine default_xml_tag with the tags |
|
# e.g. &default_xml_tag("postanswerdate") should be replaced with a routine which |
|
# returns the corresponding content for this case |
|
|
|
#TODO translated is currently temporarily here, another solution should be found where the |
|
# needed string can be retrieved |
|
|
|
my $translatedTag = ' |
|
<translated> |
|
<lang which="en"></lang> |
|
<lang which="default"></lang> |
|
</translated>'; |
|
|
|
my $cat = [ |
|
[ |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode($translatedTag)) . "\')", &mt("Translated Tag"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("block"))) . "\')", &mt("Conditional Block"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("postanswerdate"))) . "\')", &mt("After Answer Block"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("preduedate"))) . "\')", &mt("Before Due Date Block"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("solved"))) . "\')", &mt("Block For After Solved"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("notsolved"))) . "\')", &mt("Block For When Not Solved"), undef] |
|
], |
|
&mt("Contitional Scripting"), |
|
undef |
|
]; |
|
|
|
return $cat; |
|
} |
|
|
|
sub misc_datastructure { |
|
|
|
my $graphicalCat = [ |
|
[ |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_img())) . "\')", &mt("Image"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::lonplot::insert_gnuplot())) . "\')", &mt("GNU Plot"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_organicstructure())) . "\')", &mt("Organic Structure"), undef] |
|
], |
|
"Graphical", |
|
undef |
|
]; |
|
|
|
my $advancedCat = [ |
|
[ |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::edit::insert_script())) . "\')", &mt("Script Block"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("allow"))) . "\')", &mt("File Dependencies"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&default_xml_tag("import"))) . "\')", &mt("Import a File"), undef], |
|
["javascript:insertText(\'" . &convert_for_js(&HTML::Entities::encode(&Apache::londefdef::insert_meta())) . "\')", &mt("Custom Metadata"), undef] |
|
], |
|
"advanced", |
|
undef |
|
]; |
|
|
|
my $cats = [[$graphicalCat, $advancedCat], &mt("misc"), undef]; |
|
return $cats; |
|
} |
|
|
|
# helper routine for the datastructure building subroutines |
|
sub default_xml_tag { |
|
my ($tag) = @_; |
|
return "\n<$tag></$tag>"; |
|
} |
|
|
|
|
|
sub helpmenu_datastructure { |
|
|
|
my $width = 500; |
|
my $height = 600; |
|
|
|
my $helpers = [ |
|
['Problem_LON-CAPA_Functions', &mt('Script Functions')], |
|
['Greek_Symbols', &mt('Greek Symbols')], |
|
['Other_Symbols', &mt('Other Symbols')], |
|
['Authoring_Output_Tags', &mt('Output Tags')], |
|
['Authoring_Multilingual_Problems', |
|
&mt('How to create problems in different languages')] |
|
]; |
|
|
|
my $help_structure = []; |
|
|
|
foreach my $count (0..(scalar(@{$helpers})-1)) { |
|
my $filename = $helpers->[$count]->[0]; |
|
my $title = $helpers->[$count]->[1]; |
|
my $href = &HTML::Entities::encode("javascript:openMyModal('/adm/help/$filename.hlp',$width,$height,'yes');"); |
|
push @{$help_structure}, [$href, $title, undef]; |
|
} |
|
|
|
return $help_structure; |
|
} |
|
|
|
# we need substitution to not break javascript code |
|
sub convert_for_js { |
|
my $return = shift; |
|
$return =~ s|script|ESCAPEDSCRIPT|g; |
|
$return =~ s|\\|\\\\|g; |
|
$return =~ s|\n|\\r\\n|g; |
|
$return =~ s|'|\\'|g; |
|
$return =~ s|'|\\'|g; |
|
return $return; |
|
} |
|
|
sub problem_edit_header { |
sub problem_edit_header { |
return '<input type="hidden" name="submitted" value="edit" />'. |
my ($mode)=@_; |
|
my $return = '<input type="hidden" name="submitted" value="edit" />'. |
&remember_problem_state('edit').' |
&remember_problem_state('edit').' |
<div class="LC_edit_problem_header"> |
<div class="LC_edit_problem_header"> |
<div class="LC_edit_problem_header_title"> |
<div class="LC_edit_problem_header_title"> |
'.&mt('Problem Editing').&Apache::loncommon::help_open_menu('Problem Editing','Problem_Editor_XML_Index',5,'Authoring').' |
'.&mt('Problem Editing').$mode.&Apache::loncommon::help_open_menu('Problem Editing','Problem_Editor_XML_Index',5,'Authoring').' |
</div>'. |
</div><div class="LC_edit_actionbar" id="actionbar">'. |
'<input type="hidden" name="problemmode" value="saveedit" />'. |
'<input type="hidden" name="problemmode" value="saveedit" />'. |
&problem_edit_buttons().' |
&problem_edit_buttons(); |
<hr style="clear:both;" /> |
|
'.&Apache::lonxml::message_location().' |
$return.='<hr style="clear:both;visibility:hidden;" /> |
</div> |
</div></div>' |
'. |
.&Apache::lonxml::message_location(); |
'<table id="LC_edit_problem_colorful" border="0" width="100%"><tr><td bgcolor="#F8F8F8">'; |
$return .= '<link rel="stylesheet" href="/adm/codemirror/codemirror-combined.css" /> |
|
<script type="text/javascript" src="/adm/codemirror/codemirror-compressed-colorful.js"></script>'; |
|
|
|
$return .= '<script type="text/javascript" src="/adm/jQuery/addons/jquery-scrolltofixed.js"></script> |
|
<script type="text/javascript"> |
|
// unless internet explorer |
|
if (!(window.navigator.appName == "Microsoft Internet Explorer" && (document.documentMode || document.compatMode))){ |
|
$(document).ready( |
|
function() { |
|
$(\'.LC_edit_actionbar\').scrollToFixed( |
|
{ |
|
fixed: function(){ |
|
$(this).find(\'.LC_edit_actionbar\').css(\'height\', \'31px\'); |
|
} |
|
} |
|
); |
|
} |
|
); |
|
} |
|
</script> |
|
<table id="LC_edit_problem_colorful" border="0" width="100%"><tr><td bgcolor="#F8F8F8">'; |
|
return $return; |
} |
} |
|
|
sub problem_edit_footer { |
sub problem_edit_footer { |
|
my $resource = $env{'request.ambiguous'}; |
return '</td></tr></table><br /> |
return '</td></tr></table><br /> |
<div class="LC_edit_problem_footer"> |
<div class="LC_edit_problem_footer"> |
<hr />'. |
<hr />'. |
&problem_edit_buttons().' |
&problem_edit_buttons().' |
<hr style="clear:both;" /> |
<hr style="clear:both;" /> |
|
<script type="text/javascript"> |
|
restoreState("'.$resource.'"); |
|
restoreScrollPosition("'.$resource.'"); |
|
</script> |
</div> |
</div> |
'. |
'. |
"\n</form>\n".&Apache::loncommon::end_page(); |
"\n</form>\n".&Apache::loncommon::end_page(); |
Line 881 sub initialize_storage {
|
Line 1215 sub initialize_storage {
|
} |
} |
%Apache::lonhomework::history= |
%Apache::lonhomework::history= |
&Apache::lonnet::tmprestore($namespace,'',$domain,$name); |
&Apache::lonnet::tmprestore($namespace,'',$domain,$name); |
my ($temp)=keys %Apache::lonhomework::history ; |
my ($temp)=keys(%Apache::lonhomework::history) ; |
&Apache::lonxml::debug("Return message of $temp"); |
&Apache::lonxml::debug("Return message of $temp"); |
} else { |
} else { |
%Apache::lonhomework::history= |
%Apache::lonhomework::history= |
Line 889 sub initialize_storage {
|
Line 1223 sub initialize_storage {
|
} |
} |
|
|
#ignore error conditions |
#ignore error conditions |
my ($temp)=keys %Apache::lonhomework::history ; |
my ($temp)=keys(%Apache::lonhomework::history); |
if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); } |
if ($temp =~ m/^error:.*/) { %Apache::lonhomework::history=(); } |
} |
} |
|
|
Line 1163 sub store_aggregates {
|
Line 1497 sub store_aggregates {
|
} |
} |
} |
} |
} |
} |
if (keys (%aggregate) > 0) { |
if (keys(%aggregate) > 0) { |
&Apache::lonnet::cinc('nohist_resourcetracker',\%aggregate, |
&Apache::lonnet::cinc('nohist_resourcetracker',\%aggregate, |
$cdomain,$cname); |
$cdomain,$cname); |
} |
} |
Line 1277 sub reset_problem_globals {
|
Line 1611 sub reset_problem_globals {
|
undef($Apache::inputtags::part); |
undef($Apache::inputtags::part); |
if ($type eq 'Task') { |
if ($type eq 'Task') { |
undef($Apache::inputtags::slot_name); |
undef($Apache::inputtags::slot_name); |
|
} elsif ($type eq 'problem') { |
|
undef($Apache::lonhomework::rawrndseed); |
} |
} |
#don't undef this, lonhomework.pm takes care of this, we use this to |
#don't undef this, lonhomework.pm takes care of this, we use this to |
#detect if we try to do 2 problems in one file |
#detect if we try to do 2 problems in one file |
Line 1378 sub start_problem {
|
Line 1714 sub start_problem {
|
my $resource_due; |
my $resource_due; |
|
|
my $name= &get_resource_name($parstack,$safeeval); |
my $name= &get_resource_name($parstack,$safeeval); |
my ($result,$form_tag_start,$slot_name,$slot); |
my ($result,$form_tag_start,$slot_name,$slot,$probpartlist); |
|
|
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || |
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || |
$target eq 'tex') { |
$target eq 'tex') { |
Line 1394 sub start_problem {
|
Line 1730 sub start_problem {
|
|
|
if ($target eq 'web' || $target eq 'webgrade' || $target eq 'tex' |
if ($target eq 'web' || $target eq 'webgrade' || $target eq 'tex' |
|| $target eq 'edit') { |
|| $target eq 'edit') { |
($result,$form_tag_start) = |
($result,$form_tag_start,$probpartlist) = |
&page_start($target,$token,$tagstack,$parstack,$parser,$safeeval, |
&page_start($target,$token,$tagstack,$parstack,$parser,$safeeval, |
$name); |
$name); |
|
} elsif (($target eq 'grade') && ($Apache::lonhomework::type eq 'randomizetry')) { |
|
my ($symb)= &Apache::lonnet::whichuser(); |
|
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
if (ref($navmap)) { |
|
my $res = $navmap->getBySymb($symb); |
|
if (ref($res)) { |
|
$probpartlist = $res->parts(); |
|
} |
|
} |
} |
} |
|
|
if ($target eq 'tex' and $env{'request.symb'} =~ m/\.page_/) {$result='';} |
if ($target eq 'tex' and $env{'request.symb'} =~ m/\.page_/) {$result='';} |
Line 1406 sub start_problem {
|
Line 1751 sub start_problem {
|
$target eq 'tex') { |
$target eq 'tex') { |
|
|
#handle rand seed in construction space |
#handle rand seed in construction space |
my $rndseed=&setup_rndseed($safeeval,$target); |
my $rndseed=&setup_rndseed($safeeval,$target,$probpartlist); |
|
if (($target eq 'grade') && &Apache::response::submitted()) { |
|
if ($Apache::lonhomework::type eq 'randomizetry') { |
|
$Apache::lonhomework::results{'resource.0.rndseed'}=$rndseed; |
|
} else { |
|
my @parts; |
|
if (ref($probpartlist) eq 'ARRAY') { |
|
@parts = @{$probpartlist}; |
|
} |
|
unless (@parts) { |
|
$Apache::lonhomework::results{'resource.0.rndseed'}=$Apache::lonhomework::rawrndseed; |
|
} |
|
} |
|
} |
my ($symb)=&Apache::lonnet::whichuser(); |
my ($symb)=&Apache::lonnet::whichuser(); |
|
|
if ($env{'request.state'} ne "construct" && |
if ($env{'request.state'} ne "construct" && |
Line 1614 sub end_problem {
|
Line 1972 sub end_problem {
|
my $id = $Apache::inputtags::part; |
my $id = $Apache::inputtags::part; |
my $weight = &Apache::lonnet::EXT("resource.$id.weight"); |
my $weight = &Apache::lonnet::EXT("resource.$id.weight"); |
my $packages=&Apache::lonnet::metadata($env{'request.uri'},'packages'); |
my $packages=&Apache::lonnet::metadata($env{'request.uri'},'packages'); |
my @packages = split /,/,$packages; |
my @packages = split(/,/,$packages); |
my $allow_print_points = 0; |
my $allow_print_points = 0; |
foreach my $partial_key (@packages) { |
foreach my $partial_key (@packages) { |
if ($partial_key=~m/^part_0$/) { |
if ($partial_key=~m/^part_0$/) { |
Line 2348 sub start_randomlist {
|
Line 2706 sub start_randomlist {
|
} |
} |
} |
} |
} |
} |
for(0 .. $show) { |
for my $i (0 .. $show) { |
$bodytext .= "$randomlist[ $idx_arr[$_] ]"; |
$bodytext .= "$randomlist[ $idx_arr[$i] ]"; |
} |
} |
&Apache::lonxml::newparser($parser,\$bodytext); |
&Apache::lonxml::newparser($parser,\$bodytext); |
} |
} |
Line 2463 sub start_part {
|
Line 2821 sub start_part {
|
my $hidden=&Apache::loncommon::check_if_partid_hidden($Apache::inputtags::part); |
my $hidden=&Apache::loncommon::check_if_partid_hidden($Apache::inputtags::part); |
my $newtype=&Apache::lonnet::EXT("resource.$id.type"); |
my $newtype=&Apache::lonnet::EXT("resource.$id.type"); |
if ($newtype) { $Apache::lonhomework::type=$newtype; } |
if ($newtype) { $Apache::lonhomework::type=$newtype; } |
|
if ($Apache::lonhomework::type eq 'randomizetry') { |
|
my $rndseed=&setup_rndseed($safeeval,$target); |
|
if (($target eq 'grade') && &Apache::response::submitted()) { |
|
$Apache::lonhomework::results{"resource.$id.rndseed"}=$rndseed; |
|
} |
|
} elsif (($target eq 'grade') && &Apache::response::submitted()) { |
|
$Apache::lonhomework::results{"resource.$id.rndseed"}=$Apache::lonhomework::rawrndseed; |
|
} |
my $in_order_show=&ordered_show_check(); |
my $in_order_show=&ordered_show_check(); |
my $expression='$external::part=\''.$Apache::inputtags::part.'\';'; |
my $expression='$external::part=\''.$Apache::inputtags::part.'\';'; |
$expression.='$external::type=\''.$Apache::lonhomework::type.'\';'; |
$expression.='$external::type=\''.$Apache::lonhomework::type.'\';'; |
Line 2513 sub start_part {
|
Line 2879 sub start_part {
|
} |
} |
my $weight = &Apache::lonnet::EXT("resource.$id.weight"); |
my $weight = &Apache::lonnet::EXT("resource.$id.weight"); |
my $allkeys=&Apache::lonnet::metadata($env{'request.uri'},'packages'); |
my $allkeys=&Apache::lonnet::metadata($env{'request.uri'},'packages'); |
my @allkeys = split /,/,$allkeys; |
my @allkeys = split(/,/,$allkeys); |
my $allow_print_points = 0; |
my $allow_print_points = 0; |
foreach my $partial_key (@allkeys) { |
foreach my $partial_key (@allkeys) { |
if ($partial_key=~m/^part_(.*)$/) { |
if ($partial_key=~m/^part_(.*)$/) { |
Line 2761 sub end_startouttext {
|
Line 3127 sub end_startouttext {
|
if ($target eq 'edit') { |
if ($target eq 'edit') { |
my $areaid = 'homework_edit_'.$Apache::lonxml::curdepth; |
my $areaid = 'homework_edit_'.$Apache::lonxml::curdepth; |
$text=&Apache::lonxml::get_all_text("endouttext",$parser,$style); |
$text=&Apache::lonxml::get_all_text("endouttext",$parser,$style); |
$result.=&Apache::edit::start_table($token)."<tr><td>".&mt('Text Block')."</td>" |
$result.=&Apache::edit::start_table($token)."<tr><td>".&Apache::loncommon::insert_folding_button() |
|
." ".&mt('Text Block')."</td>" |
.'<td><span class="LC_nobreak">'.&mt('Delete?').' ' |
.'<td><span class="LC_nobreak">'.&mt('Delete?').' ' |
.&Apache::edit::deletelist($target,$token) |
.&Apache::edit::deletelist($target,$token) |
.'</span></td>' |
.'</span></td>' |