From 8bf6b5c2c84c1c36b9f0682c236fea0c134d91aa Mon Sep 17 00:00:00 2001 From: Tim Hunt Date: Wed, 31 Mar 2010 13:50:58 +0000 Subject: [PATCH] grade import: MDL-21987 Problem with repeated imports of the same grade. The thanks to Petr (skodak). Here is what I learned while working on this: 1. when explicitly setting the final grade (manual edit or import), it is important that ->overridden gets set, and it should get set to the time when the override was done. 2. but only on certainly sorts of grade item, and the condition for setting the flag is different when it is the feedback being changed or the grade being changed, hence the two different tests is_overridable_item and is_overridable_item_feedback. 3. but, if the grade and feedback is not actually changed, then the ->overridden timestamp should not be changed. (That was the bit that was buggy.) --- lib/grade/grade_item.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/grade/grade_item.php b/lib/grade/grade_item.php index be1de847f5b..e79fcc0dac5 100644 --- a/lib/grade/grade_item.php +++ b/lib/grade/grade_item.php @@ -1448,8 +1448,6 @@ class grade_item extends grade_object { if ($finalgrade !== false) { if ($this->is_overridable_item()) { $grade->overridden = time(); - } else { - $grade->overridden = 0; } $grade->finalgrade = $this->bounded_grade($finalgrade); @@ -1474,7 +1472,7 @@ class grade_item extends grade_object { } else if (grade_floats_different($grade->finalgrade, $oldgrade->finalgrade) or $grade->feedback !== $oldgrade->feedback or $grade->feedbackformat != $oldgrade->feedbackformat - or $grade->overridden != $oldgrade->overridden) { + or ($oldgrade->overridden == 0 and $grade->overridden > 0)) { $grade->timemodified = time(); // hack alert - date graded $result = $grade->update($source); } else { -- 2.11.4.GIT