diff --git a/src/groups.js b/src/groups.js index 964c79e549..bf757de2c3 100644 --- a/src/groups.js +++ b/src/groups.js @@ -374,29 +374,18 @@ var async = require('async'), }; Groups.getUserGroups = function(uids, callback) { - db.getSortedSetRevRange('groups:createtime', 0, -1, function(err, groupNames) { - if (err) { - return callback(err); - } - - groupNames = groupNames.filter(function(groupName) { - return groupName !== 'registered-users' && groupName.indexOf(':privileges:') === -1; - }); - - Groups.getMultipleGroupFields(groupNames, ['name', 'hidden'], function(err, groupData) { - if (err) { - return callback(err); - } - - groupData = groupData.filter(function(group) { - return group && !parseInt(group.hidden, 10); - }); + async.waterfall([ + function(next) { + db.getSortedSetRevRange('groups:visible:createtime', 0, -1, next); + }, + function(groupNames, next) { + groupNames.push('administrators'); - var groupSets = groupData.map(function(group) { - return 'group:' + group.name + ':members'; - }); + var groupSets = groupNames.map(function(name) { + return 'group:' + name + ':members'; + }); - async.map(uids, function(uid, next) { + async.map(uids, function(uid, next) { db.isMemberOfSortedSets(groupSets, uid, function(err, isMembers) { if (err) { return next(err); @@ -405,14 +394,15 @@ var async = require('async'), var memberOf = []; isMembers.forEach(function(isMember, index) { if (isMember) { - memberOf.push(groupData[index].name); + memberOf.push(groupNames[index]); } }); Groups.getGroupsData(memberOf, next); }); - }, callback); - }); - }); + }, next); + } + ], callback); }; + }(module.exports));