From 2c6f93efbd681e9813c26d191136635d29cb80ad Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 10 Sep 2015 10:43:42 -0400 Subject: [PATCH] closes #3583 --- src/groups/create.js | 93 +++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 44 deletions(-) diff --git a/src/groups/create.js b/src/groups/create.js index d8eb4a0ab9..828de6056b 100644 --- a/src/groups/create.js +++ b/src/groups/create.js @@ -13,57 +13,62 @@ module.exports = function(Groups) { } var system = data.name === 'administrators' || data.name === 'registered-users' || Groups.isPrivilegeGroup(data.name); + var groupData; + var timestamp = data.timestamp || Date.now(); - meta.userOrGroupExists(data.name, function (err, exists) { - if (err) { - return callback(err); - } + async.waterfall([ + function (next) { + meta.userOrGroupExists(data.name, next); + }, + function (exists, next) { + if (exists) { + return next(new Error('[[error:group-already-exists]]')); + } - if (exists) { - return callback(new Error('[[error:group-already-exists]]')); - } - var timestamp = data.timestamp || Date.now(); - var memberCount = data.hasOwnProperty('ownerUid') ? 1 : 0; - var slug = utils.slugify(data.name); - var groupData = { - name: data.name, - slug: slug, - createtime: timestamp, - userTitle: data.name, - description: data.description || '', - memberCount: memberCount, - deleted: '0', - hidden: data.hidden || '0', - system: system ? '1' : '0', - private: data.private || '1' - }; - var tasks = [ - async.apply(db.sortedSetAdd, 'groups:createtime', timestamp, data.name), - async.apply(db.setObject, 'group:' + data.name, groupData) - ]; + var memberCount = data.hasOwnProperty('ownerUid') ? 1 : 0; + var slug = utils.slugify(data.name); + groupData = { + name: data.name, + slug: slug, + createtime: timestamp, + userTitle: data.name, + description: data.description || '', + memberCount: memberCount, + deleted: '0', + hidden: data.hidden || '0', + system: system ? '1' : '0', + private: data.private || '1' + }; + plugins.fireHook('filter:group.create', {group: groupData, data: data}, next); + }, + function (results, next) { + var tasks = [ + async.apply(db.sortedSetAdd, 'groups:createtime', groupData.createtime, groupData.name), + async.apply(db.setObject, 'group:' + groupData.name, groupData) + ]; - if (data.hasOwnProperty('ownerUid')) { - tasks.push(async.apply(db.setAdd, 'group:' + data.name + ':owners', data.ownerUid)); - tasks.push(async.apply(db.sortedSetAdd, 'group:' + data.name + ':members', timestamp, data.ownerUid)); + if (data.hasOwnProperty('ownerUid')) { + tasks.push(async.apply(db.setAdd, 'group:' + groupData.name + ':owners', data.ownerUid)); + tasks.push(async.apply(db.sortedSetAdd, 'group:' + groupData.name + ':members', timestamp, data.ownerUid)); - groupData.ownerUid = data.ownerUid; - } + groupData.ownerUid = data.ownerUid; + } - if (!data.hidden && !system) { - tasks.push(async.apply(db.sortedSetAdd, 'groups:visible:createtime', timestamp, data.name)); - tasks.push(async.apply(db.sortedSetAdd, 'groups:visible:memberCount', memberCount, data.name)); - tasks.push(async.apply(db.sortedSetAdd, 'groups:visible:name', 0, data.name.toLowerCase() + ':' + data.name)); - } + if (!data.hidden && !system) { + tasks.push(async.apply(db.sortedSetAdd, 'groups:visible:createtime', timestamp, groupData.name)); + tasks.push(async.apply(db.sortedSetAdd, 'groups:visible:memberCount', groupData.memberCount, groupData.name)); + tasks.push(async.apply(db.sortedSetAdd, 'groups:visible:name', 0, groupData.name.toLowerCase() + ':' + groupData.name)); + } - tasks.push(async.apply(db.setObjectField, 'groupslug:groupname', slug, data.name)); + tasks.push(async.apply(db.setObjectField, 'groupslug:groupname', groupData.slug, groupData.name)); - async.series(tasks, function(err) { - if (!err) { - plugins.fireHook('action:group.create', groupData); - } + async.series(tasks, next); + }, + function (results, next) { + plugins.fireHook('action:group.create', groupData); + next(null, groupData); + } + ], callback); - callback(err, groupData); - }); - }); }; };