mirror of
https://github.com/discourse/discourse.git
synced 2026-08-03 01:49:44 -05:00
FIX: Complete protection for potentially illegal reviewables on post deletion (#37536)
This is a follow-up to fd04f690.
The original commit only protected potentially illegal reviewables from
being auto-approved in one code path (direct post deletion). However,
when deleting a post through a reviewable action with
`notify_users_after_responses_deleted_on_flagged_post` enabled, the code
would still call `#ignore` on any flagged reply posts without checking
`#potentially_illegal?`.
This commit is contained in:
+29
-16
@@ -238,22 +238,7 @@ class PostDestroyer
|
||||
DB.after_commit do
|
||||
Topic.reset_highest(@post.topic_id)
|
||||
|
||||
if @opts[:reviewable]
|
||||
notify_deletion(
|
||||
@opts[:reviewable],
|
||||
{ notify_responders: @opts[:notify_responders], parent_post: @opts[:parent_post] },
|
||||
)
|
||||
if @post.reviewable_flag &&
|
||||
SiteSetting.notify_users_after_responses_deleted_on_flagged_post
|
||||
ignore(@post.reviewable_flag)
|
||||
end
|
||||
elsif reviewable = @post.reviewable_flag
|
||||
if @opts[:defer_flags]
|
||||
ignore(reviewable)
|
||||
else
|
||||
agree(reviewable) unless reviewable.potentially_illegal?
|
||||
end
|
||||
end
|
||||
handle_reviewable_after_deletion
|
||||
end
|
||||
end
|
||||
|
||||
@@ -403,6 +388,34 @@ class PostDestroyer
|
||||
reviewable.transition_to(:ignored, @user)
|
||||
end
|
||||
|
||||
def handle_reviewable_after_deletion
|
||||
if @opts[:reviewable]
|
||||
handle_explicit_reviewable
|
||||
elsif @post.reviewable_flag
|
||||
handle_post_reviewable_flag
|
||||
end
|
||||
end
|
||||
|
||||
def handle_explicit_reviewable
|
||||
notify_deletion(
|
||||
@opts[:reviewable],
|
||||
{ notify_responders: @opts[:notify_responders], parent_post: @opts[:parent_post] },
|
||||
)
|
||||
|
||||
return unless @post.reviewable_flag
|
||||
return unless SiteSetting.notify_users_after_responses_deleted_on_flagged_post
|
||||
return if @post.reviewable_flag.potentially_illegal?
|
||||
|
||||
ignore(@post.reviewable_flag)
|
||||
end
|
||||
|
||||
def handle_post_reviewable_flag
|
||||
return ignore(@post.reviewable_flag) if @opts[:defer_flags]
|
||||
return if @post.reviewable_flag.potentially_illegal?
|
||||
|
||||
agree(@post.reviewable_flag)
|
||||
end
|
||||
|
||||
def notify_deletion(reviewable, options = {})
|
||||
return if @post.user.blank?
|
||||
|
||||
|
||||
@@ -1097,6 +1097,19 @@ RSpec.describe PostDestroyer do
|
||||
}
|
||||
expect(Jobs::SendSystemMessage.jobs).to be_empty
|
||||
end
|
||||
|
||||
context "when deleting a reply with a reviewable option and notify_users_after_responses_deleted_on_flagged_post enabled" do
|
||||
let(:parent_reviewable) { flag_result.reviewable }
|
||||
let(:reply_reviewable) { second_post.reviewable_flag }
|
||||
|
||||
before { SiteSetting.notify_users_after_responses_deleted_on_flagged_post = true }
|
||||
|
||||
it "does not ignore a potentially illegal flag on the reply" do
|
||||
expect {
|
||||
PostDestroyer.new(moderator, second_post, reviewable: parent_reviewable).destroy
|
||||
}.not_to change { reply_reviewable.reload.pending? }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "when custom flags" do
|
||||
|
||||
Reference in New Issue
Block a user