--- loncom/homework/grades.pm 2009/03/06 16:13:29 1.554
+++ loncom/homework/grades.pm 2009/03/09 21:24:12 1.557
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Grading handler
#
-# $Id: grades.pm,v 1.554 2009/03/06 16:13:29 raeburn Exp $
+# $Id: grades.pm,v 1.557 2009/03/09 21:24:12 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -234,28 +234,54 @@ sub reset_caches {
{
my %analyze_cache;
+ my %analyze_cache_formkeys;
sub reset_analyze_cache {
undef(%analyze_cache);
+ undef(%analyze_cache_formkeys);
}
sub get_analyze {
- my ($symb,$uname,$udom,$no_increment)=@_;
+ my ($symb,$uname,$udom,$no_increment,$add_to_hash)=@_;
my $key = "$symb\0$uname\0$udom";
- return $analyze_cache{$key} if (exists($analyze_cache{$key}));
+ if (exists($analyze_cache{$key})) {
+ my $getupdate = 0;
+ if (ref($add_to_hash) eq 'HASH') {
+ foreach my $item (keys(%{$add_to_hash})) {
+ if (ref($analyze_cache_formkeys{$key}) eq 'HASH') {
+ if (!exists($analyze_cache_formkeys{$key}{$item})) {
+ $getupdate = 1;
+ last;
+ }
+ } else {
+ $getupdate = 1;
+ }
+ }
+ }
+ if (!$getupdate) {
+ return $analyze_cache{$key};
+ }
+ }
my (undef,undef,$url)=&Apache::lonnet::decode_symb($symb);
$url=&Apache::lonnet::clutter($url);
- my $subresult=&ssi_with_retries($url, $ssi_retries,
- ('grade_target' => 'analyze',
- 'grade_domain' => $udom,
- 'grade_symb' => $symb,
- 'grade_courseid' =>
- $env{'request.course.id'},
- 'grade_username' => $uname,
- 'grade_noincrement' => $no_increment));
+ my %form = ('grade_target' => 'analyze',
+ 'grade_domain' => $udom,
+ 'grade_symb' => $symb,
+ 'grade_courseid' => $env{'request.course.id'},
+ 'grade_username' => $uname,
+ 'grade_noincrement' => $no_increment);
+ if (ref($add_to_hash)) {
+ %form = (%form,%{$add_to_hash});
+ }
+ my $subresult=&ssi_with_retries($url, $ssi_retries,%form);
(undef,$subresult)=split(/_HASH_REF__/,$subresult,2);
my %analyze=&Apache::lonnet::str2hash($subresult);
+ if (ref($add_to_hash) eq 'HASH') {
+ $analyze_cache_formkeys{$key} = $add_to_hash;
+ } else {
+ $analyze_cache_formkeys{$key} = {};
+ }
return $analyze_cache{$key} = \%analyze;
}
@@ -268,19 +294,26 @@ sub reset_caches {
sub get_radiobutton_correct_foil {
my ($partid,$respid,$symb,$uname,$udom)=@_;
my $analyze = &get_analyze($symb,$uname,$udom);
- foreach my $foil (@{&get_order($partid,$respid,$symb,$uname,$udom)}) {
- if ($analyze->{"$partid.$respid.foil.value.$foil"} eq 'true') {
- return $foil;
+ my $foils = &get_order($partid,$respid,$symb,$uname,$udom);
+ if (ref($foils) eq 'ARRAY') {
+ foreach my $foil (@{$foils}) {
+ if ($analyze->{"$partid.$respid.foil.value.$foil"} eq 'true') {
+ return $foil;
+ }
}
}
}
sub scantron_partids_tograde {
- my ($resource,$cid,$uname,$udom) = @_;
+ my ($resource,$cid,$uname,$udom,$check_for_randomlist) = @_;
my (%analysis,@parts);
if (ref($resource)) {
my $symb = $resource->symb();
- my $analyze = &get_analyze($symb,$uname,$udom);
+ my $add_to_form;
+ if ($check_for_randomlist) {
+ $add_to_form = { 'check_parts_withrandomlist' => 1,};
+ }
+ my $analyze = &get_analyze($symb,$uname,$udom,undef,$add_to_form);
if (ref($analyze) eq 'HASH') {
%analysis = %{$analyze};
}
@@ -2127,7 +2160,7 @@ KEYWORDS
}
$lastsubonly.=''.&mt('Submitted Answer:').' '.
&cleanRecord($subval,$responsetype,$symb,$partid,
- $respid,\%record,$order);
+ $respid,\%record,$order,undef,$uname,$udom);
if ($similar) {$lastsubonly.="
$similar\n";}
$lastsubonly.='';
}
@@ -3764,7 +3797,7 @@ ENDPICK
sub csvupload_fields {
my ($symb) = @_;
my (@parts) = &getpartlist($symb);
- my @fields=(['ID','Student ID'],
+ my @fields=(['ID','Student/Employee ID'],
['username','Student Username'],
['domain','Student Domain']);
my (undef,undef,$url) = &Apache::lonnet::decode_symb($symb);
@@ -4677,10 +4710,10 @@ Next each scanline is checked for any er
bubbles' (it's an error because it may have been mis-scanned
because too light bubbling), 'double bubble' (each bubble line should
have no more that one letter picked), invalid or duplicated CODE,
-invalid student ID
+invalid student/employee ID
If the CODE option is used that determines the randomization of the
-homework problems, either way the student ID is looked up into a
+homework problems, either way the student/employee ID is looked up into a
username:domain.
During the validation phase the instructor can choose to skip scanlines.
@@ -5154,6 +5187,10 @@ sub scantron_selectphase {
'