### Eclipse Workspace Patch 1.0
#P moodle19
Index: lib/grade/grade_category.php
===================================================================
RCS file: /cvsroot/moodle/moodle/lib/grade/grade_category.php,v
retrieving revision 1.96.2.12
diff -u -r1.96.2.12 grade_category.php
--- lib/grade/grade_category.php	18 Feb 2008 19:10:15 -0000	1.96.2.12
+++ lib/grade/grade_category.php	25 Feb 2008 11:41:53 -0000
@@ -512,8 +512,8 @@
 
     /// normalize the grades first - all will have value 0...1
         // ungraded items are not used in aggregation
-        foreach ($grade_values as $itemid=>$v) {
-            if (is_null($v)) {
+        foreach ($grade_values as $itemid=>$value) {
+            if (is_null($value)) {
                 // null means no grade
                 unset($grade_values[$itemid]);
                 continue;
@@ -521,20 +521,34 @@
                 unset($grade_values[$itemid]);
                 continue;
             }
-            $grade_values[$itemid] = grade_grade::standardise_score($v, $items[$itemid]->grademin, $items[$itemid]->grademax, 0, 1);
         }
 
         // use min grade if grade missing for these types
         if (!$this->aggregateonlygraded) {
             foreach($items as $itemid=>$value) {
                 if (!isset($grade_values[$itemid]) and !in_array($itemid, $excluded)) {
-                    $grade_values[$itemid] = 0;
+                    $grade_values[$itemid] = $items[$itemid]->grademin;
                 }
             }
         }
 
+        if ($this->aggregation != GRADE_AGGREGATE_WEIGHTED_MEAN2) {
+            // scale to percentages before limiting
+            foreach ($grade_values as $itemid=>$value) {
+                $grade_values[$itemid] = grade_grade::standardise_score($value, $items[$itemid]->grademin, $items[$itemid]->grademax, 0, 1);
+            }
+        }
+
         // limit and sort
         $this->apply_limit_rules($grade_values);
+
+        if ($this->aggregation == GRADE_AGGREGATE_WEIGHTED_MEAN2) {
+            // scale to percentages after limiting
+            foreach ($grade_values as $itemid=>$value) {
+                $grade_values[$itemid] = grade_grade::standardise_score($value, $items[$itemid]->grademin, $items[$itemid]->grademax, 0, 1);
+            }
+        }
+
         asort($grade_values, SORT_NUMERIC);
 
         // let's see we have still enough grades to do any statistics
