--- loncom/homework/grades.pm 2005/12/02 19:40:47 1.300
+++ loncom/homework/grades.pm 2006/02/26 01:04:47 1.317
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Grading handler
#
-# $Id: grades.pm,v 1.300 2005/12/02 19:40:47 albertel Exp $
+# $Id: grades.pm,v 1.317 2006/02/26 01:04:47 banghart Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -40,6 +40,7 @@ use Apache::lonmsg qw(:user_normal_msg);
use Apache::Constants qw(:common);
use Apache::lonlocal;
use String::Similarity;
+use POSIX qw(floor);
my %oldessays=();
my %perm=();
@@ -467,6 +468,33 @@ sub jscriptNform {
return $jscript;
}
+# Given the score (as a number [0-1] and the weight) what is the final
+# point value? This function will round to the nearest tenth, third,
+# or quarter if one of those is within the tolerance of .00001.
+sub compute_points {
+ my ($score, $weight) = @_;
+
+ my $tolerance = .00001;
+ my $points = $score * $weight;
+
+ # Check for nearness to 1/x.
+ my $check_for_nearness = sub {
+ my ($factor) = @_;
+ my $num = ($points * $factor) + $tolerance;
+ my $floored_num = floor($num);
+ if ($num - $floored_num < 2 * $tolerance * $factor) {
+ return $floored_num / $factor;
+ }
+ return $points;
+ };
+
+ $points = $check_for_nearness->(10);
+ $points = $check_for_nearness->(3);
+ $points = $check_for_nearness->(4);
+
+ return $points;
+}
+
#------------------ End of general use routines --------------------
#
@@ -704,12 +732,16 @@ LISTJAVASCRIPT
while ($loop < 2) {
$gradeTable.='
No.
Select
'.
'
'.&nameUserString('header').' Section/Group
';
- if ($env{'form.showgrading'} eq 'yes' && $submitonly ne 'all') {
+ if ($env{'form.showgrading'} eq 'yes'
+ && $submitonly ne 'queued'
+ && $submitonly ne 'all') {
foreach (sort(@$partlist)) {
my $display_part=&get_display_part((split(/_/))[0],$url,$symb);
$gradeTable.='
';
}
$gradeTable.='';
}
@@ -798,6 +846,7 @@ LISTJAVASCRIPT
my $submissions='submissions';
if ($submitonly eq 'incorrect') { $submissions = 'incorrect submissions'; }
if ($submitonly eq 'graded' ) { $submissions = 'ungraded submissions'; }
+ if ($submitonly eq 'queued' ) { $submissions = 'queued submissions'; }
$gradeTable=' '.
'No '.$submissions.' found for this resource for any students. ('.$num_students.
' students checked for '.$submissions.') ';
@@ -1364,11 +1413,9 @@ SUBJAVASCRIPT
#--- displays the grading box, used in essay type problem and grading by page/sequence
sub gradeBox {
- my ($request,$symb,$uname,$udom,$counter,$partid,$record) = @_;
-
+ my ($request,$symb,$uname,$udom,$counter,$partid,$record,$respid) = @_;
my $checkIcon = '';
-
my $wgt = &Apache::lonnet::EXT('resource.'.$partid.'.weight',$symb,$udom,$uname);
my $wgtmsg = ($wgt > 0 ? '(problem weight)' :
'problem weight assigned by computer');
@@ -1376,19 +1423,15 @@ sub gradeBox {
my $score = ($$record{'resource.'.$partid.'.awarded'} eq '' ?
'' : $$record{'resource.'.$partid.'.awarded'}*$wgt);
my $result=''."\n";
-
my $display_part=&get_display_part($partid,undef,$symb);
-
my %last_resets = &get_last_resets($symb,$env{'request.course.id'},
[$partid]);
my $aggtries = $$record{'resource.'.$partid.'.tries'};
if ($last_resets{$partid}) {
$aggtries = &get_num_tries($record,$last_resets{$partid},$partid);
}
-
$result.='
'.
'Part: '.$display_part.' Points:
'."\n";
-
my $ctr = 0;
$result.='
'."\n"; # display radio buttons in a nice table 10 across
while ($ctr<=$wgt) {
@@ -1400,7 +1443,6 @@ sub gradeBox {
$ctr++;
}
$result.='