From 2d8df2c1cd6c535e4ea5c1b73bd4b4d79e4911ec Mon Sep 17 00:00:00 2001 From: Sylvain Date: Tue, 5 May 2020 11:28:04 +0200 Subject: [PATCH] Ability to promote a user to a higher role (member > manager > admin) --- CHANGELOG.md | 1 + .../controllers/admin/members.js.erb | 89 ++++++++++--------- .../admin/members/change_role_modal.html.erb | 2 +- .../templates/admin/members/edit.html.erb | 4 +- .../templates/admin/members/members.html.erb | 3 - app/controllers/api/members_controller.rb | 22 ++++- app/models/notification_type.rb | 2 + .../api/i_calendar/_i_calendar.json.jbuilder | 2 +- .../_notify_admins_role_update.json.jbuilder | 7 ++ .../_notify_user_role_update.json.jbuilder | 5 ++ .../notify_admins_role_update.html.erb | 8 ++ .../notify_user_role_update.html.erb | 7 ++ config/locales/app.admin.en.yml | 7 ++ config/locales/app.admin.fr.yml | 7 ++ config/locales/en.yml | 8 ++ config/locales/mails.en.yml | 10 +++ 16 files changed, 135 insertions(+), 49 deletions(-) create mode 100644 app/views/api/notifications/_notify_admins_role_update.json.jbuilder create mode 100644 app/views/api/notifications/_notify_user_role_update.json.jbuilder create mode 100644 app/views/notifications_mailer/notify_admins_role_update.html.erb create mode 100644 app/views/notifications_mailer/notify_user_role_update.html.erb diff --git a/CHANGELOG.md b/CHANGELOG.md index 878dcd245..3468b75e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - The invoices list displays the operator in case of offline payment - Interface to manage partners - Ability to define, per availability, a custom duration for the reservation slots +- Ability to promote a user to a higher role (member > manager > admin) - Corrected the documentation about BOOK_SLOT_AT_SAME_TIME - Auto-adjusts text colors based on the selected theme colors - Fix a bug: unable to change group if the previous was deactivated diff --git a/app/assets/javascripts/controllers/admin/members.js.erb b/app/assets/javascripts/controllers/admin/members.js.erb index 3f1a0ced1..906bf8396 100644 --- a/app/assets/javascripts/controllers/admin/members.js.erb +++ b/app/assets/javascripts/controllers/admin/members.js.erb @@ -265,47 +265,6 @@ Application.Controllers.controller('AdminMembersController', ['$scope', '$sce', }); }; - /** - * Open a modal dialog asking for confirmation to change the role of the given user - * @param userId {number} id of the user to "promote" - * @returns {*} - */ - $scope.changeUserRole = function(userId) { - const modalInstance = $uibModal.open({ - animation: true, - templateUrl: '<%= asset_path "admin/members/change_role_modal.html" %>', - size: 'lg', - resolve: { - userPromise: ['Member', function (Member) { return Member.get({ id: userId }).$promise; }] - }, - controller: ['$scope', '$uibModalInstance', 'Member', 'userPromise', function ($scope, $uibModalInstance, Member, userPromise) { - $scope.user = userPromise; - - $scope.role = userPromise.role; - - $scope.roles = ['admin', 'manager', 'member']; - - $scope.ok = function () { - Member.updateRole( - { id: $scope.user.id }, - { role: $scope.role }, - function (_res) { - growl.success(_t('app.admin.members_edit.role_changed')); - return $uibModalInstance.close(_res); - }, - function (error) { growl.error(_t('app.admin.members_edit.error_while_changing_role')); } - ); - }; - - $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); }; - }] - }); - // once the form was validated successfully ... - return modalInstance.result.then(function (user) { - // remove the user for the old list add to the new - }); - } - /** * Ask for confirmation then delete the specified user @@ -732,6 +691,54 @@ Application.Controllers.controller('EditMemberController', ['$scope', '$state', // current active authentication provider $scope.activeProvider = activeProviderPromise; + /** + * Open a modal dialog asking for confirmation to change the role of the given user + * @param userId {number} id of the user to "promote" + * @returns {*} + */ + $scope.changeUserRole = function() { + const modalInstance = $uibModal.open({ + animation: true, + templateUrl: '<%= asset_path "admin/members/change_role_modal.html" %>', + size: 'lg', + resolve: { + user() { return $scope.user; } + }, + controller: ['$scope', '$uibModalInstance', 'Member', 'user', '_t', function ($scope, $uibModalInstance, Member, user, _t) { + $scope.user = user; + + $scope.role = user.role; + + $scope.roles = [ + { key: 'admin', label: _t('app.admin.members_edit.admin') }, + { key: 'manager', label: _t('app.admin.members_edit.manager'), notAnOption: (user.role === 'admin') }, + { key: 'member', label: _t('app.admin.members_edit.member'), notAnOption: (user.role === 'admin' || user.role === 'manager') }, + ]; + + $scope.ok = function () { + Member.updateRole( + { id: $scope.user.id }, + { role: $scope.role }, + function (_res) { + growl.success(_t('app.admin.members_edit.role_changed', { OLD: _t(`app.admin.members_edit.${user.role}`), NEW: _t(`app.admin.members_edit.${$scope.role}`) })); + return $uibModalInstance.close(_res); + }, + function (error) { + growl.error(_t('app.admin.members_edit.error_while_changing_role')); + console.error(error); + } + ); + }; + + $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); }; + }] + }); + // once the form was validated successfully ... + return modalInstance.result.then(function (user) { + // remove the user for the old list add to the new + }); + } + /** * Open a modal dialog, allowing the admin to extend the current user's subscription (freely or not) * @param subscription {Object} User's subscription object diff --git a/app/assets/templates/admin/members/change_role_modal.html.erb b/app/assets/templates/admin/members/change_role_modal.html.erb index e18b3a6d6..ce09403ca 100644 --- a/app/assets/templates/admin/members/change_role_modal.html.erb +++ b/app/assets/templates/admin/members/change_role_modal.html.erb @@ -4,7 +4,7 @@