refactor: show topic tools if plugins add them

previously regular users couldn't see topic tools if it was something that didnt require privileges
This commit is contained in:
Barış Soner Uşaklı
2025-04-17 12:02:52 -04:00
parent b73fb67b33
commit 87aacc8943
2 changed files with 14 additions and 4 deletions

View File

@@ -23,12 +23,17 @@ privsTopics.get = async function (tid, uid) {
'posts:upvote', 'posts:downvote',
'posts:delete', 'posts:view_deleted', 'read', 'purge',
];
const topicData = await topics.getTopicFields(tid, ['cid', 'uid', 'locked', 'deleted', 'scheduled']);
const [userPrivileges, isAdministrator, isModerator, disabled] = await Promise.all([
const topicData = await topics.getTopicData(tid);
const [userPrivileges, isAdministrator, isModerator, disabled, topicTools] = await Promise.all([
helpers.isAllowedTo(privs, uid, topicData.cid),
user.isAdministrator(uid),
user.isModerator(uid, topicData.cid),
categories.getCategoryField(topicData.cid, 'disabled'),
plugins.hooks.fire('filter:topic.thread_tools', {
topic: topicData,
uid: uid,
tools: [],
}),
]);
const privData = _.zipObject(privs, userPrivileges);
const isOwner = uid > 0 && uid === topicData.uid;
@@ -36,6 +41,7 @@ privsTopics.get = async function (tid, uid) {
const editable = isAdminOrMod;
const deletable = (privData['topics:delete'] && (isOwner || isModerator)) || isAdministrator;
const mayReply = privsTopics.canViewDeletedScheduled(topicData, {}, false, privData['topics:schedule']);
const hasTools = topicTools.tools.length > 0;
return await plugins.hooks.fire('filter:privileges.topics.get', {
'topics:reply': (privData['topics:reply'] && ((!topicData.locked && mayReply) || isModerator)) || isAdministrator,
@@ -52,7 +58,7 @@ privsTopics.get = async function (tid, uid) {
read: privData.read || isAdministrator,
purge: (privData.purge && (isOwner || isModerator)) || isAdministrator,
view_thread_tools: editable || deletable,
view_thread_tools: editable || deletable || hasTools,
editable: editable,
deletable: deletable,
view_deleted: isAdminOrMod || isOwner || privData['posts:view_deleted'],

View File

@@ -25,7 +25,11 @@ module.exports = function (SocketTopics) {
throw new Error('[[error:no-privileges]]');
}
topicData.privileges = userPrivileges;
const result = await plugins.hooks.fire('filter:topic.thread_tools', { topic: topicData, uid: socket.uid, tools: [] });
const result = await plugins.hooks.fire('filter:topic.thread_tools', {
topic: topicData,
uid: socket.uid,
tools: [],
});
result.topic.thread_tools = result.tools;
return result.topic;
};