--- loncom/homework/response.pm 2014/12/30 20:03:10 1.238 +++ loncom/homework/response.pm 2024/10/29 03:29:30 1.244.2.5 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # various response type definitons response definition # -# $Id: response.pm,v 1.238 2014/12/30 20:03:10 raeburn Exp $ +# $Id: response.pm,v 1.244.2.5 2024/10/29 03:29:30 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -181,7 +181,6 @@ sub setrandomnumber { } else { ($rndmod,$rndmod2)=&Apache::lonnet::digest("$id1,$id2"); } - $Apache::lonhomework::results{'resource.'.$id1.'.rawrndseed'}=$rndseed; if ($rndseed =~/([,:])/) { my $char=$1; use integer; @@ -198,7 +197,6 @@ sub setrandomnumber { } } &Apache::lonxml::debug("randseed $rndmod $rndseed"); - $Apache::lonhomework::results{'resource.'.$id1.'.rndseed'}=$rndseed; &Apache::lonnet::setup_random_from_rndseed($rndseed); return ''; } @@ -470,8 +468,8 @@ sub end_customresponse { $error = $award; $award = 'ERROR'; } - if (($award eq 'INCORRECT' || $award eq 'APPROX_ANS' || - $award eq 'EXACT_ANS')) { + if (($award eq 'INCORRECT') || ($award eq 'APPROX_ANS') || + ($award eq 'EXACT_ANS') || ($award eq 'ASSIGNED_SCORE')) { if ($Apache::lonhomework::type eq 'survey') { $award='SUBMITTED'; } elsif ($Apache::lonhomework::type eq 'surveycred') { @@ -515,6 +513,9 @@ sub end_customresponse { &Apache::lonhomework::set_bubble_lines(); } } + if ($target eq 'web') { + &setup_prior_tries_hash(\&format_prior_response_math); + } pop(@Apache::lonxml::namespace); pop(@Apache::response::custom_answer); pop(@Apache::response::custom_answer_type); @@ -577,63 +578,6 @@ sub start_mathresponse { return $result; } -sub edit_mathresponse_button { - my ($partid,$id)=@_; - my $field = 'HWVAL_'.$partid.'_'.$id; - my $btype = $env{'browser.type'}; - my $bversion = $env{'browser.version'}; - if (($btype eq 'explorer' && $bversion < 9) || ($btype eq 'safari' && $bversion < 3) || - ($btype eq 'mozilla' && $bversion < 3)) { - # DragMath applet - my $button=&mt('Edit Answer'); -# my $helplink=&Apache::loncommon::help_open_topic('Formula_Editor'); - my $iconpath=$Apache::lonnet::perlvar{'lonIconsURL'}; - return(< -function LC_mathedit_${field} (LCtextline) { - thenumber = LCtextline; - var thedata = ''; - if (document.getElementById(LCtextline)) { - thedata = document.getElementById(LCtextline).value; - } - newwin = window.open("/adm/dragmath/MaximaPopup.html","","width=565,height=400,resizable"); -} - -$button -ENDFORMULABUTTON - - } else { - # LON-CAPA math equation editor - my $mathjaxjs; - unless (lc(&Apache::lontexconvert::tex_engine()) eq 'mathjax') { - $mathjaxjs = <<"MATHJAX_SCRIPT"; -var mathjaxscript = document.createElement("script"); - mathjaxscript.type = "text/javascript"; - mathjaxscript.src = "/adm/MathJax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"; - document.body.appendChild(mathjaxscript); -MATHJAX_SCRIPT - } - return(< - var LCmathField = document.getElementById('${field}'); - LCmathField.className += ' math'; // note the space - var LCMATH_started; - if (typeof LCMATH_started === 'undefined') { - $mathjaxjs - LCMATH_started = true; - var script = document.createElement("script"); - script.type = "text/javascript"; - script.src = "/adm/LC_math_editor/LC_math_editor.min.js"; - document.body.appendChild(script); - window.addEventListener('load', function(e) { - LCMATH.initEditors(); - }, false); - } - -EQ_EDITOR_SCRIPT - } -} - sub end_mathresponse { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; my $result; @@ -688,15 +632,6 @@ sub end_mathresponse { } } } - if ($target eq 'web') { - &setup_prior_tries_hash(\&format_prior_response_math); - my $partid = $Apache::inputtags::part; - my $id = $Apache::inputtags::response[-1]; - if (($Apache::inputtags::status['-1'] eq 'CAN_ANSWER') - && (&Apache::lonnet::EXT('resource.'.$partid.'_'.$id.'.turnoffeditor') ne 'yes')) { - $result.=&edit_mathresponse_button($partid,$id); - } - } pop(@Apache::lonxml::namespace); pop(@Apache::response::custom_answer); @@ -831,7 +766,8 @@ sub start_responseparam { } } elsif ($target eq 'grade' || $target eq 'answer' || $target eq 'web' || $target eq 'tex' || $target eq 'analyze' ) { - if ($env{'request.state'} eq 'construct') { + if (($env{'request.state'} eq 'construct') || + ($env{'request.noversionuri'} =~ m{^\Q/res/adm/includes/templates/\E[^/]+\.problem$})) { my $name =&Apache::lonxml::get_param('name',$parstack,$safeeval); my $default=&Apache::lonxml::get_param('default',$parstack, $safeeval); @@ -862,7 +798,10 @@ sub reset_params { sub setup_params { my ($tag,$safeeval) = @_; - if ($env{'request.state'} eq 'construct') { return; } + if (($env{'request.state'} eq 'construct') || + ($env{'request.noversionuri'} =~ m{^\Q/res/adm/includes/templates/\E[^/]+\.problem$})) { + return; + } my %paramlist=(); foreach my $key (keys(%Apache::lonnet::packagetab)) { if ($key =~ /^\Q$tag\E/) { @@ -941,7 +880,7 @@ sub answer_part { if ($env{'form.answer_output_mode'} eq 'tex') { if (!$args->{'no_verbatim'}) { my $to_use='|'; - foreach my $value (32..126) { + foreach my $value (33..41,43..126) { my $char=pack('c',$value); if ($answer !~ /\Q$char\E/) { $to_use=$char; @@ -1372,7 +1311,7 @@ sub submitted { return 1; } # Submit All button on a .page was pressed - if (defined($env{'form.all_submit'})) { return 1; } + if ($env{'form.all_submit'}) { return 1; } # otherwise no submission occurred return 0; } @@ -1408,10 +1347,12 @@ basically undef and 0 (both false) mean and all true values mean that they can't do any more work a return of undef means it is unattempted - a return of 0 means it is attmpted and wrong but still has tries + a return of 0 means it is both attempted and still has tries and + is wrong or is only partially correct, and retries + are allowed. a return of 1 means it is marked correct - a return of 2 means they have exceed maximum number of tries - a return of 3 means it after the answer date + a return of 2 means they have exceeded maximum number of tries + a return of 3 means it is after the answer date =cut @@ -1428,7 +1369,13 @@ sub check_status { return 3; } my $status=&Apache::lonnet::EXT("user.resource.resource.$id.solved"); - if ($status =~ /^correct/) { return 1; } + if ($status =~ /^correct/) { + my $awarded=&Apache::lonnet::EXT("user.resource.resource.$id.awarded"); + my $retrypartial=&Apache::lonnet::EXT("resource.$id.retrypartial"); + unless (($retrypartial =~ /^1|on|yes$/) && ($awarded <1)) { + return 1; + } + } if (!$status) { return undef; } my $maxtries=&Apache::lonnet::EXT("resource.$id.maxtries"); if ($maxtries eq '') { $maxtries=2; }