mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-27 09:06:15 +01:00
feat: add new hook filteR:topics.getSortedTids
to let plugins replace the logic used to retrieve tids
This commit is contained in:
@@ -25,6 +25,8 @@ module.exports = function (Topics) {
|
|||||||
params.cids = [params.cids];
|
params.cids = [params.cids];
|
||||||
}
|
}
|
||||||
data.tids = await getTids(params);
|
data.tids = await getTids(params);
|
||||||
|
data.tids = await sortTids(data.tids, params);
|
||||||
|
data.tids = await filterTids(data.tids.slice(0, 200), params);
|
||||||
data.topicCount = data.tids.length;
|
data.topicCount = data.tids.length;
|
||||||
data.topics = await getTopics(data.tids, params);
|
data.topics = await getTopics(data.tids, params);
|
||||||
data.nextStart = params.stop + 1;
|
data.nextStart = params.stop + 1;
|
||||||
@@ -32,6 +34,10 @@ module.exports = function (Topics) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
async function getTids(params) {
|
async function getTids(params) {
|
||||||
|
if (plugins.hasListeners('filter:topics.getSortedTids')) {
|
||||||
|
const result = await plugins.fireHook('filter:topics.getSortedTids', { params: params, tids: [] });
|
||||||
|
return result.tids;
|
||||||
|
}
|
||||||
let tids = [];
|
let tids = [];
|
||||||
if (params.term !== 'alltime') {
|
if (params.term !== 'alltime') {
|
||||||
tids = await Topics.getLatestTidsFromSet('topics:tid', 0, -1, params.term);
|
tids = await Topics.getLatestTidsFromSet('topics:tid', 0, -1, params.term);
|
||||||
@@ -45,10 +51,8 @@ module.exports = function (Topics) {
|
|||||||
} else {
|
} else {
|
||||||
tids = await db.getSortedSetRevRange('topics:' + params.sort, 0, 199);
|
tids = await db.getSortedSetRevRange('topics:' + params.sort, 0, 199);
|
||||||
}
|
}
|
||||||
if (params.term !== 'alltime' || params.cids || params.filter === 'watched' || params.floatPinned) {
|
|
||||||
tids = await sortTids(tids, params);
|
return tids;
|
||||||
}
|
|
||||||
return await filterTids(tids.slice(0, 200), params);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getCidTids(params) {
|
async function getCidTids(params) {
|
||||||
@@ -70,6 +74,9 @@ module.exports = function (Topics) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function sortTids(tids, params) {
|
async function sortTids(tids, params) {
|
||||||
|
if (params.term === 'alltime' && !params.cids && params.filter !== 'watched' && !params.floatPinned) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
const topicData = await Topics.getTopicsFields(tids, ['tid', 'lastposttime', 'upvotes', 'downvotes', 'postcount', 'pinned']);
|
const topicData = await Topics.getTopicsFields(tids, ['tid', 'lastposttime', 'upvotes', 'downvotes', 'postcount', 'pinned']);
|
||||||
let sortFn = sortRecent;
|
let sortFn = sortRecent;
|
||||||
if (params.sort === 'posts') {
|
if (params.sort === 'posts') {
|
||||||
|
|||||||
Reference in New Issue
Block a user