discourse/lib/post_jobs_enqueuer.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

89 lines
2.1 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
2014-02-17 14:57:37 +08:00
class PostJobsEnqueuer
def initialize(post, topic, new_topic, opts = {})
2014-02-17 14:57:37 +08:00
@post = post
@topic = topic
@new_topic = new_topic
@opts = opts
2014-02-17 14:57:37 +08:00
end
def enqueue_jobs
# We need to enqueue jobs after the transaction.
# Otherwise they might begin before the data has been committed.
2015-04-21 01:34:57 +08:00
enqueue_post_alerts unless @opts[:import_mode]
feature_topic_users unless @opts[:import_mode]
2014-02-17 14:57:37 +08:00
trigger_post_post_process
2015-04-21 01:34:57 +08:00
2014-02-17 14:57:37 +08:00
unless skip_after_create?
after_post_create
after_topic_create
make_visible
2014-02-17 14:57:37 +08:00
end
end
private
2015-04-21 01:34:57 +08:00
def enqueue_post_alerts
Jobs.enqueue(
:post_alert,
post_id: @post.id,
new_record: true,
options: @opts[:post_alert_options],
)
2015-04-21 01:34:57 +08:00
end
2014-02-17 14:57:37 +08:00
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)
2014-02-17 14:57:37 +08:00
end
def make_visible
return if @topic.private_message?
return unless SiteSetting.embed_unlisted?
return unless @post.post_number > 1
return if @topic.visible?
return if @post.post_type != Post.types[:regular]
Jobs.enqueue(:make_embedded_topic_visible, topic_id: @topic.id) if @topic.topic_embed.present?
end
2014-02-17 14:57:37 +08:00
def after_post_create
Jobs.enqueue(:post_update_topic_tracking_state, post_id: @post.id)
2014-02-17 14:57:37 +08:00
if !@topic.private_message?
Jobs.enqueue_in(
SiteSetting.email_time_window_mins.minutes,
:notify_mailing_list_subscribers,
post_id: @post.id,
)
end
2014-02-17 14:57:37 +08:00
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
klass =
if @topic.private_message?
PrivateMessageTopicTrackingState
else
TopicTrackingState
end
klass.publish_new(@topic)
2014-02-17 14:57:37 +08:00
end
def skip_after_create?
@opts[:import_mode] || @post.post_type == Post.types[:moderator_action] ||
@post.post_type == Post.types[:small_action]
2014-02-17 14:57:37 +08:00
end
end