This commit is contained in:
Julian Lam
2015-07-15 16:58:25 -04:00
parent d712dcdce1
commit e25d2fa6e6
6 changed files with 78 additions and 2 deletions

View File

@@ -138,6 +138,16 @@ var async = require('async'),
}
], next);
},
invited: function (next) {
async.waterfall([
function(next) {
db.getSetMembers('group:' + groupName + ':invited', next);
},
function(uids, next) {
user.getUsersData(uids, next);
}
], next);
},
isMember: async.apply(Groups.isMember, options.uid, groupName),
isPending: async.apply(Groups.isPending, options.uid, groupName),
isInvited: async.apply(Groups.isInvited, options.uid, groupName),
@@ -170,6 +180,7 @@ var async = require('async'),
results.base.members = results.members;
results.base.membersNextStart = stop + 1;
results.base.pending = results.pending.filter(Boolean);
results.base.invited = results.invited.filter(Boolean);
results.base.deleted = !!parseInt(results.base.deleted, 10);
results.base.hidden = !!parseInt(results.base.hidden, 10);
results.base.system = !!parseInt(results.base.system, 10);

View File

@@ -101,7 +101,9 @@ module.exports = function(Groups) {
function(next) {
async.parallel({
exists: async.apply(Groups.exists, groupName),
isMember: async.apply(Groups.isMember, uid, groupName)
isMember: async.apply(Groups.isMember, uid, groupName),
isPending: async.apply(Groups.isPending, uid, groupName),
isInvited: async.apply(Groups.isInvited, uid, groupName)
}, next);
},
function(checks, next) {
@@ -109,6 +111,10 @@ module.exports = function(Groups) {
return next(new Error('[[error:no-group]]'));
} else if (checks.isMember) {
return next(new Error('[[error:group-already-member]]'));
} else if (type === 'invite' && checks.isInvited) {
return next(new Error('[[error:group-already-invited]]'));
} else if (type === 'request' && checks.isPending) {
return next(new Error('[[error:group-already-requested]]'));
}
db.setAdd(set, uid, next);

View File

@@ -131,7 +131,35 @@ function acceptRejectAll(type, socket, data, callback) {
}
], callback);
});
}
};
SocketGroups.issueInvite = function(socket, data, callback) {
if (!data) {
return callback(new Error('[[error:invalid-data]]'));
}
groups.ownership.isOwner(socket.uid, data.groupName, function(err, isOwner) {
if (err || !isOwner) {
return callback(err || new Error('[[error:no-privileges]]'));
}
groups.invite(data.groupName, data.toUid, callback);
});
};
SocketGroups.rescindInvite = function(socket, data, callback) {
if (!data) {
return callback(new Error('[[error:invalid-data]]'));
}
groups.ownership.isOwner(socket.uid, data.groupName, function(err, isOwner) {
if (err || !isOwner) {
return callback(err || new Error('[[error:no-privileges]]'));
}
groups.rejectMembership(data.groupName, data.toUid, callback);
});
};
SocketGroups.acceptInvite = function(socket, data, callback) {
if (!data) {