diff --git a/app/api/server/v1/users.js b/app/api/server/v1/users.js index dd3d4d95385a..c252b743e849 100644 --- a/app/api/server/v1/users.js +++ b/app/api/server/v1/users.js @@ -5,7 +5,7 @@ import _ from 'underscore'; import Busboy from 'busboy'; import { Users, Subscriptions } from '../../../models/server'; -import { hasPermission, hasAtLeastOnePermission } from '../../../authorization'; +import { hasPermission } from '../../../authorization'; import { settings } from '../../../settings'; import { getURL } from '../../../utils'; import { @@ -18,7 +18,7 @@ import { } from '../../../lib'; import { getFullUserDataByIdOrUsername } from '../../../lib/server/functions/getFullUserData'; import { API } from '../api'; -import { setStatusText, getUserSingleOwnedRooms } from '../../../lib/server'; +import { setStatusText } from '../../../lib/server'; import { findUsersToAutocomplete } from '../lib/users'; import { getUserForCheck, emailCheck } from '../../../2fa/server/code'; @@ -180,22 +180,6 @@ API.v1.addRoute('users.getPresence', { authRequired: true }, { }, }); -API.v1.addRoute('users.getSingleOwnedRooms', { authRequired: true }, { - get() { - if (!this.isUserFromParams() && !hasAtLeastOnePermission(this.userId, ['delete-user', 'edit-other-user-active-status'])) { - return API.v1.unauthorized(); - } - - const user = this.getUserFromParams(); - - const rooms = getUserSingleOwnedRooms(user._id); - - return API.v1.success({ - rooms, - }); - }, -}); - API.v1.addRoute('users.info', { authRequired: true }, { get() { const { username, userId } = this.requestParams(); diff --git a/app/lib/server/functions/getUserSingleOwnedRooms.js b/app/lib/server/functions/getUserSingleOwnedRooms.js index e843a3e42868..45d7b4824f85 100644 --- a/app/lib/server/functions/getUserSingleOwnedRooms.js +++ b/app/lib/server/functions/getUserSingleOwnedRooms.js @@ -1,9 +1,6 @@ import { Rooms } from '../../../models/server'; -// import { getSubscribedRoomsForUserWithDetails } from './getRoomsWithSingleOwner'; export const getUserSingleOwnedRooms = function(subscribedRooms) { - // const subscribedRooms = getSubscribedRoomsForUserWithDetails(userId); - const roomsThatWillChangeOwner = subscribedRooms.filter(({ shouldChangeOwner }) => shouldChangeOwner).map(({ rid }) => rid); const roomsThatWillBeRemoved = subscribedRooms.filter(({ shouldBeRemoved }) => shouldBeRemoved).map(({ rid }) => rid); diff --git a/app/ui-flextab/client/tabs/userActions.js b/app/ui-flextab/client/tabs/userActions.js index c8a032a1bfd5..deda9cbc7715 100644 --- a/app/ui-flextab/client/tabs/userActions.js +++ b/app/ui-flextab/client/tabs/userActions.js @@ -6,10 +6,11 @@ import toastr from 'toastr'; import _ from 'underscore'; import { WebRTC } from '../../../webrtc/client'; -import { ChatRoom, ChatSubscription, RoomRoles, Subscriptions } from '../../../models'; +import { ChatRoom, ChatSubscription, RoomRoles, Subscriptions } from '../../../models/client'; import { modal } from '../../../ui-utils/client'; import { t, handleError, roomTypes } from '../../../utils'; -import { hasPermission, hasAllPermission, userHasAllPermission } from '../../../authorization'; +import { settings } from '../../../settings/client'; +import { hasPermission, hasAllPermission, userHasAllPermission } from '../../../authorization/client'; import { RoomMemberActions } from '../../../utils/client'; const canSetLeader = () => hasAllPermission('set-leader', Session.get('openedRoom')); @@ -445,19 +446,31 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { icon: 'trash', name: 'Delete', action: prevent(getUser, ({ _id }) => { - const { instance } = this; + const erasureType = settings.get('Message_ErasureType'); + const warningKey = `Delete_User_Warning_${ erasureType }`; - Meteor.call('deleteUser', _id, success(() => { - modal.open({ - title: t('Deleted'), - text: t('User_has_been_deleted'), - type: 'success', - timer: 2000, - showConfirmButton: false, - }); - - instance.tabBar.close(); - })); + modal.open({ + title: t('Are_you_sure'), + text: t(warningKey), + type: 'warning', + showCancelButton: true, + confirmButtonColor: '#DD6B55', + confirmButtonText: t('Yes_delete_it'), + cancelButtonText: t('Cancel'), + closeOnConfirm: false, + html: false, + }, () => { + Meteor.call('deleteUser', _id, success(() => { + modal.open({ + title: t('Deleted'), + text: t('User_has_been_deleted'), + type: 'success', + timer: 2000, + showConfirmButton: false, + }); + this.instance.tabBar.close(); + })); + }); }), group: 'admin', condition: () => !hideAdminControls && hasPermission('delete-user'), @@ -501,12 +514,12 @@ export const getActions = ({ user, directActions, hideAdminControls }) => { id: 'deactivate', name: t('Deactivate'), modifier: 'alert', - action: prevent(getUser, (user) => { + action: prevent(getUser, (user) => Meteor.call('setUserActiveStatus', user._id, false, success(() => { toastr.success(t('User_has_been_deactivated')); user.active = false; - })); - }), + })), + ), }; } return { diff --git a/client/admin/users/UserInfoActions.js b/client/admin/users/UserInfoActions.js index 54f1f28261d6..31604c6be6ec 100644 --- a/client/admin/users/UserInfoActions.js +++ b/client/admin/users/UserInfoActions.js @@ -177,7 +177,7 @@ export const UserInfoActions = ({ username, _id, isActive, isAdmin, onChange, .. activeStatus: !isActive, }), [_id, isActive]); const changeActiveStatusMessage = isActive ? 'User_has_been_deactivated' : 'User_has_been_activated'; - const changeActiveStatusRequest = useEndpoint('POST', 'users.setActiveStatus', activeStatusQuery); + const changeActiveStatusRequest = useEndpoint('POST', 'users.setActiveStatus'); const changeActiveStatus = confirmOwnerChanges(async (confirm = false) => { if (confirm) {