sheercms
Version:
Sheer Cliff CMS is a simple and powerful content management system (CMS) for Node JS.
161 lines (139 loc) • 4.8 kB
JavaScript
var logger = require('../logger');
var api = require('../api');
var auth = require('../auth');
/*
callback: (err)
*/
module.exports.init = function(server, callback) {
//routes
server.get('/cms/groups/list', auth.authenticate, routeGroupList);
server.get('/cms/groups/get', auth.authenticate, routeGroupGet);
server.post('/cms/groups/create', auth.authenticateAdmin, routeGroupCreate);
server.post('/cms/groups/update', auth.authenticateAdmin, routeGroupUpdate);
server.post('/cms/groups/delete', auth.authenticateAdmin, routeGroupDelete);
server.post('/cms/groups/reorder', auth.authenticateAdmin, routeGroupReorder);
server.post('/cms/groups/recalculate', auth.authenticateAdmin, routeGroupRecalculate);
if (callback)
callback(null);
};
function routeGroupList(req, res, next) {
try {
var username = req.user.username;
var branch = req.query.branch;
var parentId = req.query.parentId;
api.groups.getGroups(branch, parentId, username, function(err, results) {
if (err)
res.json({ success: false, message: err.message });
else {
res.json({ success: true, groups: results });
}
});
} catch(e) {
logger.error(e);
res.json({ success: false, message: 'Error retrieving the list of groups.'});
}
}
function routeGroupGet(req, res, next) {
try {
var id = req.query.groupId;
api.groups.getGroup(id, function(err, result) {
if (err)
res.json({ success: false, message: err.message });
else
res.json({ success: true, group: result });
});
} catch(e) {
logger.error(e);
res.json({ success: false, message: 'Error retrieving the group.'});
}
}
function routeGroupCreate(req, res, next) {
try {
var json = req.body.data;
var group = JSON.parse(json);
api.groups.createGroup(group, function(err, savedGroup) {
if (err)
res.json({ success: false, message: err.message });
else
res.json({ success: true, group: savedGroup });
});
} catch(e) {
logger.error(e);
res.json({ success: false, message: 'Error creating the group.'});
}
}
function routeGroupUpdate(req, res, next) {
try {
var json = req.body.data;
var group = JSON.parse(json);
//fix the group permissions
if (group && group.perms) {
var arr = [];
for(var i = 0; i < group.perms.length; i++) {
arr.push(new Permission(group.perms[i]));
}
group.perms = arr;
}
api.groups.updateGroup(group, function(err, savedGroup) {
if (err)
res.json({ success: false, message: err.message });
else
res.json({ success: true, group: savedGroup });
});
} catch(e) {
logger.error(e);
res.json({ success: false, message: 'Error updating the group.'});
}
}
function routeGroupDelete(req, res, next) {
try {
var id = req.body.groupId;
api.groups.deleteGroup(id, function(err) {
if (err)
res.json({ success: false, message: err.message });
else
res.json({ success: true, message: 'Group deleted successfully!' });
});
} catch(e) {
logger.error(e);
res.json({ success: false, message: 'Error deleting the group.'});
}
}
function routeGroupRecalculate(req, res, next) {
try {
var id = req.body.groupId;
api.groups.recalculateCount(id, function(err, itemCount) {
if (err)
res.json({ success: false, message: err.message });
else
res.json({ success: true, itemCount: itemCount, message: 'Group counts recalculated!' });
});
} catch(e) {
logger.error(e);
res.json({ success: false, message: 'Error recalculating the group counts.'});
}
}
function routeGroupReorder(req, res, next) {
try {
var json = req.body.data;
var positions = JSON.parse(json);
api.groups.reorderGroups(positions, function(err) {
if (err)
res.json({ success: false, message: err.message });
else
res.json({ success: true });
});
} catch(e) {
logger.error(e);
res.json({ success: false, message: 'Error updating the group positions.'});
}
}
function Permission(p) {
var self = this;
self.role = p.role;
self.create = p.create;
self.read = p.read;
self.update = p.update;
self.delete = p.delete;
self.publish = p.publish;
}