mirror of
https://github.com/discourse/discourse.git
synced 2025-06-03 19:39:30 +08:00
FIX: Unread topics not clearing when whisper is last post (#8271)
Meta thread: https://meta.discourse.org/t/cant-dismiss-unread-if-last-post-is-an-assign-or-whisper/131823/7 * when sending a whisper, the highest_staff_post_number is set in the next_post_number method for a Topic, but the highest_post_number is left alone. this leaves a situation where highest_staff_post_number is > highest_post_number * when TopicsBulkAction#dismiss_posts was run, it was only setting the topic_user highest_seen_post_number using the highest_post_number from the topic, so if the user was staff and the last post in a topic was a whisper their highest seen number was not set, and the topic stayed unread Found through testing that the bug wasn't to do with Assign/Unassign as they do not affect the post numbers, only whispering does.
This commit is contained in:
@ -68,9 +68,10 @@ class TopicsBulkAction
|
||||
end
|
||||
|
||||
def dismiss_posts
|
||||
highest_number_source_column = @user.staff? ? 'highest_staff_post_number' : 'highest_post_number'
|
||||
sql = <<~SQL
|
||||
UPDATE topic_users tu
|
||||
SET highest_seen_post_number = t.highest_post_number , last_read_post_number = highest_post_number
|
||||
SET highest_seen_post_number = t.#{highest_number_source_column} , last_read_post_number = t.#{highest_number_source_column}
|
||||
FROM topics t
|
||||
WHERE t.id = tu.topic_id AND tu.user_id = :user_id AND t.id IN (:topic_ids)
|
||||
SQL
|
||||
|
Reference in New Issue
Block a user