mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
feat: fire new hooks on chat message editing
This commit is contained in:
@@ -130,6 +130,12 @@ define('forum/chats/messages', ['components', 'sounds', 'translator', 'benchpres
|
|||||||
// message, instead of posting a new one.
|
// message, instead of posting a new one.
|
||||||
inputEl.attr('data-mid', messageId).addClass('editing');
|
inputEl.attr('data-mid', messageId).addClass('editing');
|
||||||
inputEl.val(raw).focus();
|
inputEl.val(raw).focus();
|
||||||
|
|
||||||
|
$(window).trigger('action:chat.prepEdit', {
|
||||||
|
inputEl: inputEl,
|
||||||
|
messageId: messageId,
|
||||||
|
roomId: roomId,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ module.exports = function (Messaging) {
|
|||||||
|
|
||||||
const keys = mids.map(mid => 'message:' + mid);
|
const keys = mids.map(mid => 'message:' + mid);
|
||||||
const messages = await (fields.length ? db.getObjectsFields(keys, fields) : db.getObjects(keys));
|
const messages = await (fields.length ? db.getObjectsFields(keys, fields) : db.getObjects(keys));
|
||||||
messages.forEach(message => modifyMessage(message, fields));
|
|
||||||
return messages;
|
return await Promise.all(messages.map(async (message, idx) => modifyMessage(message, fields, parseInt(mids[idx], 10))));
|
||||||
};
|
};
|
||||||
|
|
||||||
Messaging.getMessageField = async (mid, field) => {
|
Messaging.getMessageField = async (mid, field) => {
|
||||||
@@ -133,7 +133,7 @@ module.exports = function (Messaging) {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
function modifyMessage(message, fields) {
|
async function modifyMessage(message, fields, mid) {
|
||||||
if (message) {
|
if (message) {
|
||||||
db.parseIntFields(message, intFields, fields);
|
db.parseIntFields(message, intFields, fields);
|
||||||
if (message.hasOwnProperty('timestamp')) {
|
if (message.hasOwnProperty('timestamp')) {
|
||||||
@@ -143,4 +143,12 @@ function modifyMessage(message, fields) {
|
|||||||
message.editedISO = utils.toISOString(message.edited);
|
message.editedISO = utils.toISOString(message.edited);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const payload = await plugins.fireHook('filter:messaging.getFields', {
|
||||||
|
mid: mid,
|
||||||
|
message: message,
|
||||||
|
fields: fields,
|
||||||
|
});
|
||||||
|
|
||||||
|
return payload.message;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
const meta = require('../meta');
|
const meta = require('../meta');
|
||||||
const user = require('../user');
|
const user = require('../user');
|
||||||
|
const plugins = require('../plugins');
|
||||||
|
|
||||||
const sockets = require('../socket.io');
|
const sockets = require('../socket.io');
|
||||||
|
|
||||||
@@ -13,14 +14,17 @@ module.exports = function (Messaging) {
|
|||||||
if (raw === content) {
|
if (raw === content) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!String(content).trim()) {
|
|
||||||
throw new Error('[[error:invalid-chat-message]]');
|
const payload = await plugins.fireHook('filter:messaging.edit', {
|
||||||
}
|
|
||||||
await Messaging.setMessageFields(mid, {
|
|
||||||
content: content,
|
content: content,
|
||||||
edited: Date.now(),
|
edited: Date.now(),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (!String(payload.content).trim()) {
|
||||||
|
throw new Error('[[error:invalid-chat-message]]');
|
||||||
|
}
|
||||||
|
await Messaging.setMessageFields(mid, payload);
|
||||||
|
|
||||||
// Propagate this change to users in the room
|
// Propagate this change to users in the room
|
||||||
const [uids, messages] = await Promise.all([
|
const [uids, messages] = await Promise.all([
|
||||||
Messaging.getUidsInRoom(roomId, 0, -1),
|
Messaging.getUidsInRoom(roomId, 0, -1),
|
||||||
|
|||||||
Reference in New Issue
Block a user