modreports: log modaction when report is handled or rejected.

This commit is contained in:
evazion
2022-01-20 21:28:29 -06:00
parent c8d27c2719
commit 5fd0d498a4
8 changed files with 22 additions and 3 deletions

View File

@@ -32,7 +32,7 @@ class ModerationReportsController < ApplicationController
def update
@moderation_report = authorize ModerationReport.find(params[:id])
@moderation_report.update(permitted_attributes(@moderation_report))
@moderation_report.update(updater: CurrentUser.user, **permitted_attributes(@moderation_report))
flash.now[:notice] = @moderation_report.valid? ? "Report updated" : @moderation_report.errors.full_messages.join("; ")
respond_with(@moderation_report)

View File

@@ -84,7 +84,7 @@ class Comment < ApplicationRecord
return unless Pundit.policy!(updater, ModerationReport).update?
return unless moderation_reports.pending.present? && is_deleted_change == [false, true]
moderation_reports.pending.update!(status: :handled)
moderation_reports.pending.update!(status: :handled, updater: updater)
end
def quoted_response

View File

@@ -162,7 +162,7 @@ class ForumPost < ApplicationRecord
def handle_reports_on_deletion
return unless moderation_reports.pending.present? && is_deleted_change == [false, true]
moderation_reports.pending.update!(status: :handled)
moderation_reports.pending.update!(status: :handled, updater: updater)
end
def async_send_discord_notification

View File

@@ -52,6 +52,8 @@ class ModAction < ApplicationRecord
forum_topic_lock: 206,
forum_post_update: 101,
forum_post_delete: 102,
moderation_report_handled: 306,
moderation_report_rejected: 307,
tag_alias_create: 120,
tag_alias_update: 121, # XXX unused
tag_alias_delete: 122,

View File

@@ -3,6 +3,8 @@
class ModerationReport < ApplicationRecord
MODEL_TYPES = %w[Dmail Comment ForumPost]
attr_accessor :updater
belongs_to :model, polymorphic: true
belongs_to :creator, class_name: "User"
@@ -13,6 +15,7 @@ class ModerationReport < ApplicationRecord
after_create :create_forum_post!
after_create :autoban_reported_user
after_save :notify_reporter
after_save :create_modaction
scope :dmail, -> { where(model_type: "Dmail") }
scope :comment, -> { where(model_type: "Comment") }
@@ -89,6 +92,16 @@ class ModerationReport < ApplicationRecord
EOS
end
def create_modaction
return unless saved_change_to_status? && status != :pending
if handled?
ModAction.log("handled modreport ##{id}", :moderation_report_handled, updater)
elsif rejected?
ModAction.log("rejected modreport ##{id}", :moderation_report_rejected, updater)
end
end
def reported_user
case model
when Comment, ForumPost

View File

@@ -254,6 +254,7 @@ class CommentsControllerTest < ActionDispatch::IntegrationTest
assert_equal(true, @comment.reload.is_deleted)
assert_equal(true, report1.reload.handled?)
assert_equal(true, report2.reload.rejected?)
assert_equal(1, ModAction.moderation_report_handled.where(creator: @mod).count)
end
end

View File

@@ -239,6 +239,7 @@ class ForumPostsControllerTest < ActionDispatch::IntegrationTest
assert_equal(true, @forum_post.reload.is_deleted?)
assert_equal(true, report1.reload.handled?)
assert_equal(true, report2.reload.rejected?)
assert_equal(1, ModAction.moderation_report_handled.where(creator: @mod).count)
end
end

View File

@@ -120,6 +120,7 @@ class ModerationReportsControllerTest < ActionDispatch::IntegrationTest
assert_response :success
assert_equal("handled", report.reload.status)
assert_equal(true, @user.dmails.received.exists?(from: User.system, title: "Thank you for reporting comment ##{@comment.id}"))
assert_equal(true, ModAction.moderation_report_handled.where(creator: @mod).exists?)
end
should "allow a moderator to mark a moderation report as rejected" do
@@ -129,6 +130,7 @@ class ModerationReportsControllerTest < ActionDispatch::IntegrationTest
assert_response :success
assert_equal("rejected", report.reload.status)
assert_equal(false, @user.dmails.received.exists?(from: User.system))
assert_equal(true, ModAction.moderation_report_rejected.where(creator: @mod).exists?)
end
end
end