--- loncom/homework/inputtags.pm 2004/11/06 01:15:59 1.149.2.1 +++ loncom/homework/inputtags.pm 2005/02/18 05:41:31 1.157 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # input definitons # -# $Id: inputtags.pm,v 1.149.2.1 2004/11/06 01:15:59 albertel Exp $ +# $Id: inputtags.pm,v 1.157 2005/02/18 05:41:31 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -222,7 +222,12 @@ sub start_textline { if ($addchars) { $result.=&addchars('HWVAL_'.$id,$addchars); } - $result.= ''; } } else { @@ -233,11 +238,16 @@ sub start_textline { } elsif ($target eq 'edit') { $result=&Apache::edit::tag_start($target,$token); $result.=&Apache::edit::text_arg('Size:','size',$token,'5'). - &Apache::edit::text_arg - ('Click-On Texts (comma sep):','addchars',$token,10).""; - $result.=&Apache::edit::end_table; + &Apache::edit::text_arg('Click-On Texts (comma sep):', + 'addchars',$token,10); + $result.=&Apache::edit::select_arg('Readonly:','readonly', + ['no','yes'],$token); + $result.=&Apache::edit::end_row(); + $result.=&Apache::edit::end_table(); } elsif ($target eq 'modified') { - my $constructtag=&Apache::edit::get_new_args($token,$parstack,$safeeval,'size','addchars'); + my $constructtag=&Apache::edit::get_new_args($token,$parstack, + $safeeval,'size', + 'addchars','readonly'); if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); } } elsif ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') { my $size = &Apache::lonxml::get_param('size',$parstack,$safeeval); @@ -317,7 +327,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); } } @@ -347,8 +357,8 @@ 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 above."); $added_computer_text=1; unless ($ENV{'course.'. $ENV{'request.course.id'}. @@ -380,8 +390,8 @@ 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 above."); $added_computer_text=1; unless ($ENV{'course.'. $ENV{'request.course.id'}. @@ -439,17 +449,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') { @@ -457,6 +467,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'}; @@ -491,13 +505,22 @@ sub decideoutput { $button=1; } if ($Apache::inputtags::status[-1] eq 'SHOW_ANSWER' && - !$added_computer_text) { + !$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)) { @@ -578,7 +601,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"} = @@ -597,7 +621,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; @@ -745,7 +770,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"}) {