sheercms
Version:
Sheer Cliff CMS is a simple and powerful content management system (CMS) for Node JS.
128 lines (110 loc) • 3.55 kB
JavaScript
var logger = require('../logger');
var api = require('../api');
var auth = require('../auth');
var config = require('../config');
/*
callback: (err)
*/
module.exports.init = function(server, callback) {
//routes
server.get('/cms/menus/list', auth.authenticate, routeMenusList);
server.get('/cms/menus/get', auth.authenticate, routeMenusGet);
server.post('/cms/menus/save', auth.authenticate, routeMenusSave);
server.post('/cms/menus/delete', auth.authenticate, routeMenusDelete);
if (callback)
callback(null);
};
function routeMenusList(req, res, next) {
try {
api.menus.getMenus(function(err, menus) {
if (err)
res.json({ success: false, message: err.message });
else
res.json({ success: true, menus: menus });
});
} catch(e) {
logger.error(e);
res.json({ success: false, message: 'Error retrieving the menus.'});
}
};
function routeMenusGet(req, res, next) {
try {
var id = req.query.menuId;
api.menus.getMenu(id, function(err, menu) {
if (err)
res.json({ success: false, message: err.message });
else
res.json({ success: true, menu: menu });
});
} catch(e) {
logger.error(e);
res.json({ success: false, message: 'Error retrieving the menu.'});
}
};
function routeMenusSave(req, res, next) {
try {
var json = req.body.data;
var menu = JSON.parse(json);
//var username = req.user.username;
//fix the menu items
menu.items = fixMenuItems(menu.items);
api.menus.saveMenu(menu, function(err, savedMenu) {
if (err)
res.json({ success: false, message: err.message });
else
res.json({ success: true, menu: savedMenu });
});
} catch(e) {
logger.error(e);
res.json({ success: false, message: 'Error saving the menu.'});
}
};
function fixMenuItems(items) {
var arr = [];
if (items) {
for(var i = 0; i < items.length; i++) {
var item = items[i];
var obj = new MenuItem(item);
obj.items = fixMenuItems(item.items);
obj.childCount = obj.items.length;
arr.push(obj);
}
}
return arr;
}
function routeMenusDelete(req, res, next) {
try {
var id = req.body.menuId;
var bList = (req.body.list == true || req.body.list == 'true');
api.menus.deleteMenu(id, function(err) {
if (err)
res.json({ success: false, message: 'Error deleting the menu.'});
else {
if (bList == true) {
api.menus.getMenus(function(err, menus) {
if (err)
res.json({ success: false, message: err.message });
else
res.json({ success: true, menus: menus });
});
}
else
res.json({ success: true });
}
});
} catch(e) {
logger.error(e);
res.json({ success: false, message: 'Error deleting the menu.'});
}
}
function MenuItem(item) {
var self = this;
self.contentId = item.contentId;
self.text = item.text;
self.url = item.url;
self.target = item.target;
self.class = item.class;
self.tooltip = item.tooltip;
self.items = [];
self.childCount = 0;
}