Add option to include reported statuses in warning e-mail (#11639)

This commit is contained in:
Eugen Rochko
2019-08-23 22:37:23 +02:00
committed by GitHub
parent 37f612074e
commit 73ca0bb925
12 changed files with 85 additions and 14 deletions

View File

@ -5,7 +5,7 @@ module Admin
before_action :set_account
def new
@account_action = Admin::AccountAction.new(type: params[:type], report_id: params[:report_id], send_email_notification: true)
@account_action = Admin::AccountAction.new(type: params[:type], report_id: params[:report_id], send_email_notification: true, include_statuses: true)
@warning_presets = AccountWarningPreset.all
end
@ -30,7 +30,7 @@ module Admin
end
def resource_params
params.require(:admin_account_action).permit(:type, :report_id, :warning_preset_id, :text, :send_email_notification)
params.require(:admin_account_action).permit(:type, :report_id, :warning_preset_id, :text, :send_email_notification, :include_statuses)
end
end
end

View File

@ -457,6 +457,13 @@ h5 {
.status {
padding-bottom: 32px;
&--highlighted {
border: 1px solid lighten($ui-base-color, 8%);
border-radius: 4px;
padding-bottom: 16px;
margin-bottom: 16px;
}
.status-header {
td {
font-size: 14px;

View File

@ -5,6 +5,7 @@ class UserMailer < Devise::Mailer
helper :application
helper :instance
helper :statuses
add_template_helper RoutingHelper
@ -79,10 +80,11 @@ class UserMailer < Devise::Mailer
end
end
def warning(user, warning)
def warning(user, warning, status_ids = nil)
@resource = user
@warning = warning
@instance = Rails.configuration.x.local_domain
@statuses = Status.where(id: status_ids).includes(:account) if status_ids.is_a?(Array)
I18n.with_locale(@resource.locale || I18n.default_locale) do
mail to: @resource.email,

View File

@ -19,20 +19,25 @@ class Admin::AccountAction
:report_id,
:warning_preset_id
attr_reader :warning, :send_email_notification
attr_reader :warning, :send_email_notification, :include_statuses
def send_email_notification=(value)
@send_email_notification = ActiveModel::Type::Boolean.new.cast(value)
end
def include_statuses=(value)
@include_statuses = ActiveModel::Type::Boolean.new.cast(value)
end
def save!
ApplicationRecord.transaction do
process_action!
process_warning!
end
queue_email!
process_email!
process_reports!
process_queue!
end
def report
@ -110,7 +115,6 @@ class Admin::AccountAction
authorize(target_account, :suspend?)
log_action(:suspend, target_account)
target_account.suspend!
queue_suspension_worker!
end
def text_for_warning
@ -121,16 +125,22 @@ class Admin::AccountAction
Admin::SuspensionWorker.perform_async(target_account.id)
end
def queue_email!
return unless warnable?
def process_queue!
queue_suspension_worker! if type == 'suspend'
end
UserMailer.warning(target_account.user, warning).deliver_later!
def process_email!
UserMailer.warning(target_account.user, warning, status_ids).deliver_now! if warnable?
end
def warnable?
send_email_notification && target_account.local?
end
def status_ids
@report.status_ids if @report && include_statuses
end
def warning_preset
@warning_preset ||= AccountWarningPreset.find(warning_preset_id) if warning_preset_id.present?
end

View File

@ -13,6 +13,10 @@
.fields-group
= f.input :send_email_notification, as: :boolean, wrapper: :with_label
- if params[:report_id].present?
.fields-group
= f.input :include_statuses, as: :boolean, wrapper: :with_label
%hr.spacer/
- unless @warning_presets.empty?

View File

@ -1,4 +1,5 @@
- i ||= 0
- highlighted ||= false
%table.email-table{ cellspacing: 0, cellpadding: 0, dir: 'ltr' }
%tbody
@ -14,7 +15,7 @@
%table.column{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.column-cell.padded.status
%td.column-cell.padded.status{ class: highlighted ? 'status--highlighted' : '' }
%table.status-header{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
@ -32,5 +33,10 @@
%div{ dir: rtl_status?(status) ? 'rtl' : 'ltr' }
= Formatter.instance.format(status)
- if status.media_attachments.size > 0
%p
- status.media_attachments.each do |a|
= link_to medium_url(a), medium_url(a)
%p.status-footer
= link_to l(status.created_at), web_url("statuses/#{status.id}")

View File

@ -42,6 +42,14 @@
- unless @warning.text.blank?
= Formatter.instance.linkify(@warning.text)
- unless @statuses.empty?
%p
%strong= t('user_mailer.warning.statuses')
- unless @statuses.empty?
- @statuses.each_with_index do |status, i|
= render 'notification_mailer/status', status: status, i: i + 1, highlighted: true
%table.email-table{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
@ -50,7 +58,7 @@
%table.content-section{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.content-cell
%td.content-cell{ class: @statuses.empty? ? '' : 'content-start' }
%table.column{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
@ -61,3 +69,20 @@
%td.button-primary
= link_to about_more_url do
%span= t 'user_mailer.warning.review_server_policies'
%table.email-table{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.email-body
.email-container
%table.content-section{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.content-cell
.email-row
.col-6
%table.column{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.column-cell.text-center
%p= t 'user_mailer.warning.get_in_touch', instance: @instance

View File

@ -7,3 +7,16 @@
<% end %>
<%= @warning.text %>
<% unless @statuses.empty? %>
<%= t('user_mailer.warning.statuses') %>
<% @statuses.each do |status| %>
<%= render 'notification_mailer/status', status: status %>
---
<% end %>
<% else %>
---
<% end %>
<%= t 'user_mailer.warning.get_in_touch', instance: @instance %>