From 42e21d5aa985f50e7d2749f93fc8cd7577494ef3 Mon Sep 17 00:00:00 2001
From: Peter Jaszkowiak
Date: Wed, 26 Apr 2017 10:45:40 -0600
Subject: [PATCH] Add more messaging hooks
---
src/messaging.js | 19 ++++++++++++++++---
src/messaging/data.js | 12 ++++++++++++
src/messaging/notifications.js | 10 ++++++++++
3 files changed, 38 insertions(+), 3 deletions(-)
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);