diff --git a/app/controllers/admin/reports/actions_controller.rb b/app/controllers/admin/reports/actions_controller.rb index fb7b6878bae..2f9a3a2220a 100644 --- a/app/controllers/admin/reports/actions_controller.rb +++ b/app/controllers/admin/reports/actions_controller.rb @@ -6,6 +6,7 @@ class Admin::Reports::ActionsController < Admin::BaseController def preview authorize @report, :show? @moderation_action = action_from_button + @statuses = @report.statuses.includes(:application, :media_attachments) end def create diff --git a/app/models/report.rb b/app/models/report.rb index 17c1503436f..b2328139e80 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -79,6 +79,10 @@ class Report < ApplicationRecord Status.with_discarded.where(id: status_ids) end + def deleted_status_ids + status_ids.difference(statuses.pluck(:id)) + end + def media_attachments_count statuses_to_query = [] count = 0 diff --git a/app/views/admin/reports/actions/_deleted_status.html.haml b/app/views/admin/reports/actions/_deleted_status.html.haml new file mode 100644 index 00000000000..54be169e383 --- /dev/null +++ b/app/views/admin/reports/actions/_deleted_status.html.haml @@ -0,0 +1,4 @@ +.strike-card__statuses-list__item + .one-liner= t('disputes.strikes.status', id: status_id) + .strike-card__statuses-list__item__meta + = t('disputes.strikes.status_removed') diff --git a/app/views/admin/reports/actions/_status.html.haml b/app/views/admin/reports/actions/_status.html.haml new file mode 100644 index 00000000000..dd2cb04cc4b --- /dev/null +++ b/app/views/admin/reports/actions/_status.html.haml @@ -0,0 +1,13 @@ +.strike-card__statuses-list__item + .one-liner + .emojify= one_line_preview(status) + - status.ordered_media_attachments.each do |media| + %abbr{ title: media.description } + = material_symbol 'link' + = media.file_file_name + .strike-card__statuses-list__item__meta + = link_to ActivityPub::TagManager.instance.url_for(status), target: '_blank', rel: 'noopener' do + %time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at) + - if status.application.present? + · + = status.application.name diff --git a/app/views/admin/reports/actions/preview.html.haml b/app/views/admin/reports/actions/preview.html.haml index 5a90bf1b8f6..85486b70653 100644 --- a/app/views/admin/reports/actions/preview.html.haml +++ b/app/views/admin/reports/actions/preview.html.haml @@ -50,28 +50,8 @@ %strong= t('user_mailer.warning.statuses') .strike-card__statuses-list - - status_map = @report.statuses.includes(:application, :media_attachments).index_by(&:id) - - - @report.status_ids.each do |status_id| - .strike-card__statuses-list__item - - if (status = status_map[status_id.to_i]) - .one-liner - .emojify= one_line_preview(status) - - - status.ordered_media_attachments.each do |media_attachment| - %abbr{ title: media_attachment.description } - = material_symbol 'link' - = media_attachment.file_file_name - .strike-card__statuses-list__item__meta - = link_to ActivityPub::TagManager.instance.url_for(status), target: '_blank', rel: 'noopener' do - %time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at) - - unless status.application.nil? - · - = status.application.name - - else - .one-liner= t('disputes.strikes.status', id: status_id) - .strike-card__statuses-list__item__meta - = t('disputes.strikes.status_removed') + = render partial: 'status', collection: @statuses + = render partial: 'deleted_status', collection: @report.deleted_status_ids, as: :status_id %hr.spacer/ diff --git a/spec/models/report_spec.rb b/spec/models/report_spec.rb index 0bee7dfed1d..781f3dc5dd4 100644 --- a/spec/models/report_spec.rb +++ b/spec/models/report_spec.rb @@ -13,6 +13,17 @@ RSpec.describe Report do end end + describe '#deleted_status_ids' do + let!(:status) { Fabricate :status } + let(:report) { Fabricate.build :report, status_ids: [deleted, status.id] } + let(:deleted) { 123_123_123 } + + it 'returns ids of stored statuses which no longer exist' do + expect(report.deleted_status_ids) + .to contain_exactly(deleted) + end + end + describe 'media_attachments_count' do it 'returns count of media attachments in statuses' do status1 = Fabricate(:status, ordered_media_attachment_ids: [1, 2])