2019-05-03 06:17:27 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2014-02-17 14:57:37 +08:00
|
|
|
class PostJobsEnqueuer
|
2014-07-04 02:43:24 +08:00
|
|
|
def initialize(post, topic, new_topic, opts = {})
|
2014-02-17 14:57:37 +08:00
|
|
|
@post = post
|
|
|
|
@topic = topic
|
|
|
|
@new_topic = new_topic
|
2014-07-04 02:43:24 +08:00
|
|
|
@opts = opts
|
2014-02-17 14:57:37 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
def enqueue_jobs
|
2015-11-24 23:58:26 +08:00
|
|
|
# We need to enqueue jobs after the transaction.
|
|
|
|
# Otherwise they might begin before the data has been comitted.
|
2015-04-21 01:34:57 +08:00
|
|
|
enqueue_post_alerts unless @opts[:import_mode]
|
2014-07-04 02:43:24 +08:00
|
|
|
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
|
2020-04-21 03:11:59 +08:00
|
|
|
make_visible
|
2014-02-17 14:57:37 +08:00
|
|
|
end
|
2018-03-06 14:38:43 +08:00
|
|
|
|
|
|
|
if @topic.private_message?
|
|
|
|
TopicTrackingState.publish_private_message(@topic, post: @post)
|
2019-08-27 20:09:00 +08:00
|
|
|
TopicGroup.new_message_update(@topic.last_poster, @topic.id, @post.post_number)
|
2018-03-06 14:38:43 +08:00
|
|
|
end
|
2014-02-17 14:57:37 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
2015-04-21 01:34:57 +08:00
|
|
|
def enqueue_post_alerts
|
2018-05-24 23:27:43 +08:00
|
|
|
Jobs.enqueue(:post_alert,
|
|
|
|
post_id: @post.id,
|
|
|
|
new_record: true,
|
|
|
|
options: @opts[:post_alert_options],
|
2018-05-26 08:09:48 +08:00
|
|
|
)
|
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
|
2019-01-17 10:24:32 +08:00
|
|
|
@post.trigger_post_process(new_post: true)
|
2014-02-17 14:57:37 +08:00
|
|
|
end
|
|
|
|
|
2020-04-21 03:11:59 +08:00
|
|
|
def make_visible
|
|
|
|
return unless SiteSetting.embed_unlisted?
|
|
|
|
return unless @post.post_number > 1
|
|
|
|
return if @topic.visible?
|
|
|
|
return if @post.post_type != Post.types[:regular]
|
|
|
|
|
|
|
|
if @topic.topic_embed.present?
|
|
|
|
Jobs.enqueue(:make_embedded_topic_visible, topic_id: @topic.id)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2014-02-17 14:57:37 +08:00
|
|
|
def after_post_create
|
2020-04-23 12:57:35 +08:00
|
|
|
if @post.post_number > 1
|
2020-05-01 06:33:57 +08:00
|
|
|
TopicTrackingState.publish_muted(@post.topic)
|
2020-04-23 12:57:35 +08:00
|
|
|
TopicTrackingState.publish_unread(@post)
|
|
|
|
end
|
2018-03-06 14:38:43 +08:00
|
|
|
TopicTrackingState.publish_latest(@topic, @post.whisper?)
|
2014-02-17 14:57:37 +08:00
|
|
|
|
2018-05-26 08:09:48 +08:00
|
|
|
Jobs.enqueue_in(SiteSetting.email_time_window_mins.minutes,
|
|
|
|
:notify_mailing_list_subscribers,
|
|
|
|
post_id: @post.id,
|
2014-03-05 11:21:53 +08:00
|
|
|
)
|
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
|
|
|
|
|
|
|
|
TopicTrackingState.publish_new(@topic)
|
|
|
|
end
|
|
|
|
|
|
|
|
def skip_after_create?
|
2015-07-25 04:39:03 +08:00
|
|
|
@opts[:import_mode] ||
|
|
|
|
@topic.private_message? ||
|
|
|
|
@post.post_type == Post.types[:moderator_action] ||
|
|
|
|
@post.post_type == Post.types[:small_action]
|
2014-02-17 14:57:37 +08:00
|
|
|
end
|
|
|
|
end
|