From deecd73d5c64497dae923b1534d7170fab8cef98 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Fri, 7 Aug 2020 23:27:31 -0300 Subject: [PATCH] [NEW] Channel avatar (#18443) --- app/analytics/client/trackEvents.js | 6 + app/api/server/lib/rooms.js | 2 + app/api/server/v1/users.js | 8 +- app/authorization/server/startup.js | 1 + .../client/startup/messageTypes.js | 12 + .../client/views/channelSettings.html | 354 +--------- .../client/views/channelSettings.js | 659 +----------------- .../server/methods/saveRoomSettings.js | 6 +- app/file-upload/server/config/GridFS.js | 1 - app/file-upload/server/lib/FileUpload.js | 53 +- app/lib/lib/roomTypes/private.js | 19 +- app/lib/lib/roomTypes/public.js | 17 +- app/lib/server/functions/deleteRoom.js | 1 + app/lib/server/functions/setRoomAvatar.js | 38 + app/models/server/models/Avatars.js | 7 +- app/models/server/models/Rooms.js | 25 + .../imports/components/contextual-bar.css | 2 + app/ui-account/client/avatar/avatar.js | 11 +- app/ui-utils/client/index.js | 2 +- app/ui-utils/client/lib/avatar.js | 17 - app/utils/lib/getRoomAvatarURL.js | 4 +- client/admin/apps/AppInstallPage.js | 2 +- client/admin/customEmoji/AddCustomEmoji.js | 2 +- client/admin/customEmoji/EditCustomEmoji.js | 2 +- client/admin/customSounds/AddCustomSound.js | 2 +- client/admin/customSounds/EditCustomSound.js | 2 +- client/admin/rooms/EditRoom.js | 284 +++++--- client/channel/ChannelInfo/EditChannel.js | 424 +++++++++++ client/components/DeleteChannelWarning.js | 27 + client/components/basic/avatar/BaseAvatar.js | 2 +- client/components/basic/avatar/RoomAvatar.js | 7 +- .../basic/avatar/RoomAvatarEditor.js | 51 ++ .../basic/avatar/UserAvatarEditor.js | 2 +- client/hooks/useFileInput.js | 21 +- client/notifications/updateAvatar.js | 2 +- packages/rocketchat-i18n/i18n/en.i18n.json | 1 + server/publications/room/index.js | 1 + server/routes/avatar/room.js | 44 +- server/startup/initialData.js | 5 +- server/startup/migrations/index.js | 1 + server/startup/migrations/v203.js | 10 + 41 files changed, 945 insertions(+), 1192 deletions(-) create mode 100644 app/lib/server/functions/setRoomAvatar.js create mode 100644 client/channel/ChannelInfo/EditChannel.js create mode 100644 client/components/DeleteChannelWarning.js create mode 100644 client/components/basic/avatar/RoomAvatarEditor.js create mode 100644 server/startup/migrations/v203.js diff --git a/app/analytics/client/trackEvents.js b/app/analytics/client/trackEvents.js index cc86418dca6..46364603cbd 100644 --- a/app/analytics/client/trackEvents.js +++ b/app/analytics/client/trackEvents.js @@ -148,4 +148,10 @@ if (!window._paq || window.ga) { trackEvent('User', 'Avatar Changed', service); } }, callbacks.priority.MEDIUM, 'analytics-user-avatar-set'); + + callbacks.add('roomAvatarChanged', (room) => { + if (settings.get('Analytics_features_rooms')) { + trackEvent('Room', 'Changed Avatar', `${ room.name } (${ room._id })`); + } + }, callbacks.priority.MEDIUM, 'analytics-room-avatar-changed'); } diff --git a/app/api/server/lib/rooms.js b/app/api/server/lib/rooms.js index b9e73acbfa6..93535314e31 100644 --- a/app/api/server/lib/rooms.js +++ b/app/api/server/lib/rooms.js @@ -79,6 +79,8 @@ export async function findAdminRoom({ uid, rid }) { msgs: 1, archived: 1, tokenpass: 1, + announcement: 1, + description: 1, }; return Rooms.findOneById(rid, { fields }); diff --git a/app/api/server/v1/users.js b/app/api/server/v1/users.js index e368b309f17..c9c31fb006c 100644 --- a/app/api/server/v1/users.js +++ b/app/api/server/v1/users.js @@ -342,8 +342,12 @@ API.v1.addRoute('users.setAvatar', { authRequired: true }, { return callback(new Meteor.Error('error-not-allowed', 'Not allowed')); } } - setUserAvatar(user, Buffer.concat(imageData), mimetype, 'rest'); - callback(); + try { + setUserAvatar(user, Buffer.concat(imageData), mimetype, 'rest'); + callback(); + } catch (e) { + callback(e); + } })); })); busboy.on('field', (fieldname, val) => { diff --git a/app/authorization/server/startup.js b/app/authorization/server/startup.js index 3781646fe3e..0690814a161 100644 --- a/app/authorization/server/startup.js +++ b/app/authorization/server/startup.js @@ -43,6 +43,7 @@ Meteor.startup(function() { { _id: 'edit-other-user-avatar', roles: ['admin'] }, { _id: 'edit-privileged-setting', roles: ['admin'] }, { _id: 'edit-room', roles: ['admin', 'owner', 'moderator'] }, + { _id: 'edit-room-avatar', roles: ['admin', 'owner', 'moderator'] }, { _id: 'edit-room-retention-policy', roles: ['admin'] }, { _id: 'force-delete-message', roles: ['admin', 'owner'] }, { _id: 'join-without-join-code', roles: ['admin', 'bot', 'app'] }, diff --git a/app/channel-settings/client/startup/messageTypes.js b/app/channel-settings/client/startup/messageTypes.js index 5b73ce3ffba..3471921cfcd 100644 --- a/app/channel-settings/client/startup/messageTypes.js +++ b/app/channel-settings/client/startup/messageTypes.js @@ -29,6 +29,18 @@ Meteor.startup(function() { }, }); + MessageTypes.registerType({ + id: 'room_changed_avatar', + system: true, + message: 'room_changed_avatar', + data(message) { + return { + user_by: message.u && message.u.username, + }; + }, + }); + + MessageTypes.registerType({ id: 'room_changed_announcement', system: true, diff --git a/app/channel-settings/client/views/channelSettings.html b/app/channel-settings/client/views/channelSettings.html index bae94547b5c..d15e722caed 100644 --- a/app/channel-settings/client/views/channelSettings.html +++ b/app/channel-settings/client/views/channelSettings.html @@ -1,360 +1,10 @@ -