From 04be40158cae5266022f93e40b221e822a11b897 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 16 Jan 2015 20:14:39 -0500 Subject: [PATCH] if you attempt to join a group when you're already in a group, you can't anymore. --- public/language/en_GB/error.json | 1 + src/groups.js | 29 ++++++++++++++++++++--------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/public/language/en_GB/error.json b/public/language/en_GB/error.json index 251db61998..fed0c807c9 100644 --- a/public/language/en_GB/error.json +++ b/public/language/en_GB/error.json @@ -65,6 +65,7 @@ "group-name-too-short": "Group name too short", "group-already-exists": "Group already exists", "group-name-change-not-allowed": "Group name change not allowed", + "group-already-member": "You are already part of this group", "post-already-deleted": "This post has already been deleted", "post-already-restored": "This post has already been restored", diff --git a/src/groups.js b/src/groups.js index 78e874851c..8f64ea57bd 100644 --- a/src/groups.js +++ b/src/groups.js @@ -615,15 +615,26 @@ var async = require('async'), }; Groups.requestMembership = function(groupName, uid, callback) { - 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]]')); - } + async.parallel({ + exists: async.apply(Groups.isMember, uid, groupName), + isMember: async.apply(Groups.exists, 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]]')); + } + }); }; Groups.acceptMembership = function(groupName, uid, callback) {