FIX: Close topics deleted by users and ensure topic stubs are destroyed. (#7430)
This commit is contained in:
parent
1b7be1500f
commit
98a75906c8
|
@ -227,8 +227,8 @@ export default function transformPost(
|
||||||
}
|
}
|
||||||
|
|
||||||
if (postAtts.post_number === 1) {
|
if (postAtts.post_number === 1) {
|
||||||
postAtts.canRecoverTopic = topic.deleted_at && details.can_recover;
|
postAtts.canRecoverTopic = postAtts.isDeleted && details.can_recover;
|
||||||
postAtts.canDeleteTopic = !topic.deleted_at && details.can_delete;
|
postAtts.canDeleteTopic = !postAtts.isDeleted && details.can_delete;
|
||||||
postAtts.expandablePost = topic.expandable_first_post;
|
postAtts.expandablePost = topic.expandable_first_post;
|
||||||
} else {
|
} else {
|
||||||
postAtts.canRecover = postAtts.isDeleted && postAtts.canRecover;
|
postAtts.canRecover = postAtts.isDeleted && postAtts.canRecover;
|
||||||
|
|
|
@ -22,7 +22,7 @@ class PostDestroyer
|
||||||
WHERE t.deleted_at IS NOT NULL AND
|
WHERE t.deleted_at IS NOT NULL AND
|
||||||
t.id = posts.topic_id
|
t.id = posts.topic_id
|
||||||
)")
|
)")
|
||||||
.where("updated_at < ? AND post_number > 1", SiteSetting.delete_removed_posts_after.hours.ago)
|
.where("updated_at < ?", SiteSetting.delete_removed_posts_after.hours.ago)
|
||||||
.where("NOT EXISTS (
|
.where("NOT EXISTS (
|
||||||
SELECT 1
|
SELECT 1
|
||||||
FROM post_actions pa
|
FROM post_actions pa
|
||||||
|
@ -176,6 +176,7 @@ class PostDestroyer
|
||||||
Post.transaction do
|
Post.transaction do
|
||||||
@post.update_column(:user_deleted, true)
|
@post.update_column(:user_deleted, true)
|
||||||
@post.topic_links.each(&:destroy)
|
@post.topic_links.each(&:destroy)
|
||||||
|
@post.topic.update_column(:closed, true) if @post.is_first_post?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -186,6 +187,7 @@ class PostDestroyer
|
||||||
Post.transaction do
|
Post.transaction do
|
||||||
@post.update_column(:user_deleted, false)
|
@post.update_column(:user_deleted, false)
|
||||||
@post.skip_unique_check = true
|
@post.skip_unique_check = true
|
||||||
|
@post.topic.update_column(:closed, false) if @post.is_first_post?
|
||||||
end
|
end
|
||||||
|
|
||||||
# has internal transactions, if we nest then there are some very high risk deadlocks
|
# has internal transactions, if we nest then there are some very high risk deadlocks
|
||||||
|
|
|
@ -52,6 +52,16 @@ describe PostDestroyer do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'destroy_old_stubs' do
|
describe 'destroy_old_stubs' do
|
||||||
|
it 'destroys stubs for deleted by user topics' do
|
||||||
|
SiteSetting.delete_removed_posts_after = 24
|
||||||
|
|
||||||
|
PostDestroyer.new(post.user, post).destroy
|
||||||
|
post.update_column(:updated_at, 2.days.ago)
|
||||||
|
|
||||||
|
PostDestroyer.destroy_stubs
|
||||||
|
expect(post.reload.deleted_at).not_to eq(nil)
|
||||||
|
end
|
||||||
|
|
||||||
it 'destroys stubs for deleted by user posts' do
|
it 'destroys stubs for deleted by user posts' do
|
||||||
SiteSetting.delete_removed_posts_after = 24
|
SiteSetting.delete_removed_posts_after = 24
|
||||||
Fabricate(:admin)
|
Fabricate(:admin)
|
||||||
|
|
Loading…
Reference in New Issue