all files / src/controllers/ helpers.js

16% Statements 8/50
0% Branches 0/29
0% Functions 0/12
16% Lines 8/50
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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124                                                                                                                                                                                                                                       
'use strict';
 
var nconf = require('nconf'),
	async = require('async'),
	validator = require('validator'),
 
	translator = require('../../public/src/modules/translator'),
	categories = require('../categories'),
	plugins = require('../plugins'),
	meta = require('../meta');
 
var helpers = {};
 
helpers.notAllowed = function(req, res, error) {
	if (req.uid) {
		if (res.locals.isAPI) {
			res.status(403).json({
				path: req.path.replace(/^\/api/, ''),
				loggedIn: !!req.uid, error: error,
				title: '[[global:403.title]]'
			});
		} else {
			res.status(403).render('403', {
				path: req.path,
				loggedIn: !!req.uid, error: error,
				title: '[[global:403.title]]'
			});
		}
	} else {
		if (res.locals.isAPI) {
			req.session.returnTo = nconf.get('relative_path') + req.url.replace(/^\/api/, '');
			res.status(401).json('not-authorized');
		} else {
			req.session.returnTo = nconf.get('relative_path') + req.url;
			res.redirect(nconf.get('relative_path') + '/login');
		}
	}
};
 
helpers.redirect = function(res, url) {
	if (res.locals.isAPI) {
		res.status(308).json(url);
	} else {
		res.redirect(nconf.get('relative_path') + encodeURI(url));
	}
};
 
helpers.buildCategoryBreadcrumbs = function(cid, callback) {
	var breadcrumbs = [];
 
	async.whilst(function() {
		return parseInt(cid, 10);
	}, function(next) {
		categories.getCategoryFields(cid, ['name', 'slug', 'parentCid', 'disabled'], function(err, data) {
			if (err) {
				return next(err);
			}
 
			if (!parseInt(data.disabled, 10)) {
				breadcrumbs.unshift({
					text: validator.escape(data.name),
					url: nconf.get('relative_path') + '/category/' + data.slug
				});
			}
 
			cid = data.parentCid;
			next();
		});
	}, function(err) {
		if (err) {
			return callback(err);
		}
 
		if (!meta.config.homePageRoute && meta.config.homePageCustom) {
			breadcrumbs.unshift({
				text: '[[global:header.categories]]',
				url: nconf.get('relative_path') + '/categories'
			});
		}
 
		breadcrumbs.unshift({
			text: '[[global:home]]',
			url: nconf.get('relative_path') + '/'
		});
 
		callback(null, breadcrumbs);
	});
};
 
helpers.buildBreadcrumbs = function(crumbs) {
	var breadcrumbs = [
		{
			text: '[[global:home]]',
			url: nconf.get('relative_path') + '/'
		}
	];
 
	crumbs.forEach(function(crumb) {
		if (crumb) {
			if (crumb.url) {
				crumb.url = nconf.get('relative_path') + crumb.url;
			}
			breadcrumbs.push(crumb);
		}
	});
 
	return breadcrumbs;
};
 
helpers.buildTitle = function(pageTitle) {
	var titleLayout = meta.config.titleLayout || '{pageTitle} | {browserTitle}';
 
	var browserTitle = validator.escape(meta.config.browserTitle || meta.config.title || 'NodeBB');
	pageTitle = pageTitle || '';
	var title = titleLayout.replace('{pageTitle}', function() {
		return pageTitle;
	}).replace('{browserTitle}', function() {
		return browserTitle;
	});
	return title;
};
 
module.exports = helpers;