diff --git a/public/language/en-GB/aria.json b/public/language/en-GB/aria.json new file mode 100644 index 0000000000..0345033e96 --- /dev/null +++ b/public/language/en-GB/aria.json @@ -0,0 +1,4 @@ +{ + "post-sort-option": "Post sort option, %1", + "topic-sort-option": "Topic sort option, %1" +} \ No newline at end of file diff --git a/src/controllers/category.js b/src/controllers/category.js index 3c08c2a643..2f0f7d85ad 100644 --- a/src/controllers/category.js +++ b/src/controllers/category.js @@ -20,6 +20,7 @@ const categoryController = module.exports; const url = nconf.get('url'); const relative_path = nconf.get('relative_path'); +const validSorts = ['newest_to_oldest', 'oldest_to_newest', 'most_posts', 'most_votes', 'most_views']; categoryController.get = async function (req, res, next) { const cid = req.params.category_id; @@ -72,12 +73,14 @@ categoryController.get = async function (req, res, next) { const start = ((currentPage - 1) * userSettings.topicsPerPage) + topicIndex; const stop = start + userSettings.topicsPerPage - 1; + const sort = validSorts.includes(req.query.sort) ? req.query.sort : userSettings.categoryTopicSort; + const categoryData = await categories.getCategoryById({ uid: req.uid, cid: cid, start: start, stop: stop, - sort: req.query.sort || userSettings.categoryTopicSort, + sort: sort, settings: userSettings, query: req.query, tag: req.query.tag, @@ -129,6 +132,7 @@ categoryController.get = async function (req, res, next) { categoryData.topicIndex = topicIndex; categoryData.selectedTag = tagData.selectedTag; categoryData.selectedTags = tagData.selectedTags; + categoryData.sortOptionLabel = `[[topic:${validator.escape(String(sort)).replace(/_/g, '-')}]]`; if (!meta.config['feeds:disableRSS']) { categoryData.rssFeedUrl = `${url}/category/${categoryData.cid}.rss`; diff --git a/src/controllers/topics.js b/src/controllers/topics.js index 16e1cad3a7..9ea025e038 100644 --- a/src/controllers/topics.js +++ b/src/controllers/topics.js @@ -2,6 +2,7 @@ const nconf = require('nconf'); const qs = require('querystring'); +const validator = require('validator'); const user = require('../user'); const meta = require('../meta'); @@ -19,6 +20,7 @@ const topicsController = module.exports; const url = nconf.get('url'); const relative_path = nconf.get('relative_path'); const upload_url = nconf.get('upload_url'); +const validSorts = ['oldest_to_newest', 'newest_to_oldest', 'most_votes']; topicsController.get = async function getTopic(req, res, next) { const tid = req.params.topic_id; @@ -69,7 +71,7 @@ topicsController.get = async function getTopic(req, res, next) { return helpers.redirect(res, `/topic/${tid}/${req.params.slug}${postIndex > topicData.postcount ? `/${topicData.postcount}` : ''}${generateQueryString(req.query)}`); } postIndex = Math.max(1, postIndex); - const sort = req.query.sort || settings.topicPostSort; + const sort = validSorts.includes(req.query.sort) ? req.query.sort : settings.topicPostSort; const set = sort === 'most_votes' ? `tid:${tid}:posts:votes` : `tid:${tid}:posts`; const reverse = sort === 'newest_to_oldest' || sort === 'most_votes'; @@ -105,6 +107,7 @@ topicsController.get = async function getTopic(req, res, next) { topicData.allowMultipleBadges = meta.config.allowMultipleBadges === 1; topicData.privateUploads = meta.config.privateUploads === 1; topicData.showPostPreviewsOnHover = meta.config.showPostPreviewsOnHover === 1; + topicData.sortOptionLabel = `[[topic:${validator.escape(String(sort)).replace(/_/g, '-')}]]`; if (!meta.config['feeds:disableRSS']) { topicData.rssFeedUrl = `${relative_path}/topic/${topicData.tid}.rss`; if (req.loggedIn) {