Options: |
Redo skipped records
@@ -3689,17 +3685,20 @@ sub scantron_fixup_scanline {
$args->{'username'}.':'.$args->{'domain'});
}
} elsif ($field eq 'CODE') {
- if (length($args->{'CODE'}) > $$scantron_config{'CODElength'}) {
- return ($line,1,'New CODE value too large');
- }
- if (length($args->{'CODE'}) < $$scantron_config{'CODElength'}) {
- $args->{'CODE'}=sprintf('%-'.$$scantron_config{'CODElength'}.'s',
- $args->{'CODE'});
- }
- substr($line,$$scantron_config{'CODEstart'}-1,
- $$scantron_config{'CODElength'})=$args->{'CODE'};
- if ($args->{'CODE'}=~/^\s*$/) {
- &scan_data($scan_data,"$whichline.CODE",$args->{'CODE'});
+ if ($args->{'CODE'} eq 'use_unfound') {
+ &scan_data($scan_data,"$whichline.useCODE",'1');
+ } else {
+ if (length($args->{'CODE'}) > $$scantron_config{'CODElength'}) {
+ return ($line,1,'New CODE value too large');
+ }
+ if (length($args->{'CODE'}) < $$scantron_config{'CODElength'}) {
+ $args->{'CODE'}=sprintf('%-'.$$scantron_config{'CODElength'}.'s',$args->{'CODE'});
+ }
+ substr($line,$$scantron_config{'CODEstart'}-1,
+ $$scantron_config{'CODElength'})=$args->{'CODE'};
+# if ($args->{'CODE'}=~/^\s*$/) {
+# &scan_data($scan_data,"$whichline.CODE",$args->{'CODE'});
+# }
}
} elsif ($field eq 'answer') {
my $length=$scantron_config->{'Qlength'};
@@ -3737,8 +3736,12 @@ sub scantron_parse_scanline {
my $data=substr($line,0,$$scantron_config{'Qstart'}-1);
if ($$scantron_config{'CODElocation'} ne 0) {
if ($$scantron_config{'CODElocation'} < 0) {
- $record{'scantron.CODE'}=substr($data,$$scantron_config{'CODEstart'}-1,
+ $record{'scantron.CODE'}=substr($data,
+ $$scantron_config{'CODEstart'}-1,
$$scantron_config{'CODElength'});
+ if (&scan_data($scan_data,"$whichline.useCODE")) {
+ $record{'scantron.useCODE'}=1;
+ }
} else {
#FIXME interpret first N questions
}
@@ -3839,7 +3842,7 @@ sub scantron_process_corrections {
my $resolution=$ENV{'form.scantron_CODE_resolution'};
my $newCODE;
if ($resolution eq 'use_unfound') {
- &FIXME_blow_up();
+ $newCODE='use_unfound';
} elsif ($resolution eq 'use_found') {
$newCODE=$ENV{'form.scantron_CODE_selectedvalue'};
} elsif ($resolution eq 'use_typed') {
@@ -3876,6 +3879,8 @@ sub scantron_validate_file {
if ($ENV{'form.scantron_corrections'}) {
&scantron_process_corrections($r);
}
+ $r->print("Gathering neccessary info. ");$r->rflush();
+ my $max_bubble=&scantron_get_maxbubble($r);
#get the student pick code ready
$r->print(&Apache::loncommon::studentbrowser_javascript());
my $result= <
-
+
@@ -4206,7 +4211,7 @@ sub scantron_validate_CODE {
if ($scantron_config{'CODElocation'} &&
$scantron_config{'CODEstart'} &&
$scantron_config{'CODElength'}) {
- if (!$ENV{'form.scantron_CODElist'}) {
+ if (!defined($ENV{'form.scantron_CODElist'})) {
&FIXME_blow_up()
}
} else {
@@ -4229,7 +4234,7 @@ sub scantron_validate_CODE {
$scan_data);
my $CODE=$$scan_record{'scantron.CODE'};
my $error=0;
- if (!exists($allcodes{$CODE})) {
+ if (!exists($allcodes{$CODE}) && !$$scan_record{'scantron.useCODE'}) {
&scantron_get_correction($r,$i,$scan_record,
\%scantron_config,
$line,'incorrectCODE',$CODE);
@@ -4269,6 +4274,31 @@ sub scantron_validate_doublebubble {
return (0,$currentphase+1);
}
+sub scantron_get_maxbubble {
+ my ($r)=@_;
+ if (defined($ENV{'form.scantron_maxbubble'}) &&
+ $ENV{'form.scantron_maxbubble'}) {
+ return $ENV{'form.scantron_maxbubble'};
+ }
+ my $navmap=Apache::lonnavmaps::navmap->new();
+ my (undef,undef,$sequence)=
+ &Apache::lonnet::decode_symb($ENV{'form.selectpage'});
+ my $map=$navmap->getResourceByUrl($sequence);
+ my @resources=$navmap->retrieveResources($map,\&scantron_filter,1,0);
+ &Apache::lonnet::delenv('form.counter');
+ foreach my $resource (@resources) {
+ my $result=&Apache::lonnet::ssi($resource->src());
+ }
+ &Apache::lonnet::delenv('scantron\.');
+ my $envfile=$ENV{'user.environment'};
+ $envfile=~/\/([^\/]+)\.id$/;
+ $envfile=$1;
+ &Apache::lonnet::transfer_profile_to_env($r->dir_config('lonIDsDir'),
+ $envfile);
+ $ENV{'form.scantron_maxbubble'}=$ENV{'form.counter'}-1;
+ return $ENV{'form.scantron_maxbubble'};
+}
+
sub scantron_validate_missingbubbles {
my ($r,$currentphase) = @_;
#get student info
@@ -4278,7 +4308,7 @@ sub scantron_validate_missingbubbles {
#get scantron line setup
my %scantron_config=&get_scantron_config($ENV{'form.scantron_format'});
my ($scanlines,$scan_data)=&scantron_getfile();
- my $max_bubble=$ENV{'form.scantron_maxbubble'};
+ my $max_bubble=&scantron_get_maxbubble();
if (!$max_bubble) { $max_bubble=2**31; }
for (my $i=0;$i<=$scanlines->{'count'};$i++) {
my $line=&scantron_get_line($scanlines,$i);
|