mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FIX: Concurrency issues with making topic embedded posts visible
This commit is contained in:
parent
e997a1f315
commit
25bed4f643
15
app/jobs/regular/make_embedded_topic_visible.rb
Normal file
15
app/jobs/regular/make_embedded_topic_visible.rb
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Jobs
|
||||||
|
class MakeEmbeddedTopicVisible < ::Jobs::Base
|
||||||
|
|
||||||
|
def execute(args)
|
||||||
|
raise Discourse::InvalidParameters.new(:topic_id) if args[:topic_id].blank?
|
||||||
|
|
||||||
|
if topic = Topic.find_by(id: args[:topic_id])
|
||||||
|
topic.update_status('visible', true, topic.user)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
@ -186,7 +186,6 @@ class PostCreator
|
|||||||
@post.link_post_uploads
|
@post.link_post_uploads
|
||||||
update_uploads_secure_status
|
update_uploads_secure_status
|
||||||
ensure_in_allowed_users if guardian.is_staff?
|
ensure_in_allowed_users if guardian.is_staff?
|
||||||
make_visible
|
|
||||||
unarchive_message
|
unarchive_message
|
||||||
if !@opts[:import_mode]
|
if !@opts[:import_mode]
|
||||||
DraftSequence.next!(@user, draft_key)
|
DraftSequence.next!(@user, draft_key)
|
||||||
@ -415,17 +414,6 @@ class PostCreator
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def make_visible
|
|
||||||
return unless SiteSetting.embed_unlisted?
|
|
||||||
return unless @post.post_number > 1
|
|
||||||
return if @post.topic.visible?
|
|
||||||
return if @post.post_type != Post.types[:regular]
|
|
||||||
|
|
||||||
if embed = @post.topic.topic_embed
|
|
||||||
@post.topic.update_status('visible', true, @user)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def unarchive_message
|
def unarchive_message
|
||||||
return unless @topic.private_message? && @topic.id
|
return unless @topic.private_message? && @topic.id
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ class PostJobsEnqueuer
|
|||||||
unless skip_after_create?
|
unless skip_after_create?
|
||||||
after_post_create
|
after_post_create
|
||||||
after_topic_create
|
after_topic_create
|
||||||
|
make_visible
|
||||||
end
|
end
|
||||||
|
|
||||||
if @topic.private_message?
|
if @topic.private_message?
|
||||||
@ -44,6 +45,17 @@ class PostJobsEnqueuer
|
|||||||
@post.trigger_post_process(new_post: true)
|
@post.trigger_post_process(new_post: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
def after_post_create
|
def after_post_create
|
||||||
TopicTrackingState.publish_unread(@post) if @post.post_number > 1
|
TopicTrackingState.publish_unread(@post) if @post.post_number > 1
|
||||||
TopicTrackingState.publish_latest(@topic, @post.whisper?)
|
TopicTrackingState.publish_latest(@topic, @post.whisper?)
|
||||||
|
@ -75,6 +75,7 @@ describe TopicEmbed do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "will make the topic unlisted if `embed_unlisted` is set until someone replies" do
|
it "will make the topic unlisted if `embed_unlisted` is set until someone replies" do
|
||||||
|
Jobs.run_immediately!
|
||||||
SiteSetting.embed_unlisted = true
|
SiteSetting.embed_unlisted = true
|
||||||
imported_post = TopicEmbed.import(user, "http://eviltrout.com/abcd", title, "some random content")
|
imported_post = TopicEmbed.import(user, "http://eviltrout.com/abcd", title, "some random content")
|
||||||
expect(imported_post.topic).not_to be_visible
|
expect(imported_post.topic).not_to be_visible
|
||||||
|
Loading…
Reference in New Issue
Block a user