diff --git a/public/globals.js b/public/globals.js index d4b8ee796..963f813bf 100644 --- a/public/globals.js +++ b/public/globals.js @@ -839,12 +839,12 @@ window.pkp = { 'userInvitation.edit.message': 'If you edit the existing invitation or add a new role, the current invitation will be canceled and, a new one will be sent. Are you sure you want to proceed?', 'userInvitation.edit.title': 'Edit Invitation', - 'userInvitation.emailField.description': 'e.g. aeinstein@example.com', + 'userInvitation.searchField.description': + 'e.g. aeinstein@example.com or aeinstein or 0000-0000-0000-0000', 'userInvitation.modal.button': 'View All Users', 'userInvitation.modal.message': "{$email} has been invited to new role in OJS. You can be updated about the user's decision on the User and Role page, your OJS notification and/or your email", 'userInvitation.modal.title': 'Invitation Sent', - 'userInvitation.orcidField.description': 'e.g. 0000-0000-0000-0000', 'userInvitation.roleTable.endDate': 'End Date', 'userInvitation.roleTable.journalMasthead': 'Journal Masthead', 'userInvitation.roleTable.role': 'Role', @@ -853,7 +853,6 @@ window.pkp = { 'userInvitation.search.userNotFound': 'The user does not have a role in this journal', 'userInvitation.status.invited': 'Invited {$date}', - 'userInvitation.usernameField.description': 'e.g. mickeymouse', 'validator.required': 'This field is required.', 'workflow.review.externalReview': 'Review', 'workflow.review.internalReview': 'Internal Review', @@ -867,6 +866,19 @@ window.pkp = { 'workflow.submissionNextReviewRoundInFutureStage': 'The submission advanced to the next review round, was accepted, and is currently in the {$stage} stage.', 'workflow.uploadRevisions': 'Upload revisions', + 'userInvitation.searchField': + 'Search for a user by email address, username, or ORCID iD. Enter only one to get started!', + 'grid.user.enable': 'Enable User', + 'grid.user.disable': 'Disable User', + 'grid.user.remove': 'Remove User', + 'grid.user.logInAs': 'Login As', + 'grid.user.grid.user.enableReasonDescription': + "Once the user is enabled, they will regain access to OJS, and you'll be able to invite them to roles as needed.", + 'grid.user.grid.user.disableReasonDescription': + "Please note that once a user is disabled, you won't be able to add them to any roles until they are enabled again.", + 'user.disabledModal.description': 'Current Roles : {$roles}', + 'user.disabledModal.title': 'Disable {$fullName}', + 'user.enabledModal.title': 'Enable {$fullName}', }, tinyMCE: { skinUrl: '/styles/tinymce', diff --git a/src/components/Modal/SideModalBodyLegacyAjax.vue b/src/components/Modal/SideModalBodyLegacyAjax.vue index 07447fcd1..5f63a5e1f 100644 --- a/src/components/Modal/SideModalBodyLegacyAjax.vue +++ b/src/components/Modal/SideModalBodyLegacyAjax.vue @@ -1,6 +1,9 @@ diff --git a/src/managers/UserAccessManager/UserAccessManagerCellStartDate.vue b/src/managers/UserAccessManager/UserAccessManagerCellStartDate.vue index b5f68a293..3d3446db6 100644 --- a/src/managers/UserAccessManager/UserAccessManagerCellStartDate.vue +++ b/src/managers/UserAccessManager/UserAccessManagerCellStartDate.vue @@ -2,7 +2,11 @@ diff --git a/src/managers/UserAccessManager/UserAccessManagerCellUserGroups.vue b/src/managers/UserAccessManager/UserAccessManagerCellUserGroups.vue index c9ac7a7db..84159786d 100644 --- a/src/managers/UserAccessManager/UserAccessManagerCellUserGroups.vue +++ b/src/managers/UserAccessManager/UserAccessManagerCellUserGroups.vue @@ -2,7 +2,7 @@ diff --git a/src/managers/UserAccessManager/useUserAccessManagerActions.js b/src/managers/UserAccessManager/useUserAccessManagerActions.js index bf8843537..32b63a20c 100644 --- a/src/managers/UserAccessManager/useUserAccessManagerActions.js +++ b/src/managers/UserAccessManager/useUserAccessManagerActions.js @@ -36,25 +36,25 @@ export function useUserAccessManagerActions() { if (getCurrentUserId() !== user.id) { user.canLoginAs && actions.push({ - label: t('grid.action.logInAs'), + label: t('grid.user.logInAs'), icon: 'LoginAs', name: Actions.USER_ACCESS_LOGIN_AS, }); - actions.push({ - label: t('grid.action.remove'), - icon: 'Cancel', - name: Actions.USER_ACCESS_REMOVE_USER, - isWarnable: true, - }); + if (user.groups.find((value) => value.dateEnd === null)) { + actions.push({ + label: t('grid.user.remove'), + icon: 'Cancel', + name: Actions.USER_ACCESS_REMOVE_USER, + isWarnable: true, + }); + } actions.push({ - label: user.disabled - ? t('grid.action.enable') - : t('grid.action.disable'), - icon: 'DisableUser', + label: user.disabled ? t('grid.user.enable') : t('grid.user.disable'), + icon: user.disabled ? 'User' : 'DisableUser', name: Actions.USER_ACCESS_DISABLE_USER, - isWarnable: true, + isWarnable: !user.disabled, }); user.canMergeUser && @@ -89,10 +89,21 @@ export function useUserAccessManagerActions() { enable: user.disabled ? '1' : '', }, }); + const currentRoles = user.groups.map((group) => group.name).join(', '); - openLegacyModal({title: t('grid.user.disable')}, (closeData) => { - finishedCallback(); - }); + openLegacyModal( + { + title: !user.disabled + ? t('user.disabledModal.title', {fullName: user.fullName}) + : t('user.enabledModal.title', {fullName: user.fullName}), + description: t('user.disabledModal.description', { + roles: currentRoles, + }), + }, + (closeData) => { + finishedCallback(); + }, + ); } const {openDialog, openDialogNetworkError} = useModal(); diff --git a/src/pages/userInvitation/UserInvitationDetailsFormStep.vue b/src/pages/userInvitation/UserInvitationDetailsFormStep.vue index 7ac9b8a28..22ef3f4e1 100644 --- a/src/pages/userInvitation/UserInvitationDetailsFormStep.vue +++ b/src/pages/userInvitation/UserInvitationDetailsFormStep.vue @@ -1,4 +1,15 @@