The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/app/discussion/server/hooks/propagateDiscussionMetadata.js

47 lines
1.5 KiB

import { callbacks } from '../../../callbacks/server';
import { Messages, Rooms } from '../../../models/server';
import { deleteRoom } from '../../../lib/server';
/**
* We need to propagate the writing of new message in a discussion to the linking
* system message
*/
callbacks.add('afterSaveMessage', function(message, { _id, prid } = {}) {
if (prid) {
Messages.refreshDiscussionMetadata({ rid: _id }, message);
}
return message;
}, callbacks.priority.LOW, 'PropagateDiscussionMetadata');
callbacks.add('afterDeleteMessage', function(message, { _id, prid } = {}) {
if (prid) {
Messages.refreshDiscussionMetadata({ rid: _id }, message);
}
if (message.drid) {
deleteRoom(message.drid);
}
return message;
}, callbacks.priority.LOW, 'PropagateDiscussionMetadata');
callbacks.add('afterDeleteRoom', (rid) => {
Rooms.find({ prid: rid }, { fields: { _id: 1 } }).forEach(({ _id }) => deleteRoom(_id));
return rid;
}, callbacks.priority.LOW, 'DeleteDiscussionChain');
// TODO discussions define new fields
callbacks.add('afterRoomNameChange', (roomConfig) => {
const { rid, name, oldName } = roomConfig;
Rooms.update({ prid: rid, ...oldName && { topic: oldName } }, { $set: { topic: name } }, { multi: true });
return roomConfig;
}, callbacks.priority.LOW, 'updateTopicDiscussion');
callbacks.add('afterDeleteRoom', (drid) => {
Messages.update({ drid }, {
$unset: {
dcount: 1,
dlm: 1,
drid: 1,
},
});
return drid;
}, callbacks.priority.LOW, 'CleanDiscussionMessage');