--- loncom/homework/inputtags.pm 2004/06/03 14:28:39 1.143
+++ loncom/homework/inputtags.pm 2005/03/01 03:23:16 1.158
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# input definitons
#
-# $Id: inputtags.pm,v 1.143 2004/06/03 14:28:39 www Exp $
+# $Id: inputtags.pm,v 1.158 2005/03/01 03:23:16 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -65,6 +65,9 @@ sub initialize_inputtags {
@Apache::inputtags::importlist=();
# just used to note whether we have seen a response that isn't in a part
$Apache::inputtags::response_with_no_part=0;
+ # storage location so the begin <*response> tag can generate the correct
+ # answer string for display by the
+ %Apache::inputtags::answertxt=();
}
sub check_for_duplicate_ids {
@@ -219,22 +222,34 @@ sub start_textline {
if ($addchars) {
$result.=&addchars('HWVAL_'.$id,$addchars);
}
- $result.= '';
}
} else {
#right or wrong don't show what was last typed in.
- #$result=''.$oldresponse.'';
- $result='';
+ $result=''.$Apache::inputtags::answertxt{$id}.'';
+ #$result='';
}
} 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);
@@ -314,7 +329,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); }
}
@@ -327,6 +342,7 @@ sub decideoutput {
my $button=0;
my $previousmsg;
my $bgcolor='orange';
+ my $added_computer_text=0;
my %possiblecolors =
( 'correct' => '#aaffaa',
'charged_try' => '#ffaaaa',
@@ -343,7 +359,9 @@ sub decideoutput {
$message = '\textbf{'.&mt('You are correct.').'}';
} else {
$message = "".&mt('You are correct.')."";
+ $message.=" ".&mt("Computer's answer now shown above.");
}
+ $added_computer_text=1;
unless ($ENV{'course.'.
$ENV{'request.course.id'}.
'.disable_receipt_display'} eq 'yes') {
@@ -366,11 +384,17 @@ sub decideoutput {
$previousmsg='';
} elsif ($award eq 'EXACT_ANS' || $award eq 'APPROX_ANS' ) {
if ($solved =~ /^incorrect/ || $solved eq '') {
- $message = &mt("Incorrect");
+ $message = &mt("Incorrect").".";
$bgcolor=$possiblecolors{'charged_try'};
$button=1;
} else {
- $message = "".&mt('You are correct.')."";
+ if ($target eq 'tex') {
+ $message = '\textbf{'.&mt('You are correct.').'}';
+ } else {
+ $message = "".&mt('You are correct.')."";
+ $message.=" ".&mt("Computer's answer now shown above.");
+ }
+ $added_computer_text=1;
unless ($ENV{'course.'.
$ENV{'request.course.id'}.
'.disable_receipt_display'} eq 'yes') {
@@ -414,7 +438,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') {
@@ -423,30 +451,34 @@ 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') {
- $message = &mt("Units required");
+ $message = &mt("Units required").'.';
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'};
$button=1;
} elsif ($award eq 'INCORRECT') {
- $message = &mt("Incorrect");
+ $message = &mt("Incorrect").'.';
$bgcolor=$possiblecolors{'charged_try'};
$button=1;
} elsif ($award eq 'SUBMITTED') {
@@ -454,13 +486,16 @@ sub decideoutput {
$bgcolor=$possiblecolors{'correct'};
$button=1;
} elsif ($award eq 'DRAFT') {
- $message = "A draft copy has been saved.";
+ $message = &mt("A draft copy has been saved.");
$bgcolor=$possiblecolors{'not_charged_try'};
$button=1;
} elsif ($award eq 'ASSIGNED_SCORE') {
- $message = "A score has been assigned.";
+ $message = &mt("A score has been assigned.");
$bgcolor=$possiblecolors{'correct'};
$button=0;
+ } elsif ($award eq '') {
+ $bgcolor=$possiblecolors{'not_charged_try'};
+ $button=1;
} else {
$message = &mt("Unknown message").": $award";
$button=1;
@@ -471,9 +506,23 @@ sub decideoutput {
$bgcolor=$possiblecolors{'correct'};
$button=1;
}
+ 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)) {
@@ -500,10 +549,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') {
@@ -512,7 +566,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';
@@ -546,7 +603,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"} =
@@ -565,7 +623,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;
@@ -668,7 +727,7 @@ sub gradestatus {
my $previous = $Apache::lonhomework::history{"resource.$id.previous"};
my $awardmsg = $Apache::lonhomework::history{"resource.$id.awardmsg"};
&Apache::lonxml::debug("Found Award |$award|$solved|$awardmsg");
- if ( $award ne '' || $solved ne '') {
+ if ( $award ne '' || $solved ne '' || $status eq 'SHOW_ANSWER') {
&Apache::lonxml::debug('Getting message');
($showbutton,$bgcolor,$message,$previousmsg) =
&decideoutput($award,$awardmsg,$solved,$previous,$target);
@@ -693,7 +752,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 ';
@@ -713,7 +772,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"}) {