diff --git a/src/messaging.js b/src/messaging.js index aa16cd0b36..c7e13e72bb 100644 --- a/src/messaging.js +++ b/src/messaging.js @@ -172,6 +172,14 @@ Messaging.getRecentChats = function (callerUid, uid, start, stop, callback) { next(null, { rooms: results.roomData, nextStart: stop + 1 }); }, + function (ref, next) { + plugins.fireHook('filter:messaging.getRecentChats', { + rooms: ref.rooms, + nextStart: ref.nextStart, + uid: uid, + callerUid: callerUid, + }, next); + }, ], callback); }; @@ -252,11 +260,16 @@ Messaging.canMessageUser = function (uid, toUid, callback) { }, next); }, function (results, next) { - if (!results.settings.restrictChat || results.isAdmin || results.isFollowing) { - return next(); + if (results.settings.restrictChat && !results.isAdmin && !results.isFollowing) { + return next(new Error('[[error:chat-restricted]]')); } - next(new Error('[[error:chat-restricted]]')); + plugins.fireHook('filter:messaging.canMessageUser', { + uid: uid, + toUid: toUid, + }, function (err) { + next(err); + }); }, ], callback); }; diff --git a/src/messaging/data.js b/src/messaging/data.js index 3805b1c6f1..6a3a7b03a4 100644 --- a/src/messaging/data.js +++ b/src/messaging/data.js @@ -6,6 +6,7 @@ var S = require('string'); var db = require('../database'); var user = require('../user'); var utils = require('../utils'); +var plugins = require('../plugins'); module.exports = function (Messaging) { Messaging.getMessageField = function (mid, field, callback) { @@ -128,6 +129,17 @@ module.exports = function (Messaging) { next(null, []); } }, + function (messages, next) { + plugins.fireHook('filter:messaging.getMessagesData', { + messages: messages, + uid: uid, + roomId: roomId, + isNew: isNew, + mids: mids, + }, function (err, data) { + next(err, data && data.messages); + }); + }, ], callback); }; }; diff --git a/src/messaging/notifications.js b/src/messaging/notifications.js index eb7a1a1a74..564ea01fee 100644 --- a/src/messaging/notifications.js +++ b/src/messaging/notifications.js @@ -9,6 +9,7 @@ var emailer = require('../emailer'); var notifications = require('../notifications'); var meta = require('../meta'); var sockets = require('../socket.io'); +var plugins = require('../plugins'); module.exports = function (Messaging) { Messaging.notifyQueue = {}; // Only used to notify a user of a new chat message, see Messaging.notifyUser @@ -27,6 +28,15 @@ module.exports = function (Messaging) { message: messageObj, }; + plugins.fireHook('filter:messaging.notifyUsersInRoom', data, next); + }, + function (data, next) { + if (!data || !data.uids || !data.uids.length) { + return next(); + } + + var uids = data.uids; + uids.forEach(function (uid) { data.self = parseInt(uid, 10) === parseInt(fromUid, 10) ? 1 : 0; Messaging.pushUnreadCount(uid);