Files
NodeBB/src/socket.io/admin/categories.js
barisusakli f9405c0423 closes #2440
2014-11-28 15:49:16 -05:00

130 lines
3.0 KiB
JavaScript

"use strict";
var async = require('async'),
groups = require('../../groups'),
user = require('../../user'),
categories = require('../../categories'),
privileges = require('../../privileges'),
Categories = {};
Categories.create = function(socket, data, callback) {
if(!data) {
return callback(new Error('[[error:invalid-data]]'));
}
categories.create(data, callback);
};
Categories.purge = function(socket, cid, callback) {
categories.purge(cid, callback);
};
Categories.update = function(socket, data, callback) {
if(!data) {
return callback(new Error('[[error:invalid-data]]'));
}
categories.update(data, callback);
};
Categories.search = function(socket, data, callback) {
if(!data) {
return callback(new Error('[[error:invalid-data]]'));
}
var username = data.username,
cid = data.cid;
user.search(username, 'username', function(err, data) {
if (err) {
return callback(err);
}
async.map(data.users, function(userObj, next) {
privileges.categories.userPrivileges(cid, userObj.uid, function(err, privileges) {
if(err) {
return next(err);
}
userObj.privileges = privileges;
next(null, userObj);
});
}, callback);
});
};
Categories.setPrivilege = function(socket, data, callback) {
if(!data) {
return callback(new Error('[[error:invalid-data]]'));
}
groups[data.set ? 'join' : 'leave']('cid:' + data.cid + ':privileges:' + data.privilege, data.uid, callback);
};
Categories.getPrivilegeSettings = function(socket, cid, callback) {
var privileges = ['find', 'read', 'topics:create', 'topics:reply', 'mods'];
async.reduce(privileges, [], function(members, privilege, next) {
groups.get('cid:' + cid + ':privileges:' + privilege, { expand: true }, function(err, groupObj) {
if (!err) {
members = members.concat(groupObj.members);
}
next(null, members);
});
}, function(err, members) {
// Remove duplicates
var present = [],
x = members.length,
uid;
while(x--) {
uid = parseInt(members[x].uid, 10);
if (present.indexOf(uid) !== -1) {
members.splice(x, 1);
} else {
present.push(uid);
}
}
callback(err, members);
});
};
Categories.setGroupPrivilege = function(socket, data, callback) {
if(!data) {
return callback(new Error('[[error:invalid-data]]'));
}
groups[data.set ? 'join' : 'leave']('cid:' + data.cid + ':privileges:' + data.privilege, data.name, function (err) {
if (err) {
return callback(err);
}
groups.hide('cid:' + data.cid + ':privileges:' + data.privilege, callback);
});
};
Categories.groupsList = function(socket, cid, callback) {
groups.list({
expand: false,
showSystemGroups: true
}, function(err, data) {
if(err) {
return callback(err);
}
async.map(data, function(groupObj, next) {
privileges.categories.groupPrivileges(cid, groupObj.name, function(err, privileges) {
if(err) {
return next(err);
}
groupObj.privileges = privileges;
next(null, groupObj);
});
}, callback);
});
};
module.exports = Categories;