sheercms
Version:
Sheer Cliff CMS is a simple and powerful content management system (CMS) for Node JS.
205 lines (186 loc) • 5.86 kB
JavaScript
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);
}
});
};