[LON-CAPA-cvs] cvs: loncom /homework default_homework.lcpm inputtags.pm

albertel lon-capa-cvs@mail.lon-capa.org
Wed, 16 Nov 2005 23:17:40 -0000


albertel		Wed Nov 16 18:17:40 2005 EDT

  Modified files:              
    /loncom/homework	inputtags.pm default_homework.lcpm 
  Log:
  - complains intellignetly when a user submits 2,3,4 and 2,3 was expected
  
  
Index: loncom/homework/inputtags.pm
diff -u loncom/homework/inputtags.pm:1.181 loncom/homework/inputtags.pm:1.182
--- loncom/homework/inputtags.pm:1.181	Wed Nov 16 17:52:22 2005
+++ loncom/homework/inputtags.pm	Wed Nov 16 18:17:39 2005
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # input  definitons
 #
-# $Id: inputtags.pm,v 1.181 2005/11/16 22:52:22 albertel Exp $
+# $Id: inputtags.pm,v 1.182 2005/11/16 23:17:39 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -388,7 +388,8 @@
 
 sub valid_award {
     my ($award) =@_;
-    foreach my $possibleaward ('MISSING_ANSWER', 'ERROR', 'NO_RESPONSE',
+    foreach my $possibleaward ('EXTRA_ANSWER','MISSING_ANSWER', 'ERROR',
+			       'NO_RESPONSE',
 			       'TOO_LONG', 'UNIT_INVALID_INSTRUCTOR',
 			       'UNIT_INVALID_STUDENT', 'UNIT_IRRECONCIBLE',
 			       'UNIT_FAIL', 'NO_UNIT',
@@ -422,7 +423,8 @@
 
     # these awards are ordered from most important error through best correct
     
-    my @awards = ('MISSING_ANSWER', 'ERROR', 'NO_RESPONSE', 'TOO_LONG',
+    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',
@@ -530,6 +532,10 @@
 	$message = '';
 	$bgcolor=$possiblecolors{'no_feedback'};
 	$button=1;
+    } elsif ($award eq 'EXTRA_ANSWER') {
+	$message = &mt('Some extra items were submitted.');
+	$bgcolor=$possiblecolors{'not_charged_try'};
+	$button = 1;
     } elsif ($award eq 'MISSING_ANSWER') {
 	$message = &mt('Some items were not submitted.');
 	$bgcolor=$possiblecolors{'not_charged_try'};
Index: loncom/homework/default_homework.lcpm
diff -u loncom/homework/default_homework.lcpm:1.104 loncom/homework/default_homework.lcpm:1.105
--- loncom/homework/default_homework.lcpm:1.104	Wed Nov 16 17:18:22 2005
+++ loncom/homework/default_homework.lcpm	Wed Nov 16 18:17:39 2005
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA 
 # used by lonxml::xmlparse() as input variable $safeinit to Apache::run::run()
 #
-# $Id: default_homework.lcpm,v 1.104 2005/11/16 22:18:22 albertel Exp $
+# $Id: default_homework.lcpm,v 1.105 2005/11/16 23:17:39 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -182,23 +182,24 @@
 
 sub caparesponse_check_list {
     my $response=$LONCAPA::CAPAresponse_args{'response'};
-    my ($result,@list);
-    @list=@LONCAPA::CAPAresponse_answer;
-    my $aresult='';
-    my $current_answer;
-    my $answers=join(':',@list);
-    $result.="Got response :$answers:\n";
-    &LONCAPA_INTERNAL_DEBUG("<blink>Yo!</blink> got ".join(':',%LONCAPA::CAPAresponse_args));
+    my $result="Got response :".join(':',@LONCAPA::CAPAresponse_answer).":\n";
+    &LONCAPA_INTERNAL_DEBUG("args ".join(':',%LONCAPA::CAPAresponse_args));
     my @responselist;
     my $type = $LONCAPA::CAPAresponse_args{'type'};
     $result.="Got type :$type:\n";
-    if ($type ne '' && $#list > 0) {
+    if ($type ne '' && $#LONCAPA::CAPAresponse_answer > 0) {
 	(@responselist)=split(/,/,$response);
+	if (@responselist < @LONCAPA::CAPAresponse_answer) {
+	    return 'MISSING_ANSWER';
+	}
+	if (@responselist > @LONCAPA::CAPAresponse_answer) {
+	    return 'EXTRA_ANSWER';
+	}
     } else {
 	(@responselist)=($response);
     }
-    my $unit='';
     $result.="Initial final response :$responselist['-1']:\n";
+    my $unit;
     if ($type eq '' || $type eq 'float') {
 	#for numerical problems split off the unit
 	if ( $responselist['-1']=~ /(.*[^\s])\s+([^\s]+)/ ) {
@@ -207,17 +208,13 @@
 	}
     }
     $result.="Final final response :$responselist['-1']:$unit:\n";
-    $result.=":$#list: answers\n";
     $unit=~s/\s//;
-    my $i=0;
-    my $awards='';
-    my @msgs;
-    for ($i=0; $i<@list;$i++) {
-	my $msg;
-	$result.="trying answer :$list[$i]:\n";
-	my $thisanswer=$list[$i];
+
+    my ($awards, @msgs);
+    foreach my $thisanswer (@LONCAPA::CAPAresponse_answer) {
+	my ($msg,$aresult);
 	$result.="trying answer :$thisanswer:\n";
-	if (defined($list[$i])) { 
+	if (defined($thisanswer)) {
 	    if ($unit eq '') {
 		($aresult,$msg)=&caparesponse_check($thisanswer,
 						    $responselist[$i]);
@@ -227,7 +224,9 @@
 	    }
 	} else {
 	    $aresult='ERROR';
+	    $msg='answer was undefined';
 	}
+	&LONCAPA_INTERNAL_DEBUG("after if $aresult -- $msg");
 	my ($temp)=split(/:/, $aresult);
 	$awards.="$temp,";
 	$result.=$aresult;