Implement the ability for an Administrator or Moderator to remove an account avatar (#6998)

th-downstream
Emelia Smith 7 years ago committed by Eugen Rochko
parent 4be5383b91
commit 0408944627

@ -2,7 +2,7 @@
module Admin module Admin
class AccountsController < BaseController 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_remote_account!, only: [:subscribe, :unsubscribe, :redownload]
before_action :require_local_account!, only: [:enable, :disable, :memorialize] before_action :require_local_account!, only: [:enable, :disable, :memorialize]
@ -60,6 +60,17 @@ module Admin
redirect_to admin_account_path(@account.id) redirect_to admin_account_path(@account.id)
end 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 private
def set_account def set_account

@ -86,7 +86,7 @@ module Admin::ActionLogsHelper
opposite_verbs?(log) ? 'negative' : 'positive' opposite_verbs?(log) ? 'negative' : 'positive'
when :update, :reset_password, :disable_2fa, :memorialize when :update, :reset_password, :disable_2fa, :memorialize
'neutral' 'neutral'
when :demote, :silence, :disable, :suspend when :demote, :silence, :disable, :suspend, :remove_avatar
'negative' 'negative'
when :destroy when :destroy
opposite_verbs?(log) ? 'positive' : 'negative' opposite_verbs?(log) ? 'positive' : 'negative'

@ -29,6 +29,10 @@ class AccountPolicy < ApplicationPolicy
admin? admin?
end end
def remove_avatar?
staff?
end
def subscribe? def subscribe?
admin? admin?
end end

@ -14,6 +14,14 @@
%th= t('admin.accounts.display_name') %th= t('admin.accounts.display_name')
%td= @account.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? - if @account.local?
%tr %tr
%th= t('admin.accounts.role') %th= t('admin.accounts.role')

@ -60,6 +60,7 @@ en:
destroyed_msg: Moderation note successfully destroyed! destroyed_msg: Moderation note successfully destroyed!
accounts: accounts:
are_you_sure: Are you sure? are_you_sure: Are you sure?
avatar: Avatar
by_domain: Domain by_domain: Domain
confirm: Confirm confirm: Confirm
confirmed: Confirmed confirmed: Confirmed
@ -108,6 +109,7 @@ en:
public: Public public: Public
push_subscription_expires: PuSH subscription expires push_subscription_expires: PuSH subscription expires
redownload: Refresh avatar redownload: Refresh avatar
remove_avatar: Remove avatar
reset: Reset reset: Reset
reset_password: Reset password reset_password: Reset password
resubscribe: Resubscribe resubscribe: Resubscribe
@ -150,6 +152,7 @@ en:
enable_user: "%{name} enabled login for user %{target}" enable_user: "%{name} enabled login for user %{target}"
memorialize_account: "%{name} turned %{target}'s account into a memoriam page" memorialize_account: "%{name} turned %{target}'s account into a memoriam page"
promote_user: "%{name} promoted user %{target}" promote_user: "%{name} promoted user %{target}"
remove_avatar_user: "%{name} removed %{target}'s avatar"
reset_password_user: "%{name} reset password of user %{target}" reset_password_user: "%{name} reset password of user %{target}"
resolve_report: "%{name} dismissed report %{target}" resolve_report: "%{name} dismissed report %{target}"
silence_account: "%{name} silenced %{target}'s account" silence_account: "%{name} silenced %{target}'s account"

@ -144,6 +144,7 @@ Rails.application.routes.draw do
post :enable post :enable
post :disable post :disable
post :redownload post :redownload
post :remove_avatar
post :memorialize post :memorialize
end end

Loading…
Cancel
Save