Files
NodeBB/src/controllers/categories.js

85 lines
2.1 KiB
JavaScript
Raw Normal View History

2014-03-02 14:45:57 -05:00
"use strict";
2015-03-18 15:18:07 -04:00
2016-01-06 12:49:14 +02:00
var async = require('async');
var nconf = require('nconf');
var validator = require('validator');
2016-01-06 12:49:14 +02:00
var categories = require('../categories');
var meta = require('../meta');
var plugins = require('../plugins');
2014-02-27 14:55:53 -05:00
2016-01-06 12:49:14 +02:00
var helpers = require('./helpers');
2016-01-06 12:49:14 +02:00
var categoriesController = {};
2016-01-06 12:49:14 +02:00
categoriesController.list = function(req, res, next) {
res.locals.metaTags = [{
name: "title",
content: validator.escape(meta.config.title || 'NodeBB')
}, {
name: "description",
content: validator.escape(meta.config.description || '')
}, {
property: 'og:title',
content: '[[pages:categories]]'
}, {
property: 'og:type',
content: 'website'
}];
if (meta.config['brand:logo']) {
2016-02-01 19:31:13 +02:00
var brandLogo = meta.config['brand:logo'];
if (!brandLogo.startsWith('http')) {
brandLogo = nconf.get('url') + brandLogo;
}
2016-01-06 12:49:14 +02:00
res.locals.metaTags.push({
property: 'og:image',
2016-02-01 19:31:13 +02:00
content: brandLogo
2015-03-31 11:14:03 -04:00
});
2014-11-08 18:40:38 -05:00
}
2016-01-06 12:49:14 +02:00
var categoryData;
2014-02-27 14:55:53 -05:00
async.waterfall([
2016-01-06 12:49:14 +02:00
function (next) {
categories.getCategoriesByPrivilege('cid:0:children', req.uid, 'find', next);
2014-04-23 16:21:14 -04:00
},
2016-01-06 12:49:14 +02:00
function (_categoryData, next) {
categoryData = _categoryData;
2014-11-08 18:40:38 -05:00
2016-01-06 12:49:14 +02:00
var allCategories = [];
categories.flattenCategories(allCategories, categoryData);
2014-09-18 14:04:22 -04:00
2016-01-06 12:49:14 +02:00
categories.getRecentTopicReplies(allCategories, req.uid, next);
2014-12-01 17:59:38 -05:00
},
2016-01-06 12:49:14 +02:00
function (next) {
var data = {
title: '[[pages:categories]]',
categories: categoryData
};
if (req.path.startsWith('/api/categories') || req.path.startsWith('/categories')) {
data.breadcrumbs = helpers.buildBreadcrumbs([{text: data.title}]);
2015-03-18 15:16:37 -04:00
}
2016-01-06 12:49:14 +02:00
data.categories.forEach(function(category) {
if (category && Array.isArray(category.posts) && category.posts.length) {
category.teaser = {
url: nconf.get('relative_path') + '/topic/' + category.posts[0].topic.slug + '/' + category.posts[0].index,
timestampISO: category.posts[0].timestamp
};
}
2014-02-27 14:55:53 -05:00
});
2016-01-06 12:49:14 +02:00
plugins.fireHook('filter:categories.build', {req: req, res: res, templateData: data}, next);
2014-02-27 14:55:53 -05:00
}
2016-01-06 12:49:14 +02:00
], function(err, data) {
2014-02-27 14:55:53 -05:00
if (err) {
2016-01-06 12:49:14 +02:00
return next(err);
2014-02-27 14:55:53 -05:00
}
2016-01-06 12:49:14 +02:00
res.render('categories', data.templateData);
2014-02-27 14:55:53 -05:00
});
};
2014-03-11 18:46:16 -04:00
module.exports = categoriesController;