'use strict'; var async = require('async'), user = require('../user'), categories = require('../categories'), groups = require('../groups'), helpers = require('./helpers'), plugins = require('../plugins'); module.exports = function(privileges) { privileges.categories = {}; privileges.categories.list = function(cid, callback) { // Method used in admin/category controller to show all users with privs in that given cid async.parallel({ labels: function(next) { async.parallel({ users: async.apply(plugins.fireHook, 'filter:privileges.list_human', ['Find category', 'Access & Read', 'Create Topics', 'Reply to Topics', 'Moderate'].map(function(name) { return { name: name }; }) ), groups: async.apply(plugins.fireHook, 'filter:privileges.groups.list_human', ['Find category', 'Access & Read', 'Create Topics', 'Reply to Topics', 'Moderate'].map(function(name) { return { name: name }; }) ) }, next); }, users: function(next) { var privileges; async.waterfall([ async.apply(plugins.fireHook, 'filter:privileges.list', [ 'find', 'read', 'topics:create', 'topics:reply', 'mods' ]), function(privs, next) { privileges = privs; groups.getMembersOfGroups(privs.map(function(privilege) { return 'cid:' + cid + ':privileges:' + privilege; }), next); }, function(memberSets, next) { // Reduce into a single array var members = memberSets.reduce(function(combined, curMembers) { return combined.concat(curMembers); }).filter(function(member, index, combined) { return combined.indexOf(member) === index; }); user.getMultipleUserFields(members, ['picture', 'username'], function(err, memberData) { memberData = memberData.map(function(member) { member.privileges = {}; for(var x=0,numPrivs=privileges.length;x