mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-07 14:35:47 +01:00
closes #5994
This commit is contained in:
@@ -9,5 +9,6 @@
|
|||||||
"topics_marked_as_read.success": "Topics marked as read!",
|
"topics_marked_as_read.success": "Topics marked as read!",
|
||||||
"all-topics": "All Topics",
|
"all-topics": "All Topics",
|
||||||
"new-topics": "New Topics",
|
"new-topics": "New Topics",
|
||||||
"watched-topics": "Watched Topics"
|
"watched-topics": "Watched Topics",
|
||||||
|
"unreplied-topics": "Unreplied Topics"
|
||||||
}
|
}
|
||||||
@@ -32,6 +32,32 @@ helpers.noScriptErrors = function (req, res, error, httpStatus) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
helpers.validFilters = { '': true, new: true, watched: true, unreplied: true };
|
||||||
|
|
||||||
|
helpers.buildFilters = function (url, filter) {
|
||||||
|
return [{
|
||||||
|
name: '[[unread:all-topics]]',
|
||||||
|
url: url,
|
||||||
|
selected: filter === '',
|
||||||
|
filter: '',
|
||||||
|
}, {
|
||||||
|
name: '[[unread:new-topics]]',
|
||||||
|
url: url + '/new',
|
||||||
|
selected: filter === 'new',
|
||||||
|
filter: 'new',
|
||||||
|
}, {
|
||||||
|
name: '[[unread:watched-topics]]',
|
||||||
|
url: url + '/watched',
|
||||||
|
selected: filter === 'watched',
|
||||||
|
filter: 'watched',
|
||||||
|
}, {
|
||||||
|
name: '[[unread:unreplied-topics]]',
|
||||||
|
url: url + '/unreplied',
|
||||||
|
selected: filter === 'unreplied',
|
||||||
|
filter: 'unreplied',
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
|
||||||
helpers.notAllowed = function (req, res, error) {
|
helpers.notAllowed = function (req, res, error) {
|
||||||
plugins.fireHook('filter:helpers.notAllowed', {
|
plugins.fireHook('filter:helpers.notAllowed', {
|
||||||
req: req,
|
req: req,
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
var async = require('async');
|
||||||
var nconf = require('nconf');
|
var nconf = require('nconf');
|
||||||
var topics = require('../topics');
|
var topics = require('../topics');
|
||||||
var meta = require('../meta');
|
var meta = require('../meta');
|
||||||
var helpers = require('./helpers');
|
var helpers = require('./helpers');
|
||||||
|
|
||||||
var popularController = {};
|
var popularController = module.exports;
|
||||||
|
|
||||||
var anonCache = {};
|
var anonCache = {};
|
||||||
var lastUpdateTime = 0;
|
var lastUpdateTime = 0;
|
||||||
@@ -38,11 +39,11 @@ popularController.get = function (req, res, next) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
topics.getPopular(term, req.uid, meta.config.topicsPerList, function (err, topics) {
|
async.waterfall([
|
||||||
if (err) {
|
function (next) {
|
||||||
return next(err);
|
topics.getPopular(term, req.uid, meta.config.topicsPerList, next);
|
||||||
}
|
},
|
||||||
|
function (topics) {
|
||||||
var data = {
|
var data = {
|
||||||
topics: topics,
|
topics: topics,
|
||||||
'feeds:disableRSS': parseInt(meta.config['feeds:disableRSS'], 10) === 1,
|
'feeds:disableRSS': parseInt(meta.config['feeds:disableRSS'], 10) === 1,
|
||||||
@@ -67,7 +68,6 @@ popularController.get = function (req, res, next) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
res.render('popular', data);
|
res.render('popular', data);
|
||||||
});
|
},
|
||||||
|
], next);
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = popularController;
|
|
||||||
|
|||||||
@@ -13,8 +13,6 @@ var pagination = require('../pagination');
|
|||||||
|
|
||||||
var recentController = module.exports;
|
var recentController = module.exports;
|
||||||
|
|
||||||
var validFilter = { '': true, new: true, watched: true };
|
|
||||||
|
|
||||||
recentController.get = function (req, res, next) {
|
recentController.get = function (req, res, next) {
|
||||||
var page = parseInt(req.query.page, 10) || 1;
|
var page = parseInt(req.query.page, 10) || 1;
|
||||||
var stop = 0;
|
var stop = 0;
|
||||||
@@ -23,7 +21,8 @@ recentController.get = function (req, res, next) {
|
|||||||
var filter = req.params.filter || '';
|
var filter = req.params.filter || '';
|
||||||
var categoryData;
|
var categoryData;
|
||||||
var rssToken;
|
var rssToken;
|
||||||
if (!validFilter[filter]) {
|
|
||||||
|
if (!helpers.validFilters[filter]) {
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,22 +61,7 @@ recentController.get = function (req, res, next) {
|
|||||||
data.rssFeedUrl += '?uid=' + req.uid + '&token=' + rssToken;
|
data.rssFeedUrl += '?uid=' + req.uid + '&token=' + rssToken;
|
||||||
}
|
}
|
||||||
data.title = '[[pages:recent]]';
|
data.title = '[[pages:recent]]';
|
||||||
data.filters = [{
|
data.filters = helpers.buildFilters('recent', filter);
|
||||||
name: '[[unread:all-topics]]',
|
|
||||||
url: 'recent',
|
|
||||||
selected: filter === '',
|
|
||||||
filter: '',
|
|
||||||
}, {
|
|
||||||
name: '[[unread:new-topics]]',
|
|
||||||
url: 'recent/new',
|
|
||||||
selected: filter === 'new',
|
|
||||||
filter: 'new',
|
|
||||||
}, {
|
|
||||||
name: '[[unread:watched-topics]]',
|
|
||||||
url: 'recent/watched',
|
|
||||||
selected: filter === 'watched',
|
|
||||||
filter: 'watched',
|
|
||||||
}];
|
|
||||||
|
|
||||||
data.selectedFilter = data.filters.find(function (filter) {
|
data.selectedFilter = data.filters.find(function (filter) {
|
||||||
return filter && filter.selected;
|
return filter && filter.selected;
|
||||||
|
|||||||
@@ -13,8 +13,6 @@ var helpers = require('./helpers');
|
|||||||
|
|
||||||
var unreadController = module.exports;
|
var unreadController = module.exports;
|
||||||
|
|
||||||
var validFilter = { '': true, new: true, watched: true };
|
|
||||||
|
|
||||||
unreadController.get = function (req, res, next) {
|
unreadController.get = function (req, res, next) {
|
||||||
var page = parseInt(req.query.page, 10) || 1;
|
var page = parseInt(req.query.page, 10) || 1;
|
||||||
var results;
|
var results;
|
||||||
@@ -24,7 +22,7 @@ unreadController.get = function (req, res, next) {
|
|||||||
|
|
||||||
async.waterfall([
|
async.waterfall([
|
||||||
function (next) {
|
function (next) {
|
||||||
plugins.fireHook('filter:unread.getValidFilters', { filters: validFilter }, next);
|
plugins.fireHook('filter:unread.getValidFilters', { filters: Object.assign({}, helpers.validFilters) }, next);
|
||||||
},
|
},
|
||||||
function (data, _next) {
|
function (data, _next) {
|
||||||
if (!data.filters[filter]) {
|
if (!data.filters[filter]) {
|
||||||
@@ -72,22 +70,7 @@ unreadController.get = function (req, res, next) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data.title = '[[pages:unread]]';
|
data.title = '[[pages:unread]]';
|
||||||
data.filters = [{
|
data.filters = helpers.buildFilters('unread', filter);
|
||||||
name: '[[unread:all-topics]]',
|
|
||||||
url: 'unread',
|
|
||||||
selected: filter === '',
|
|
||||||
filter: '',
|
|
||||||
}, {
|
|
||||||
name: '[[unread:new-topics]]',
|
|
||||||
url: 'unread/new',
|
|
||||||
selected: filter === 'new',
|
|
||||||
filter: 'new',
|
|
||||||
}, {
|
|
||||||
name: '[[unread:watched-topics]]',
|
|
||||||
url: 'unread/watched',
|
|
||||||
selected: filter === 'watched',
|
|
||||||
filter: 'watched',
|
|
||||||
}];
|
|
||||||
|
|
||||||
data.selectedFilter = data.filters.find(function (filter) {
|
data.selectedFilter = data.filters.find(function (filter) {
|
||||||
return filter && filter.selected;
|
return filter && filter.selected;
|
||||||
@@ -105,10 +88,10 @@ unreadController.unreadTotal = function (req, res, next) {
|
|||||||
|
|
||||||
async.waterfall([
|
async.waterfall([
|
||||||
function (next) {
|
function (next) {
|
||||||
plugins.fireHook('filter:unread.getValidFilters', { filters: validFilter }, next);
|
plugins.fireHook('filter:unread.getValidFilters', { filters: Object.assign({}, helpers.validFilters) }, next);
|
||||||
},
|
},
|
||||||
function (data, _next) {
|
function (data, _next) {
|
||||||
if (!validFilter[filter]) {
|
if (!data.filters[filter]) {
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
topics.getTotalUnread(req.uid, filter, _next);
|
topics.getTotalUnread(req.uid, filter, _next);
|
||||||
|
|||||||
@@ -61,6 +61,8 @@ module.exports = function (Topics) {
|
|||||||
Topics.filterWatchedTids(tids, uid, next);
|
Topics.filterWatchedTids(tids, uid, next);
|
||||||
} else if (filter === 'new') {
|
} else if (filter === 'new') {
|
||||||
Topics.filterNewTids(tids, uid, next);
|
Topics.filterNewTids(tids, uid, next);
|
||||||
|
} else if (filter === 'unreplied') {
|
||||||
|
Topics.filterUnrepliedTids(tids, next);
|
||||||
} else {
|
} else {
|
||||||
Topics.filterNotIgnoredTids(tids, uid, next);
|
Topics.filterNotIgnoredTids(tids, uid, next);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -125,6 +125,8 @@ module.exports = function (Topics) {
|
|||||||
|
|
||||||
if (params.filter === 'watched') {
|
if (params.filter === 'watched') {
|
||||||
Topics.filterWatchedTids(tids, uid, next);
|
Topics.filterWatchedTids(tids, uid, next);
|
||||||
|
} else if (params.filter === 'unreplied') {
|
||||||
|
Topics.filterUnrepliedTids(tids, next);
|
||||||
} else {
|
} else {
|
||||||
next(null, tids);
|
next(null, tids);
|
||||||
}
|
}
|
||||||
@@ -390,4 +392,18 @@ module.exports = function (Topics) {
|
|||||||
},
|
},
|
||||||
], callback);
|
], callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Topics.filterUnrepliedTids = function (tids, callback) {
|
||||||
|
async.waterfall([
|
||||||
|
function (next) {
|
||||||
|
db.sortedSetScores('topics:posts', tids, next);
|
||||||
|
},
|
||||||
|
function (scores, next) {
|
||||||
|
tids = tids.filter(function (tid, index) {
|
||||||
|
return tid && scores[index] <= 1;
|
||||||
|
});
|
||||||
|
next(null, tids);
|
||||||
|
},
|
||||||
|
], callback);
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user