--- loncom/homework/caparesponse/caparesponse.pm 2006/11/01 23:24:52 1.195 +++ loncom/homework/caparesponse/caparesponse.pm 2006/11/10 17:47:41 1.196 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # caparesponse definition # -# $Id: caparesponse.pm,v 1.195 2006/11/01 23:24:52 albertel Exp $ +# $Id: caparesponse.pm,v 1.196 2006/11/10 17:47:41 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -431,6 +431,7 @@ sub end_numericalresponse { } } } elsif ($target eq 'web' || $target eq 'tex') { + &check_for_answer_errors($parstack,$safeeval); my $award = $Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"}; my $status = $Apache::inputtags::status['-1']; if ($Apache::lonhomework::type eq 'exam') { @@ -672,10 +673,36 @@ sub end_numericalresponse { $target eq 'tex' || $target eq 'analyze') { &Apache::lonxml::increment_counter($increment); } - &Apache::response::end_response; + &Apache::response::end_response(); return $result; } +sub check_for_answer_errors { + my ($parstack,$safeeval) = @_; + &add_in_tag_answer($parstack,$safeeval); + my %counts; + foreach my $name (keys(%answer)) { + push(@{$counts{scalar(@{$answer{$name}{'answers'}})}},$name); + } + if (scalar(keys(%counts)) > 1) { + my $counts = join(' ',map { + my $count = $_; + &mt("Answers [_1] had [_2] components.", + ''.join(', ',@{$counts{$count}}).'', + $count); + } (sort(keys(%counts)))); + &Apache::lonxml::error(&mt("All answers must have the same number of components. Varying numbers of answers were seen. ").$counts); + } + use Data::Dumper; + &Apache::lonxml::debug("count dump is ".&Dumper(\%counts)); + my $expected_number_of_inputs = (keys(%counts))[0]; + if ( $expected_number_of_inputs != scalar(@Apache::inputtags::inputlist)) { + &Apache::lonxml::error(&mt("Expected [_1] input fields, but there were only [_2] seen.", + $expected_number_of_inputs, + scalar(@Apache::inputtags::inputlist))); + } +} + sub get_table_sizes { my ($number_of_bubbles,$rbubble_values)=@_; my $scale=2; #mm for one digit