--- loncom/homework/grades.pm 2007/06/16 20:24:25 1.414 +++ loncom/homework/grades.pm 2007/06/17 02:11:44 1.416 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Grading handler # -# $Id: grades.pm,v 1.414 2007/06/16 20:24:25 www Exp $ +# $Id: grades.pm,v 1.416 2007/06/17 02:11:44 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -6453,7 +6453,13 @@ sub assign_clicker_grades { my ($r)=@_; my ($symb)=&get_symb($r); if (!$symb) {return '';} +# See which part we are saving to + my ($partlist,$handgrade,$responseType) = &response_type($symb); +# FIXME: This should probably look for the first handgradeable part + my $part=$$partlist[0]; +# Start screen output my ($result) = &showResourceInfo($symb,$env{'form.probTitle'}); + my $heading=&mt('Assigning grades based on clicker file'); $result.=(<
@@ -6463,7 +6469,9 @@ ENDHEADER # Get correct result # FIXME: Possibly need delimiter other than ":" my @correct=(); - if ($env{'form.gradingmechanism'} ne 'attendance') { + my $gradingmechanism=$env{'form.gradingmechanism'}; + my $number=$env{'form.number'}; + if ($gradingmechanism ne 'attendance') { foreach my $key (keys(%env)) { if ($key=~/^form\.correct\:/) { my @input=split(/\,/,$env{$key}); @@ -6479,7 +6487,7 @@ ENDHEADER } } } - for (my $i=0;$i<$env{'form.number'};$i++) { + for (my $i=0;$i<$number;$i++) { if (!$correct[$i]) { $result.='
'. &mt('No correct result given for question "[_1]"!', @@ -6489,7 +6497,47 @@ ENDHEADER $result.='
'.&mt("Correct answer: [_1]",join(', ',map { ($_?$_:'-') } @correct)); } # Start grading - $result.='
'."\n". + my $pcorrect=$env{'form.pcorrect'}; + my $pincorrect=$env{'form.pincorrect'}; + my $storecount=0; + foreach my $key (keys(%env)) { + if ($key=~/^form\.student\:(.*)$/) { + my $user=$1; + my @answer=split(/\,/,$env{$key}); + my $sum=0; + for (my $i=0;$i<$number;$i++) { + if ($answer[$i]) { + if ($gradingmechanism eq 'attendance') { + $sum+=$pcorrect; + } else { + if ($answer[$i] eq $correct[$i]) { + $sum+=$pcorrect; + } else { + $sum+=$pincorrect; + } + } + } + } + my $ave=$sum/(100*$number); +# Store + my ($username,$domain)=split(/\:/,$user); + my %grades=(); + $grades{"resource.$part.solved"}='correct_by_override'; + $grades{"resource.$part.awarded"}=$ave; + $grades{"resource.regrader"}="$env{'user.name'}:$env{'user.domain'}"; + my $returncode=&Apache::lonnet::cstore(\%grades,$symb, + $env{'request.course.id'}, + $domain,$username); + if ($returncode ne 'ok') { + $result.="
Failed to save student $username:$domain. Message when trying to save was ($returncode)"; + } else { + $storecount++; + } + } + } +# We are done + $result.='
'.&mt('Successfully stored grades for [_1] student(s).',$storecount). + ''."\n". '

'."\n"; return $result.&show_grading_menu_form($symb); }