Implement the ability for an Administrator or Moderator to remove an account avatar (#6998)
This commit is contained in:
		
				
					committed by
					
						 Eugen Rochko
						Eugen Rochko
					
				
			
			
				
	
			
			
			
						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 | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user