--- loncom/homework/grades.pm 2006/02/14 15:11:09 1.313
+++ 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.313 2006/02/14 15:11:09 banghart 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 --------------------
#
@@ -1385,7 +1413,7 @@ 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);
@@ -1797,22 +1825,13 @@ KEYWORDS
$display_part.' ( ID '.$respid.
' ) ';
my $files=&get_submitted_files($udom,$uname,$partid,$respid,\%record);
-# if ($record{"resource.$partid.$respid.portfiles"}) {
-# my $file_url = '/uploaded/'.$udom.'/'.$uname.'/portfolio';
-# foreach my $file (split(',',$record{"resource.$partid.$respid.portfiles"})) {
-# push(@files,$file_url.$file);
-# }
-# }
-# if ($record{"resource.$partid.$respid.uploadedurl"}) {
-# push(@files,$record{"resource.$partid.$respid.uploadedurl"});
-# }
if (@$files) {
$lastsubonly.=' Like all files provided by users, this file may contain virusses ';
my $file_counter = 0;
foreach my $file (@$files) {
$file_counter ++;
&Apache::lonnet::allowuploaded('/adm/grades',$file);
- $lastsubonly.=' '.$file.'';
+ $lastsubonly.=' '.$file.'';
}
$lastsubonly.=' ';
}
@@ -1890,15 +1909,14 @@ KEYWORDS
my %seen = ();
my @partlist;
my @gradePartRespid;
- for (sort keys(%$handgrade)) {
- my ($partid,$respid) = split(/_/);
+ for my $part_resp(sort keys(%$handgrade)) {
+ my ($partid,$respid) = split(/_/, $part_resp);
next if ($seen{$partid} > 0);
$seen{$partid}++;
- next if ($$handgrade{$_} =~ /:no$/ && $env{'form.lastSub'} =~ /^(hdgrade)$/);
+ next if ($$handgrade{$part_resp} =~ /:no$/ && $env{'form.lastSub'} =~ /^(hdgrade)$/);
push @partlist,$partid;
push @gradePartRespid,$partid.'.'.$respid;
-
- $request->print(&gradeBox($request,$symb,$uname,$udom,$counter,$partid,\%record));
+ $request->print(&gradeBox($request,$symb,$uname,$udom,$counter,$partid,\%record,$respid));
}
$result=''."\n";