You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nodebb/src/meta/configs.js

146 lines
3.0 KiB
JavaScript

11 years ago
'use strict';
var winston = require('winston');
var nconf = require('nconf');
var db = require('../database');
var pubsub = require('../pubsub');
var utils = require('../../public/src/utils');
11 years ago
module.exports = function (Meta) {
11 years ago
Meta.config = {};
Meta.configs = {};
Meta.configs.init = function (callback) {
delete Meta.config;
Meta.configs.list(function (err, config) {
if (err) {
11 years ago
winston.error(err.stack);
11 years ago
return callback(err);
}
config['cache-buster'] = utils.generateUUID();
11 years ago
Meta.config = config;
callback();
});
};
Meta.configs.list = function (callback) {
db.getObject('config', function (err, config) {
config = config || {};
config.version = nconf.get('version');
config.registry = nconf.get('registry');
callback(err, config);
11 years ago
});
};
Meta.configs.get = function (field, callback) {
db.getObjectField('config', field, callback);
};
Meta.configs.getFields = function (fields, callback) {
db.getObjectFields('config', fields, callback);
};
Meta.configs.set = function (field, value, callback) {
callback = callback || function () {};
11 years ago
if (!field) {
return callback(new Error('invalid config field'));
}
db.setObjectField('config', field, value, function (err) {
if (err) {
return callback(err);
11 years ago
}
var data = {};
data[field] = value;
updateConfig(data);
11 years ago
callback();
11 years ago
});
};
Meta.configs.setMultiple = function (data, callback) {
processConfig(data, function (err) {
if (err) {
return callback(err);
}
db.setObject('config', data, function (err) {
10 years ago
if (err) {
return callback(err);
}
10 years ago
updateConfig(data);
callback();
});
});
};
10 years ago
function processConfig(data, callback) {
if (data.customCSS) {
saveRenderedCss(data, callback);
return;
}
callback();
}
function saveRenderedCss(data, callback) {
var less = require('less');
less.render(data.customCSS, {
compress: true
}, function (err, lessObject) {
10 years ago
if (err) {
winston.error('[less] Could not convert custom LESS to CSS! Please check your syntax.');
return callback(null, '');
}
data.renderedCustomCSS = lessObject.css;
callback();
10 years ago
});
}
function updateConfig(config) {
pubsub.publish('config:update', config);
}
pubsub.on('config:update', function onConfigReceived(config) {
if (typeof config !== 'object' || !Meta.config) {
return;
}
for(var field in config) {
if(config.hasOwnProperty(field)) {
Meta.config[field] = config[field];
}
}
});
9 years ago
Meta.configs.setOnEmpty = function (values, callback) {
db.getObject('config', function (err, data) {
11 years ago
if (err) {
return callback(err);
}
data = data || {};
9 years ago
var empty = {};
Object.keys(values).forEach(function (key) {
9 years ago
if (!data.hasOwnProperty(key)) {
empty[key] = values[key];
}
});
if (Object.keys(empty).length) {
db.setObject('config', empty, callback);
11 years ago
} else {
callback();
}
});
};
Meta.configs.remove = function (field) {
db.deleteObjectField('config', field);
};
};