--- loncom/homework/grades.pm 2008/02/01 22:50:43 1.503 +++ loncom/homework/grades.pm 2008/02/04 23:30:05 1.507 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Grading handler # -# $Id: grades.pm,v 1.503 2008/02/01 22:50:43 raeburn Exp $ +# $Id: grades.pm,v 1.507 2008/02/04 23:30:05 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -5524,6 +5524,10 @@ sub scantron_validator_positional { # If the split only gives us one element.. the full length of the # answer string, no bubbles are filled in: + if ($answers_needed eq '') { + return; + } + if (length($array[0]) eq $$scantron_config{'Qlength'}*$answers_needed) { for (my $ans=0; $ans<$answers_needed; $ans++ ) { $record->{"scantron.$ansnum.answer"}=''; @@ -5950,6 +5954,8 @@ SCANTRONFORM ''."\n"; $chunk .= ''."\n"; + $chunk .= + ''."\n"; $result .= $chunk; $line++; } @@ -6760,7 +6766,7 @@ sub questions_to_line_list { $first = $first_bubble_line{$question-1} + 1; $count = $bubble_lines_per_response{$question-1}; } - my $last = $first+$count-1; + $last = $first+$count-1; push(@lines, ($first..$last)); } return join(',', @lines); @@ -7260,7 +7266,25 @@ sub scantron_validate_missingbubbles { # Probably here's where the error is... foreach my $missing (@{$$scan_record{'scantron.missingerror'}}) { - if ($missing > $max_bubble) { next; } + my $lastbubble; + if ($missing =~ /^(\d+)\.(\d+)$/) { + my $question = $1; + my $subquestion = $2; + if (!defined($first_bubble_line{$question -1})) { next; } + my $first = $first_bubble_line{$question-1}; + my @subans = split(/,/,$subdivided_bubble_lines{$question-1}); + my $subcount = 1; + while ($subcount<$subquestion) { + $first += $subans[$subcount-1]; + $subcount ++; + } + my $count = $subans[$subquestion-1]; + $lastbubble = $first + $count; + } else { + if (!defined($first_bubble_line{$missing - 1})) { next; } + $lastbubble = $first_bubble_line{$missing - 1} + $bubble_lines_per_response{$missing - 1}; + } + if ($lastbubble > $max_bubble) { next; } push(@to_correct,$missing); } if (@to_correct) {