From 1c76803ec12c19c65c4e63bb5e633eccac8a46e8 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 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 88b190cece8..8646572e966 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -8743,17 +8743,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'"; @@ -8766,10 +8768,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');