mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-27 09:36:19 -05:00
FIX: hidden posts that are edited by the author and unhidden could not be flagged by the same users again
This commit is contained in:
parent
c064dc1322
commit
007326d3bd
5 changed files with 18 additions and 13 deletions
|
@ -346,7 +346,7 @@ class Post < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def unhide!
|
def unhide!
|
||||||
self.update_attributes(hidden: false, hidden_at: nil, hidden_reason_id: nil)
|
self.update_attributes(hidden: false)
|
||||||
self.topic.update_attributes(visible: true) if is_first_post?
|
self.topic.update_attributes(visible: true) if is_first_post?
|
||||||
save(validate: false)
|
save(validate: false)
|
||||||
publish_change_to_clients!(:acted)
|
publish_change_to_clients!(:acted)
|
||||||
|
|
|
@ -483,7 +483,7 @@ SQL
|
||||||
old_flags, new_flags = PostAction.flag_counts_for(post.id)
|
old_flags, new_flags = PostAction.flag_counts_for(post.id)
|
||||||
|
|
||||||
if new_flags >= SiteSetting.flags_required_to_hide_post
|
if new_flags >= SiteSetting.flags_required_to_hide_post
|
||||||
hide_post!(post, post_action_type, guess_hide_reason(old_flags))
|
hide_post!(post, post_action_type, guess_hide_reason(post))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -492,11 +492,14 @@ SQL
|
||||||
return if post.hidden
|
return if post.hidden
|
||||||
|
|
||||||
unless reason
|
unless reason
|
||||||
old_flags,_ = PostAction.flag_counts_for(post.id)
|
reason = guess_hide_reason(post)
|
||||||
reason = guess_hide_reason(old_flags)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
Post.where(id: post.id).update_all(["hidden = true, hidden_at = ?, hidden_reason_id = COALESCE(hidden_reason_id, ?)", Time.now, reason])
|
post.hidden = true
|
||||||
|
post.hidden_at = Time.zone.now
|
||||||
|
post.hidden_reason_id = reason
|
||||||
|
post.save
|
||||||
|
|
||||||
Topic.where("id = :topic_id AND NOT EXISTS(SELECT 1 FROM POSTS WHERE topic_id = :topic_id AND NOT hidden)", topic_id: post.topic_id).update_all(visible: false)
|
Topic.where("id = :topic_id AND NOT EXISTS(SELECT 1 FROM POSTS WHERE topic_id = :topic_id AND NOT hidden)", topic_id: post.topic_id).update_all(visible: false)
|
||||||
|
|
||||||
# inform user
|
# inform user
|
||||||
|
@ -510,8 +513,8 @@ SQL
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.guess_hide_reason(old_flags)
|
def self.guess_hide_reason(post)
|
||||||
old_flags > 0 ?
|
post.hidden_at ?
|
||||||
Post.hidden_reasons[:flag_threshold_reached_again] :
|
Post.hidden_reasons[:flag_threshold_reached_again] :
|
||||||
Post.hidden_reasons[:flag_threshold_reached]
|
Post.hidden_reasons[:flag_threshold_reached]
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
class PostDestroyer
|
class PostDestroyer
|
||||||
|
|
||||||
def self.destroy_old_hidden_posts
|
def self.destroy_old_hidden_posts
|
||||||
Post.where(deleted_at: nil)
|
Post.where(deleted_at: nil, hidden: true)
|
||||||
.where("hidden_at < ?", 30.days.ago)
|
.where("hidden_at < ?", 30.days.ago)
|
||||||
.find_each do |post|
|
.find_each do |post|
|
||||||
PostDestroyer.new(Discourse.system_user, post).destroy
|
PostDestroyer.new(Discourse.system_user, post).destroy
|
||||||
|
|
|
@ -232,7 +232,7 @@ class PostRevisor
|
||||||
@post.word_count = @fields[:raw].scan(/\w+/).size if @fields.has_key?(:raw)
|
@post.word_count = @fields[:raw].scan(/\w+/).size if @fields.has_key?(:raw)
|
||||||
@post.self_edits += 1 if self_edit?
|
@post.self_edits += 1 if self_edit?
|
||||||
|
|
||||||
clear_flags_and_unhide_post
|
remove_flags_and_unhide_post
|
||||||
|
|
||||||
@post.extract_quoted_post_numbers
|
@post.extract_quoted_post_numbers
|
||||||
|
|
||||||
|
@ -269,9 +269,11 @@ class PostRevisor
|
||||||
@editor == @post.user
|
@editor == @post.user
|
||||||
end
|
end
|
||||||
|
|
||||||
def clear_flags_and_unhide_post
|
def remove_flags_and_unhide_post
|
||||||
return unless editing_a_flagged_and_hidden_post?
|
return unless editing_a_flagged_and_hidden_post?
|
||||||
PostAction.clear_flags!(@post, Discourse.system_user)
|
@post.post_actions.where(post_action_type_id: PostActionType.flag_types.values).each do |action|
|
||||||
|
action.remove_act!(Discourse.system_user)
|
||||||
|
end
|
||||||
@post.unhide!
|
@post.unhide!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -345,8 +345,8 @@ describe PostAction do
|
||||||
post.reload
|
post.reload
|
||||||
|
|
||||||
expect(post.hidden).to eq(false)
|
expect(post.hidden).to eq(false)
|
||||||
expect(post.hidden_reason_id).to eq(nil)
|
expect(post.hidden_reason_id).to eq(Post.hidden_reasons[:flag_threshold_reached]) # keep most recent reason
|
||||||
expect(post.hidden_at).to be_blank
|
expect(post.hidden_at).to be_present # keep the most recent hidden_at time
|
||||||
expect(post.topic.visible).to eq(true)
|
expect(post.topic.visible).to eq(true)
|
||||||
|
|
||||||
PostAction.act(eviltrout, post, PostActionType.types[:spam])
|
PostAction.act(eviltrout, post, PostActionType.types[:spam])
|
||||||
|
|
Loading…
Reference in a new issue