From a0f59a55ccc75678703e34748b58d9531f4254e1 Mon Sep 17 00:00:00 2001 From: Krzysztof Kotlarek Date: Tue, 31 Mar 2020 16:19:47 +1100 Subject: [PATCH] FIX: when a post is moved copy notifications level (#9311) This is a revert of https://github.com/discourse/discourse/commit/2c011252f1c0443965ca5317169550083a43c657 More information on meta: https://meta.discourse.org/t/when-a-reply-is-moved-to-a-new-topic-the-followers-of-the-previous-topic-are-automatically-follower-of-the-new-topic-as-well/130025 --- app/models/post_mover.rb | 23 +++++++++-------------- spec/models/post_mover_spec.rb | 4 ++-- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/app/models/post_mover.rb b/app/models/post_mover.rb index 1037c3ff00e..0e36834ac88 100644 --- a/app/models/post_mover.rb +++ b/app/models/post_mover.rb @@ -332,8 +332,7 @@ class PostMover old_topic_id: original_topic.id, new_topic_id: destination_topic.id, old_highest_post_number: destination_topic.highest_post_number, - old_highest_staff_post_number: destination_topic.highest_staff_post_number, - default_notification_level: NotificationLevels.topic_levels[:regular] + old_highest_staff_post_number: destination_topic.highest_staff_post_number } DB.exec(<<~SQL, params) @@ -342,9 +341,13 @@ class PostMover notifications_changed_at, notifications_reason_id) SELECT tu.user_id, :new_topic_id AS topic_id, - CASE - WHEN p.user_id IS NULL THEN FALSE - ELSE TRUE END AS posted, + EXISTS( + SELECT 1 + FROM posts p + WHERE p.topic_id = :new_topic_id + AND p.user_id = tu.user_id + LIMIT 1 + ) AS posted, ( SELECT MAX(lr.new_post_number) FROM moved_posts lr @@ -365,19 +368,11 @@ class PostMover ) AS last_emailed_post_number, GREATEST(tu.first_visited_at, t.created_at) AS first_visited_at, GREATEST(tu.last_visited_at, t.created_at) AS last_visited_at, - CASE - WHEN p.user_id IS NOT NULL THEN tu.notification_level - ELSE :default_notification_level END AS notification_level, + tu.notification_level, tu.notifications_changed_at, tu.notifications_reason_id FROM topic_users tu JOIN topics t ON (t.id = :new_topic_id) - LEFT OUTER JOIN - ( - SELECT DISTINCT user_id - FROM posts - WHERE topic_id = :new_topic_id - ) p ON (p.user_id = tu.user_id) WHERE tu.topic_id = :old_topic_id AND GREATEST( tu.last_read_post_number, diff --git a/spec/models/post_mover_spec.rb b/spec/models/post_mover_spec.rb index d198e2d33cd..aebfefe12d0 100644 --- a/spec/models/post_mover_spec.rb +++ b/spec/models/post_mover_spec.rb @@ -470,7 +470,7 @@ describe PostMover do last_read_post_number: 2, highest_seen_post_number: 2, last_emailed_post_number: 2, - notification_level: TopicUser.notification_levels[:regular], + notification_level: TopicUser.notification_levels[:tracking], posted: false ) expect(TopicUser.find_by(topic: new_topic, user: user2)) @@ -486,7 +486,7 @@ describe PostMover do last_read_post_number: 1, highest_seen_post_number: 2, last_emailed_post_number: 2, - notification_level: TopicUser.notification_levels[:regular], + notification_level: TopicUser.notification_levels[:watching], posted: false ) end