Skip to content

Commit

Permalink
[IMPROVE] Update system messages' behavior in rooms (#22018)
Browse files Browse the repository at this point in the history
* Add alert to system messages and displays them in the sidebar (last message)

* Update lastMessage on room setting's update and message deletions

* Add admin settings check before room alert and last message update

* Update normalizeSidebarMessage.js

* Update imports order

* Use MessageTypes object and add support to multiple languages

* Use system setting value to define last visible message in room

* Update condition to hide system messages

* Add check to hiddenSysMes array length (fix tests)

* Add check to 'u' field in message extraData

* Fix tests (rearrange order)

* Add option to hide message_pinned system message type and fix tests

* Add translations

* Fix groups tests

Co-authored-by: pierre-lehnen-rc <55164754+pierre-lehnen-rc@users.noreply.github.com>
Co-authored-by: Diego Sampaio <chinello@gmail.com>
  • Loading branch information
3 people committed Jun 16, 2021
1 parent 7fe049e commit 3afe072
Show file tree
Hide file tree
Showing 12 changed files with 66 additions and 16 deletions.
4 changes: 4 additions & 0 deletions app/channel-settings/server/methods/saveRoomSettings.js
Expand Up @@ -332,6 +332,10 @@ Meteor.methods({
callbacks.run('afterSaveRoomSettings', room);
});

if (settings.hasOwnProperty('systemMessages')) {
Rooms.resetLastMessageById(rid);
}

