You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
1.9 KiB
JavaScript
81 lines
1.9 KiB
JavaScript
'use strict';
|
|
|
|
var async = require('async');
|
|
|
|
var meta = require('../meta');
|
|
var user = require('../user');
|
|
|
|
var sockets = require('../socket.io');
|
|
|
|
|
|
module.exports = function (Messaging) {
|
|
Messaging.editMessage = function (uid, mid, roomId, content, callback) {
|
|
var uids;
|
|
async.waterfall([
|
|
function (next) {
|
|
Messaging.getMessageField(mid, 'content', next);
|
|
},
|
|
function (raw, next) {
|
|
if (raw === content) {
|
|
return callback();
|
|
}
|
|
|
|
Messaging.setMessageFields(mid, {
|
|
content: content,
|
|
edited: Date.now(),
|
|
}, next);
|
|
},
|
|
function (next) {
|
|
Messaging.getUidsInRoom(roomId, 0, -1, next);
|
|
},
|
|
function (_uids, next) {
|
|
uids = _uids;
|
|
Messaging.getMessagesData([mid], uid, roomId, true, next);
|
|
},
|
|
function (messages, next) {
|
|
uids.forEach(function (uid) {
|
|
sockets.in('uid_' + uid).emit('event:chats.edit', {
|
|
messages: messages,
|
|
});
|
|
});
|
|
next();
|
|
},
|
|
], callback);
|
|
};
|
|
|
|
Messaging.canEdit = function (messageId, uid, callback) {
|
|
if (parseInt(meta.config.disableChat, 10) === 1) {
|
|
return callback(null, false);
|
|
} else if (parseInt(meta.config.disableChatMessageEditing, 10) === 1) {
|
|
return callback(null, false);
|
|
}
|
|
|
|
async.waterfall([
|
|
function (next) {
|
|
user.getUserFields(uid, ['banned', 'email:confirmed'], next);
|
|
},
|
|
function (userData, next) {
|
|
if (parseInt(userData.banned, 10) === 1) {
|
|
return callback(null, false);
|
|
}
|
|
|
|
if (parseInt(meta.config.requireEmailConfirmation, 10) === 1 && parseInt(userData['email:confirmed'], 10) !== 1) {
|
|
return callback(null, false);
|
|
}
|
|
|
|
Messaging.getMessageField(messageId, 'fromuid', next);
|
|
},
|
|
function (fromUid, next) {
|
|
if (parseInt(fromUid, 10) === parseInt(uid, 10)) {
|
|
return callback(null, true);
|
|
}
|
|
|
|
user.isAdministrator(uid, next);
|
|
},
|
|
function (isAdmin, next) {
|
|
next(null, isAdmin);
|
|
},
|
|
], callback);
|
|
};
|
|
};
|