From c81d6f8b57b6a26bba63314b0216d19d3b89d24b Mon Sep 17 00:00:00 2001 From: barisusakli Date: Sat, 20 Jun 2015 01:25:40 -0400 Subject: [PATCH] refactor groups.invite request member ship --- src/groups/membership.js | 65 +++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 35 deletions(-) diff --git a/src/groups/membership.js b/src/groups/membership.js index 0e2a131bd3..ac96a4fa99 100644 --- a/src/groups/membership.js +++ b/src/groups/membership.js @@ -66,26 +66,7 @@ module.exports = function(Groups) { }; Groups.requestMembership = function(groupName, uid, callback) { - async.parallel({ - exists: async.apply(Groups.exists, groupName), - isMember: async.apply(Groups.isMember, uid, groupName) - }, function(err, checks) { - if (!checks.exists) { - return callback(new Error('[[error:no-group]]')); - } else if (checks.isMember) { - return callback(new Error('[[error:group-already-member]]')); - } - - if (parseInt(uid, 10) > 0) { - db.setAdd('group:' + groupName + ':pending', uid, callback); - plugins.fireHook('action:group.requestMembership', { - groupName: groupName, - uid: uid - }); - } else { - callback(new Error('[[error:not-logged-in]]')); - } - }); + inviteOrRequestMembership(groupName, uid, 'request', callback); }; Groups.acceptMembership = function(groupName, uid, callback) { @@ -106,27 +87,41 @@ module.exports = function(Groups) { }; Groups.invite = function(groupName, uid, callback) { - async.parallel({ - exists: async.apply(Groups.exists, groupName), - isMember: async.apply(Groups.isMember, uid, groupName) - }, function(err, checks) { - if (!checks.exists) { - return callback(new Error('[[error:no-group]]')); - } else if (checks.isMember) { - return callback(new Error('[[error:group-already-member]]')); - } + inviteOrRequestMembership(groupName, uid, 'invite', callback); + }; + + function inviteOrRequestMembership(groupName, uid, type, callback) { + if (!parseInt(uid, 10)) { + return callback(new Error('[[error:not-logged-in]]')); + } + var hookName = type === 'invite' ? 'action:group.inviteMember' : 'action:group.requestMembership'; + var set = type === 'invite' ? 'group:' + groupName + ':invited' : 'group:' + groupName + ':pending'; - if (parseInt(uid, 10) > 0) { - db.setAdd('group:' + groupName + ':invited', uid, callback); + async.waterfall([ + function(next) { + async.parallel({ + exists: async.apply(Groups.exists, groupName), + isMember: async.apply(Groups.isMember, uid, groupName) + }, next); + }, + function(checks, next) { + if (!checks.exists) { + return next(new Error('[[error:no-group]]')); + } else if (checks.isMember) { + return next(new Error('[[error:group-already-member]]')); + } + + db.setAdd('group:' + groupName + ':invited', uid, next); + }, + function(next) { plugins.fireHook('action:group.inviteMember', { groupName: groupName, uid: uid }); - } else { - callback(new Error('[[error:not-logged-in]]')); + next(); } - }); - }; + ], callback); + } Groups.leave = function(groupName, uid, callback) { callback = callback || function() {};