return {
result: true,
rid: room._id,
Expand Down
8 changes: 8 additions & 0 deletions app/lib/lib/MessageTypes.js
Expand Up @@ -135,6 +135,11 @@ Meteor.startup(function() {
};
},
});
MessageTypes.registerType({
id: 'message_pinned',
system: true,
message: 'Pinned_a_message',
});
MessageTypes.registerType({
id: 'subscription-role-added',
system: true,
Expand Down Expand Up @@ -217,6 +222,9 @@ export const MessageTypesValues = [
}, {
key: 'mute_unmute',
i18nLabel: 'Message_HideType_mute_unmute',
}, {
key: 'message_pinned',
i18nLabel: 'Message_HideType_message_pinned',
}, {
key: 'r',
i18nLabel: 'Message_HideType_r',
Expand Down
1 change: 0 additions & 1 deletion app/message-pin/client/index.js
@@ -1,5 +1,4 @@
import './actionButton';
import './messageType';
import './pinMessage';
import './tabBar';
import './views/pinnedMessages.html';
Expand Down
11 changes: 0 additions & 11 deletions app/message-pin/client/messageType.js

This file was deleted.

19 changes: 16 additions & 3 deletions app/models/server/models/Messages.js
Expand Up @@ -3,6 +3,7 @@ import _ from 'underscore';

import { Base } from './_Base';
import Rooms from './Rooms';
import Subscriptions from './Subscriptions';
import { settings } from '../../../settings/server/functions/settings';

export class Messages extends Base {
Expand Down Expand Up @@ -476,11 +477,13 @@ export class Messages extends Base {
return this.find(query, options);
}

getLastVisibleMessageSentWithNoTypeByRoomId(rid, messageId) {
getLastVisibleMessageSentByRoomId(rid, messageId) {
const { sysMes } = Rooms.getHiddenSystemMessagesTypesById(rid);
const hiddenSysMes = sysMes || settings.get('Hide_System_Messages');
const query = {
rid,
_hidden: { $ne: true },
t: { $exists: false },
t: hiddenSysMes ? { $nin: hiddenSysMes } : undefined,
$or: [
{ tmid: { $exists: false } },
{ tshow: true },
Expand Down Expand Up @@ -738,7 +741,17 @@ export class Messages extends Base {
_.extend(record, extraData);

record._id = this.insertOrUpsert(record);
Rooms.incMsgCountById(roomId, 1);

const { sysMes } = Rooms.getHiddenSystemMessagesTypesById(roomId);
const hiddenSysMes = sysMes || settings.get('Hide_System_Messages');
if (hiddenSysMes.length && hiddenSysMes.includes(type)) {
Rooms.incMsgCountById(roomId, 1);
} else {
const byUser = extraData && extraData.u ? extraData.u._id : user._id;
Rooms.incMsgCountAndSetLastMessageById(roomId, 1, record.ts, settings.get('Store_Last_Message') && record);
Subscriptions.setAlertForRoomIdExcludingUserId(roomId, byUser);
}

return record;
}

Expand Down
6 changes: 5 additions & 1 deletion app/models/server/models/Rooms.js
Expand Up @@ -253,6 +253,10 @@ export class Rooms extends Base {
return this.find({ t: 'd', uids: { $size: 2, $in: [_id] } }, options);
}

getHiddenSystemMessagesTypesById(_id, options) {
return this.findOne({ _id }, { ...options, fields: { sysMes: 1 } });
}

setAllowReactingWhenReadOnlyById = function(_id, allowReacting) {
const query = {
_id,
Expand Down Expand Up @@ -967,7 +971,7 @@ export class Rooms extends Base {

resetLastMessageById(_id, messageId = undefined) {
const query = { _id };
const lastMessage = Messages.getLastVisibleMessageSentWithNoTypeByRoomId(_id, messageId);
const lastMessage = Messages.getLastVisibleMessageSentByRoomId(_id, messageId);

const update = lastMessage ? {
$set: {
Expand Down
10 changes: 10 additions & 0 deletions client/sidebar/RoomList/normalizeSidebarMessage.js
@@ -1,8 +1,18 @@
import { escapeHTML } from '@rocket.chat/string-helpers';
import { Meteor } from 'meteor/meteor';
import { TAPi18n } from 'meteor/rocketchat:tap-i18n';

import { filterMarkdown } from '../../../app/markdown/lib/markdown';
import { MessageTypes } from '../../../app/ui-utils/lib/MessageTypes';

export const normalizeSidebarMessage = (message, t) => {
const messageType = MessageTypes.getType(message);
if (message.t && messageType) {
const data = (typeof messageType.data === 'function' && messageType.data(message)) || {};
const language = Meteor._localStorage.getItem('userLanguage');
return TAPi18n.__(messageType.message, data, language);
}

if (message.msg) {
return escapeHTML(filterMarkdown(message.msg));
}
Expand Down
1 change: 1 addition & 0 deletions packages/rocketchat-i18n/i18n/en.i18n.json
Expand Up @@ -2783,6 +2783,7 @@
"Message_has_been_unpinned": "Message has been unpinned",
"Message_has_been_unstarred": "Message has been unstarred",
"Message_HideType_au": "Hide \"User Added\" messages",
"Message_HideType_message_pinned": "Hide \"Pinned a message\" messages",
"Message_HideType_mute_unmute": "Hide \"User Muted / Unmuted\" messages",
"Message_HideType_r": "Hide \"Room Name Changed\" messages",
"Message_HideType_rm": "Hide \"Message Removed\" messages",
Expand Down
1 change: 1 addition & 0 deletions packages/rocketchat-i18n/i18n/pt-BR.i18n.json
Expand Up @@ -2317,6 +2317,7 @@
"Message_GroupingPeriod": "Período de Agrupamento (em segundos)",
"Message_GroupingPeriodDescription": "As mensagens serão agrupadas com as anteriores se pertencerem ao mesmo usuário e o tempo decorrido for menor do que o tempo em segundos informado.",
"Message_HideType_au": "Ocultar mensagens \"User Added\"",
"Message_HideType_message_pinned": "Ocultar mensagens \"Fixou uma mensagem\"",
"Message_HideType_mute_unmute": "Ocultar mensagens \"Usuário silenciado / não modificado\"",
"Message_HideType_ru": "Ocultar mensagens \"Usuário removido\"",
"Message_HideType_uj": "Ocultar mensagens de \"Aderir ao usuário\"",
Expand Down
1 change: 1 addition & 0 deletions packages/rocketchat-i18n/i18n/pt.i18n.json
Expand Up @@ -2051,6 +2051,7 @@
"Message_GroupingPeriod": "Período de Agrupamento (em segundos)",
"Message_GroupingPeriodDescription": "As mensagens serão agrupadas com as anteriores se pertencerem ao mesmo utilizador e o tempo decorrido for menor do que o tempo em segundos informado.",
"Message_HideType_au": "Ocultar mensagens \"User Added\"",
"Message_HideType_message_pinned": "Ocultar mensagens \"Fixou uma mensagem\"",
"Message_HideType_mute_unmute": "Ocultar mensagens \"utilizador silenciado / não modificado\"",
"Message_HideType_ru": "Ocultar mensagens \"utilizador removido\"",
"Message_HideType_uj": "Ocultar mensagens de \"Aderir ao utilizador\"",
Expand Down
10 changes: 10 additions & 0 deletions tests/end-to-end/api/02-channels.js
Expand Up @@ -68,6 +68,16 @@ describe('[Channels]', function() {
})
.end(done);
});
it('should hide message pins (system messages)', (done) => {
request.post(api('rooms.saveRoomSettings'))
.set(credentials)
.send({
rid: testChannel._id,
systemMessages: ['message_pinned'],
})
.expect(200)
.end(done);
});
it('should return channel basic structure', (done) => {
request.get(api('channels.info'))
.set(credentials)
Expand Down
10 changes: 10 additions & 0 deletions tests/end-to-end/api/03-groups.js
Expand Up @@ -60,6 +60,16 @@ describe('[Groups]', function() {
})
.end(done);
});
it('should hide message pins (system messages)', (done) => {
request.post(api('rooms.saveRoomSettings'))
.set(credentials)
.send({
rid: testGroup._id,
systemMessages: ['message_pinned'],
})
.expect(200)
.end(done);
});
it('should return group basic structure', (done) => {
request.get(api('groups.info'))
.set(credentials)
Expand Down

0 comments on commit 3afe072

Please sign in to comment.