From c186c7b2cb6039dfaef7a63f7bd1a3c2fce81673 Mon Sep 17 00:00:00 2001 From: skodak Date: Fri, 20 Jul 2007 13:54:58 +0000 Subject: [PATCH] MDL-10524 minor simplification of median aggregation + fixed aggregation names in lang --- lang/en_utf8/grades.php | 4 ++-- lib/grade/grade_category.php | 15 ++++----------- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/lang/en_utf8/grades.php b/lang/en_utf8/grades.php index 1cb217cdfd..b8b541fcd9 100644 --- a/lang/en_utf8/grades.php +++ b/lang/en_utf8/grades.php @@ -10,11 +10,11 @@ $string['additem'] = 'Add Grade Item'; $string['aggregateextracreditmeanall'] = 'Mean of all grades (extra credits)'; $string['aggregateextracreditmeangraded'] = 'Mean of non-empty grades (extra credits)'; $string['aggregatemeanall'] = 'Mean of all grades'; -$string['aggregatemedian'] = 'Median of all grades'; +$string['aggregatemedian'] = 'Median of non-empty grades'; $string['aggregatemeangraded'] = 'Mean of non-empty grades'; $string['aggregatemin'] = 'Smallest grade'; $string['aggregatemax'] = 'Highest grade'; -$string['aggregatemode'] = 'Mode of all grades'; +$string['aggregatemode'] = 'Mode of non-empty grades'; $string['aggregateweightedmeanall'] = 'Weighted mean of all grades'; $string['aggregateweightedmeangraded'] = 'Weighted mean of non-empty grades'; $string['aggregation'] = 'Aggregation'; diff --git a/lib/grade/grade_category.php b/lib/grade/grade_category.php index 3a62f8e736..436b44266b 100644 --- a/lib/grade/grade_category.php +++ b/lib/grade/grade_category.php @@ -452,18 +452,11 @@ class grade_category extends grade_object { switch ($this->aggregation) { case GRADE_AGGREGATE_MEDIAN: // Middle point value in the set: ignores frequencies $num = count($grade_values); - // re-index grade_values array - $sorted_values = $grade_values; - sort($sorted_values); - $halfpoint = intval($num / 2); - if ($num == 0) { - $rawgrade = null; - } elseif ($num == 1) { - $rawgrade = reset($sorted_values); - } else if($num % 2 == 0) { - $rawgrade = ($sorted_values[ceil($halfpoint)] + $sorted_values[floor($halfpoint)]) / 2; + $grades = array_values($grade_values); + if ($num % 2 == 0) { + $rawgrade = ($grades[intval($num/2)-1] + $grades[intval($num/2)]) / 2; } else { - $rawgrade = $sorted_values[$halfpoint]; + $rawgrade = $grades[intval(($num/2)-0.5)]; } break; -- 2.39.5