From 3632537b5b11f4dca3ca063678e9d1d0ad1fa17f Mon Sep 17 00:00:00 2001 From: Daniel Neis Araujo Date: Wed, 15 Dec 2021 18:38:06 -0300 Subject: [PATCH] MDL-73378 gradebook: Category grade null when all subgrades are null --- lib/grade/grade_category.php | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/grade/grade_category.php b/lib/grade/grade_category.php index 88b4028f2a7..6dfb3fa5818 100644 --- a/lib/grade/grade_category.php +++ b/lib/grade/grade_category.php @@ -722,6 +722,16 @@ class grade_category extends grade_object { } + // First, check if all grades are null, because the final grade will be null + // even when aggreateonlygraded is true. + $allnull = true; + foreach ($grade_values as $v) { + if (!is_null($v)) { + $allnull = false; + break; + } + } + // For items with no value, and not excluded - either set their grade to 0 or exclude them. foreach ($items as $itemid=>$value) { if (!isset($grade_values[$itemid]) and !in_array($itemid, $excluded)) { @@ -789,9 +799,13 @@ class grade_category extends grade_object { $result['grademin'] = 0; } - // Recalculate the grade back to requested range. - $finalgrade = grade_grade::standardise_score($agg_grade, 0, 1, $result['grademin'], $result['grademax']); - $grade->finalgrade = $this->grade_item->bounded_grade($finalgrade); + if ($allnull) { + $grade->finalgrade = null; + } else { + // Recalculate the grade back to requested range. + $finalgrade = grade_grade::standardise_score($agg_grade, 0, 1, $result['grademin'], $result['grademax']); + $grade->finalgrade = $this->grade_item->bounded_grade($finalgrade); + } $oldrawgrademin = $grade->rawgrademin; $oldrawgrademax = $grade->rawgrademax;