From acd25c133c2a8dcb68b4a9b50b5de36df8b1e277 Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Sun, 14 Sep 2014 20:46:06 -0700 Subject: [PATCH] MDL-40697 core_grades: trigger the user_graded event --- lib/grade/grade_category.php | 21 ++++++++++++++++++--- lib/grade/grade_item.php | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 49 insertions(+), 5 deletions(-) diff --git a/lib/grade/grade_category.php b/lib/grade/grade_category.php index f26f8212d01ba..01015ce84cc8b 100644 --- a/lib/grade/grade_category.php +++ b/lib/grade/grade_category.php @@ -628,7 +628,12 @@ private function aggregate_grades($userid, $grade->finalgrade = null; if (!is_null($oldfinalgrade)) { - $grade->update('aggregation'); + $success = $grade->update('aggregation'); + + // If successful trigger a user_graded event. + if ($success) { + \core\event\user_graded::create_from_grade($grade)->trigger(); + } } $dropped = $grade_values; $this->set_usedinaggregation($userid, $usedweights, $novalue, $dropped, $extracredit); @@ -707,7 +712,12 @@ private function aggregate_grades($userid, $grade->finalgrade = null; if (!is_null($oldfinalgrade)) { - $grade->update('aggregation'); + $success = $grade->update('aggregation'); + + // If successful trigger a user_graded event. + if ($success) { + \core\event\user_graded::create_from_grade($grade)->trigger(); + } } $this->set_usedinaggregation($userid, $usedweights, $novalue, $dropped, $extracredit); return; @@ -744,7 +754,12 @@ private function aggregate_grades($userid, if (grade_floats_different($grade->finalgrade, $oldfinalgrade) || grade_floats_different($grade->rawgrademax, $oldrawgrademax) || grade_floats_different($grade->rawgrademin, $oldrawgrademin)) { - $grade->update('aggregation'); + $success = $grade->update('aggregation'); + + // If successful trigger a user_graded event. + if ($success) { + \core\event\user_graded::create_from_grade($grade)->trigger(); + } } $this->set_usedinaggregation($userid, $usedweights, $novalue, $dropped, $extracredit); diff --git a/lib/grade/grade_item.php b/lib/grade/grade_item.php index 6fc05cfe434e4..1e94ea8620c65 100644 --- a/lib/grade/grade_item.php +++ b/lib/grade/grade_item.php @@ -719,7 +719,13 @@ public function regrade_final_grades($userid=null) { $grade->finalgrade = $this->adjust_raw_grade($grade->rawgrade, $grade->rawgrademin, $grade->rawgrademax); if (grade_floats_different($grade_record->finalgrade, $grade->finalgrade)) { - if (!$grade->update('system')) { + $success = $grade->update('system'); + + // If successful trigger a user_graded event. + if ($success) { + $grade->load_grade_item(); + \core\event\user_graded::create_from_grade($grade)->trigger(); + } else { $result = "Internal error updating final grade"; } } @@ -1606,12 +1612,21 @@ public function update_final_grade($userid, $finalgrade=false, $source=NULL, $fe $grade->timemodified = time(); // hack alert - date graded $result = (bool)$grade->insert($source); + // If the grade insert was successful and the final grade was not null then trigger a user_graded event. + if ($result && !is_null($grade->finalgrade)) { + \core\event\user_graded::create_from_grade($grade)->trigger(); + } } else if (grade_floats_different($grade->finalgrade, $oldgrade->finalgrade) or $grade->feedback !== $oldgrade->feedback or $grade->feedbackformat != $oldgrade->feedbackformat or ($oldgrade->overridden == 0 and $grade->overridden > 0)) { $grade->timemodified = time(); // hack alert - date graded $result = $grade->update($source); + + // If the grade update was successful and the actual grade has changed then trigger a user_graded event. + if ($result && grade_floats_different($grade->finalgrade, $oldgrade->finalgrade)) { + \core\event\user_graded::create_from_grade($grade)->trigger(); + } } else { // no grade change return $result; @@ -1757,6 +1772,10 @@ public function update_raw_grade($userid, $rawgrade=false, $source=NULL, $feedba if (empty($grade->id)) { $result = (bool)$grade->insert($source); + // If the grade insert was successful and the final grade was not null then trigger a user_graded event. + if ($result && !is_null($grade->finalgrade)) { + \core\event\user_graded::create_from_grade($grade)->trigger(); + } } else if (grade_floats_different($grade->finalgrade, $oldgrade->finalgrade) or grade_floats_different($grade->rawgrade, $oldgrade->rawgrade) or grade_floats_different($grade->rawgrademin, $oldgrade->rawgrademin) @@ -1768,6 +1787,11 @@ public function update_raw_grade($userid, $rawgrade=false, $source=NULL, $feedba or $grade->timemodified != $oldgrade->timemodified // part of hack above ) { $result = $grade->update($source); + + // If the grade update was successful and the actual grade has changed then trigger a user_graded event. + if ($result && grade_floats_different($grade->finalgrade, $oldgrade->finalgrade)) { + \core\event\user_graded::create_from_grade($grade)->trigger(); + } } else { return $result; } @@ -1971,7 +1995,12 @@ public function use_formula($userid, $params, $useditems, $oldgrade) { // update in db if changed if (grade_floats_different($grade->finalgrade, $oldfinalgrade)) { $grade->timemodified = time(); - $grade->update('compute'); + $success = $grade->update('compute'); + + // If successful trigger a user_graded event. + if ($success) { + \core\event\user_graded::create_from_grade($grade)->trigger(); + } } if ($result !== false) {