--- loncom/homework/default_homework.lcpm 2005/11/16 22:18:22 1.104 +++ loncom/homework/default_homework.lcpm 2005/11/16 23:17:39 1.105 @@ -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 { 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("Yo! 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 @@ sub caparesponse_check_list { } } $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 @@ sub caparesponse_check_list { } } else { $aresult='ERROR'; + $msg='answer was undefined'; } + &LONCAPA_INTERNAL_DEBUG("after if $aresult -- $msg"); my ($temp)=split(/:/, $aresult); $awards.="$temp,"; $result.=$aresult;