UNPKG

sheercms

Version:

Sheer Cliff CMS is a simple and powerful content management system (CMS) for Node JS.

205 lines (186 loc) 5.86 kB
var logger = require('../logger'); var models = require('./system-models'); var api = require('../api'); var util = require('../utilities'); var S = require('string'); var config = require('../config'); /* callback: (err, doc) */ module.exports.save = function(sysdoc, callback) { try { if (!sysdoc) { var e = new Error('sysdoc is undefined or null.'); logger.error(e); if (callback) callback(e); return; } models.SysDoc.findOne({key: sysdoc.key}).exec(function (err, doc) { if (err) { logger.error(err); if (callback) callback(err); } else { if (!doc) { doc = new models.SysDoc({ key: sysdoc.key, modified: new Date(), data: sysdoc.data }); } else { doc.modified = new Date(); doc.data = sysdoc.data; doc.markModified('data'); } try { doc.save(function (err) { if (err) { logger.error(err); if (callback) callback(err); } else { //clear the cache for this sysdoc var cacheKey = 'SysDoc:' + sysdoc.key; api.cache.remove(cacheKey, function() { //return lean object var obj = { _id: doc._id, key: doc.key, modified: doc.modified, data: doc.data }; if (callback) callback(null, obj); }); } }); } catch (e) { logger.error(e); if (callback) callback(e); } } }); } catch(e) { logger.error(e); if (callback) callback(e); } }; /* callback: (err, doc) */ module.exports.getOne = function(key, callback) { if (callback) { var cacheKey = 'SysDoc:' + key; api.cache.get(cacheKey, function(err, result) { if (err) callback(err); else if (result) { callback(null, result); } else { models.SysDoc.findOne({key: key}).lean().exec(function (err, result) { try { if (err) { logger.error(err); callback(err); } else if (result) { //put in cache api.cache.set(cacheKey, result, config.settings.data_cache_seconds, function (err) { callback(null, result); }); } else { callback(null, null); } } catch(e) { logger.error(e); callback(e); } }); } }); } }; /* callback: (err, docs) */ module.exports.getAll = function(callback) { if (callback) { models.SysDoc.find().sort("key").lean().exec(function (err, result) { if (err) { logger.error(err); callback(err); } else { callback(null, result); } }); } }; module.exports.getSettings = function(callback) { if (callback) { module.exports.getOne('settings', function (err, result) { if (err) { logger.error(err); callback(err); } else if (result) { callback(null, result); } else { var obj = { key: 'settings', data: {} }; callback(null, obj); } }); } }; //callback: (err, bool) module.exports.isInstalled = function(callback) { if (callback) { module.exports.getSettings(function(err, settings) { if (err) callback(err); else if (settings && settings.data) { var installed = (settings.data.installed === true); callback(null, installed); } else callback(null, false); }); } }; //callback: (err) module.exports.setInstalled = function(installed, callback) { module.exports.getSettings(function(err, settings) { try { if (err) { if (callback) callback(err); } else if (settings) { if (!settings.data) settings.data = {}; settings.data.installed = installed; logger.info('Marking the CMS as installed in sysdoc.'); //save it module.exports.save(settings, function(err) { if (callback) callback(err); }); } else { var e = new Error('Settings not found.'); logger.error(e); if (callback) callback(e); } } catch(e) { logger.error(e); if (callback) callback(e); } }); };