diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 38d03f0daa6..e96aaedcf7e 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -1870,13 +1870,14 @@ class assign { * Mark in the database that this grade record should have an update notification sent by cron. * * @param stdClass $grade a grade record keyed on id + * @param bool $mailedoverride when true, flag notification to be sent again. * @return bool true for success */ - public function notify_grade_modified($grade) { + public function notify_grade_modified($grade, $mailedoverride = false) { global $DB; $flags = $this->get_user_flags($grade->userid, true); - if ($flags->mailed != 1) { + if ($flags->mailed != 1 || $mailedoverride) { $flags->mailed = 0; } @@ -6652,7 +6653,7 @@ class assign { // Note the default if not provided for this option is true (e.g. webservices). // This is for backwards compatibility. if (!isset($formdata->sendstudentnotifications) || $formdata->sendstudentnotifications) { - $this->notify_grade_modified($grade); + $this->notify_grade_modified($grade, true); } } diff --git a/mod/assign/tests/locallib_test.php b/mod/assign/tests/locallib_test.php index df4419bc0a7..19f3d7b1927 100644 --- a/mod/assign/tests/locallib_test.php +++ b/mod/assign/tests/locallib_test.php @@ -947,6 +947,13 @@ class mod_assign_locallib_testcase extends mod_assign_base_testcase { $this->assertEquals(2, count($messages)); $this->assertEquals(1, $messages[0]->notification); $this->assertEquals($assign->get_instance()->name, $messages[0]->contexturlname); + + // Regrading a grade causes a notification to the user. + $data->sendstudentnotifications = true; + $assign->testable_apply_grade_to_user($data, $this->students[0]->id, 0); + assign::cron(); + $messages = $sink->get_messages(); + $this->assertEquals(3, count($messages)); } /**