--- loncom/homework/grades.pm 2008/02/01 22:50:43 1.503 +++ loncom/homework/grades.pm 2008/02/05 18:32:34 1.508 @@ -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.508 2008/02/05 18:32:34 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -3960,31 +3960,31 @@ sub csvuploadassign { $grades{$store_key}=$entries{$fields{$dest}}; } } - if (! %grades) { push(@skipped,"$username:$domain no data to save"); } - $grades{"resource.regrader"}="$env{'user.name'}:$env{'user.domain'}"; - my $result=&Apache::lonnet::cstore(\%grades,$symb, + if (! %grades) { + push(@skipped,&mt("[_1]: no data to save","$username:$domain")); + } else { + $grades{"resource.regrader"}="$env{'user.name'}:$env{'user.domain'}"; + my $result=&Apache::lonnet::cstore(\%grades,$symb, $env{'request.course.id'}, $domain,$username); - if ($result eq 'ok') { - $request->print('.'); - } else { - $request->print("

- - Failed to save student $username:$domain. - Message when trying to save was ($result) - -

" ); - } - $request->rflush(); - $countdone++; + if ($result eq 'ok') { + $request->print('.'); + } else { + $request->print("

". + &mt("Failed to save data for student [_1]. Message when trying to save was: [_2]", + "$username:$domain",$result)."

"); + } + $request->rflush(); + $countdone++; + } } - $request->print("
Saved $countdone students\n"); + $request->print('
'.&mt("Saved [_1] students",$countdone)."\n"); if (@skipped) { - $request->print('

Skipped Students

'); + $request->print('

'.&mt('Skipped Students').'

'); foreach my $student (@skipped) { $request->print("$student
\n"); } } if (@notallowed) { - $request->print('

Students Not Allowed to Modify

'); + $request->print('

'.&mt('Students Not Allowed to Modify').'

'); foreach my $student (@notallowed) { $request->print("$student
\n"); } } $request->print("
\n"); @@ -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) {