* Add moderation warnings Replace individual routes for disabling, silencing, and suspending a user, as well as the report update route, with a unified account action controller that allows you to select an action (none, disable, silence, suspend) as well as whether it should generate an e-mail notification with optional custom text. That notification, with the optional custom text, is saved as a warning. Additionally, there are warning presets you can configure to save time when performing the above. * Use Account#local_username_and_domain
		
			
				
	
	
		
			129 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
module Admin
 | 
						|
  class AccountsController < BaseController
 | 
						|
    before_action :set_account, only: [:show, :subscribe, :unsubscribe, :redownload, :remove_avatar, :remove_header, :enable, :memorialize]
 | 
						|
    before_action :require_remote_account!, only: [:subscribe, :unsubscribe, :redownload]
 | 
						|
    before_action :require_local_account!, only: [:enable, :memorialize]
 | 
						|
 | 
						|
    def index
 | 
						|
      authorize :account, :index?
 | 
						|
      @accounts = filtered_accounts.page(params[:page])
 | 
						|
    end
 | 
						|
 | 
						|
    def show
 | 
						|
      authorize @account, :show?
 | 
						|
 | 
						|
      @account_moderation_note = current_account.account_moderation_notes.new(target_account: @account)
 | 
						|
      @moderation_notes        = @account.targeted_moderation_notes.latest
 | 
						|
      @warnings                = @account.targeted_account_warnings.latest.custom
 | 
						|
    end
 | 
						|
 | 
						|
    def subscribe
 | 
						|
      authorize @account, :subscribe?
 | 
						|
      Pubsubhubbub::SubscribeWorker.perform_async(@account.id)
 | 
						|
      redirect_to admin_account_path(@account.id)
 | 
						|
    end
 | 
						|
 | 
						|
    def unsubscribe
 | 
						|
      authorize @account, :unsubscribe?
 | 
						|
      Pubsubhubbub::UnsubscribeWorker.perform_async(@account.id)
 | 
						|
      redirect_to admin_account_path(@account.id)
 | 
						|
    end
 | 
						|
 | 
						|
    def memorialize
 | 
						|
      authorize @account, :memorialize?
 | 
						|
      @account.memorialize!
 | 
						|
      log_action :memorialize, @account
 | 
						|
      redirect_to admin_account_path(@account.id)
 | 
						|
    end
 | 
						|
 | 
						|
    def enable
 | 
						|
      authorize @account.user, :enable?
 | 
						|
      @account.user.enable!
 | 
						|
      log_action :enable, @account.user
 | 
						|
      redirect_to admin_account_path(@account.id)
 | 
						|
    end
 | 
						|
 | 
						|
    def unsilence
 | 
						|
      authorize @account, :unsilence?
 | 
						|
      @account.unsilence!
 | 
						|
      log_action :unsilence, @account
 | 
						|
      redirect_to admin_account_path(@account.id)
 | 
						|
    end
 | 
						|
 | 
						|
    def unsuspend
 | 
						|
      authorize @account, :unsuspend?
 | 
						|
      @account.unsuspend!
 | 
						|
      log_action :unsuspend, @account
 | 
						|
      redirect_to admin_account_path(@account.id)
 | 
						|
    end
 | 
						|
 | 
						|
    def redownload
 | 
						|
      authorize @account, :redownload?
 | 
						|
 | 
						|
      @account.reset_avatar!
 | 
						|
      @account.reset_header!
 | 
						|
      @account.save!
 | 
						|
 | 
						|
      redirect_to admin_account_path(@account.id)
 | 
						|
    end
 | 
						|
 | 
						|
    def remove_avatar
 | 
						|
      authorize @account, :remove_avatar?
 | 
						|
 | 
						|
      @account.avatar = nil
 | 
						|
      @account.save!
 | 
						|
 | 
						|
      log_action :remove_avatar, @account.user
 | 
						|
 | 
						|
      redirect_to admin_account_path(@account.id)
 | 
						|
    end
 | 
						|
 | 
						|
    def remove_header
 | 
						|
      authorize @account, :remove_header?
 | 
						|
 | 
						|
      @account.header = nil
 | 
						|
      @account.save!
 | 
						|
 | 
						|
      log_action :remove_header, @account.user
 | 
						|
 | 
						|
      redirect_to admin_account_path(@account.id)
 | 
						|
    end
 | 
						|
 | 
						|
    private
 | 
						|
 | 
						|
    def set_account
 | 
						|
      @account = Account.find(params[:id])
 | 
						|
    end
 | 
						|
 | 
						|
    def require_remote_account!
 | 
						|
      redirect_to admin_account_path(@account.id) if @account.local?
 | 
						|
    end
 | 
						|
 | 
						|
    def require_local_account!
 | 
						|
      redirect_to admin_account_path(@account.id) unless @account.local? && @account.user.present?
 | 
						|
    end
 | 
						|
 | 
						|
    def filtered_accounts
 | 
						|
      AccountFilter.new(filter_params).results
 | 
						|
    end
 | 
						|
 | 
						|
    def filter_params
 | 
						|
      params.permit(
 | 
						|
        :local,
 | 
						|
        :remote,
 | 
						|
        :by_domain,
 | 
						|
        :active,
 | 
						|
        :silenced,
 | 
						|
        :suspended,
 | 
						|
        :username,
 | 
						|
        :display_name,
 | 
						|
        :email,
 | 
						|
        :ip,
 | 
						|
        :staff
 | 
						|
      )
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |