Permalink
Browse files

MDL-53301 grades: Update gradeitems aggregationcoef2 only when required

  • Loading branch information...
dmonllao committed Mar 1, 2016
1 parent e8952c5 commit 488366bed8374ab32e351da206e8037845565b8f
Showing with 14 additions and 10 deletions.
  1. +14 −10 lib/grade/grade_category.php
@@ -1596,19 +1596,20 @@ private function auto_update_weights() {
} else if (empty($CFG->grade_includescalesinaggregation) && $gradeitem->gradetype == GRADE_TYPE_SCALE) {
// We will not aggregate the scales, so we can ignore upating their weights.
continue;
} else if (!$oldextracreditcalculation && $gradeitem->aggregationcoef > 0 && $gradeitem->weightoverride) {
// For an item with extra credit ignore other weigths and overrides but do not change anything at all
// if it's weight was already overridden.
continue;
}
if (!$oldextracreditcalculation && $gradeitem->aggregationcoef > 0) {
// Store the previous value here, no need to update if it is the same value.
$prevaggregationcoef2 = $gradeitem->aggregationcoef2;
if (!$oldextracreditcalculation && $gradeitem->aggregationcoef > 0 && !$gradeitem->weightoverride) {
// For an item with extra credit ignore other weigths and overrides.
// Do not change anything at all if it's weight was already overridden.
if (!$gradeitem->weightoverride) {
$gradeitem->aggregationcoef2 = $totalgrademax ? ($gradeitem->grademax / $totalgrademax) : 0;
$gradeitem->update();
}
continue;
}
$gradeitem->aggregationcoef2 = $totalgrademax ? ($gradeitem->grademax / $totalgrademax) : 0;
if (!$gradeitem->weightoverride) {
} else if (!$gradeitem->weightoverride) {
// Calculations with a grade maximum of zero will cause problems. Just set the weight to zero.
if ($totaloverriddenweight >= 1 || $totalnonoverriddengrademax == 0 || $gradeitem->grademax == 0) {
// There is no more weight to distribute.
@@ -1619,7 +1620,7 @@ private function auto_update_weights() {
$gradeitem->aggregationcoef2 = ($gradeitem->grademax/$totalnonoverriddengrademax) *
(1 - $totaloverriddenweight);
}
$gradeitem->update();
} else if ((!$automaticgradeitemspresent && $normalisetotal != 1) || ($requiresnormalising)
|| $overridearray[$gradeitem->id]['weight'] < 0) {
// Just divide the overriden weight for this item against the total weight override of all
@@ -1631,6 +1632,9 @@ private function auto_update_weights() {
} else {
$gradeitem->aggregationcoef2 = $overridearray[$gradeitem->id]['weight'] / $normalisetotal;
}
}
if (grade_floatval($prevaggregationcoef2) !== grade_floatval($gradeitem->aggregationcoef2)) {
// Update the grade item to reflect these changes.
$gradeitem->update();
}

0 comments on commit 488366b

Please sign in to comment.