From 438cbab68ec1b01411558cf5348169955efb8e76 Mon Sep 17 00:00:00 2001 From: Hannah Wolfe Date: Tue, 25 Mar 2014 10:59:15 +0000 Subject: [PATCH] Ensure generateSlug gets transaction for tags fixes #2460 - add transacting to tag saving - add same to users while we're here --- core/server/models/tag.js | 12 ++++++++---- core/server/models/user.js | 10 ++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/core/server/models/tag.js b/core/server/models/tag.js index e1daff07fa..e2afc27b98 100644 --- a/core/server/models/tag.js +++ b/core/server/models/tag.js @@ -8,13 +8,17 @@ Tag = ghostBookshelf.Model.extend({ tableName: 'tags', - saving: function () { + saving: function (newPage, attr, options) { + /*jshint unused:false*/ + var self = this; + ghostBookshelf.Model.prototype.saving.apply(this, arguments); - if (!this.get('slug')) { - // Generating a slug requires a db call to look for conflicting slugs - return ghostBookshelf.Model.generateSlug(Tag, this.get('name')) + if (this.hasChanged('slug') || !this.get('slug')) { + // Pass the new slug through the generator to strip illegal characters, detect duplicates + return ghostBookshelf.Model.generateSlug(Tag, this.get('slug') || this.get('name'), + {transacting: options.transacting}) .then(function (slug) { self.set({slug: slug}); }); diff --git a/core/server/models/user.js b/core/server/models/user.js index b1308ca128..931447ec07 100644 --- a/core/server/models/user.js +++ b/core/server/models/user.js @@ -38,7 +38,9 @@ User = ghostBookshelf.Model.extend({ tableName: 'users', - saving: function () { + saving: function (newPage, attr, options) { + /*jshint unused:false*/ + var self = this; // disabling sanitization until we can implement a better version // this.set('name', this.sanitize('name')); @@ -49,14 +51,14 @@ User = ghostBookshelf.Model.extend({ ghostBookshelf.Model.prototype.saving.apply(this, arguments); - if (!this.get('slug')) { + if (this.hasChanged('slug') || !this.get('slug')) { // Generating a slug requires a db call to look for conflicting slugs - return ghostBookshelf.Model.generateSlug(User, this.get('name')) + return ghostBookshelf.Model.generateSlug(User, this.get('slug') || this.get('name'), + {transacting: options.transacting}) .then(function (slug) { self.set({slug: slug}); }); } - }, posts: function () {