From 0cf122171ba92f4beb58afe899d4a368d51d69e4 Mon Sep 17 00:00:00 2001 From: Adrian Greeve Date: Thu, 9 Oct 2014 16:33:53 +0800 Subject: [PATCH] MDL-46819 core_grades: Negative weights are changed to 0 Negative weights in the natural aggregation are not currently permitted. Any figure below zero is changed to a zero. --- .../behat/grade_natural_normalisation.feature | 15 +++++++++++++++ lib/grade/grade_category.php | 7 +++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/grade/tests/behat/grade_natural_normalisation.feature b/grade/tests/behat/grade_natural_normalisation.feature index 5512a3f8be1..a2d50cb325c 100644 --- a/grade/tests/behat/grade_natural_normalisation.feature +++ b/grade/tests/behat/grade_natural_normalisation.feature @@ -250,3 +250,18 @@ Feature: We can use natural aggregation and weights will be normalised to a tota Then the field "Weight of Test assignment five" matches value "80.0" And the field "Weight of Test assignment six" matches value "40.0" And the field "Weight of Test assignment seven" matches value "60.0" + + @javascript + Scenario: Overriding a grade item with a negative value results in the value being changed to zero. + + When I set the field "Override weight of Test assignment five" to "1" + And I set the field "Weight of Test assignment five" to "-15" + And I press "Save changes" + Then the field "Weight of Test assignment five" matches value "0.0" + And the field "Weight of Test assignment six" matches value "40.0" + And the field "Weight of Test assignment seven" matches value "60.0" + And I set the field "Override weight of Test assignment six" to "1" + And I set the field "Weight of Test assignment six" to "-25" + And I press "Save changes" + Then the field "Weight of Test assignment six" matches value "0.0" + And the field "Weight of Test assignment seven" matches value "100.0" diff --git a/lib/grade/grade_category.php b/lib/grade/grade_category.php index b70030cead0..32fd6f5d3ae 100644 --- a/lib/grade/grade_category.php +++ b/lib/grade/grade_category.php @@ -1373,10 +1373,13 @@ class grade_category extends grade_object { (1 - $totaloverriddenweight); } $gradeitem->update(); - } else if ((!$automaticgradeitemspresent && $normalisetotal != 1) || ($requiresnormalising)) { + } 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 // items in this category. - if ($normalisetotal == 0) { + if ($normalisetotal == 0 || $overridearray[$gradeitem->id]['weight'] < 0) { + // If the normalised total equals zero, or the weight value is less than zero, + // set the weight for the grade item to zero. $gradeitem->aggregationcoef2 = 0; } else { $gradeitem->aggregationcoef2 = $overridearray[$gradeitem->id]['weight'] / $normalisetotal; -- 2.43.0