|
|
|
@ -6,6 +6,8 @@ var validator = require('validator');
|
|
|
|
|
var db = require('../database');
|
|
|
|
|
var user = require('../user');
|
|
|
|
|
var plugins = require('../plugins');
|
|
|
|
|
var privileges = require('../privileges');
|
|
|
|
|
var meta = require('../meta');
|
|
|
|
|
|
|
|
|
|
module.exports = function (Messaging) {
|
|
|
|
|
Messaging.getRoomData = function (roomId, callback) {
|
|
|
|
@ -268,4 +270,55 @@ module.exports = function (Messaging) {
|
|
|
|
|
},
|
|
|
|
|
], callback);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Messaging.loadRoom = function (uid, data, callback) {
|
|
|
|
|
async.waterfall([
|
|
|
|
|
function (next) {
|
|
|
|
|
privileges.global.can('chat', uid, next);
|
|
|
|
|
},
|
|
|
|
|
function (canChat, next) {
|
|
|
|
|
if (!canChat) {
|
|
|
|
|
return next(new Error('[[error:no-privileges]]'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Messaging.isUserInRoom(uid, data.roomId, next);
|
|
|
|
|
},
|
|
|
|
|
function (inRoom, next) {
|
|
|
|
|
if (!inRoom) {
|
|
|
|
|
return callback(null, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async.parallel({
|
|
|
|
|
roomData: async.apply(Messaging.getRoomData, data.roomId),
|
|
|
|
|
canReply: async.apply(Messaging.canReply, data.roomId, uid),
|
|
|
|
|
users: async.apply(Messaging.getUsersInRoom, data.roomId, 0, -1),
|
|
|
|
|
messages: async.apply(Messaging.getMessages, {
|
|
|
|
|
callerUid: uid,
|
|
|
|
|
uid: data.uid || uid,
|
|
|
|
|
roomId: data.roomId,
|
|
|
|
|
isNew: false,
|
|
|
|
|
}),
|
|
|
|
|
isAdminOrGlobalMod: function (next) {
|
|
|
|
|
user.isAdminOrGlobalMod(uid, next);
|
|
|
|
|
},
|
|
|
|
|
}, next);
|
|
|
|
|
},
|
|
|
|
|
function (results, next) {
|
|
|
|
|
var room = results.roomData;
|
|
|
|
|
room.messages = results.messages;
|
|
|
|
|
room.isOwner = parseInt(room.owner, 10) === parseInt(uid, 10);
|
|
|
|
|
room.users = results.users.filter(function (user) {
|
|
|
|
|
return user && parseInt(user.uid, 10) && parseInt(user.uid, 10) !== uid;
|
|
|
|
|
});
|
|
|
|
|
room.canReply = results.canReply;
|
|
|
|
|
room.groupChat = room.hasOwnProperty('groupChat') ? room.groupChat : results.users.length > 2;
|
|
|
|
|
room.usernames = Messaging.generateUsernames(results.users, uid);
|
|
|
|
|
room.maximumUsersInChatRoom = parseInt(meta.config.maximumUsersInChatRoom, 10) || 0;
|
|
|
|
|
room.maximumChatMessageLength = parseInt(meta.config.maximumChatMessageLength, 10) || 1000;
|
|
|
|
|
room.showUserInput = !room.maximumUsersInChatRoom || room.maximumUsersInChatRoom > 2;
|
|
|
|
|
room.isAdminOrGlobalMod = results.isAdminOrGlobalMod;
|
|
|
|
|
next(null, room);
|
|
|
|
|
},
|
|
|
|
|
], callback);
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|