Implement the ability for an Administrator or Moderator to remove an account avatar (#6998)
This commit is contained in:
		
							parent
							
								
									4fd71accd4
								
							
						
					
					
						commit
						e7a1716701
					
				| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
 | 
			
		||||
module Admin
 | 
			
		||||
  class AccountsController < BaseController
 | 
			
		||||
    before_action :set_account, only: [:show, :subscribe, :unsubscribe, :redownload, :enable, :disable, :memorialize]
 | 
			
		||||
    before_action :set_account, only: [:show, :subscribe, :unsubscribe, :redownload, :remove_avatar, :enable, :disable, :memorialize]
 | 
			
		||||
    before_action :require_remote_account!, only: [:subscribe, :unsubscribe, :redownload]
 | 
			
		||||
    before_action :require_local_account!, only: [:enable, :disable, :memorialize]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -60,6 +60,17 @@ module Admin
 | 
			
		|||
      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
 | 
			
		||||
 | 
			
		||||
    private
 | 
			
		||||
 | 
			
		||||
    def set_account
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -86,7 +86,7 @@ module Admin::ActionLogsHelper
 | 
			
		|||
      opposite_verbs?(log) ? 'negative' : 'positive'
 | 
			
		||||
    when :update, :reset_password, :disable_2fa, :memorialize
 | 
			
		||||
      'neutral'
 | 
			
		||||
    when :demote, :silence, :disable, :suspend
 | 
			
		||||
    when :demote, :silence, :disable, :suspend, :remove_avatar
 | 
			
		||||
      'negative'
 | 
			
		||||
    when :destroy
 | 
			
		||||
      opposite_verbs?(log) ? 'positive' : 'negative'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,6 +29,10 @@ class AccountPolicy < ApplicationPolicy
 | 
			
		|||
    admin?
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def remove_avatar?
 | 
			
		||||
    staff?
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def subscribe?
 | 
			
		||||
    admin?
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,6 +14,14 @@
 | 
			
		|||
        %th= t('admin.accounts.display_name')
 | 
			
		||||
        %td= @account.display_name
 | 
			
		||||
 | 
			
		||||
      %tr
 | 
			
		||||
        %th= t('admin.accounts.avatar')
 | 
			
		||||
        %th
 | 
			
		||||
          = link_to @account.avatar.url(:original) do
 | 
			
		||||
            = image_tag @account.avatar.url(:original), alt: '', width: 40, height: 40, class: 'avatar'
 | 
			
		||||
          - if @account.local? && @account.avatar?
 | 
			
		||||
            = table_link_to 'trash', t('admin.accounts.remove_avatar'), remove_avatar_admin_account_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_avatar, @account)
 | 
			
		||||
 | 
			
		||||
      - if @account.local?
 | 
			
		||||
        %tr
 | 
			
		||||
          %th= t('admin.accounts.role')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,6 +60,7 @@ en:
 | 
			
		|||
      destroyed_msg: Moderation note successfully destroyed!
 | 
			
		||||
    accounts:
 | 
			
		||||
      are_you_sure: Are you sure?
 | 
			
		||||
      avatar: Avatar
 | 
			
		||||
      by_domain: Domain
 | 
			
		||||
      confirm: Confirm
 | 
			
		||||
      confirmed: Confirmed
 | 
			
		||||
| 
						 | 
				
			
			@ -108,6 +109,7 @@ en:
 | 
			
		|||
      public: Public
 | 
			
		||||
      push_subscription_expires: PuSH subscription expires
 | 
			
		||||
      redownload: Refresh avatar
 | 
			
		||||
      remove_avatar: Remove avatar
 | 
			
		||||
      reset: Reset
 | 
			
		||||
      reset_password: Reset password
 | 
			
		||||
      resubscribe: Resubscribe
 | 
			
		||||
| 
						 | 
				
			
			@ -150,6 +152,7 @@ en:
 | 
			
		|||
        enable_user: "%{name} enabled login for user %{target}"
 | 
			
		||||
        memorialize_account: "%{name} turned %{target}'s account into a memoriam page"
 | 
			
		||||
        promote_user: "%{name} promoted user %{target}"
 | 
			
		||||
        remove_avatar_user: "%{name} removed %{target}'s avatar"
 | 
			
		||||
        reset_password_user: "%{name} reset password of user %{target}"
 | 
			
		||||
        resolve_report: "%{name} dismissed report %{target}"
 | 
			
		||||
        silence_account: "%{name} silenced %{target}'s account"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -144,6 +144,7 @@ Rails.application.routes.draw do
 | 
			
		|||
        post :enable
 | 
			
		||||
        post :disable
 | 
			
		||||
        post :redownload
 | 
			
		||||
        post :remove_avatar
 | 
			
		||||
        post :memorialize
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue