--- loncom/homework/grades.pm 2006/09/14 21:47:22 1.375
+++ loncom/homework/grades.pm 2006/10/13 21:49:28 1.378
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Grading handler
#
-# $Id: grades.pm,v 1.375 2006/09/14 21:47:22 albertel Exp $
+# $Id: grades.pm,v 1.378 2006/10/13 21:49:28 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -112,36 +112,22 @@ sub nameUserString {
#--- Indicate if a response type is coded handgraded or not. ---
sub response_type {
my ($symb) = shift;
- my (undef,undef,$url) = &Apache::lonnet::decode_symb($symb);
- my $allkeys = &Apache::lonnet::metadata($url,'keys');
- my %vPart;
- foreach my $partid (&Apache::loncommon::get_env_multiple('form.vPart')) {
- $vPart{$partid}=1;
- }
- my %seen = ();
- my (@partlist,%handgrade,%responseType);
- foreach (split(/,/,&Apache::lonnet::metadata($url,'packages'))) {
- if (/^\w+response_.*/ || /^Task_/) {
- my ($responsetype,$part) = split(/_/,$_,2);
- my ($partid,$respid) = split(/_/,$part,2);
- if ($responsetype eq 'Task') { $respid='0'; }
- if (&Apache::loncommon::check_if_partid_hidden($partid,$symb)) {
- next;
- }
- if (%vPart && !exists($vPart{$partid})) {
- next;
- }
- $responsetype =~ s/response$//; # make it compatible w/ navmaps - should move to that!!
- my ($value) = &Apache::lonnet::EXT('resource.'.$part.'.handgrade',$symb);
- $handgrade{$part} = ($value eq 'yes' ? 'yes' : 'no');
- if (!exists($responseType{$partid})) { $responseType{$partid}={}; }
- $responseType{$partid}->{$respid}=$responsetype;
- next if ($seen{$partid} > 0);
- $seen{$partid}++;
- push @partlist,$partid;
+
+ my $navmap = Apache::lonnavmaps::navmap->new();
+ my $res = $navmap->getBySymb($symb);
+ my $partlist = $res->parts();
+ my (%response_types,%handgrade);
+ foreach my $part (@{ $partlist }) {
+ my @types = $res->responseType($part);
+ my @ids = $res->responseIds($part);
+ for (my $i=0; $i < scalar(@ids); $i++) {
+ $response_types{$part}{$ids[$i]} = $types[$i];
+ $handgrade{$part.'_'.$ids[$i]} =
+ &Apache::lonnet::EXT('resource.'.$part.'_'.$ids[$i].
+ '.handgrade',$symb);
}
}
- return (\@partlist,\%handgrade,\%responseType);
+ return ($partlist,\%handgrade,\%response_types);
}
sub flatten_responseType {
@@ -602,7 +588,7 @@ sub verifyreceipt {
my $receipt = &Apache::lonnet::recprefix($courseid).'-'.
$env{'form.receipt'};
$receipt =~ s/[^\-\d]//g;
- my $symb = &Apache::lonnet::symbread();
+ my ($symb) = &get_symb($request);
my $title.='
Verifying Submission Receipt '.
$receipt.'
'."\n".
@@ -1918,7 +1904,7 @@ KEYWORDS
my $order=&get_order($partid,$respid,$symb,$uname,$udom);
if ($env{'form.lastSub'} eq 'lastonly' ||
($env{'form.lastSub'} eq 'hdgrade' &&
- $$handgrade{$part} eq 'yes')) {
+ $$handgrade{$$part[0].'_'.$$part[1]} eq 'yes')) {
my $display_part=&get_display_part($partid,$symb);
$lastsubonly.='Part: '.
$display_part.' ( ID '.$respid.
@@ -4794,21 +4780,29 @@ sub reset_skipping_status {
&scantron_putfile(undef,$scan_data);
}
-sub allow_skipping {
+sub start_skipping {
my ($scan_data,$i)=@_;
my %remembered=split(':',&scan_data($scan_data,'remember_skipping'));
- delete($remembered{$i});
+ if ($env{'form.scantron_options_redo'} =~ /^redo_/) {
+ $remembered{$i}=2;
+ } else {
+ $remembered{$i}=1;
+ }
&scan_data($scan_data,'remember_skipping',join(':',%remembered));
}
sub should_be_skipped {
- my ($scan_data,$i)=@_;
+ my ($scanlines,$scan_data,$i)=@_;
if ($env{'form.scantron_options_redo'} !~ /^redo_/) {
# not redoing old skips
+ if ($scanlines->{'skipped'}[$i]) { return 1; }
return 0;
}
my %remembered=split(':',&scan_data($scan_data,'remember_skipping'));
- if (exists($remembered{$i})) { return 0; }
+
+ if (exists($remembered{$i}) && $remembered{$i} != 2 ) {
+ return 0;
+ }
return 1;
}
@@ -4820,6 +4814,7 @@ sub remember_current_skipped {
$to_remember{$i}=1;
}
}
+
&scan_data($scan_data,'remember_skipping',join(':',%to_remember));
&scantron_putfile(undef,$scan_data);
}
@@ -4925,7 +4920,6 @@ sub scantron_validate_file {
}
if ($env{'form.scantron_options_redo'} eq 'redo_skipped') {
&remember_current_skipped();
- &scantron_remove_file('skipped');
$env{'form.scantron_options_redo'}='redo_skipped_ready';
}
@@ -5095,8 +5089,8 @@ sub scantron_putfile {
sub scantron_get_line {
my ($scanlines,$scan_data,$i)=@_;
- if (&should_be_skipped($scan_data,$i)) { return undef; }
- if ($scanlines->{'skipped'}[$i]) { return undef; }
+ if (&should_be_skipped($scanlines,$scan_data,$i)) { return undef; }
+ #if ($scanlines->{'skipped'}[$i]) { return undef; }
if ($scanlines->{'corrected'}[$i]) {return $scanlines->{'corrected'}[$i];}
return $scanlines->{'orig'}[$i];
}
@@ -5116,12 +5110,21 @@ sub scantron_put_line {
my ($scanlines,$scan_data,$i,$newline,$skip)=@_;
if ($skip) {
$scanlines->{'skipped'}[$i]=$newline;
- &allow_skipping($scan_data,$i);
+ &start_skipping($scan_data,$i);
return;
}
$scanlines->{'corrected'}[$i]=$newline;
}
+sub scantron_clear_skip {
+ my ($scanlines,$scan_data,$i)=@_;
+ if (exists($scanlines->{'skipped'}[$i])) {
+ undef($scanlines->{'skipped'}[$i]);
+ return 1;
+ }
+ return 0;
+}
+
sub scantron_filter_not_exam {
my ($curres)=@_;
@@ -5608,6 +5611,10 @@ SCANTRONFORM
&Apache::lonxml::clear_problem_counter();
&Apache::lonnet::appenv(%$scan_record);
+
+ if (&scantron_clear_skip($scanlines,$scan_data,$i)) {
+ &scantron_putfile($scanlines,$scan_data);
+ }
my $i=0;
foreach my $resource (@resources) {
|