[LON-CAPA-cvs] cvs: loncom /homework grades.pm
foxr
lon-capa-cvs-allow@mail.lon-capa.org
Mon, 05 Nov 2007 10:19:04 -0000
foxr Mon Nov 5 05:19:04 2007 EDT
Modified files:
/loncom/homework grades.pm
Log:
Resolve update conflict
Index: loncom/homework/grades.pm
diff -u loncom/homework/grades.pm:1.478 loncom/homework/grades.pm:1.479
--- loncom/homework/grades.pm:1.478 Fri Nov 2 20:18:37 2007
+++ loncom/homework/grades.pm Mon Nov 5 05:19:03 2007
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Grading handler
#
-# $Id: grades.pm,v 1.478 2007/11/03 00:18:37 albertel Exp $
+# $Id: grades.pm,v 1.479 2007/11/05 10:19:03 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -42,6 +42,7 @@
use Apache::lonlocal;
use Apache::lonenc;
use String::Similarity;
+use Data::Dumper;
use LONCAPA;
use POSIX qw(floor);
@@ -5116,7 +5117,8 @@
sub scantron_fixup_scanline {
my ($scantron_config,$scan_data,$line,$whichline,$field,$args)=@_;
-
+
+
if ($field eq 'ID') {
if (length($args->{'newid'}) > $$scantron_config{'IDlength'}) {
return ($line,1,'New value too large');
@@ -5147,28 +5149,54 @@
$$scantron_config{'CODElength'})=$args->{'CODE'};
}
} elsif ($field eq 'answer') {
+ &scantron_get_maxbubble(); # Need the bubble counter info.
my $length=$scantron_config->{'Qlength'};
my $off=$scantron_config->{'Qoff'};
my $on=$scantron_config->{'Qon'};
my $answer=${off}x$length;
- if ($args->{'response'} eq 'none') {
- &scan_data($scan_data,
- "$whichline.no_bubble.".$args->{'question'},'1');
- } else {
- if ($on eq 'letter') {
- my @alphabet=('A'..'Z');
- $answer=$alphabet[$args->{'response'}];
- } elsif ($on eq 'number') {
- $answer=$args->{'response'}+1;
- if ($answer == 10) { $answer = '0'; }
+ 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 $final_answer;
+ if ($$scantron_config{'Qon'} eq 'letter' ||
+ $$scantron_config{'Qon'} eq 'number') {
+ $bubbles_per_line = 10;
+ }
+ if (defined $args->{'response'}) {
+
+ if ($args->{'response'} eq 'none') {
+ &scan_data($scan_data,
+ "$whichline.no_bubble.".$args->{'question'},'1');
} else {
- substr($answer,$args->{'response'},1)=$on;
+ my ($bubble_line, $bubble_number) = split(/:/,$args->{'response'});
+ if ($on eq 'letter') {
+ my @alphabet=('A'..'Z');
+ $answer=$alphabet[$bubble_number];
+ } elsif ($on eq 'number') {
+ $answer=$args->$bubble_number+1;
+ if ($answer == 10) { $answer = '0'; }
+ } else {
+ substr($answer,$args->{'response'},1)=$on;
+ }
+ 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 .= ' ';
+ }
+ }
}
- &scan_data($scan_data,
- "$whichline.no_bubble.".$args->{'question'},undef,'1');
+ # $where=$length*($args->{'question'}-1)+$scantron_config->{'Qstart'};
+ #substr($line,$where-1,$length)=$answer;
+ substr($line,
+ $scantron_config->{'Qstart'}+$first_position-1,
+ $bubbles_per_line) = $final_answer;
}
- my $where=$length*($args->{'question'}-1)+$scantron_config->{'Qstart'};
- substr($line,$where-1,$length)=$answer;
}
return $line;
}
@@ -6492,6 +6520,7 @@
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);
}
@@ -6546,6 +6575,7 @@
my $total_lines = $lines*2;
my @alphabet=('A'..'Z');
+
$r->print("<table border='1'><tr><td rowspan='".$total_lines."'>$quest</td>");
for (my $l = 0; $l < $lines; $l++) {
@@ -6579,9 +6609,10 @@
# multiline questions (different values e.g..).
for (my $i=0;$i<$max;$i++) {
+ my $value = "$l:$i"; # Relative bubble line #: Bubble in line.
$r->print("\n".
'<td><label><input type="radio" name="scantron_correct_Q_'.
- $quest.'" value="'.$i.'" />'.$alphabet[$i]."</label></td>");
+ $quest.'" value="'.$value.'" />'.$alphabet[$i]."</label></td>");
}
$r->print('</tr>');
@@ -6769,6 +6800,7 @@
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);
@@ -6776,6 +6808,7 @@
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'});