--- loncom/homework/grades.pm 2007/11/05 10:19:03 1.479 +++ loncom/homework/grades.pm 2007/11/06 11:21:21 1.482 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Grading handler # -# $Id: grades.pm,v 1.479 2007/11/05 10:19:03 foxr Exp $ +# $Id: grades.pm,v 1.482 2007/11/06 11:21:21 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -42,7 +42,6 @@ use Apache::Constants qw(:common); use Apache::lonlocal; use Apache::lonenc; use String::Similarity; -use Data::Dumper; use LONCAPA; use POSIX qw(floor); @@ -5150,14 +5149,14 @@ sub scantron_fixup_scanline { } } elsif ($field eq 'answer') { &scantron_get_maxbubble(); # Need the bubble counter info. - my $length=$scantron_config->{'Qlength'}; + my $length =$scantron_config->{'Qlength'}; my $off=$scantron_config->{'Qoff'}; my $on=$scantron_config->{'Qon'}; - my $answer=${off}x$length; my $question_number = $args->{'question'} -1; my $first_position = $first_bubble_line{$question_number}; my $bubble_count = $bubble_lines_per_response{$question_number}; my $bubbles_per_line= $$scantron_config{'Qlength'}; + my $answer=${off}x($bubbles_per_line*$bubble_count); my $final_answer; if ($$scantron_config{'Qon'} eq 'letter' || $$scantron_config{'Qon'} eq 'number') { @@ -5174,20 +5173,24 @@ sub scantron_fixup_scanline { my @alphabet=('A'..'Z'); $answer=$alphabet[$bubble_number]; } elsif ($on eq 'number') { - $answer=$args->$bubble_number+1; + $answer= $bubble_number+1; if ($answer == 10) { $answer = '0'; } } else { - substr($answer,$args->{'response'},1)=$on; + substr($answer,$bubble_number+$bubble_line*$bubbles_per_line,1)=$on; + $final_answer = $answer; } - my $before = Dumper($scan_data); &scan_data($scan_data, "$whichline.no_bubble.".$args->{'question'},undef,'1'); - my $after = Dumper($scan_data); - for (my $l = 0; $l < $bubble_count; $l++) { - if ($l eq $bubble_line) { - $final_answer .= $answer; - } else { - $final_answer .= ' '; + + # Positional notation already has the right final answer length.. + + if (($on eq 'letter') || ($on eq 'number')) { + for (my $l = 0; $l < $bubble_count; $l++) { + if ($l eq $bubble_line) { + $final_answer .= $answer; + } else { + $final_answer .= ' '; + } } } } @@ -5195,7 +5198,7 @@ sub scantron_fixup_scanline { #substr($line,$where-1,$length)=$answer; substr($line, $scantron_config->{'Qstart'}+$first_position-1, - $bubbles_per_line) = $final_answer; + $bubbles_per_line*$length) = $final_answer; } } return $line; @@ -5443,7 +5446,11 @@ sub scantron_parse_scanline { if (!&scan_data($scan_data,"$whichline.no_bubble.$questnum")) { push(@{$record{"scantron.missingerror"}},$questnum); } - } elsif (scalar(@array) lt 2) { + + # If the bubble is not the last position, there will be + # 2 elements. If it is the last position, there will be 1 element. + + } elsif (scalar(@array) le 2) { my $location = length($array[0]); my $line_num = $location / $$scantron_config{'Qlength'}; @@ -6520,7 +6527,6 @@ ENDSCRIPT foreach my $question (@{$arg}) { my $selected = &get_response_bubbles($scan_record, $question); my @select_array = split(/:/,$selected); - &Apache::lonnet::logthis("Questnum: $question, bubbles: $selected scanline $i"); &scantron_bubble_selector($r,$scan_config,$question, @select_array); } @@ -6800,7 +6806,6 @@ sub scantron_validate_doublebubble { my ($scanlines,$scan_data)=&scantron_getfile(); &scantron_get_maxbubble(); # parse needs the bubble line array. - &Apache::lonnet::logthis("validate_double_bubble"); for (my $i=0;$i<=$scanlines->{'count'};$i++) { my $line=&scantron_get_line($scanlines,$scan_data,$i); @@ -6808,7 +6813,6 @@ sub scantron_validate_doublebubble { my $scan_record=&scantron_parse_scanline($line,$i,\%scantron_config, $scan_data); if (!defined($$scan_record{'scantron.doubleerror'})) { next; } - &Apache::lonnet::logthis("Double found for line $i : $line"); &scantron_get_correction($r,$i,$scan_record,\%scantron_config,$line, 'doublebubble', $$scan_record{'scantron.doubleerror'});