diff --git a/mod/quiz/classes/notification_helper.php b/mod/quiz/classes/notification_helper.php index 33ad9910ef3..b977ddb2a61 100644 --- a/mod/quiz/classes/notification_helper.php +++ b/mod/quiz/classes/notification_helper.php @@ -79,7 +79,7 @@ class notification_helper { $users = get_enrolled_users( context: \context_module::instance($quizobj->get_cm()->id), withcapability: 'mod/quiz:attempt', - userfields: 'u.id, u.firstname', + userfields: 'u.id, u.firstname, u.suspended, u.auth', ); // Filter a list of users who meet the availability conditions. @@ -90,6 +90,10 @@ class notification_helper { $overrides = $quizobj->get_override_manager()->get_all_overrides(); foreach ($users as $key => $user) { + if ($user->suspended || ($user->auth == 'nologin')) { + unset($users[$key]); + continue; + } // Time open and time close dates can be user specific with an override. // We begin by assuming it is the same as recorded in the quiz. $user->timeopen = $quiz->timeopen; diff --git a/mod/quiz/tests/notification_helper_test.php b/mod/quiz/tests/notification_helper_test.php index 1e0e8051b6a..77aa80ea5e4 100644 --- a/mod/quiz/tests/notification_helper_test.php +++ b/mod/quiz/tests/notification_helper_test.php @@ -91,11 +91,13 @@ final class notification_helper_test extends \advanced_testcase { $user3 = $generator->create_user(); $user4 = $generator->create_user(); $user5 = $generator->create_user(); + $user6 = $generator->create_user(['suspended' => 1]); $generator->enrol_user($user1->id, $course->id, 'student'); $generator->enrol_user($user2->id, $course->id, 'student'); $generator->enrol_user($user3->id, $course->id, 'student'); $generator->enrol_user($user4->id, $course->id, 'student'); $generator->enrol_user($user5->id, $course->id, 'teacher'); + $generator->enrol_user($user6->id, $course->id, 'student'); /** @var \mod_quiz_generator $quizgenerator */ $quizgenerator = $generator->get_plugin_generator('mod_quiz'); @@ -150,6 +152,9 @@ final class notification_helper_test extends \advanced_testcase { // User5 should not be in the returned users because they are a teacher. $this->assertArrayNotHasKey($user5->id, $users); + // User6 should not be in the returned users because it is suspended. + $this->assertArrayNotHasKey($user6->id, $users); + // Let's add some availability conditions. $availability = [