MDL-42214 core_message:prevented popup notifications of messages from blocked users

This commit is contained in:
Andrew Davis
2014-06-27 10:10:55 +08:00
parent 8b3d19c2f5
commit 1c76803ec1
+16 -6
View File
@@ -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');