diff --git a/app/api/server/v1/channels.js b/app/api/server/v1/channels.js index 24b3da99e45f6..371a2de3d1c22 100644 --- a/app/api/server/v1/channels.js +++ b/app/api/server/v1/channels.js @@ -306,13 +306,13 @@ API.v1.addRoute( { authRequired: true }, { post() { - const findResult = findChannelByIdOrName({ + const room = findChannelByIdOrName({ params: this.requestParams(), checkedArchived: false, }); Meteor.runAsUser(this.userId, () => { - Meteor.call('eraseRoom', findResult._id); + Meteor.call('eraseRoom', room._id); }); return API.v1.success(); diff --git a/app/api/server/v1/teams.ts b/app/api/server/v1/teams.ts index 4407071d31cc8..476a933febcab 100644 --- a/app/api/server/v1/teams.ts +++ b/app/api/server/v1/teams.ts @@ -140,7 +140,11 @@ API.v1.addRoute( }); } - await Promise.all([Team.unsetTeamIdOfRooms(team._id), Team.removeAllMembersFromTeam(team._id), Team.deleteById(team._id)]); + await Promise.all([ + Team.unsetTeamIdOfRooms(this.userId, team._id), + Team.removeAllMembersFromTeam(team._id), + Team.deleteById(team._id), + ]); return API.v1.success(); }, @@ -606,9 +610,6 @@ API.v1.addRoute( const rooms: string[] = await Team.getMatchingTeamRooms(team._id, roomsToRemove); - // Remove the team's main room - Meteor.call('eraseRoom', team.roomId); - // If we got a list of rooms to delete along with the team, remove them first if (rooms.length) { rooms.forEach((room) => { @@ -617,7 +618,10 @@ API.v1.addRoute( } // Move every other room back to the workspace - await Team.unsetTeamIdOfRooms(team._id); + await Team.unsetTeamIdOfRooms(this.userId, team._id); + + // Remove the team's main room + Meteor.call('eraseRoom', team.roomId); // Delete all team memberships Team.removeAllMembersFromTeam(team._id); diff --git a/app/lib/lib/MessageTypes.js b/app/lib/lib/MessageTypes.js index 19bcc537dd72b..3915ec8f0dbb4 100644 --- a/app/lib/lib/MessageTypes.js +++ b/app/lib/lib/MessageTypes.js @@ -26,6 +26,16 @@ Meteor.startup(function () { }; }, }); + MessageTypes.registerType({ + id: 'added-user-to-team', + system: true, + message: 'Added__username__to_team', + data(message) { + return { + user_added: message.msg, + }; + }, + }); MessageTypes.registerType({ id: 'ru', system: true, @@ -37,6 +47,16 @@ Meteor.startup(function () { }; }, }); + MessageTypes.registerType({ + id: 'removed-user-from-team', + system: true, + message: 'Removed__username__from_team', + data(message) { + return { + user_removed: message.msg, + }; + }, + }); MessageTypes.registerType({ id: 'ul', system: true, @@ -57,6 +77,56 @@ Meteor.startup(function () { }; }, }); + MessageTypes.registerType({ + id: 'user-converted-to-team', + system: true, + message: 'Converted__roomName__to_team', + data(message) { + return { + roomName: message.msg, + }; + }, + }); + MessageTypes.registerType({ + id: 'user-converted-to-channel', + system: true, + message: 'Converted__roomName__to_channel', + data(message) { + return { + roomName: message.msg, + }; + }, + }); + MessageTypes.registerType({ + id: 'user-removed-room-from-team', + system: true, + message: 'Removed__roomName__from_this_team', + data(message) { + return { + roomName: message.msg, + }; + }, + }); + MessageTypes.registerType({ + id: 'user-deleted-room-from-team', + system: true, + message: 'Deleted__roomName__', + data(message) { + return { + roomName: message.msg, + }; + }, + }); + MessageTypes.registerType({ + id: 'user-added-room-to-team', + system: true, + message: 'added__roomName__to_team', + data(message) { + return { + roomName: message.msg, + }; + }, + }); MessageTypes.registerType({ id: 'uj', system: true, @@ -246,18 +316,34 @@ export const MessageTypesValues = [ key: 'uj', i18nLabel: 'Message_HideType_uj', }, + { + key: 'ujt', + i18nLabel: 'Message_HideType_ujt', + }, { key: 'ul', i18nLabel: 'Message_HideType_ul', }, + { + key: 'ult', + i18nLabel: 'Message_HideType_ult', + }, { key: 'ru', i18nLabel: 'Message_HideType_ru', }, + { + key: 'removed-user-from-team', + i18nLabel: 'Message_HideType_removed_user_from_team', + }, { key: 'au', i18nLabel: 'Message_HideType_au', }, + { + key: 'added-user-to-team', + i18nLabel: 'Message_HideType_added_user_to_team', + }, { key: 'mute_unmute', i18nLabel: 'Message_HideType_mute_unmute', @@ -330,4 +416,24 @@ export const MessageTypesValues = [ key: 'room-allowed-reacting', i18nLabel: 'Message_HideType_room_allowed_reacting', }, + { + key: 'user-added-room-to-team', + i18nLabel: 'Message_HideType_user_added_room_to_team', + }, + { + key: 'user-converted-to-channel', + i18nLabel: 'Message_HideType_user_converted_to_channel', + }, + { + key: 'user-converted-to-team', + i18nLabel: 'Message_HideType_user_converted_to_team', + }, + { + key: 'user-deleted-room-from-team', + i18nLabel: 'Message_HideType_user_deleted_room_from_team', + }, + { + key: 'user-removed-room-from-team', + i18nLabel: 'Message_HideType_user_removed_room_from_team', + }, ]; diff --git a/app/lib/server/functions/addUserToRoom.js b/app/lib/server/functions/addUserToRoom.js index 40e3568463419..26c7dc51d514c 100644 --- a/app/lib/server/functions/addUserToRoom.js +++ b/app/lib/server/functions/addUserToRoom.js @@ -61,13 +61,18 @@ export const addUserToRoom = function (rid, user, inviter, silenced) { if (!silenced) { if (inviter) { - Messages.createUserAddedWithRoomIdAndUser(rid, user, { + const extraData = { ts: now, u: { _id: inviter._id, username: inviter.username, }, - }); + }; + if (room.teamMain) { + Messages.createUserAddedToTeamWithRoomIdAndUser(rid, user, extraData); + } else { + Messages.createUserAddedWithRoomIdAndUser(rid, user, extraData); + } } else if (room.prid) { Messages.createUserJoinWithRoomIdAndUserDiscussion(rid, user, { ts: now }); } else if (room.teamMain) { diff --git a/app/lib/server/functions/createRoom.js b/app/lib/server/functions/createRoom.js index 2569f8ea5df0a..96cd49c579d01 100644 --- a/app/lib/server/functions/createRoom.js +++ b/app/lib/server/functions/createRoom.js @@ -6,7 +6,7 @@ import s from 'underscore.string'; import { Apps } from '../../../apps/server'; import { addUserRoles } from '../../../authorization'; import { callbacks } from '../../../../lib/callbacks'; -import { Rooms, Subscriptions, Users } from '../../../models'; +import { Messages, Rooms, Subscriptions, Users } from '../../../models'; import { getValidRoomName } from '../../../utils'; import { createDirectRoom } from './createDirectRoom'; import { Team } from '../../../../server/sdk'; @@ -131,6 +131,11 @@ export const createRoom = function (type, name, owner, members = [], readOnly, { addUserRoles(owner._id, ['owner'], room._id); + if (room.teamId) { + const team = Promise.await(Team.getOneById(room.teamId)); + Messages.createUserAddRoomToTeamWithRoomIdAndUser(team.roomId, room.name, owner); + } + if (type === 'c') { Meteor.defer(() => { callbacks.run('afterCreateChannel', owner, room); diff --git a/app/lib/server/functions/removeUserFromRoom.js b/app/lib/server/functions/removeUserFromRoom.js index 32eea62a52150..9745a69bc42bf 100644 --- a/app/lib/server/functions/removeUserFromRoom.js +++ b/app/lib/server/functions/removeUserFromRoom.js @@ -29,9 +29,15 @@ export const removeUserFromRoom = function (rid, user, options = {}) { if (subscription) { const removedUser = user; if (options.byUser) { - Messages.createUserRemovedWithRoomIdAndUser(rid, user, { + const extraData = { u: options.byUser, - }); + }; + + if (room.teamMain) { + Messages.createUserRemovedFromTeamWithRoomIdAndUser(rid, user, extraData); + } else { + Messages.createUserRemovedWithRoomIdAndUser(rid, user, extraData); + } } else if (room.teamMain) { Messages.createUserLeaveTeamWithRoomIdAndUser(rid, removedUser); } else { diff --git a/app/models/server/models/Messages.js b/app/models/server/models/Messages.js index c25801c062fab..dae73072ba185 100644 --- a/app/models/server/models/Messages.js +++ b/app/models/server/models/Messages.js @@ -923,16 +923,46 @@ export class Messages extends Base { return this.createWithTypeRoomIdMessageAndUser('ult', roomId, message, user, extraData); } + createUserConvertChannelToTeamWithRoomIdAndUser(roomId, roomName, user, extraData) { + return this.createWithTypeRoomIdMessageAndUser('user-converted-to-team', roomId, roomName, user, extraData); + } + + createUserConvertTeamToChannelWithRoomIdAndUser(roomId, roomName, user, extraData) { + return this.createWithTypeRoomIdMessageAndUser('user-converted-to-channel', roomId, roomName, user, extraData); + } + + createUserRemoveRoomFromTeamWithRoomIdAndUser(roomId, roomName, user, extraData) { + return this.createWithTypeRoomIdMessageAndUser('user-removed-room-from-team', roomId, roomName, user, extraData); + } + + createUserDeleteRoomFromTeamWithRoomIdAndUser(roomId, roomName, user, extraData) { + return this.createWithTypeRoomIdMessageAndUser('user-deleted-room-from-team', roomId, roomName, user, extraData); + } + + createUserAddRoomToTeamWithRoomIdAndUser(roomId, roomName, user, extraData) { + return this.createWithTypeRoomIdMessageAndUser('user-added-room-to-team', roomId, roomName, user, extraData); + } + createUserRemovedWithRoomIdAndUser(roomId, user, extraData) { const message = user.username; return this.createWithTypeRoomIdMessageAndUser('ru', roomId, message, user, extraData); } + createUserRemovedFromTeamWithRoomIdAndUser(roomId, user, extraData) { + const message = user.username; + return this.createWithTypeRoomIdMessageAndUser('removed-user-from-team', roomId, message, user, extraData); + } + createUserAddedWithRoomIdAndUser(roomId, user, extraData) { const message = user.username; return this.createWithTypeRoomIdMessageAndUser('au', roomId, message, user, extraData); } + createUserAddedToTeamWithRoomIdAndUser(roomId, user, extraData) { + const message = user.username; + return this.createWithTypeRoomIdMessageAndUser('added-user-to-team', roomId, message, user, extraData); + } + createCommandWithRoomIdAndUser(command, roomId, user, extraData) { return this.createWithTypeRoomIdMessageAndUser('command', roomId, command, user, extraData); } diff --git a/app/theme/client/imports/general/base_old.css b/app/theme/client/imports/general/base_old.css index 687adb5be2a06..3563ba9a54350 100644 --- a/app/theme/client/imports/general/base_old.css +++ b/app/theme/client/imports/general/base_old.css @@ -1880,8 +1880,6 @@ & .user { display: inline-block; - margin-right: 5px; - font-family: inherit; font-size: 0.875rem; diff --git a/app/ui-message/client/message.html b/app/ui-message/client/message.html index b94d7a22e2625..e7c563c3cc4f9 100644 --- a/app/ui-message/client/message.html +++ b/app/ui-message/client/message.html @@ -49,7 +49,9 @@ {{#if isBot}} {{_ "Bot"}} {{/if}} + {{#unless system}} + {{/unless}} {{#if showTranslated}} @@ -111,6 +113,11 @@ {{> messageLocation location=msg.location}} {{/if}} + {{#if system}} +
+ +
+ {{/if}} {{#if hasOembed}} diff --git a/app/user-data-download/server/cronProcessDownloads.js b/app/user-data-download/server/cronProcessDownloads.js index e4b5df7a4a2a3..c93272dc1e31d 100644 --- a/app/user-data-download/server/cronProcessDownloads.js +++ b/app/user-data-download/server/cronProcessDownloads.js @@ -165,12 +165,45 @@ const getMessageData = function (msg, hideUsers, userData, usersMap) { case 'ult': messageObject.msg = TAPi18n.__('User_left_team'); break; + case 'user-added-room-to-team': + messageObject.msg = TAPi18n.__('added__roomName__to_team', { + roomName: msg.msg, + }); + break; + case 'user-converted-to-team': + messageObject.msg = TAPi18n.__('Converted__roomName__to_team', { + roomName: msg.msg, + }); + break; + case 'user-converted-to-channel': + messageObject.msg = TAPi18n.__('Converted__roomName__to_channel', { + roomName: msg.msg, + }); + break; + case 'user-deleted-room-from-team': + messageObject.msg = TAPi18n.__('Deleted__roomName__', { + roomName: msg.msg, + }); + break; + case 'user-removed-room-from-team': + messageObject.msg = TAPi18n.__('Removed__roomName__from_this_team', { + roomName: msg.msg, + }); + break; + case 'ujt': + messageObject.msg = TAPi18n.__('User_joined_team'); + break; case 'au': messageObject.msg = TAPi18n.__('User_added_by', { user_added: hideUserName(msg.msg, userData, usersMap), user_by: username, }); break; + case 'added-user-to-team': + messageObject.msg = TAPi18n.__('Added__username__to_team', { + user_added: msg.msg, + }); + break; case 'r': messageObject.msg = TAPi18n.__('Room_name_changed', { room_name: msg.msg, @@ -183,6 +216,11 @@ const getMessageData = function (msg, hideUsers, userData, usersMap) { user_by: username, }); break; + case 'removed-user-from-team': + messageObject.msg = TAPi18n.__('Removed__username__from_team', { + user_removed: hideUserName(msg.msg, userData, usersMap), + }); + break; case 'wm': messageObject.msg = TAPi18n.__('Welcome', { user: username }); break; diff --git a/client/views/room/contextualBar/Info/RoomInfo/RoomInfoWithData.js b/client/views/room/contextualBar/Info/RoomInfo/RoomInfoWithData.js index 18123cf657a60..fd07b31967a70 100644 --- a/client/views/room/contextualBar/Info/RoomInfo/RoomInfoWithData.js +++ b/client/views/room/contextualBar/Info/RoomInfo/RoomInfoWithData.js @@ -57,7 +57,7 @@ const RoomInfoWithData = ({ rid, openEditing, onClickBack, onEnterRoom, resetSta const leaveRoom = useMethod('leaveRoom'); const router = useRoute('home'); - const moveChannelToTeam = useEndpointActionExperimental('POST', 'teams.addRooms', t('Success')); + const moveChannelToTeam = useEndpointActionExperimental('POST', 'teams.addRooms', t('Rooms_added_successfully')); const convertRoomToTeam = useEndpointActionExperimental( 'POST', type === 'c' ? 'channels.convertToTeam' : 'groups.convertToTeam', diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index 3305b7c1c6381..af608011732cd 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -284,6 +284,8 @@ "add-user-to-any-p-room_description": "Permission to add a user to any private channel", "add-user-to-joined-room": "Add User to Any Joined Channel", "add-user-to-joined-room_description": "Permission to add a user to a currently joined channel", + "added__roomName__to_team": "added #__roomName__ to this Team", + "Added__username__to_team": "added @__user_added__ to this Team", "Adding_OAuth_Services": "Adding OAuth Services", "Adding_permission": "Adding permission", "Adding_user": "Adding user", @@ -617,10 +619,6 @@ "Avg_response_time": "Average of Response Time", "away": "away", "Away": "Away", - "away_female": "away", - "Away_female": "Away", - "away_male": "away", - "Away_male": "Away", "Back": "Back", "Back_to_applications": "Back to applications", "Back_to_chat": "Back to chat", @@ -698,10 +696,6 @@ "Business_hours_updated": "Business hours updated", "busy": "busy", "Busy": "Busy", - "busy_female": "busy", - "Busy_female": "Busy", - "busy_male": "busy", - "Busy_male": "Busy", "By": "By", "by": "by", "By_author": "By __author__", @@ -774,7 +768,7 @@ "Channel_to_listen_on": "Channel to listen on", "Channel_Unarchived": "Channel with name `#%s` has been Unarchived successfully", "Channels": "Channels", - "Channels_added": "Channels added", + "Channels_added": "Channels added sucessfully", "Channels_are_where_your_team_communicate": "Channels are where your team communicate", "Channels_list": "List of public channels", "Channel_what_is_this_channel_about": "What is this channel about?", @@ -955,8 +949,6 @@ "Compact": "Compact", "Condensed": "Condensed", "Condition": "Condition", - "Convert_to_channel": "Convert to Channel", - "Converting_team_to_channel": "Converting Team to Channel", "Commit_details": "Commit Details", "Completed": "Completed", "Computer": "Computer", @@ -1004,7 +996,11 @@ "Conversations_per_day": "Conversations per Day", "Convert": "Convert", "Convert_Ascii_Emojis": "Convert ASCII to Emoji", + "Convert_to_channel": "Convert to Channel", "Converting_channel_to_a_team": "You are converting this Channel to a Team. All members will be kept.", + "Converted__roomName__to_team": "converted #__roomName__ to a Team", + "Converted__roomName__to_channel": "converted #__roomName__ to a Channel", + "Converting_team_to_channel": "Converting Team to Channel", "Copied": "Copied", "Copy": "Copy", "Copy_text": "Copy Text", @@ -1399,6 +1395,7 @@ "delete-user": "Delete User", "delete-user_description": "Permission to delete users", "Deleted": "Deleted!", + "Deleted__roomName__": "deleted #__roomName__", "Department": "Department", "Department_name": "Department name", "Department_not_found": "Department not found", @@ -2329,7 +2326,7 @@ "Invite_user_to_join_channel": "Invite one user to join this channel", "Invite_user_to_join_channel_all_from": "Invite all users from [#channel] to join this channel", "Invite_user_to_join_channel_all_to": "Invite all users from this channel to join [#channel]", - "Invite_Users": "Invite Users", + "Invite_Users": "Invite Members", "IP": "IP", "IRC_Channel_Join": "Output of the JOIN command.", "IRC_Channel_Leave": "Output of the PART command.", @@ -2348,8 +2345,6 @@ "IRC_Private_Message": "Output of the PRIVMSG command.", "IRC_Quit": "Output upon quitting an IRC session.", "is_typing": "is typing", - "is_typing_female": "is typing", - "is_typing_male": "is typing", "Issue_Links": "Issue tracker links", "IssueLinks_Incompatible": "Warning: do not enable this and the 'Hex Color Preview' at the same time.", "IssueLinks_LinkTemplate": "Template for issue links", @@ -2924,6 +2919,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_added_user_to_team": "Hide \"User Added to Team\" 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", @@ -2939,10 +2935,18 @@ "Message_HideType_room_removed_read_only": "Hide \"Room added writing permission\" messages", "Message_HideType_room_unarchived": "Hide \"Room Unarchived\" messages", "Message_HideType_ru": "Hide \"User Removed\" messages", + "Message_HideType_removed_user_from_team": "Hide \"User Removed from Team\" messages", "Message_HideType_subscription_role_added": "Hide \"Was Set Role\" messages", "Message_HideType_subscription_role_removed": "Hide \"Role No Longer Defined\" messages", "Message_HideType_uj": "Hide \"User Join\" messages", + "Message_HideType_ujt": "Hide \"User Joined Team\" messages", "Message_HideType_ul": "Hide \"User Leave\" messages", + "Message_HideType_ult": "Hide \"User Left Team\" messages", + "Message_HideType_user_added_room_to_team": "Hide \"User Added Room to Team\" messages", + "Message_HideType_user_converted_to_channel": "Hide \"User converted team to a Channel\" messages", + "Message_HideType_user_converted_to_team": "Hide \"User converted channel to a Team\" messages", + "Message_HideType_user_deleted_room_from_team": "Hide \"User deleted room from Team\" messages", + "Message_HideType_user_removed_room_from_team": "Hide \"User removed room from Team\" messages", "Message_HideType_ut": "Hide \"User Joined Conversation\" messages", "Message_HideType_wm": "Hide \"Welcome\" messages", "Message_Id": "Message Id", @@ -3527,6 +3531,8 @@ "remove-user_description": "Permission to remove a user from a room", "Removed": "Removed", "Removed_User": "Removed User", + "Removed__roomName__from_this_team": "removed #__roomName__ from this Team", + "Removed__username__from_team": "removed @__user_removed__ from this Team", "Replay": "Replay", "Replied_on": "Replied on", "Replies": "Replies", @@ -3670,6 +3676,7 @@ "Room_uploaded_file_list": "Files List", "Room_uploaded_file_list_empty": "No files available.", "Rooms": "Rooms", + "Rooms_added_successfully": "Rooms added successfully", "Routing": "Routing", "Run_only_once_for_each_visitor": "Run only once for each visitor", "run-import": "Run Import", @@ -4478,21 +4485,13 @@ "User_is_now_an_admin": "User is now an admin", "User_is_unblocked": "User is unblocked", "User_joined_channel": "Has joined the channel.", - "User_joined_channel_female": "Has joined the channel.", - "User_joined_channel_male": "Has joined the channel.", "User_joined_conversation": "Has joined the conversation", + "User_joined_team": "joined this Team", "user_joined_otr": "Has joined OTR chat.", "user_key_refreshed_successfully": "key refreshed successfully", "user_requested_otr_key_refresh": "Has requested key refresh.", - "User_joined_team": "Has joined the team.", - "User_joined_team_female": "Has joined the team.", - "User_joined_team_male": "Has joined the team.", "User_left": "Has left the channel.", - "User_left_female": "Has left the channel.", - "User_left_male": "Has left the channel.", - "User_left_team": "Has left the team.", - "User_left_team_female": "Has left the team.", - "User_left_team_male": "Has left the team.", + "User_left_team": "left this Team", "User_logged_out": "User is logged out", "User_management": "User Management", "User_mentions_only": "User mentions only", diff --git a/packages/rocketchat-i18n/i18n/pt-BR.i18n.json b/packages/rocketchat-i18n/i18n/pt-BR.i18n.json index eefecaa4028af..9a5523ac5490b 100644 --- a/packages/rocketchat-i18n/i18n/pt-BR.i18n.json +++ b/packages/rocketchat-i18n/i18n/pt-BR.i18n.json @@ -2327,7 +2327,7 @@ "Invite_user_to_join_channel": "Convidar um usuário para este canal", "Invite_user_to_join_channel_all_from": "Convide todos os usuários de [#channel] a participar deste canal", "Invite_user_to_join_channel_all_to": "Convide todos os usuários deste canal a participar [#canal]", - "Invite_Users": "Convidar Usuários", + "Invite_Users": "Convidar Membros", "IP": "IP", "IRC_Channel_Join": "Saída do comando JOIN.", "IRC_Channel_Leave": "Saída do comando PART.", diff --git a/server/methods/eraseRoom.js b/server/methods/eraseRoom.js index f5d8d2261d843..95dae4a02c7c3 100644 --- a/server/methods/eraseRoom.js +++ b/server/methods/eraseRoom.js @@ -3,9 +3,10 @@ import { check } from 'meteor/check'; import { deleteRoom } from '../../app/lib'; import { hasPermission } from '../../app/authorization'; -import { Rooms } from '../../app/models'; +import { Rooms, Messages } from '../../app/models'; import { Apps } from '../../app/apps/server'; import { roomTypes } from '../../app/utils'; +import { Team } from '../sdk'; Meteor.methods({ eraseRoom(rid) { @@ -40,6 +41,12 @@ Meteor.methods({ const result = deleteRoom(rid); + if (room.teamId) { + const team = Promise.await(Team.getOneById(room.teamId)); + const user = Meteor.user(); + Messages.createUserDeleteRoomFromTeamWithRoomIdAndUser(team.roomId, room.name, user); + } + if (Apps && Apps.isLoaded()) { Apps.getBridges().getListenerBridge().roomEvent('IPostRoomDeleted', room); } diff --git a/server/sdk/types/ITeamService.ts b/server/sdk/types/ITeamService.ts index 1ab8016e02605..c94baedefb734 100644 --- a/server/sdk/types/ITeamService.ts +++ b/server/sdk/types/ITeamService.ts @@ -94,7 +94,7 @@ export interface ITeamService { getInfoById(teamId: string): Promise | null>; deleteById(teamId: string): Promise; deleteByName(teamName: string): Promise; - unsetTeamIdOfRooms(teamId: string): void; + unsetTeamIdOfRooms(uid: string, teamId: string): void; getOneById(teamId: string, options?: FindOneOptions): Promise; getOneById

(teamId: string, options?: FindOneOptions

): Promise; getOneByName(teamName: string | RegExp, options?: FindOneOptions): Promise; diff --git a/server/services/team/service.ts b/server/services/team/service.ts index a8ff78cbcff97..0a4c87e6c5085 100644 --- a/server/services/team/service.ts +++ b/server/services/team/service.ts @@ -15,6 +15,7 @@ import { UsersRaw } from '../../../app/models/server/raw/Users'; import { IRoom } from '../../../definition/IRoom'; import { IPaginationOptions, IQueryOptions, IRecordsWithTotal, ITeam, ITeamMember, ITeamStats, TEAM_TYPE } from '../../../definition/ITeam'; import { IUser } from '../../../definition/IUser'; +import { Messages } from '../../../app/models/server'; import { Room, Authorization } from '../../sdk'; import { IListRoomsFilter, @@ -125,6 +126,7 @@ export class TeamService extends ServiceClassInternal implements ITeamService { let roomId = room.id; if (roomId) { await this.RoomsModel.setTeamMainById(roomId, teamId); + Messages.createUserConvertChannelToTeamWithRoomIdAndUser(roomId, team.name, createdBy); } else { const roomType: IRoom['t'] = team.type === TEAM_TYPE.PRIVATE ? 'p' : 'c'; @@ -342,7 +344,7 @@ export class TeamService extends ServiceClassInternal implements ITeamService { throw new Error('missing-userId'); } - const team = await this.TeamModel.findOneById(teamId, { projection: { _id: 1 } }); + const team = await this.TeamModel.findOneById>(teamId, { projection: { _id: 1, roomId: 1 } }); if (!team) { throw new Error('invalid-team'); } @@ -373,6 +375,8 @@ export class TeamService extends ServiceClassInternal implements ITeamService { throw new Error('error-no-owner-channel'); } + Messages.createUserAddRoomToTeamWithRoomIdAndUser(team.roomId, room.name, user); + room.teamId = teamId; } @@ -396,15 +400,15 @@ export class TeamService extends ServiceClassInternal implements ITeamService { throw new Error('invalid-room'); } + const user = await this.Users.findOneById(uid); if (!canRemoveAnyRoom) { - const user = await this.Users.findOneById(uid); const canSeeRoom = await canAccessRoom(room, user); if (!canSeeRoom) { throw new Error('invalid-room'); } } - const team = await this.TeamModel.findOneById(teamId, { projection: { _id: 1 } }); + const team = await this.TeamModel.findOneById>(teamId, { projection: { _id: 1, roomId: 1 } }); if (!team) { throw new Error('invalid-team'); } @@ -416,16 +420,33 @@ export class TeamService extends ServiceClassInternal implements ITeamService { delete room.teamId; delete room.teamDefault; this.RoomsModel.unsetTeamById(room._id); + + Messages.createUserRemoveRoomFromTeamWithRoomIdAndUser(team.roomId, room.name, user); + return { ...room, }; } - async unsetTeamIdOfRooms(teamId: string): Promise { + async unsetTeamIdOfRooms(uid: string, teamId: string): Promise { if (!teamId) { throw new Error('missing-teamId'); } + const team = await this.TeamModel.findOneById>(teamId, { projection: { roomId: 1 } }); + if (!team) { + throw new Error('invalid-team'); + } + + const room = await this.RoomsModel.findOneById>(team.roomId, { projection: { name: 1 } }); + if (!room) { + throw new Error('invalid-room'); + } + + const user = await this.Users.findOneById(uid); + + Messages.createUserConvertTeamToChannelWithRoomIdAndUser(team.roomId, room.name, user); + await this.RoomsModel.unsetTeamId(teamId); }