--- loncom/homework/grades.pm 2008/05/24 00:34:12 1.522
+++ loncom/homework/grades.pm 2008/06/24 17:42:01 1.523
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Grading handler
#
-# $Id: grades.pm,v 1.522 2008/05/24 00:34:12 www Exp $
+# $Id: grades.pm,v 1.523 2008/06/24 17:42:01 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -5145,8 +5145,37 @@ sub scantron_selectphase {
');
&Apache::lonpickcode::code_list($r,2);
+
+ $r>print('
');
$r->print($grading_menu_button);
- return
+ return;
}
=pod
@@ -7300,30 +7329,32 @@ sub scantron_get_maxbubble {
my $bubble_line = 0;
foreach my $resource (@resources) {
my $symb = $resource->symb();
+
+ my (@parts,@allparts,@possible_parts);
+
# Need to retrieve part IDs and response IDs because essayresponse,
# reactionresponse and organicresponse items are not included in
# $analysis{'parts'} from lonnet::ssi.
- my %possible_part_ids;
- if (ref($resource->parts()) eq 'ARRAY') {
+ if (ref($resource->parts()) eq 'ARRAY') {
foreach my $part (@{$resource->parts()}) {
if (!&Apache::loncommon::check_if_partid_hidden($part,$symb,$udom,$uname)) {
my @resp_ids = $resource->responseIds($part);
foreach my $id (@resp_ids) {
- $possible_part_ids{$part.'.'.$id} = 1;
+ my $part_id = $part.'.'.$id;
+ push(@possible_parts,$part_id);
}
}
}
}
- my $result=&ssi_with_retries($resource->src(), $ssi_retries,
- ('symb' => $symb,
- 'grade_target' => 'analyze',
- 'grade_courseid' => $cid,
- 'grade_domain' => $udom,
- 'grade_username' => $uname));
- my (undef, $an) =
- split(/_HASH_REF__/,$result, 2);
- my @parts;
+ my $result=&ssi_with_retries($resource->src(), $ssi_retries,
+ ('symb' => $symb,
+ 'grade_target' => 'analyze',
+ 'grade_courseid' => $cid,
+ 'grade_domain' => $udom,
+ 'grade_username' => $uname));
+ my (undef, $an) =
+ split(/_HASH_REF__/,$result, 2);
my %analysis = &Apache::lonnet::str2hash($an);
@@ -7335,19 +7366,22 @@ sub scantron_get_maxbubble {
}
}
}
- # Add part_ids for any essayresponse items.
- foreach my $part_id (keys(%possible_part_ids)) {
- if (($analysis{$part_id.'.type'} eq 'essayresponse') ||
- ($analysis{$part_id.'.type'} eq 'reactionresponse') ||
- ($analysis{$part_id.'.type'} eq 'organicresponse')) {
- if (!grep(/^\Q$part_id\E$/,@parts)) {
- push (@parts,$part_id);
+ # Add part_ids for any essayresponse, reactionresponse or
+ # organicresponse items.
+ foreach my $part_id (@possible_parts) {
+ if (grep(/^\Q$part_id\E$/,@parts)) {
+ push(@allparts,$part_id);
+ } else {
+ if (($analysis{$part_id.'.type'} eq 'essayresponse') ||
+ ($analysis{$part_id.'.type'} eq 'reactionresponse') ||
+ ($analysis{$part_id.'.type'} eq 'organicresponse')) {
+ push (@allparts,$part_id);
}
}
}
- foreach my $part_id (@parts) {
- my $lines = $analysis{"$part_id.bubble_lines"};
+ foreach my $part_id (@allparts) {
+ my $lines;
# TODO - make this a persistent hash not an array.
@@ -7374,8 +7408,8 @@ sub scantron_get_maxbubble {
$numshown = scalar(@{$analysis{$part_id.'.shown'}});
}
my $bubbles_per_line = 10;
- my $inner_bubble_lines = int($numshown/$bubbles_per_line);
- if (($numshown % $bubbles_per_line) != 0) {
+ my $inner_bubble_lines = int($numbub/$bubbles_per_line);
+ if (($numbub % $bubbles_per_line) != 0) {
$inner_bubble_lines++;
}
for (my $i=0; $i<$numshown; $i++) {
@@ -7383,6 +7417,9 @@ sub scantron_get_maxbubble {
$inner_bubble_lines.',';
}
$subdivided_bubble_lines{$response_number} =~ s/,$//;
+ $lines = $numshown * $inner_bubble_lines;
+ } else {
+ $lines = $analysis{"$part_id.bubble_lines"};
}
$first_bubble_line{$response_number} = $bubble_line;
@@ -7802,6 +7839,271 @@ sub scantron_download_scantron_data {
return '';
}
+sub checkscantron_results {
+ my ($r) = @_;
+ my ($symb)=&get_symb($r);
+ if (!$symb) {return '';}
+ my $grading_menu_button=&show_grading_menu_form($symb);
+ my $cid = $env{'request.course.id'};
+ my %lettdig = (
+ A => 1,
+ B => 2,
+ C => 3,
+ D => 4,
+ E => 5,
+ F => 6,
+ G => 7,
+ H => 8,
+ I => 9,
+ J => 0,
+ );
+ my $numletts = scalar(keys(%lettdig));
+ my $cnum = $env{'course.'.$cid.'.num'};
+ my $cdom = $env{'course.'.$cid.'.domain'};
+ my (undef, undef, $sequence) = &Apache::lonnet::decode_symb($env{'form.selectpage'});
+ my %record;
+ my %scantron_config =
+ &Apache::grades::get_scantron_config($env{'form.scantron_format'});
+ my ($scanlines,$scan_data)=&Apache::grades::scantron_getfile();
+ my $classlist=&Apache::loncoursedata::get_classlist();
+ my %idmap=&Apache::grades::username_to_idmap($classlist);
+ my $navmap=Apache::lonnavmaps::navmap->new();
+ my $map=$navmap->getResourceByUrl($sequence);
+ my @resources=$navmap->retrieveResources($map,undef,1,0);
+ my (%scandata,%lastname,%bylast);
+ $r->print('
+
'.$grading_menu_button);
+ return;
+}
+
=pod
=back
@@ -7874,9 +8176,9 @@ sub grading_menu {
$fields{'command'} = 'scantron_selectphase';
$url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
push (@menu, { url => $url,
- name => &mt('Grade/Manage Scantron Forms'),
+ name => &mt('Grade/Manage/Review Scantron Forms'),
short_description =>
- &mt('')});
+ &mt('Grade scantron exams, upload/download scantron data files, and review previously graded scantron exams.')});
$fields{'command'} = 'verify';
$url = &Apache::lonhtmlcommon::build_url('grades/',\%fields);
push (@menu, { url => "",
@@ -8770,6 +9072,8 @@ sub handler {
} elsif ($command eq 'scantron_download' &&
&Apache::lonnet::allowed('usc',$env{'request.course.id'})) {
$request->print(&scantron_download_scantron_data($request));
+ } elsif ($command eq 'checksubmissions' && $perm{'vgr'}) {
+ $request->print(&checkscantron_results($request));
} elsif ($command) {
$request->print("Access Denied ($command)");
}