2
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2025-09-06 10:50:21 +08:00

Allow deletion of a post belonging to a deleted topic, so that users can be destroyed

This commit is contained in:
Neil Lalonde 2013-07-23 11:50:58 -04:00
parent adf7c9ad06
commit cf102be953
2 changed files with 48 additions and 20 deletions

View file

@ -53,26 +53,25 @@ class PostDestroyer
# When a post is properly deleted. Well, it's still soft deleted, but it will no longer
# show up in the topic
def staff_destroyed
# the topic may be trashed, skip it
return unless @post.topic
Post.transaction do
# Update the last post id to the previous post if it exists
last_post = Post.where("topic_id = ? and id <> ?", @post.topic_id, @post.id).order('created_at desc').limit(1).first
if last_post.present?
@post.topic.update_attributes(last_posted_at: last_post.created_at,
last_post_user_id: last_post.user_id,
highest_post_number: last_post.post_number)
if @post.topic
# Update the last post id to the previous post if it exists
last_post = Post.where("topic_id = ? and id <> ?", @post.topic_id, @post.id).order('created_at desc').limit(1).first
if last_post.present?
@post.topic.update_attributes(last_posted_at: last_post.created_at,
last_post_user_id: last_post.user_id,
highest_post_number: last_post.post_number)
# If the poster doesn't have any other posts in the topic, clear their posted flag
unless Post.exists?(["topic_id = ? and user_id = ? and id <> ?", @post.topic_id, @post.user_id, @post.id])
TopicUser.where(topic_id: @post.topic_id, user_id: @post.user_id).update_all 'posted = false'
# If the poster doesn't have any other posts in the topic, clear their posted flag
unless Post.exists?(["topic_id = ? and user_id = ? and id <> ?", @post.topic_id, @post.user_id, @post.id])
TopicUser.where(topic_id: @post.topic_id, user_id: @post.user_id).update_all 'posted = false'
end
end
end
# Feature users in the topic
Jobs.enqueue(:feature_topic_users, topic_id: @post.topic_id, except_post_id: @post.id)
# Feature users in the topic
Jobs.enqueue(:feature_topic_users, topic_id: @post.topic_id, except_post_id: @post.id)
end
@post.post_actions.each do |pa|
pa.trash!(@user)
@ -83,7 +82,7 @@ class PostDestroyer
@post.trash!(@user)
Topic.reset_highest(@post.topic_id)
Topic.reset_highest(@post.topic_id) if @post.topic
@post.update_flagged_posts_count
@ -98,7 +97,7 @@ class PostDestroyer
# Remove any notifications that point to this deleted post
Notification.delete_all topic_id: @post.topic_id, post_number: @post.post_number
@post.topic.trash!(@user) if @post.post_number == 1
@post.topic.trash!(@user) if @post.topic and @post.post_number == 1
end
end