Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 36 additions & 27 deletions src/controllers/recent.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

'use strict';

const nconf = require('nconf');
Expand All @@ -13,26 +12,47 @@ const privileges = require('../privileges');
const recentController = module.exports;
const relative_path = nconf.get('relative_path');

function setTitleAndBreadcrumbs(data, url, asHome) {
if (asHome) {
data.title = meta.config.homePageTitle || '[[pages:home]]';
return;
}
data.title = `[[pages:${url}]]`;
data.breadcrumbs = helpers.buildBreadcrumbs([{ text: `[[${url}:title]]` }]);
}

function setRssFields(ctx) {
const { data, url, req, rssToken } = ctx;
const disabled = meta.config['feeds:disableRSS'] || 0;

data['feeds:disableRSS'] = disabled;
if (disabled) return;

let rss = `${relative_path}/${url}.rss`;
if (req.loggedIn) {
rss += `?uid=${req.uid}&token=${rssToken}`;
}
data.rssFeedUrl = rss;
}

recentController.get = async function (req, res, next) {
const data = await recentController.getData(req, 'recent', 'recent');
if (!data) {
return next();
}

res.render('recent', data);
};

recentController.getData = async function (req, url, sort) {
const page = parseInt(req.query.page, 10) || 1;
let term = helpers.terms[req.query.term];

const termKey = req.query.term;
const term = termKey ? helpers.terms[termKey] : 'alltime';
if (termKey && !term) return null;

const { cid, tag } = req.query;
const filter = req.query.filter || '';

if (!term && req.query.term) {
return null;
}
term = term || 'alltime';

const [settings, categoryData, tagData, rssToken, canPost, isPrivileged] = await Promise.all([
user.getSettings(req.uid),
helpers.getSelectedCategory(cid),
Expand All @@ -58,18 +78,13 @@ recentController.getData = async function (req, url, sort) {
query: req.query,
});

const isDisplayedAsHome = !(req.originalUrl.startsWith(`${relative_path}/api/${url}`) || req.originalUrl.startsWith(`${relative_path}/${url}`));
const baseUrl = isDisplayedAsHome ? '' : url;

if (isDisplayedAsHome) {
data.title = meta.config.homePageTitle || '[[pages:home]]';
} else {
data.title = `[[pages:${url}]]`;
data.breadcrumbs = helpers.buildBreadcrumbs([{ text: `[[${url}:title]]` }]);
}
const asHome = !(req.originalUrl.startsWith(`${relative_path}/api/${url}`) || req.originalUrl.startsWith(`${relative_path}/${url}`));
const baseUrl = asHome ? '' : url;
setTitleAndBreadcrumbs(data, url, asHome);

const query = { ...req.query };
delete query.page;

data.canPost = canPost;
data.showSelect = isPrivileged;
data.showTopicTools = isPrivileged;
Expand All @@ -78,18 +93,13 @@ recentController.getData = async function (req, url, sort) {
data.selectedCids = categoryData.selectedCids;
data.selectedTag = tagData.selectedTag;
data.selectedTags = tagData.selectedTags;
data['feeds:disableRSS'] = meta.config['feeds:disableRSS'] || 0;
if (!meta.config['feeds:disableRSS']) {
data.rssFeedUrl = `${relative_path}/${url}.rss`;
if (req.loggedIn) {
data.rssFeedUrl += `?uid=${req.uid}&token=${rssToken}`;
}
}

setRssFields({ data, url, req, rssToken });

data.filters = helpers.buildFilters(baseUrl, filter, query);
data.selectedFilter = data.filters.find(filter => filter && filter.selected);
data.selectedFilter = data.filters.find(f => f && f.selected);
data.terms = helpers.buildTerms(baseUrl, term, query);
data.selectedTerm = data.terms.find(term => term && term.selected);
data.selectedTerm = data.terms.find(t => t && t.selected);

const pageCount = Math.max(1, Math.ceil(data.topicCount / settings.topicsPerPage));
data.pagination = pagination.create(page, pageCount, req.query);
Expand All @@ -102,5 +112,4 @@ recentController.getData = async function (req, url, sort) {
return data;
};


require('../promisify')(recentController, ['get']);