From 017c71cfcf9c8251a31d6f65dec5fa4a1604c380 Mon Sep 17 00:00:00 2001 From: Adrian Greeve Date: Mon, 12 Oct 2015 16:43:22 +0800 Subject: [PATCH] MDL-51552 gradebook: Single view bulk insert fix. Single view now doesn't overwrite non-empty grades. A thank you to Sam Anderson and Robert Russo for providing a patch. --- .../singleview/classes/local/screen/grade.php | 10 ++------ .../singleview/classes/local/screen/user.php | 25 +++++++++++-------- .../classes/local/ui/finalgrade.php | 9 +------ 3 files changed, 17 insertions(+), 27 deletions(-) diff --git a/grade/report/singleview/classes/local/screen/grade.php b/grade/report/singleview/classes/local/screen/grade.php index 50dd19abf86..2a4170e2dd1 100644 --- a/grade/report/singleview/classes/local/screen/grade.php +++ b/grade/report/singleview/classes/local/screen/grade.php @@ -325,19 +325,13 @@ class grade extends tablelike implements selectable_items, filterable_items { $data->$field = empty($grade) ? $null : $grade->finalgrade; $data->{"old$field"} = $data->$field; - - preg_match('/_(\d+)_(\d+)/', $field, $oldoverride); - $oldoverride = 'oldoverride' . $oldoverride[0]; - if (empty($data->$oldoverride)) { - $data->$field = (!isset($grade->rawgrade)) ? $null : $grade->rawgrade; - } } } foreach ($data as $varname => $value) { if (preg_match('/^oldoverride_(\d+)_(\d+)/', $varname, $matches)) { - // If we've selected override or overriding all grades. - if (!empty($data->$matches[0]) || $filter == 'all') { + // If we've selected overriding all grades. + if ($filter == 'all') { $override = "override_{$matches[1]}_{$matches[2]}"; $data->$override = '1'; } diff --git a/grade/report/singleview/classes/local/screen/user.php b/grade/report/singleview/classes/local/screen/user.php index 49b4ff7e9fb..2cac88777db 100644 --- a/grade/report/singleview/classes/local/screen/user.php +++ b/grade/report/singleview/classes/local/screen/user.php @@ -334,29 +334,32 @@ class user extends tablelike implements selectable_items { } $oldfinalgradefield = "oldfinalgrade_{$gradeitem->id}_{$this->itemid}"; - if (!empty($data->$oldfinalgradefield)) { + // Bulk grade changes for all grades need to be processed and shouldn't be skipped if they had a previous grade. + if ($gradeitem->is_course_item() || ($filter != 'all' && !empty($data->$oldfinalgradefield))) { + if ($gradeitem->is_course_item()) { + // The course total should not be overridden. + unset($data->$field); + unset($data->oldfinalgradefield); + $oldoverride = "oldoverride_{$gradeitem->id}_{$this->itemid}"; + unset($data->$oldoverride); + $oldfeedback = "oldfeedback_{$gradeitem->id}_{$this->itemid}"; + unset($data->$oldfeedback); + } continue; } $grade = grade_grade::fetch(array( - 'itemid' => $this->itemid, + 'itemid' => $gradeitemid, 'userid' => $userid )); $data->$field = empty($grade) ? $null : $grade->finalgrade; $data->{"old$field"} = $data->$field; - - preg_match('/_(\d+)_(\d+)/', $field, $oldoverride); - $oldoverride = 'oldoverride' . $oldoverride[0]; - if (empty($data->$oldoverride)) { - $data->$field = (!isset($grade->rawgrade)) ? $null : $grade->rawgrade; - } - } foreach ($data as $varname => $value) { if (preg_match('/^oldoverride_(\d+)_(\d+)/', $varname, $matches)) { - // If we've selected override or overriding all grades. - if (!empty($data->$matches[0]) || $filter == 'all') { + // If we've selected overriding all grades. + if ($filter == 'all') { $override = "override_{$matches[1]}_{$matches[2]}"; $data->$override = '1'; } diff --git a/grade/report/singleview/classes/local/ui/finalgrade.php b/grade/report/singleview/classes/local/ui/finalgrade.php index d57083f730e..fe9a17e51c5 100644 --- a/grade/report/singleview/classes/local/ui/finalgrade.php +++ b/grade/report/singleview/classes/local/ui/finalgrade.php @@ -47,14 +47,7 @@ class finalgrade extends grade_attribute_format implements unique_value, be_disa public function get_value() { $this->label = $this->grade->grade_item->itemname; - $isoverridden = $this->grade->is_overridden(); - // If the grade is overridden or the grade type is not an activity then use finalgrade. - if (!empty($isoverridden) || $this->grade->grade_item->itemtype != 'mod') { - $val = $this->grade->finalgrade; - } else { - $val = $this->grade->rawgrade; - } - + $val = $this->grade->finalgrade; if ($this->grade->grade_item->scaleid) { return $val ? (int)$val : -1; } else {