2014-03-02 14:45:57 -05:00
|
|
|
"use strict";
|
|
|
|
|
|
2016-01-06 12:49:14 +02:00
|
|
|
var async = require('async');
|
|
|
|
|
var nconf = require('nconf');
|
|
|
|
|
var validator = require('validator');
|
2014-02-27 16:35:29 -05:00
|
|
|
|
2016-01-06 12:49:14 +02:00
|
|
|
var categories = require('../categories');
|
|
|
|
|
var meta = require('../meta');
|
|
|
|
|
var helpers = require('./helpers');
|
2015-02-27 23:18:00 -05:00
|
|
|
|
2016-01-06 12:49:14 +02:00
|
|
|
var categoriesController = {};
|
2015-08-26 15:54:54 -04:00
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
categoriesController.list = function (req, res, next) {
|
2016-01-06 12:49:14 +02:00
|
|
|
res.locals.metaTags = [{
|
|
|
|
|
name: "title",
|
2016-08-27 15:45:15 +03:00
|
|
|
content: validator.escape(String(meta.config.title || 'NodeBB'))
|
2016-01-06 12:49:14 +02:00
|
|
|
}, {
|
|
|
|
|
name: "description",
|
2016-08-27 15:45:15 +03:00
|
|
|
content: validator.escape(String(meta.config.description || ''))
|
2016-01-06 12:49:14 +02:00
|
|
|
}, {
|
|
|
|
|
property: 'og:title',
|
|
|
|
|
content: '[[pages:categories]]'
|
|
|
|
|
}, {
|
|
|
|
|
property: 'og:type',
|
|
|
|
|
content: 'website'
|
|
|
|
|
}];
|
|
|
|
|
|
2016-05-16 12:34:47 +03:00
|
|
|
var ogImage = meta.config['og:image'] || meta.config['brand:logo'] || '';
|
|
|
|
|
if (ogImage) {
|
|
|
|
|
if (!ogImage.startsWith('http')) {
|
|
|
|
|
ogImage = nconf.get('url') + ogImage;
|
2016-02-01 19:31:13 +02:00
|
|
|
}
|
2016-01-06 12:49:14 +02:00
|
|
|
res.locals.metaTags.push({
|
|
|
|
|
property: 'og:image',
|
2016-05-16 12:34:47 +03:00
|
|
|
content: ogImage
|
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-02-27 14:55:53 -05:00
|
|
|
}
|
2016-10-13 11:43:39 +02:00
|
|
|
], function (err) {
|
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-04-30 10:47:28 +03:00
|
|
|
|
|
|
|
|
var data = {
|
|
|
|
|
title: '[[pages:categories]]',
|
|
|
|
|
categories: categoryData
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (req.path.startsWith('/api/categories') || req.path.startsWith('/categories')) {
|
|
|
|
|
data.breadcrumbs = helpers.buildBreadcrumbs([{text: data.title}]);
|
|
|
|
|
}
|
|
|
|
|
|
2016-10-13 11:43:39 +02:00
|
|
|
data.categories.forEach(function (category) {
|
2016-04-30 10:47:28 +03:00
|
|
|
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].timestampISO,
|
|
|
|
|
pid: category.posts[0].pid
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2016-05-06 03:54:13 -04:00
|
|
|
res.render('categories', data);
|
2014-02-27 14:55:53 -05:00
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
2014-03-11 18:46:16 -04:00
|
|
|
module.exports = categoriesController;
|