'use strict'; var async = require('async'); var _ = require('underscore'); var categories = require('../categories'); var user = require('../user'); var groups = require('../groups'); var helpers = require('./helpers'); var 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 Category'}, {name: 'Access Topics'}, {name: 'Create Topics'}, {name: 'Reply to Topics'}, {name: 'Edit Posts'}, {name: 'Delete Posts'}, {name: 'Delete Topics'}, {name: 'Upload Images'}, {name: 'Upload Files'}, {name: 'Purge'}, {name: '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 userPrivileges; async.waterfall([ async.apply(plugins.fireHook, 'filter:privileges.list', privileges.userPrivilegeList), function(_privs, next) { userPrivileges = _privs; groups.getMembersOfGroups(userPrivileges.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.getUsersFields(members, ['picture', 'username'], function(err, memberData) { if (err) { return next(err); } memberData.forEach(function(member) { member.privileges = {}; for(var x=0,numPrivs=userPrivileges.length;x