diff --git a/app/assets/javascripts/discourse/controllers/topic.js.es6 b/app/assets/javascripts/discourse/controllers/topic.js.es6 index f94571ce9c5..db94ea85bc3 100644 --- a/app/assets/javascripts/discourse/controllers/topic.js.es6 +++ b/app/assets/javascripts/discourse/controllers/topic.js.es6 @@ -264,6 +264,9 @@ export default ObjectController.extend(Discourse.SelectedPostsCount, BufferedCon props = this.get('buffered.buffer'); Discourse.Topic.update(this.get('model'), props).then(function() { + // Note we roll back on success here because `update` saves + // the properties to the topic. + self.rollbackBuffer(); self.set('editingTopic', false); }).catch(function(error) { if (error && error.responseText) { @@ -271,10 +274,6 @@ export default ObjectController.extend(Discourse.SelectedPostsCount, BufferedCon } else { bootbox.alert(I18n.t('generic_error')); } - }).finally(function() { - // Note we even roll back on success here because `update` saves - // the properties to the topic. - self.rollbackBuffer(); }); }, diff --git a/app/controllers/topics_controller.rb b/app/controllers/topics_controller.rb index 63b45f73413..73bc006ae35 100644 --- a/app/controllers/topics_controller.rb +++ b/app/controllers/topics_controller.rb @@ -2,6 +2,7 @@ require_dependency 'topic_view' require_dependency 'promotion' require_dependency 'url_helper' require_dependency 'topics_bulk_action' +require_dependency 'discourse_event' class TopicsController < ApplicationController include UrlHelper @@ -134,6 +135,8 @@ class TopicsController < ApplicationController success = PostRevisor.new(first_post, topic).revise!(current_user, changes, validate_post: false) end + DiscourseEvent.trigger(:topic_saved, topic, params) + # this is used to return the title to the client as it may have been changed by "TextCleaner" success ? render_serialized(topic, BasicTopicSerializer) : render_json_error(topic) end diff --git a/spec/components/concern/has_custom_fields_spec.rb b/spec/components/concern/has_custom_fields_spec.rb index c41f3ebc6db..0b7cfb90bcb 100644 --- a/spec/components/concern/has_custom_fields_spec.rb +++ b/spec/components/concern/has_custom_fields_spec.rb @@ -111,10 +111,13 @@ describe HasCustomFields do db_item = CustomFieldsTestItem.find(test_item.id) db_item.custom_fields.should == {"a" => ["b", "c", "d"]} - db_item.custom_fields["a"] = ["c", "d"] + db_item.custom_fields.update('a' => ['c', 'd']) db_item.save db_item.custom_fields.should == {"a" => ["c", "d"]} + db_item.custom_fields.delete('a') + db_item.custom_fields.should == {} + end it "casts integers in arrays properly without error" do