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.
This commit is contained in:
Damyon Wiese 2014-10-16 17:14:02 +08:00
parent ec72585d64
commit ba0d27735a

View file

@ -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.