--- loncom/homework/inputtags.pm 2006/09/21 21:23:19 1.205
+++ loncom/homework/inputtags.pm 2006/10/12 16:28:21 1.208
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# input definitons
#
-# $Id: inputtags.pm,v 1.205 2006/09/21 21:23:19 albertel Exp $
+# $Id: inputtags.pm,v 1.208 2006/10/12 16:28:21 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -283,6 +283,7 @@ sub needs_exam_box {
sub start_textline {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
my $result = "";
+ my $id = &start_input($parstack,$safeeval);
if ($target eq 'web') {
$Apache::lonxml::evaluate--;
my $partid=$Apache::inputtags::part;
@@ -321,7 +322,8 @@ sub start_textline {
}
} else {
#right or wrong don't show what was last typed in.
- $result=''.$Apache::inputtags::answertxt{$id}.'';
+ my $count = scalar(@Apache::inputtags::inputlist)-1;
+ $result=''.$Apache::inputtags::answertxt{$id}[$count].'';
#$result='';
}
} elsif ($target eq 'edit') {
@@ -356,6 +358,7 @@ sub end_textline {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
if ($target eq 'web') { $Apache::lonxml::evaluate++; }
elsif ($target eq 'edit') { return ('','no'); }
+ &end_input();
return "";
}
@@ -484,16 +487,6 @@ sub show_past_portfile_submission {
}
-sub checkstatus {
- my ($value,$awardref,$msgref)=@_;
- for (my $i=0;$i<=$#$awardref;$i++) {
- if ($$awardref[$i] eq $value) {
- return ($$awardref[$i],$$msgref[$i]);
- }
- }
- return(undef,undef);
-}
-
sub valid_award {
my ($award) =@_;
foreach my $possibleaward ('EXTRA_ANSWER','MISSING_ANSWER', 'ERROR',
@@ -511,15 +504,29 @@ sub valid_award {
return 0;
}
+{
+ my @awards = ('EXTRA_ANSWER', 'MISSING_ANSWER', 'ERROR', 'NO_RESPONSE',
+ 'TOO_LONG',
+ 'UNIT_INVALID_INSTRUCTOR', 'UNIT_INVALID_STUDENT',
+ 'UNIT_IRRECONCIBLE', 'UNIT_FAIL', 'NO_UNIT',
+ 'UNIT_NOTNEEDED', 'WANTED_NUMERIC', 'BAD_FORMULA',
+ 'COMMA_FAIL', 'SIG_FAIL', 'INCORRECT', 'MISORDERED_RANK',
+ 'INVALID_FILETYPE', 'DRAFT', 'SUBMITTED', 'ASSIGNED_SCORE',
+ 'APPROX_ANS', 'EXACT_ANS');
+ my $i=0;
+ my %fwd_awards = map { ($_,$i++) } @awards;
+ my $max=scalar(@awards);
+ @awards=reverse(@awards);
+ $i=0;
+ my %rev_awards = map { ($_,$i++) } @awards;
+
sub finalizeawards {
my ($awardref,$msgref,$nameref,$reverse)=@_;
- my $result=undef;
- my $award;
- my $msg;
+ my $result;
if ($#$awardref == -1) { $result = "NO_RESPONSE"; }
if ($result eq '' ) {
my $blankcount;
- foreach $award (@$awardref) {
+ foreach my $award (@$awardref) {
if ($award eq '') {
$result='MISSING_ANSWER';
$blankcount++;
@@ -527,25 +534,31 @@ sub finalizeawards {
}
if ($blankcount == ($#$awardref + 1)) { $result = 'NO_RESPONSE'; }
}
- if (defined($result)) { return ($result,$msg); }
+ if (defined($result)) { return ($result); }
# these awards are ordered from most important error through best correct
-
- my @awards = ('EXTRA_ANSWER', 'MISSING_ANSWER', 'ERROR', 'NO_RESPONSE',
- 'TOO_LONG',
- 'UNIT_INVALID_INSTRUCTOR', 'UNIT_INVALID_STUDENT',
- 'UNIT_IRRECONCIBLE', 'UNIT_FAIL', 'NO_UNIT',
- 'UNIT_NOTNEEDED', 'WANTED_NUMERIC', 'BAD_FORMULA',
- 'COMMA_FAIL', 'SIG_FAIL', 'INCORRECT', 'MISORDERED_RANK',
- 'INVALID_FILETYPE', 'DRAFT', 'SUBMITTED', 'ASSIGNED_SCORE',
- 'APPROX_ANS', 'EXACT_ANS');
- if ($reverse) { @awards=reverse(@awards); }
- foreach my $possibleaward (@awards) {
- ($result,$msg)=&checkstatus($possibleaward,$awardref,$msgref);
- if (defined($result)) { return ($result,$msg); }
+ my $awards = (!$reverse) ? \%fwd_awards : \%rev_awards ;
+
+ my $best = $max;
+ my $j=0;
+ my $which;
+ foreach my $award (@$awardref) {
+ if ($awards->{$award} < $best) {
+ $best = $awards->{$award};
+ $which = $j;
+ }
+ $j++;
+ }
+ if (defined($which)) {
+ if (ref($nameref)) {
+ return ($$awardref[$which],$$msgref[$which],$$nameref[$which]);
+ } else {
+ return ($$awardref[$which],$$msgref[$which]);
+ }
}
return ('ERROR',undef);
}
+}
sub decideoutput {
my ($award,$awarded,$awardmsg,$solved,$previous,$target)=@_;