From a590f35982d4aaf214e233a02014b5b5112d0730 Mon Sep 17 00:00:00 2001 From: Arpit Jalan Date: Fri, 19 Aug 2016 22:43:22 +0530 Subject: [PATCH] FEATURE: allow changing post owners without creating post revision --- app/models/post.rb | 5 ++--- app/services/post_owner_changer.rb | 3 ++- lib/post_revisor.rb | 6 ++++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/models/post.rb b/app/models/post.rb index d968a95a5..fcc5e0c81 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -461,15 +461,14 @@ class Post < ActiveRecord::Base new_cooked != old_cooked end - def set_owner(new_user, actor) + def set_owner(new_user, actor, skip_revision=false) return if user_id == new_user.id edit_reason = I18n.t('change_owner.post_revision_text', old_user: (self.user.username_lower rescue nil) || I18n.t('change_owner.deleted_user'), new_user: new_user.username_lower ) - - revise(actor, {raw: self.raw, user_id: new_user.id, edit_reason: edit_reason}, bypass_bump: true) + revise(actor, {raw: self.raw, user_id: new_user.id, edit_reason: edit_reason}, {bypass_bump: true, skip_revision: skip_revision}) if post_number == topic.highest_post_number topic.update_columns(last_post_user_id: new_user.id) diff --git a/app/services/post_owner_changer.rb b/app/services/post_owner_changer.rb index bc5649a21..2a9c71b21 100644 --- a/app/services/post_owner_changer.rb +++ b/app/services/post_owner_changer.rb @@ -5,6 +5,7 @@ class PostOwnerChanger @topic = Topic.with_deleted.find_by(id: params[:topic_id].to_i) @new_owner = params[:new_owner] @acting_user = params[:acting_user] + @skip_revision = params[:skip_revision] || false raise ArgumentError unless @post_ids && @topic && @new_owner && @acting_user end @@ -20,7 +21,7 @@ class PostOwnerChanger @topic.recover! if post.is_first_post? end post.topic = @topic - post.set_owner(@new_owner, @acting_user) + post.set_owner(@new_owner, @acting_user, @skip_revision) end @topic.update_statistics diff --git a/lib/post_revisor.rb b/lib/post_revisor.rb index 8ed11c311..b9cccc9f9 100644 --- a/lib/post_revisor.rb +++ b/lib/post_revisor.rb @@ -101,6 +101,7 @@ class PostRevisor # - bypass_rate_limiter: # - bypass_bump: do not bump the topic, even if last post # - skip_validations: ask ActiveRecord to skip validations + # - skip_revision: do not create a new PostRevision record def revise!(editor, fields, opts={}) @editor = editor @fields = fields.with_indifferent_access @@ -134,6 +135,9 @@ class PostRevisor @validate_topic = @opts[:validate_topic] if @opts.has_key?(:validate_topic) @validate_topic = !@opts[:validate_topic] if @opts.has_key?(:skip_validations) + @skip_revision = false + @skip_revision = @opts[:skip_revision] if @opts.has_key?(:skip_revision) + Post.transaction do revise_post @@ -191,6 +195,7 @@ class PostRevisor end def should_create_new_version? + return false if @skip_revision edited_by_another_user? || !ninja_edit? || owner_changed? || force_new_version? end @@ -324,6 +329,7 @@ class PostRevisor end def create_or_update_revision + return if @skip_revision # don't create an empty revision if something failed return unless successfully_saved_post_and_topic @version_changed ? create_revision : update_revision