Index: lib/grade/grade_category.php =================================================================== RCS file: /cvsroot/moodle/moodle/lib/grade/grade_category.php,v retrieving revision 1.96.2.4 diff -u -r1.96.2.4 grade_category.php --- lib/grade/grade_category.php 1 Nov 2007 08:50:33 -0000 1.96.2.4 +++ lib/grade/grade_category.php 13 Nov 2007 00:20:23 -0000 @@ -201,7 +201,7 @@ $this->apply_forced_settings(); - // these are exclusive + // these are exclusive if ($this->droplow > 0) { $this->keephigh = 0; } else if ($this->keephigh > 0) { @@ -612,8 +612,8 @@ if ($items[$itemid]->aggregationcoef <= 0) { continue; } - $weightsum += $items[$itemid]->aggregationcoef; - $sum += $items[$itemid]->aggregationcoef * $grade_value; + $weightsum += $items[$itemid]->aggregationcoef*$items[$itemid]->grademax; + $sum += $items[$itemid]->aggregationcoef * $grade_value*$items[$itemid]->grademax; } if ($weightsum == 0) { $agg_grade = null; @@ -642,9 +642,17 @@ case GRADE_AGGREGATE_MEAN: // Arithmetic average of all grade items (if ungraded aggregated, NULL counted as minimum) default: - $num = count($grade_values); - $sum = array_sum($grade_values); - $agg_grade = $sum / $num; + $weightsum = 0; + $sum = 0; + foreach($grade_values as $itemid=>$grade_value) { + $weightsum += $items[$itemid]->grademax; + $sum += $grade_value*$items[$itemid]->grademax; + } + if ($weightsum == 0) { + $agg_grade = null; + } else { + $agg_grade = $sum / $weightsum; + } break; }