'use strict'; var async = require('async'), _ = require('underscore'), 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/groups with privs in that given cid var privilegeLabels = [ {name: 'Find category'}, {name: 'Access & Read'}, {name: 'Create Topics'}, {name: 'Reply to Topics'}, {name: 'Moderate'} ]; var userPrivilegeList = [ 'find', 'read', 'topics:create', 'topics:reply', 'mods' ]; var groupPrivilegeList = [ 'groups:find', 'groups:read', 'groups:topics:create', 'groups:topics:reply', 'groups:moderate' ]; async.parallel({ labels: function(next) { async.parallel({ users: async.apply(plugins.fireHook, 'filter:privileges.list_human', privilegeLabels), groups: async.apply(plugins.fireHook, 'filter:privileges.groups.list_human', privilegeLabels) }, next); }, users: function(next) { var privileges; async.waterfall([ async.apply(plugins.fireHook, 'filter:privileges.list', userPrivilegeList), function(privs, next) { privileges = privs; groups.getMembersOfGroups(privs.map(function(privilege) { return 'cid:' + cid + ':privileges:' + privilege; }), next); }, function(memberSets, next) { memberSets = memberSets.map(function(set) { return set.map(function(uid) { return parseInt(uid, 10); }); }); var members = _.unique(_.flatten(memberSets)); user.getMultipleUserFields(members, ['picture', 'username'], function(err, memberData) { if (err) { return next(err); } memberData.forEach(function(member) { member.privileges = {}; for(var x=0,numPrivs=privileges.length;x