docbrown/app/services/moderator/manage_activity_and_roles.rb
Jacob Herrington a5b2d109d5
Rename banned and comment_banned roles (#12270)
* Rename banned and comment_banned roles

* Add data update script to rename roles containing 'ban'

* Add named error for Suspended users

* Update unidiomatic method names

* Rename misc banned to suspended

* Apply suggestions from code review

Co-authored-by: Michael Kohl <me@citizen428.net>

* Add unit tests for suspended methods

This commit also adds TODO comments for removing banned and
comment_banned from the codebase after data update scripts have
successfully run on all of our Forems.

Co-authored-by: Michael Kohl <me@citizen428.net>
2021-04-06 10:12:14 -05:00

132 lines
3.5 KiB
Ruby

module Moderator
class ManageActivityAndRoles
attr_reader :user, :admin, :user_params
def initialize(user:, admin:, user_params:)
@user = user
@admin = admin
@user_params = user_params
end
def self.handle_user_roles(admin:, user:, user_params:)
new(user: user, admin: admin, user_params: user_params).update_roles
end
def delete_comments
Users::DeleteComments.call(user)
end
def delete_articles
Users::DeleteArticles.call(user)
end
def delete_user_activity
Users::DeleteActivity.call(user)
end
def remove_privileges
@user.remove_role(:workshop_pass)
remove_mod_roles
remove_tag_moderator_role
end
def remove_mod_roles
@user.remove_role(:trusted)
@user.remove_role(:tag_moderator)
@user.update(email_tag_mod_newsletter: false)
Mailchimp::Bot.new(user).manage_tag_moderator_list
@user.update(email_community_mod_newsletter: false)
Mailchimp::Bot.new(user).manage_community_moderator_list
end
def remove_tag_moderator_role
@user.remove_role(:tag_moderator)
Mailchimp::Bot.new(user).manage_tag_moderator_list
end
def create_note(reason, content)
Note.create(
author_id: @admin.id,
noteable_id: @user.id,
noteable_type: "User",
reason: reason,
content: content,
)
end
def handle_user_status(role, note)
case role
when "Suspend" || "Spammer"
user.add_role(:suspended)
remove_privileges
when "Warn"
warned
when "Comment Suspend"
comment_suspended
when "Regular Member"
regular_member
when "Trusted"
remove_negative_roles
TagModerators::AddTrustedRole.call(user)
when "Admin"
check_super_admin
remove_negative_roles
user.add_role(:admin)
when "Super Admin"
check_super_admin
remove_negative_roles
user.add_role(:super_admin)
when "Tech Admin"
check_super_admin
remove_negative_roles
user.add_role(:tech_admin)
# DataUpdateScripts falls under the admin namespace
# and hence requires a single_resource_admin role to view
# this technical admin resource
user.add_role(:single_resource_admin, DataUpdateScript)
when /^(Resource Admin: )/
check_super_admin
remove_negative_roles
user.add_role(:single_resource_admin, role.split("Resource Admin: ").last.safe_constantize)
end
create_note(role, note)
end
def check_super_admin
raise "You need super admin status to take this action" unless @admin.has_role?(:super_admin)
end
def comment_suspended
user.add_role(:comment_suspended)
user.remove_role(:suspended)
remove_privileges
end
def regular_member
remove_negative_roles
remove_mod_roles
end
def warned
user.add_role(:warned)
user.remove_role(:suspended)
remove_privileges
end
def remove_negative_roles
user.remove_role(:suspended) if user.suspended?
user.remove_role(:warned) if user.warned
user.remove_role(:comment_suspended) if user.comment_suspended?
end
def update_trusted_cache
Rails.cache.delete("user-#{@user.id}/has_trusted_role")
@user.trusted
end
def update_roles
handle_user_status(user_params[:user_status], user_params[:note_for_current_role])
update_trusted_cache
end
end
end