From 24ba7ccfbb0ea36d7c00f009af23a102eca44895 Mon Sep 17 00:00:00 2001 From: riking Date: Thu, 28 Aug 2014 21:27:40 -0700 Subject: [PATCH] FEATURE: Add a plugin callback when editing a post FIX: Wrap PostRevisor database work in a transaction --- lib/post_creator.rb | 7 ++++++- lib/post_revisor.rb | 24 +++++++++++++++++------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/lib/post_creator.rb b/lib/post_creator.rb index a0145bbc778..4b45e7f0aac 100644 --- a/lib/post_creator.rb +++ b/lib/post_creator.rb @@ -69,6 +69,7 @@ class PostCreator setup_topic setup_post rollback_if_host_spam_detected + plugin_callbacks save_post extract_links store_unique_post_key @@ -113,7 +114,6 @@ class PostCreator post.cooked ||= post.cook(post.raw, cooking_options) post.sort_order = post.post_number - DiscourseEvent.trigger(:before_create_post, post) post.last_version_at ||= Time.now end @@ -157,6 +157,11 @@ class PostCreator end end + def plugin_callbacks + DiscourseEvent.trigger :before_create_post, @post + DiscourseEvent.trigger :validate_post, @post + end + def track_latest_on_category return unless @post && @post.errors.count == 0 && @topic && @topic.category_id diff --git a/lib/post_revisor.rb b/lib/post_revisor.rb index dea3b55a4e8..e94b4e4be13 100644 --- a/lib/post_revisor.rb +++ b/lib/post_revisor.rb @@ -22,13 +22,18 @@ class PostRevisor @new_raw = TextCleaner.normalize_whitespaces(new_raw).strip return false unless should_revise? - @post.acting_user = @editor - revise_post - update_category_description - update_topic_excerpt - post_process_post - update_topic_word_counts - @post.advance_draft_sequence + + Post.transaction do + @post.acting_user = @editor + revise_post + plugin_callbacks + update_category_description + update_topic_excerpt + post_process_post + update_topic_word_counts + @post.advance_draft_sequence + end + PostAlerter.new.after_save_post(@post) publish_revision BadgeGranter.queue_badge_grant(Badge::Trigger::PostRevision, post: @post) @@ -61,6 +66,11 @@ class PostRevisor end end + def plugin_callbacks + DiscourseEvent.trigger :before_edit_post, @post + DiscourseEvent.trigger :validate_post, @post + end + def get_revised_at @opts[:revised_at] || Time.now end