mirror of
https://github.com/discourse/discourse.git
synced 2024-12-01 05:04:22 +08:00
f75a99e932
When a topic was published from a shared draft and it had tags, the users watching the tags were not notified. The problem was that the topics are usually created in a secret category and publishing it just moves an existent topic to the target category, without making any changes to the tags.
63 lines
1.5 KiB
Ruby
63 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class TopicPublisher
|
|
|
|
def initialize(topic, published_by, category_id)
|
|
@topic = topic
|
|
@published_by = published_by
|
|
@category_id = category_id
|
|
end
|
|
|
|
def publish!
|
|
published_at = Time.zone.now
|
|
|
|
TopicTimestampChanger.new(timestamp: published_at, topic: @topic).change! do
|
|
if @topic.private_message?
|
|
@topic = TopicConverter.new(@topic, @published_by)
|
|
.convert_to_public_topic(@category_id)
|
|
else
|
|
PostRevisor.new(@topic.first_post, @topic).revise!(@published_by,
|
|
category_id: @category_id,
|
|
)
|
|
end
|
|
|
|
@topic.update_columns(visible: true)
|
|
|
|
StaffActionLogger.new(@published_by).log_topic_published(@topic)
|
|
|
|
# Clean up any publishing artifacts
|
|
SharedDraft.where(topic: @topic).delete_all
|
|
|
|
TopicTimer.where(topic: @topic).update_all(
|
|
deleted_at: DateTime.now,
|
|
deleted_by_id: @published_by.id
|
|
)
|
|
|
|
op = @topic.first_post
|
|
|
|
if op.present?
|
|
op.revisions.destroy_all
|
|
|
|
op.update_columns(
|
|
version: 1,
|
|
public_version: 1,
|
|
last_version_at: published_at
|
|
)
|
|
end
|
|
end
|
|
|
|
Jobs.enqueue(
|
|
:notify_tag_change,
|
|
post_id: @topic.first_post.id,
|
|
notified_user_ids: [@topic.first_post.user_id, @published_by.id].uniq,
|
|
diff_tags: @topic.tags.map(&:name),
|
|
force: true,
|
|
)
|
|
|
|
MessageBus.publish("/topic/#{@topic.id}", reload_topic: true, refresh_stream: true)
|
|
|
|
@topic
|
|
end
|
|
|
|
end
|