From e5c44f6dcff9717c799dfc80933368f7ddc35998 Mon Sep 17 00:00:00 2001 From: Vinoth Kannan <vinothkannan@vinkas.com> Date: Wed, 22 Apr 2020 17:42:09 +0530 Subject: [PATCH] UX: display 'merge' button in all non-staff user profiles. --- app/assets/javascripts/admin/templates/user-index.hbs | 3 +++ app/controllers/admin/users_controller.rb | 2 +- app/serializers/admin_detailed_user_serializer.rb | 5 +++++ lib/guardian/user_guardian.rb | 8 ++++++-- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/admin/templates/user-index.hbs b/app/assets/javascripts/admin/templates/user-index.hbs index 76aee472715..adbe7e50e9f 100644 --- a/app/assets/javascripts/admin/templates/user-index.hbs +++ b/app/assets/javascripts/admin/templates/user-index.hbs @@ -683,6 +683,9 @@ icon="trash-alt" class="btn-danger" action=(action "destroy")}} + {{/if}} + + {{#if model.can_be_merged}} {{d-button label="admin.user.merge.transfer_and_delete" icon="trash-alt" class="btn-danger" diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index 4ed8a10a0fe..89027818348 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -476,7 +476,7 @@ class Admin::UsersController < Admin::AdminController target_username = params.require(:target_username) target_user = User.find_by_username(target_username) - guardian.ensure_can_merge_user!(@user, target_user) + guardian.ensure_can_merge_users!(@user, target_user) if user = UserMerger.new(@user, target_user, current_user).merge! render json: success_json.merge(merged: true, user: user) diff --git a/app/serializers/admin_detailed_user_serializer.rb b/app/serializers/admin_detailed_user_serializer.rb index 4a83a594b19..c0b18e3df57 100644 --- a/app/serializers/admin_detailed_user_serializer.rb +++ b/app/serializers/admin_detailed_user_serializer.rb @@ -18,6 +18,7 @@ class AdminDetailedUserSerializer < AdminUserSerializer :can_delete_all_posts, :can_be_deleted, :can_be_anonymized, + :can_be_merged, :full_suspend_reason, :suspended_till, :silence_reason, @@ -74,6 +75,10 @@ class AdminDetailedUserSerializer < AdminUserSerializer scope.can_anonymize_user?(object) end + def can_be_merged + scope.can_merge_user?(object) + end + def topic_count object.topics.count end diff --git a/lib/guardian/user_guardian.rb b/lib/guardian/user_guardian.rb index 1461c69d698..d8b65e14075 100644 --- a/lib/guardian/user_guardian.rb +++ b/lib/guardian/user_guardian.rb @@ -76,8 +76,12 @@ module UserGuardian is_staff? && !user.nil? && !user.staff? end - def can_merge_user?(source_user, target_user) - is_admin? && !source_user.nil? && !source_user.staff? && !target_user.nil? + def can_merge_user?(user) + is_admin? && !user.nil? && !user.staff? + end + + def can_merge_users?(source_user, target_user) + can_merge_user?(source_user) && !target_user.nil? end def can_reset_bounce_score?(user)