--- loncom/homework/structuretags.pm 2010/08/07 19:24:03 1.473 +++ loncom/homework/structuretags.pm 2011/07/21 09:18:40 1.491 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: structuretags.pm,v 1.473 2010/08/07 19:24:03 raeburn Exp $ +# $Id: structuretags.pm,v 1.491 2011/07/21 09:18:40 christianto Exp $ # # Copyright Michigan State University Board of Trustees # @@ -128,6 +128,7 @@ sub homework_js { &setmode_javascript(). <<'JS'; JS } @@ -153,10 +154,55 @@ JS sub setmode_javascript { return <<"ENDSCRIPT"; +ENDSCRIPT +} + +sub file_delchk_js { + my $delfilewarn = &mt('You have indicated you wish to remove some files previously included in your submission.').'\\n'. + &mt('Continue submission with these files removed?'); + return <<"ENDSCRIPT"; + ENDSCRIPT } @@ -177,12 +223,17 @@ sub page_start { $parstack,$parser,$safeeval); } - $extra_head .= &homework_js(); - - if ($env{'environment.wysiwygeditor'} eq 'on') { - $extra_head .= &Apache::lonhtmlcommon::dragmath_js("FCKEditMathPopup"); - } else { - $extra_head .= &Apache::lonhtmlcommon::dragmath_js("EditMathPopup"); + $extra_head .= &homework_js(). + &Apache::lonhtmlcommon::dragmath_js("EditMathPopup"); + if (&Apache::lonhtmlcommon::htmlareabrowser()) { + my %textarea_args = ( + dragmath => 'math', + ); + $extra_head .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args); + } + my $is_task = ($env{'request.uri'} =~ /\.task$/); + if ($is_task) { + $extra_head .= &file_delchk_js(); } my %body_args; @@ -276,6 +327,9 @@ sub page_start { if ($target eq 'edit') { $form_tag_start.=&Apache::edit::form_change_detection(); } + if ($is_task) { + $form_tag_start .= ' onsubmit="return file_deletion_check(this);"'; + } $form_tag_start.='>'."\n"; my $symb=&Apache::lonnet::symbread(); @@ -317,9 +371,15 @@ sub get_resource_name { } sub setup_rndseed { - my ($safeeval)=@_; - my $rndseed; + my ($safeeval,$target)=@_; my ($symb)=&Apache::lonnet::whichuser(); + my ($questiontype,$set_safespace,$rndseed); + if ($target eq 'analyze') { + $questiontype = $env{'form.grade_questiontype'}; + } + unless (defined($questiontype)) { + $questiontype = $Apache::lonhomework::type; + } if ($env{'request.state'} eq "construct" || $symb eq '' || $Apache::lonhomework::type eq 'practice' @@ -334,6 +394,14 @@ sub setup_rndseed { } $env{'form.rndseed'}=$rndseed; } + if (($env{'request.state'} eq "construct") && + ($Apache::lonhomework::type eq 'randomizetry')) { + my $tries = $Apache::lonhomework::history{"resource.$Apache::inputtags::part.tries"}; + if ($tries) { + $rndseed += $tries; + } + $env{'form.'.$Apache::inputtags::part.'.rndseed'}=$rndseed; + } if ( ($env{'form.resetdata'} eq &mt('New Problem Variation') && $env{'form.submitted'} eq 'yes') || $env{'form.newrandomization'} eq &mt('New Randomization')) { @@ -343,16 +411,54 @@ sub setup_rndseed { delete($env{'form.resetdata'}); delete($env{'form.newrandomization'}); } - if (defined($rndseed) && $rndseed ne int($rndseed)) { - $rndseed=join(':',&Apache::lonnet::digest($rndseed)); + $rndseed=~s/\,/\:/g; + $rndseed=~s/[^\w\d\:\-]//g; + if (defined($rndseed)) { + my ($c1,$c2)=split(/\:/,$rndseed); + unless ($c2) { $c2=0; } + unless (($c1==int($c1)) && ($c2==int($c2))) { + $rndseed=join(':',&Apache::lonnet::digest($rndseed)); + } } if ($Apache::lonhomework::history{'resource.CODE'}) { $rndseed=&Apache::lonnet::rndseed(); } - if ($safeeval) { - &Apache::lonxml::debug("Setting rndseed to $rndseed"); - &Apache::run::run('$external::randomseed="'.$rndseed.'";',$safeeval); - } + $set_safespace = 1; + } elsif ($questiontype eq 'randomizetry') { + if ($target eq 'analyze') { + if (defined($env{'form.grade_rndseed'})) { + $rndseed = $env{'form.grade_rndseed'}; + } + } + unless (($target eq 'analyze') && (defined($rndseed))) { + $rndseed=&Apache::lonnet::rndseed(); + my $curr_try = $Apache::lonhomework::history{"resource.$Apache::inputtags::part.tries"}; + if ($Apache::inputtags::status[-1] eq 'CAN_ANSWER') { + $curr_try ++; + } + if ($rndseed =~/^(\d+)[,:](\d+)$/) { + $rndseed = $1; + } + if ($curr_try) { + my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries"); + if (($reqtries =~ /^\d+$/) && ($reqtries > 1)) { + my $inc = int(($curr_try-1)/$reqtries); + $rndseed += $inc; + } else { + $rndseed += $curr_try; + } + } + } + $set_safespace = 1; + } + if ($set_safespace) { + if ($safeeval) { + &Apache::lonxml::debug("Setting rndseed to $rndseed"); + &Apache::run::run('$external::randomseed="'.$rndseed.'";',$safeeval); + } + } + unless (($env{'request.state'} eq "construct") || ($symb eq '')) { + $env{'form.'.$Apache::inputtags::part.'.rndseed'}=$rndseed; } return $rndseed; } @@ -364,27 +470,48 @@ sub remember_problem_state { '; } +sub problem_edit_action_button { + my ($name,$action,$accesskey,$text,$flag)=@_; + my $actionscript="setmode(this.form,'$action')"; + return "\n"; +} + sub problem_edit_buttons { - return ' -