diff --git a/src/controllers/recent.js b/src/controllers/recent.js index 5699fee1b7..216df797e3 100644 --- a/src/controllers/recent.js +++ b/src/controllers/recent.js @@ -1,4 +1,3 @@ - 'use strict'; const nconf = require('nconf'); @@ -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), @@ -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; @@ -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); @@ -102,5 +112,4 @@ recentController.getData = async function (req, url, sort) { return data; }; - require('../promisify')(recentController, ['get']);