--- loncom/homework/inputtags.pm 2004/06/04 22:06:07 1.144 +++ loncom/homework/inputtags.pm 2005/01/31 22:00:40 1.156 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # input definitons # -# $Id: inputtags.pm,v 1.144 2004/06/04 22:06:07 albertel Exp $ +# $Id: inputtags.pm,v 1.156 2005/01/31 22:00:40 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -317,7 +317,7 @@ sub finalizeawards { 'BAD_FORMULA', 'SIG_FAIL', 'INCORRECT', 'MISORDERED_RANK', 'INVALID_FILETYPE', 'DRAFT', 'SUBMITTED', 'ASSIGNED_SCORE', - 'APPROX_ANS', 'EXACT_ANS') { + 'APPROX_ANS', 'EXACT_ANS','COMMA_FAIL') { ($result,$msg)=&checkstatus($possibleaward,$awardref,$msgref); if (defined($result)) { return ($result,$msg); } } @@ -330,6 +330,7 @@ sub decideoutput { my $button=0; my $previousmsg; my $bgcolor='orange'; + my $added_computer_text=0; my %possiblecolors = ( 'correct' => '#aaffaa', 'charged_try' => '#ffaaaa', @@ -346,8 +347,9 @@ sub decideoutput { $message = '\textbf{'.&mt('You are correct.').'}'; } else { $message = "".&mt('You are correct.').""; + $message.=" ".&mt("Computer's answer now shown above."); } - $message.= " ".&mt(" Computer's answer now shown."); + $added_computer_text=1; unless ($ENV{'course.'. $ENV{'request.course.id'}. '.disable_receipt_display'} eq 'yes') { @@ -378,8 +380,9 @@ sub decideoutput { $message = '\textbf{'.&mt('You are correct.').'}'; } else { $message = "".&mt('You are correct.').""; + $message.=" ".&mt("Computer's answer now shown above."); } - $message.= " ".&mt(" Computer's answer now shown."); + $added_computer_text=1; unless ($ENV{'course.'. $ENV{'request.course.id'}. '.disable_receipt_display'} eq 'yes') { @@ -423,7 +426,11 @@ sub decideoutput { $bgcolor=$possiblecolors{'not_charged_try'}; $button=1; } elsif ($award eq 'SIG_FAIL') { - $message = &mt("Significant figures are incorrect, you provided [_1] significant figures while [_2] to [_3] were expected. Submission not graded.",(split(/:/,$awardmsg))); + my ($used,$min,$max)=split(':',$awardmsg); + my $word; + if ($used < $min) { $word=&mt('more'); } + if ($used > $max) { $word=&mt('fewer'); } + $message = &mt("Submission not graded. Use [_2] digits.",$used,$word); $bgcolor=$possiblecolors{'not_charged_try'}; $button=1; } elsif ($award eq 'UNIT_INVALID_INSTRUCTOR') { @@ -432,17 +439,17 @@ sub decideoutput { $bgcolor=$possiblecolors{'not_charged_try'}; $button=1; } elsif ($award eq 'UNIT_INVALID_STUDENT') { - $message = &mt('Unable to interpret units. Computer reads units as "[_1]"',''.$awardmsg.'.'); + $message = &mt('Unable to interpret units. Computer reads units as "[_1]".',&markup_unit($awardmsg,$target)); if ($target ne 'tex') {$message.=&Apache::loncommon::help_open_topic('Physical_Units');} $bgcolor=$possiblecolors{'not_charged_try'}; $button=1; } elsif ($award eq 'UNIT_FAIL' || $award eq 'UNIT_IRRECONCIBLE') { - $message = &mt('Incompatible units. No conversion found between "[_1]" and the required units ',''.$awardmsg.'.'); + $message = &mt('Incompatible units. No conversion found between "[_1]" and the required units.',&markup_unit($awardmsg,$target)); if ($target ne 'tex') {$message.=&Apache::loncommon::help_open_topic('Physical_Units');} $bgcolor=$possiblecolors{'not_charged_try'}; $button=1; } elsif ($award eq 'UNIT_NOTNEEDED') { - $message = &mt('Only a number required. Computer reads units of "[_1]"',''.$awardmsg.'.'); + $message = &mt('Only a number required. Computer reads units of "[_1]".',&markup_unit($awardmsg,$target)); $bgcolor=$possiblecolors{'not_charged_try'}; $button=1; } elsif ($award eq 'NO_UNIT') { @@ -450,6 +457,10 @@ sub decideoutput { if ($target ne 'tex') {$message.=&Apache::loncommon::help_open_topic('Physical_Units')}; $bgcolor=$possiblecolors{'not_charged_try'}; $button=1; + } elsif ($award eq 'COMMA_FAIL') { + $message = &mt("Proper comma separation is required").'.'; + $bgcolor=$possiblecolors{'not_charged_try'}; + $button=1; } elsif ($award eq 'BAD_FORMULA') { $message = &mt("Unable to understand formula"); $bgcolor=$possiblecolors{'not_charged_try'}; @@ -483,12 +494,23 @@ sub decideoutput { $bgcolor=$possiblecolors{'correct'}; $button=1; } - if ($Apache::inputtags::status[-1] eq 'SHOW_ANSWER') { - $message.=" ".&mt("Computer's answer now shown."); + if ($Apache::inputtags::status[-1] eq 'SHOW_ANSWER' && + !$added_computer_text && $target ne 'tex') { + $message.=" ".&mt("Computer's answer now shown above."); + $added_computer_text=1; } return ($button,$bgcolor,$message,$previousmsg); } +sub markup_unit { + my ($unit,$target)=@_; + if ($target eq 'tex') { + return '\texttt{'.&Apache::lonxml::latex_special_symbols($unit).'}'; + } else { + return "".$unit.""; + } +} + sub removealldata { my ($id)=@_; foreach my $key (keys(%Apache::lonhomework::results)) { @@ -515,10 +537,15 @@ sub hidealldata { sub setgradedata { my ($award,$msg,$id,$previously_used) = @_; - # if the student already has it correct, don't modify the status - if ($Apache::lonhomework::scantronmode && defined($ENV{'form.CODE'})) { + if ($Apache::lonhomework::scantronmode && + &Apache::lonnet::validCODE($ENV{'form.CODE'})) { $Apache::lonhomework::results{"resource.CODE"}=$ENV{'form.CODE'}; + } elsif ($Apache::lonhomework::scantronmode && + $ENV{'form.CODE'} eq '' && + $Apache::lonhomework::history{"resource.CODE"} ne '') { + $Apache::lonhomework::results{"resource.CODE"}=''; } + if (!$Apache::lonhomework::scantronmode && $Apache::inputtags::status['-1'] ne 'CAN_ANSWER' && $Apache::inputtags::status['-1'] ne 'CANNOT_ANSWER') { @@ -527,7 +554,10 @@ sub setgradedata { } elsif ( $Apache::lonhomework::history{"resource.$id.solved"} !~ /^correct/ || $Apache::lonhomework::scantronmode || lc($Apache::lonhomework::problemstatus) eq 'no') { - #handle assignment of tries and solved status + # the student doesn't already have it correct, + # or we are in a mode (scantron orno problem status) where a correct + # can become incorrect + # handle assignment of tries and solved status my $solvemsg; if ($Apache::lonhomework::scantronmode) { $solvemsg='correct_by_scantron'; @@ -561,7 +591,8 @@ sub setgradedata { } elsif ( $award eq 'INCORRECT' ) { $Apache::lonhomework::results{"resource.$id.tries"} = $Apache::lonhomework::history{"resource.$id.tries"} + 1; - if (lc($Apache::lonhomework::problemstatus) eq 'no') { + if (lc($Apache::lonhomework::problemstatus) eq 'no' || + $Apache::lonhomework::scantronmode) { $Apache::lonhomework::results{"resource.$id.awarded"} = 0; } $Apache::lonhomework::results{"resource.$id.solved"} = @@ -580,7 +611,8 @@ sub setgradedata { } else { $Apache::lonhomework::results{"resource.$id.solved"} = 'incorrect_attempted'; - if (lc($Apache::lonhomework::problemstatus) eq 'no') { + if (lc($Apache::lonhomework::problemstatus) eq 'no' || + $Apache::lonhomework::scantronmode) { $Apache::lonhomework::results{"resource.$id.tries"} = $Apache::lonhomework::history{"resource.$id.tries"} + 1; $Apache::lonhomework::results{"resource.$id.awarded"} = 0; @@ -687,7 +719,6 @@ sub gradestatus { &Apache::lonxml::debug('Getting message'); ($showbutton,$bgcolor,$message,$previousmsg) = &decideoutput($award,$awardmsg,$solved,$previous,$target); - &Apache::lonnet::logthis(" mesage is $message status is $status"); if ($target eq 'tex') { $message='\vskip 2 mm '.$message.' '; } else { @@ -709,7 +740,7 @@ sub gradestatus { if ( $Apache::lonhomework::type eq 'survey') { $tries_text=&mt('Submissions'); } if ( $showbutton ) { if ($target eq 'tex') { - if ($ENV{'request.state'} ne "construct" && $Apache::lonhomework::type ne 'exam') { + if ($ENV{'request.state'} ne "construct" && $Apache::lonhomework::type ne 'exam' && $ENV{'form.suppress_tries'} ne 'yes') { $trystr = ' {\vskip 1 mm \small \textit{'.$tries_text.'} '.$tries.'/'.$maxtries.'} \vskip 2 mm '; } else { $trystr = '\vskip 0 mm '; @@ -729,7 +760,7 @@ sub gradestatus { if ( $status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER') {$showbutton = 0;} if ( $showbutton ) { if ($target ne 'tex') { - $button = ''; + $button = ''; } } if ($Apache::lonhomework::history{"resource.$id.afterduedate"}) {