Merge branch 'MDL-53301_master' of git://github.com/dmonllao/moodle

This commit is contained in:
Andrew Nicols
2016-03-15 15:50:15 +08:00
+15 -11
View File
@@ -1618,19 +1618,20 @@ class grade_category extends grade_object {
} 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;
}
if (!$oldextracreditcalculation && $gradeitem->aggregationcoef > 0) {
// 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();
}
} 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 (!$gradeitem->weightoverride) {
// 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.
$gradeitem->aggregationcoef2 = $totalgrademax ? ($gradeitem->grademax / $totalgrademax) : 0;
} 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.
@@ -1641,7 +1642,7 @@ class grade_category extends grade_object {
$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
@@ -1653,6 +1654,9 @@ class grade_category extends grade_object {
} 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();
}