Просмотр исходного кода

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

master^2
Eugen Rochko 4 лет назад
committed by GitHub
Родитель
Сommit
73ca0bb925
Не найден GPG ключ соответствующий данной подписи Идентификатор GPG ключа: 4AEE18F83AFDEB23
12 измененных файлов: 85 добавлений и 14 удалений
  1. +2
    -2
      app/controllers/admin/account_actions_controller.rb
  2. +7
    -0
      app/javascript/styles/mailer.scss
  3. +3
    -1
      app/mailers/user_mailer.rb
  4. +16
    -6
      app/models/admin/account_action.rb
  5. +4
    -0
      app/views/admin/account_actions/new.html.haml
  6. +7
    -1
      app/views/notification_mailer/_status.html.haml
  7. +26
    -1
      app/views/user_mailer/warning.html.haml
  8. +13
    -0
      app/views/user_mailer/warning.text.erb
  9. +2
    -0
      config/locales/en.yml
  10. +2
    -0
      config/locales/simple_form.en.yml
  11. +1
    -1
      spec/mailers/previews/user_mailer_preview.rb
  12. +2
    -2
      spec/models/admin/account_action_spec.rb

+ 2
- 2
app/controllers/admin/account_actions_controller.rb Просмотреть файл

@@ -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

+ 7
- 0
app/javascript/styles/mailer.scss Просмотреть файл

@@ -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;


+ 3
- 1
app/mailers/user_mailer.rb Просмотреть файл

@@ -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,


+ 16
- 6
app/models/admin/account_action.rb Просмотреть файл

@@ -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


+ 4
- 0
app/views/admin/account_actions/new.html.haml Просмотреть файл

@@ -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?


+ 7
- 1
app/views/notification_mailer/_status.html.haml Просмотреть файл

@@ -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}")

+ 26
- 1
app/views/user_mailer/warning.html.haml Просмотреть файл

@@ -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

+ 13
- 0
app/views/user_mailer/warning.text.erb Просмотреть файл

@@ -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 %>

+ 2
- 0
config/locales/en.yml Просмотреть файл

@@ -1115,7 +1115,9 @@ en:
disable: While your account is frozen, your account data remains intact, but you cannot perform any actions until it is unlocked.
silence: While your account is limited, only people who are already following you will see your toots on this server, and you may be excluded from various public listings. However, others may still manually follow you.
suspend: Your account has been suspended, and all of your toots and your uploaded media files have been irreversibly removed from this server, and servers where you had followers.
get_in_touch: You can reply to this e-mail to get in touch with the staff of %{instance}.
review_server_policies: Review server policies
statuses: 'Specifically, for:'
subject:
disable: Your account %{acct} has been frozen
none: Warning for %{acct}


+ 2
- 0
config/locales/simple_form.en.yml Просмотреть файл

@@ -5,6 +5,7 @@ en:
account_warning_preset:
text: You can use toot syntax, such as URLs, hashtags and mentions
admin_account_action:
include_statuses: The user will see which toots have caused the moderation action or warning
send_email_notification: The user will receive an explanation of what happened with their account
text_html: Optional. You can use toot syntax. You can <a href="%{path}">add warning presets</a> to save time
type_html: Choose what to do with <strong>%{acct}</strong>
@@ -60,6 +61,7 @@ en:
account_warning_preset:
text: Preset text
admin_account_action:
include_statuses: Include reported toots in the e-mail
send_email_notification: Notify the user per e-mail
text: Custom warning
type: Action


+ 1
- 1
spec/mailers/previews/user_mailer_preview.rb Просмотреть файл

@@ -42,6 +42,6 @@ class UserMailerPreview < ActionMailer::Preview

# Preview this email at http://localhost:3000/rails/mailers/user_mailer/warning
def warning
UserMailer.warning(User.first, AccountWarning.new(text: '', action: :silence))
UserMailer.warning(User.first, AccountWarning.new(text: '', action: :silence), [Status.first.id])
end
end

+ 2
- 2
spec/models/admin/account_action_spec.rb Просмотреть файл

@@ -58,8 +58,8 @@ RSpec.describe Admin::AccountAction, type: :model do
end.to change { Admin::ActionLog.count }.by 1
end

it 'calls queue_email!' do
expect(account_action).to receive(:queue_email!)
it 'calls process_email!' do
expect(account_action).to receive(:process_email!)
subject
end



Загрузка…
Отмена
Сохранить