From 727c69ca9e6fcaaf1508e9f8e5a60ff2b2949907 Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Fri, 27 Jun 2014 10:10:55 +0800 Subject: [PATCH] MDL-42214 core_message:prevented popup notifications of messages from blocked users --- lib/moodlelib.php | 22 ++++++++++++++++------ message/lib.php | 2 +- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 17c85d91409..bf25c6c4716 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -8752,17 +8752,19 @@ function message_popup_window() { // A quick query to check whether the user has new messages. $messagecount = $DB->count_records('message', array('useridto' => $USER->id)); - if ($messagecount<1) { + if ($messagecount < 1) { return; } - // Got unread messages so now do another query that joins with the user table. + // There are unread messages so now do a more complex but slower query. $namefields = get_all_user_name_fields(true, 'u'); - $messagesql = "SELECT m.id, m.smallmessage, m.fullmessageformat, m.notification, $namefields + $messagesql = "SELECT m.id, m.smallmessage, m.fullmessageformat, m.notification, m.useridto, m.useridfrom, $namefields, c.blocked FROM {message} m JOIN {message_working} mw ON m.id=mw.unreadmessageid JOIN {message_processors} p ON mw.processorid=p.id JOIN {user} u ON m.useridfrom=u.id + LEFT JOIN {message_contacts} c ON c.contactid = m.useridfrom + AND c.userid = m.useridto WHERE m.useridto = :userid AND p.name='popup'"; @@ -8775,10 +8777,18 @@ function message_popup_window() { $messageusers = $DB->get_records_sql($messagesql, array('userid' => $USER->id, 'lastpopuptime' => $USER->message_lastpopup)); - // If we have new messages to notify the user about. - if (!empty($messageusers)) { + $validmessages = 0; + foreach($messageusers as $message) { + if ($message->blocked) { + // Message is from a user who has since been blocked so just mark it read. + message_mark_message_read($message, time()); + } else { + $validmessages++; + } + } - $strmessages = get_string('unreadnewmessages', 'message', count($messageusers)); + if ($validmessages > 0) { + $strmessages = get_string('unreadnewmessages', 'message', $validmessages); $strgomessage = get_string('gotomessages', 'message'); $strstaymessage = get_string('ignore', 'admin'); diff --git a/message/lib.php b/message/lib.php index a3bb7cb69d3..85e4a9e9b3b 100644 --- a/message/lib.php +++ b/message/lib.php @@ -2352,7 +2352,7 @@ function message_move_userfrom_unread2read($userid) { * @param int $fromuserid the id of the message sender * @return void */ -function message_mark_messages_read($touserid, $fromuserid){ +function message_mark_messages_read($touserid, $fromuserid) { global $DB; $sql = 'SELECT m.* FROM {message} m WHERE m.useridto=:useridto AND m.useridfrom=:useridfrom';