MDL-84327 mod_quiz: Quiz notification excludes suspended users.

Only active users will receive "quiz opens soon" notifications.

Co-authored-by: Leon Stringer <[email protected]>
This commit is contained in:
raortegar
2025-02-20 16:32:19 +01:00
co-authored by Leon Stringer
parent ef1e72e76b
commit 5d3787409e
2 changed files with 10 additions and 1 deletions
+5 -1
View File
@@ -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;
@@ -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 =
[