mirror of
https://github.com/discourse/discourse.git
synced 2024-12-14 18:53:43 +08:00
30990006a9
This reduces chances of errors where consumers of strings mutate inputs and reduces memory usage of the app. Test suite passes now, but there may be some stuff left, so we will run a few sites on a branch prior to merging
74 lines
1.7 KiB
Ruby
74 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class PostJobsEnqueuer
|
|
def initialize(post, topic, new_topic, opts = {})
|
|
@post = post
|
|
@topic = topic
|
|
@new_topic = new_topic
|
|
@opts = opts
|
|
end
|
|
|
|
def enqueue_jobs
|
|
# We need to enqueue jobs after the transaction.
|
|
# Otherwise they might begin before the data has been comitted.
|
|
enqueue_post_alerts unless @opts[:import_mode]
|
|
feature_topic_users unless @opts[:import_mode]
|
|
trigger_post_post_process
|
|
|
|
unless skip_after_create?
|
|
after_post_create
|
|
after_topic_create
|
|
end
|
|
|
|
if @topic.private_message?
|
|
TopicTrackingState.publish_private_message(@topic, post: @post)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def enqueue_post_alerts
|
|
Jobs.enqueue(:post_alert,
|
|
post_id: @post.id,
|
|
new_record: true,
|
|
options: @opts[:post_alert_options],
|
|
)
|
|
end
|
|
|
|
def feature_topic_users
|
|
Jobs.enqueue(:feature_topic_users, topic_id: @topic.id)
|
|
end
|
|
|
|
def trigger_post_post_process
|
|
@post.trigger_post_process(new_post: true)
|
|
end
|
|
|
|
def after_post_create
|
|
TopicTrackingState.publish_unread(@post) if @post.post_number > 1
|
|
TopicTrackingState.publish_latest(@topic, @post.whisper?)
|
|
|
|
Jobs.enqueue_in(SiteSetting.email_time_window_mins.minutes,
|
|
:notify_mailing_list_subscribers,
|
|
post_id: @post.id,
|
|
)
|
|
end
|
|
|
|
def after_topic_create
|
|
return unless @new_topic
|
|
# Don't publish invisible topics
|
|
return unless @topic.visible?
|
|
|
|
@topic.posters = @topic.posters_summary
|
|
@topic.posts_count = 1
|
|
|
|
TopicTrackingState.publish_new(@topic)
|
|
end
|
|
|
|
def skip_after_create?
|
|
@opts[:import_mode] ||
|
|
@topic.private_message? ||
|
|
@post.post_type == Post.types[:moderator_action] ||
|
|
@post.post_type == Post.types[:small_action]
|
|
end
|
|
end
|