From 438cbab68ec1b01411558cf5348169955efb8e76 Mon Sep 17 00:00:00 2001
From: Hannah Wolfe <erisds@gmail.com>
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 () {