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/controllers/categories.js

77 lines
1.8 KiB
JavaScript

8 years ago
'use strict';
var async = require('async');
var nconf = require('nconf');
var categories = require('../categories');
var meta = require('../meta');
var helpers = require('./helpers');
var categoriesController = {};
categoriesController.list = function (req, res, next) {
res.locals.metaTags = [{
8 years ago
name: 'title',
8 years ago
content: String(meta.config.title || 'NodeBB'),
}, {
property: 'og:title',
content: '[[pages:categories]]',
}, {
property: 'og:type',
content: 'website',
}];
9 years ago
var ogImage = meta.config['og:image'] || meta.config['brand:logo'] || '';
if (ogImage) {
if (!ogImage.startsWith('http')) {
ogImage = nconf.get('url') + ogImage;
9 years ago
}
res.locals.metaTags.push({
property: 'og:image',
content: ogImage,
});
10 years ago
}
var categoryData;
async.waterfall([
function (next) {
categories.getCategoriesByPrivilege('cid:0:children', req.uid, 'find', next);
11 years ago
},
function (_categoryData, next) {
categoryData = _categoryData;
10 years ago
var allCategories = [];
categories.flattenCategories(allCategories, categoryData);
11 years ago
categories.getRecentTopicReplies(allCategories, req.uid, next);
},
], function (err) {
if (err) {
return next(err);
}
9 years ago
var data = {
title: '[[pages:categories]]',
categories: categoryData,
9 years ago
};
if (req.path.startsWith('/api/categories') || req.path.startsWith('/categories')) {
data.breadcrumbs = helpers.buildBreadcrumbs([{ text: data.title }]);
9 years ago
}
data.categories.forEach(function (category) {
9 years ago
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,
9 years ago
};
}
});
res.render('categories', data);
});
};
module.exports = categoriesController;