MDL-85764 mod_quiz: Improve performance of quiz notifications task
This commit is contained in:
@@ -105,7 +105,7 @@ class notification_helper {
|
||||
|
||||
// Update this user with any applicable override dates.
|
||||
if (!empty($overrides)) {
|
||||
self::update_user_with_date_overrides($overrides, $user);
|
||||
self::update_user_with_date_overrides($overrides, $quiz->course, $user);
|
||||
}
|
||||
|
||||
// If the 'timeopen' date has no value, even after overriding, unset this user.
|
||||
@@ -229,10 +229,11 @@ class notification_helper {
|
||||
* Update user's recorded date based on the overrides.
|
||||
*
|
||||
* @param array $overrides The overrides to check.
|
||||
* @param int $courseid The course id of the overrides.
|
||||
* @param stdClass $user The user records we will be updating.
|
||||
*/
|
||||
protected static function update_user_with_date_overrides(array $overrides, stdClass $user): void {
|
||||
|
||||
protected static function update_user_with_date_overrides(array $overrides, int $courseid, stdClass $user): void {
|
||||
$usergroupids = null;
|
||||
foreach ($overrides as $override) {
|
||||
// User override.
|
||||
if ($override->userid === $user->id) {
|
||||
@@ -243,7 +244,13 @@ class notification_helper {
|
||||
return;
|
||||
}
|
||||
// Group override.
|
||||
if (!empty($override->groupid) && groups_is_member($override->groupid, $user->id)) {
|
||||
if (!isset($usergroupids)) {
|
||||
// Only load user groups if there is at least one group override.
|
||||
// We only need to check the group ids and not grouping ids or visibility.
|
||||
$usergroups = groups_get_user_groups($courseid, $user->id);
|
||||
$usergroupids = array_merge(...array_values($usergroups));
|
||||
}
|
||||
if (!empty($override->groupid) && in_array($override->groupid, $usergroupids)) {
|
||||
// If user is a member of multiple groups, and we have set this already, use the earliest date.
|
||||
if ($user->overridetype === 'group' && $user->timeopen < $override->timeopen) {
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user