From 2bf275fe2961d0e40eefef26696a31cc36612f87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Sun, 10 Dec 2017 11:02:48 -0500 Subject: [PATCH] #6158 --- install/package.json | 4 ++-- public/language/en-GB/global.json | 1 + src/categories/topics.js | 4 +++- src/routes/feeds.js | 29 +++++++++++++++++++++++++++++ test/controllers.js | 9 +++++++++ test/feeds.js | 1 + 6 files changed, 45 insertions(+), 3 deletions(-) diff --git a/install/package.json b/install/package.json index a32f4fe12b..846803799b 100644 --- a/install/package.json +++ b/install/package.json @@ -69,9 +69,9 @@ "nodebb-plugin-spam-be-gone": "0.5.1", "nodebb-rewards-essentials": "0.0.9", "nodebb-theme-lavender": "5.0.0", - "nodebb-theme-persona": "7.2.5", + "nodebb-theme-persona": "7.2.6", "nodebb-theme-slick": "1.1.2", - "nodebb-theme-vanilla": "8.1.2", + "nodebb-theme-vanilla": "8.1.3", "nodebb-widget-essentials": "4.0.1", "nodemailer": "4.4.0", "passport": "^0.4.0", diff --git a/public/language/en-GB/global.json b/public/language/en-GB/global.json index 741fb4d2b8..b61d8f27b9 100644 --- a/public/language/en-GB/global.json +++ b/public/language/en-GB/global.json @@ -66,6 +66,7 @@ "topics": "Topics", "posts": "Posts", "best": "Best", + "votes": "Votes", "upvoters": "Upvoters", "upvoted": "Upvoted", "downvoters": "Downvoters", diff --git a/src/categories/topics.js b/src/categories/topics.js index 2a3bd71e5a..32022b7a96 100644 --- a/src/categories/topics.js +++ b/src/categories/topics.js @@ -138,6 +138,8 @@ module.exports = function (Categories) { if (sort === 'most_posts') { set = 'cid:' + cid + ':tids:posts'; + } else if (sort === 'most_votes') { + set = 'cid:' + cid + ':tids:votes'; } if (data.targetUid) { @@ -163,7 +165,7 @@ module.exports = function (Categories) { Categories.getSortedSetRangeDirection = function (sort, callback) { sort = sort || 'newest_to_oldest'; - var direction = sort === 'newest_to_oldest' || sort === 'most_posts' ? 'highest-to-lowest' : 'lowest-to-highest'; + var direction = sort === 'newest_to_oldest' || sort === 'most_posts' || sort === 'most_votes' ? 'highest-to-lowest' : 'lowest-to-highest'; plugins.fireHook('filter:categories.getSortedSetRangeDirection', { sort: sort, direction: direction, diff --git a/src/routes/feeds.js b/src/routes/feeds.js index 5aaf3590c2..eba2fee4ee 100644 --- a/src/routes/feeds.js +++ b/src/routes/feeds.js @@ -19,6 +19,7 @@ module.exports = function (app, middleware) { app.get('/topic/:topic_id.rss', middleware.maintenanceMode, generateForTopic); app.get('/category/:category_id.rss', middleware.maintenanceMode, generateForCategory); app.get('/recent.rss', middleware.maintenanceMode, generateForRecent); + app.get('/top.rss', middleware.maintenanceMode, generateForTop); app.get('/popular.rss', middleware.maintenanceMode, generateForPopular); app.get('/popular/:term.rss', middleware.maintenanceMode, generateForPopular); app.get('/recentposts.rss', middleware.maintenanceMode, generateForRecentPosts); @@ -209,6 +210,34 @@ function generateForRecent(req, res, next) { ], next); } +function generateForTop(req, res, next) { + if (parseInt(meta.config['feeds:disableRSS'], 10) === 1) { + return controllers404.send404(req, res); + } + + async.waterfall([ + function (next) { + if (req.query.token && req.query.uid) { + db.getObjectField('user:' + req.query.uid, 'rss_token', next); + } else { + next(null, null); + } + }, + function (token, next) { + next(null, token && token === req.query.token ? req.query.uid : req.uid); + }, + function (uid, next) { + generateForTopics({ + uid: uid, + title: 'Top Voted Topics', + description: 'A list of topics that have received the most votes', + feed_url: '/top.rss', + site_url: '/top', + }, 'topics:votes', req, res, next); + }, + ], next); +} + function generateForPopular(req, res, next) { if (parseInt(meta.config['feeds:disableRSS'], 10) === 1) { return controllers404.send404(req, res); diff --git a/test/controllers.js b/test/controllers.js index 43dd40b093..b4b9d40d54 100644 --- a/test/controllers.js +++ b/test/controllers.js @@ -449,6 +449,15 @@ describe('Controllers', function () { }); }); + it('should load recent rss feed', function (done) { + request(nconf.get('url') + '/top.rss', function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + assert(body); + done(); + }); + }); + it('should load popular rss feed', function (done) { request(nconf.get('url') + '/popular.rss', function (err, res, body) { assert.ifError(err); diff --git a/test/feeds.js b/test/feeds.js index 4ed9fe0937..2d8156404c 100644 --- a/test/feeds.js +++ b/test/feeds.js @@ -53,6 +53,7 @@ describe('feeds', function () { nconf.get('url') + '/topic/' + tid + '.rss', nconf.get('url') + '/category/' + cid + '.rss', nconf.get('url') + '/recent.rss', + nconf.get('url') + '/top.rss', nconf.get('url') + '/popular.rss', nconf.get('url') + '/popular/day.rss', nconf.get('url') + '/recentposts.rss',