all files / src/navigation/ admin.js

24.14% Statements 7/29
0% Branches 0/6
0% Functions 0/10
24.14% Lines 7/29
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68                                                                                                                         
"use strict";
 
 
var admin = {},
	async = require('async'),
	plugins = require('../plugins'),
	db = require('../database'),
	translator = require('../../public/src/modules/translator');
 
admin.cache = null;
 
admin.save = function(data, callback) {
	var order = Object.keys(data),
		items = data.map(function(item, idx) {
			var data = {};
 
			for (var i in item) {
				if (item.hasOwnProperty(i)) {
					item[i] = typeof item[i] === 'string' ? translator.escape(item[i]) : item[i];
				}
			}
 
			data[idx] = item;
			return JSON.stringify(data);
		});
 
	admin.cache = null;
	async.waterfall([
		function(next) {
			db.delete('navigation:enabled', next);
		},
		function(next) {
			db.sortedSetAdd('navigation:enabled', order, items, next);
		}
	], callback);
};
 
admin.getAdmin = function(callback) {
	async.parallel({
		enabled: admin.get,
		available: getAvailable
	}, callback);
};
 
admin.get = function(callback) {
	db.getSortedSetRange('navigation:enabled', 0, -1, function(err, data) {
		if (err) {
			return callback(err);
		}
 
		data = data.map(function(item, idx) {
			return JSON.parse(item)[idx];
		});
 
		callback(null, data);
	});
};
 
function getAvailable(callback) {
	var core = require('../../install/data/navigation.json').map(function(item) {
		item.core = true;
		return item;
	});
 
	plugins.fireHook('filter:navigation.available', core, callback);
}
 
module.exports = admin;