From ba0d27735aa6cc1a739bee986c02d067caca5240 Mon Sep 17 00:00:00 2001 From: Damyon Wiese Date: Thu, 16 Oct 2014 17:14:02 +0800 Subject: [PATCH] MDL-47704 Grades: Fix for set_usedinaggregation Used in aggregation was not resetting previously set values when recalculating an aggregation. This meant that items no longer in the aggregation, were displayed with stale weights in the user report. --- lib/grade/grade_category.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/grade/grade_category.php b/lib/grade/grade_category.php index 32fd6f5d3ae..4e6723f9695 100644 --- a/lib/grade/grade_category.php +++ b/lib/grade/grade_category.php @@ -783,6 +783,24 @@ class grade_category extends grade_object { private function set_usedinaggregation($userid, $usedweights, $novalue, $dropped, $extracredit) { global $DB; + // First set them all to weight null and status = 'unknown'. + if ($allitems = grade_item::fetch_all(array('categoryid'=>$this->id))) { + list($itemsql, $itemlist) = $DB->get_in_or_equal(array_keys($allitems), SQL_PARAMS_NAMED, 'g'); + + $itemlist['userid'] = $userid; + + $DB->set_field_select('grade_grades', + 'aggregationstatus', + 'unknown', + "itemid $itemsql AND userid = :userid", + $itemlist); + $DB->set_field_select('grade_grades', + 'aggregationweight', + 0, + "itemid $itemsql AND userid = :userid", + $itemlist); + } + // Included. if (!empty($usedweights)) { // The usedweights items are updated individually to record the weights.