diff --git a/app/models/post.rb b/app/models/post.rb index 5e220246135..ac1a9659c8a 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -117,7 +117,8 @@ class Post < ActiveRecord::Base flag_threshold_reached_again: 2, new_user_spam_threshold_reached: 3, flagged_by_tl3_user: 4, - email_spam_header_found: 5) + email_spam_header_found: 5, + flagged_by_tl4_user: 6) end def self.types diff --git a/app/models/post_action.rb b/app/models/post_action.rb index 1f0fe2ddcce..2fc39f6f2af 100644 --- a/app/models/post_action.rb +++ b/app/models/post_action.rb @@ -583,13 +583,19 @@ class PostAction < ActiveRecord::Base hide_post!(post, post_action_type, Post.hidden_reasons[:flagged_by_tl3_user]) - elsif PostActionType.auto_action_flag_types.include?(post_action_type) && - SiteSetting.flags_required_to_hide_post > 0 + elsif PostActionType.auto_action_flag_types.include?(post_action_type) - _old_flags, new_flags = PostAction.flag_counts_for(post.id) + if acting_user.has_trust_level?(TrustLevel[4]) && + post.user&.trust_level != TrustLevel[4] - if new_flags >= SiteSetting.flags_required_to_hide_post - hide_post!(post, post_action_type, guess_hide_reason(post)) + hide_post!(post, post_action_type, Post.hidden_reasons[:flagged_by_tl4_user]) + elsif SiteSetting.flags_required_to_hide_post > 0 + + _old_flags, new_flags = PostAction.flag_counts_for(post.id) + + if new_flags >= SiteSetting.flags_required_to_hide_post + hide_post!(post, post_action_type, guess_hide_reason(post)) + end end end end diff --git a/spec/models/post_action_spec.rb b/spec/models/post_action_spec.rb index c8f5d50f24f..adaa78f1227 100644 --- a/spec/models/post_action_spec.rb +++ b/spec/models/post_action_spec.rb @@ -501,6 +501,37 @@ describe PostAction do expect(post.hidden_reason_id).to eq(Post.hidden_reasons[:flagged_by_tl3_user]) end + it "hide non-tl4 posts that are flagged by a tl4 user" do + SiteSetting.site_contact_username = admin.username + + post_action_type = PostActionType.types[:spam] + tl4_user = Fabricate(:trust_level_4) + + user = Fabricate(:leader) + post = create_post(user: user) + + PostAction.act(tl4_user, post, post_action_type) + + post.reload + + expect(post.hidden).to be_truthy + expect(post.hidden_at).to be_present + expect(post.hidden_reason_id).to eq(Post.hidden_reasons[:flagged_by_tl4_user]) + + post = create_post(user: user) + PostAction.act(Fabricate(:leader), post, post_action_type) + post.reload + + expect(post.hidden).to be_falsey + + user = Fabricate(:trust_level_4) + post = create_post(user: user) + PostAction.act(tl4_user, post, post_action_type) + post.reload + + expect(post.hidden).to be_falsey + end + it "can flag the topic instead of a post" do post1 = create_post _post2 = create_post(topic: post1.topic)