From 4da02a682488373384a26c57c148b43a81d80029 Mon Sep 17 00:00:00 2001 From: Claude Vervoort Date: Tue, 5 Nov 2019 11:09:51 -0500 Subject: [PATCH 1/2] MDL-67132 mod_lti: call grade api to trigger course total computation --- lib/grade/grade_item.php | 11 +++++--- .../local/service/gradebookservices.php | 25 ++++++++----------- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/lib/grade/grade_item.php b/lib/grade/grade_item.php index 9cb8385adeb..3bb5812f811 100644 --- a/lib/grade/grade_item.php +++ b/lib/grade/grade_item.php @@ -1734,7 +1734,10 @@ class grade_item extends grade_object { * @param int $usermodified The ID of the user making the modification * @return bool success */ - public function update_final_grade($userid, $finalgrade=false, $source=NULL, $feedback=false, $feedbackformat=FORMAT_MOODLE, $usermodified=null) { + public function update_final_grade($userid, $finalgrade = false, + $source = null, $feedback = false, + $feedbackformat = FORMAT_MOODLE, + $usermodified = null, $timemodified = null) { global $USER, $CFG; $result = true; @@ -1800,8 +1803,8 @@ class grade_item extends grade_object { $gradechanged = false; if (empty($grade->id)) { - $grade->timecreated = null; // hack alert - date submitted - no submission yet - $grade->timemodified = time(); // hack alert - date graded + $grade->timecreated = null; // Hack alert - date submitted - no submission yet. + $grade->timemodified = $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. @@ -1825,7 +1828,7 @@ class grade_item extends grade_object { return $result; } - $grade->timemodified = time(); // hack alert - date graded + $grade->timemodified = $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. diff --git a/mod/lti/service/gradebookservices/classes/local/service/gradebookservices.php b/mod/lti/service/gradebookservices/classes/local/service/gradebookservices.php index 2a7c00136f8..c7e852bbd14 100644 --- a/mod/lti/service/gradebookservices/classes/local/service/gradebookservices.php +++ b/mod/lti/service/gradebookservices/classes/local/service/gradebookservices.php @@ -381,23 +381,18 @@ class gradebookservices extends service_base { $feedbackformat = FORMAT_PLAIN; } - if (!$grade = \grade_grade::fetch(array('itemid' => $gradeitem->id, 'userid' => $userid))) { - $grade = new \grade_grade(); - $grade->userid = $userid; - $grade->itemid = $gradeitem->id; - } - $grade->rawgrademax = $score->scoreMaximum; - $grade->timemodified = $timemodified; - $grade->feedbackformat = $feedbackformat; - $grade->feedback = $feedback; if ($gradeitem->is_manual_item()) { - $grade->finalgrade = $finalgrade; - if (empty($grade->id)) { - $result = (bool)$grade->insert($source); - } else { - $result = $grade->update($source); - } + $result = $gradeitem->update_final_grade($userid, $finalgrade, null, $feedback, FORMAT_PLAIN, null, $timemodified); } else { + if (!$grade = \grade_grade::fetch(array('itemid' => $gradeitem->id, 'userid' => $userid))) { + $grade = new \grade_grade(); + $grade->userid = $userid; + $grade->itemid = $gradeitem->id; + } + $grade->rawgrademax = $score->scoreMaximum; + $grade->timemodified = $timemodified; + $grade->feedbackformat = $feedbackformat; + $grade->feedback = $feedback; $grade->rawgrade = $finalgrade; $status = \grade_update($source, $gradeitem->courseid, $gradeitem->itemtype, $gradeitem->itemmodule, From ae46b7442c7e713547371b9f7ec3f43ec6d8ce5c Mon Sep 17 00:00:00 2001 From: Claude Vervoort Date: Thu, 13 Feb 2020 15:19:48 -0500 Subject: [PATCH 2/2] MDL-67132 mod_lti: document new param --- lib/grade/grade_item.php | 5 +++-- lib/upgrade.txt | 1 + .../classes/local/service/gradebookservices.php | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/grade/grade_item.php b/lib/grade/grade_item.php index 3bb5812f811..f67c71c4aa5 100644 --- a/lib/grade/grade_item.php +++ b/lib/grade/grade_item.php @@ -1732,6 +1732,7 @@ class grade_item extends grade_object { * @param string $feedback Optional teacher feedback * @param int $feedbackformat A format like FORMAT_PLAIN or FORMAT_HTML * @param int $usermodified The ID of the user making the modification + * @param int $timemodified Optional parameter to set the time modified, if not present current time. * @return bool success */ public function update_final_grade($userid, $finalgrade = false, @@ -1804,7 +1805,7 @@ class grade_item extends grade_object { $gradechanged = false; if (empty($grade->id)) { $grade->timecreated = null; // Hack alert - date submitted - no submission yet. - $grade->timemodified = $timemodified ?: time(); // Hack alert - date graded. + $grade->timemodified = $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. @@ -1828,7 +1829,7 @@ class grade_item extends grade_object { return $result; } - $grade->timemodified = $timemodified?:time(); // Hack alert - date graded. + $grade->timemodified = $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. diff --git a/lib/upgrade.txt b/lib/upgrade.txt index 58a2ef1b68e..1863b78ea42 100644 --- a/lib/upgrade.txt +++ b/lib/upgrade.txt @@ -32,6 +32,7 @@ information provided here is intended especially for developers. * The database drivers (moodle_database and subclasses) don't need to implement get_columns() anymore. They have to implement fetch_columns instead. * Added function cleanup_after_drop to the database_manager class to take care of all the cleanups that need to be done after a table is dropped. +* grade_item::update_final_grade() can now take an optional parameter to set the grade->timemodified. If not present the current time will carry on being used. === 3.8 === * Add CLI option to notify all cron tasks to stop: admin/cli/cron.php --stop diff --git a/mod/lti/service/gradebookservices/classes/local/service/gradebookservices.php b/mod/lti/service/gradebookservices/classes/local/service/gradebookservices.php index c7e852bbd14..c73df89a523 100644 --- a/mod/lti/service/gradebookservices/classes/local/service/gradebookservices.php +++ b/mod/lti/service/gradebookservices/classes/local/service/gradebookservices.php @@ -394,7 +394,7 @@ class gradebookservices extends service_base { $grade->feedbackformat = $feedbackformat; $grade->feedback = $feedback; $grade->rawgrade = $finalgrade; - $status = \grade_update($source, $gradeitem->courseid, + $status = grade_update($source, $gradeitem->courseid, $gradeitem->itemtype, $gradeitem->itemmodule, $gradeitem->iteminstance, $gradeitem->itemnumber, $grade);