From ad5de40c497b07399d96a93653c6cc1da439ff7d Mon Sep 17 00:00:00 2001 From: Jake Dallimore Date: Fri, 23 Nov 2018 10:25:46 +0800 Subject: [PATCH] MDL-64167 core_message: fix for sending bulk messages from site admin This ensures the following: - An admin/manager can send a message to all users, including themself, without any errors. --- lib/classes/message/manager.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/classes/message/manager.php b/lib/classes/message/manager.php index 95bf8c7facf..774a5907180 100644 --- a/lib/classes/message/manager.php +++ b/lib/classes/message/manager.php @@ -82,11 +82,14 @@ class manager { $localisedeventdata = clone $eventdata; // Get user records for all members of the conversation. + // We must fetch distinct users, because it's possible for a user to message themselves via bulk user actions. + // In such cases, there will be 2 records referring to the same user. $sql = "SELECT u.* - FROM {message_conversation_members} mcm - JOIN {user} u - ON (mcm.conversationid = :convid AND u.id = mcm.userid) - ORDER BY u.id desc"; + FROM {user} u + WHERE u.id IN ( + SELECT mcm.userid FROM {message_conversation_members} mcm + WHERE mcm.conversationid = :convid + )"; $members = $DB->get_records_sql($sql, ['convid' => $eventdata->convid]); if (empty($members)) { throw new \moodle_exception("Conversation has no members or does not exist."); -- 2.43.0