mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-02-26 08:31:22 +01:00
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:
@@ -23,12 +23,17 @@ privsTopics.get = async function (tid, uid) {
|
|||||||
'posts:upvote', 'posts:downvote',
|
'posts:upvote', 'posts:downvote',
|
||||||
'posts:delete', 'posts:view_deleted', 'read', 'purge',
|
'posts:delete', 'posts:view_deleted', 'read', 'purge',
|
||||||
];
|
];
|
||||||
const topicData = await topics.getTopicFields(tid, ['cid', 'uid', 'locked', 'deleted', 'scheduled']);
|
const topicData = await topics.getTopicData(tid);
|
||||||
const [userPrivileges, isAdministrator, isModerator, disabled] = await Promise.all([
|
const [userPrivileges, isAdministrator, isModerator, disabled, topicTools] = await Promise.all([
|
||||||
helpers.isAllowedTo(privs, uid, topicData.cid),
|
helpers.isAllowedTo(privs, uid, topicData.cid),
|
||||||
user.isAdministrator(uid),
|
user.isAdministrator(uid),
|
||||||
user.isModerator(uid, topicData.cid),
|
user.isModerator(uid, topicData.cid),
|
||||||
categories.getCategoryField(topicData.cid, 'disabled'),
|
categories.getCategoryField(topicData.cid, 'disabled'),
|
||||||
|
plugins.hooks.fire('filter:topic.thread_tools', {
|
||||||
|
topic: topicData,
|
||||||
|
uid: uid,
|
||||||
|
tools: [],
|
||||||
|
}),
|
||||||
]);
|
]);
|
||||||
const privData = _.zipObject(privs, userPrivileges);
|
const privData = _.zipObject(privs, userPrivileges);
|
||||||
const isOwner = uid > 0 && uid === topicData.uid;
|
const isOwner = uid > 0 && uid === topicData.uid;
|
||||||
@@ -36,6 +41,7 @@ privsTopics.get = async function (tid, uid) {
|
|||||||
const editable = isAdminOrMod;
|
const editable = isAdminOrMod;
|
||||||
const deletable = (privData['topics:delete'] && (isOwner || isModerator)) || isAdministrator;
|
const deletable = (privData['topics:delete'] && (isOwner || isModerator)) || isAdministrator;
|
||||||
const mayReply = privsTopics.canViewDeletedScheduled(topicData, {}, false, privData['topics:schedule']);
|
const mayReply = privsTopics.canViewDeletedScheduled(topicData, {}, false, privData['topics:schedule']);
|
||||||
|
const hasTools = topicTools.tools.length > 0;
|
||||||
|
|
||||||
return await plugins.hooks.fire('filter:privileges.topics.get', {
|
return await plugins.hooks.fire('filter:privileges.topics.get', {
|
||||||
'topics:reply': (privData['topics:reply'] && ((!topicData.locked && mayReply) || isModerator)) || isAdministrator,
|
'topics:reply': (privData['topics:reply'] && ((!topicData.locked && mayReply) || isModerator)) || isAdministrator,
|
||||||
@@ -52,7 +58,7 @@ privsTopics.get = async function (tid, uid) {
|
|||||||
read: privData.read || isAdministrator,
|
read: privData.read || isAdministrator,
|
||||||
purge: (privData.purge && (isOwner || isModerator)) || isAdministrator,
|
purge: (privData.purge && (isOwner || isModerator)) || isAdministrator,
|
||||||
|
|
||||||
view_thread_tools: editable || deletable,
|
view_thread_tools: editable || deletable || hasTools,
|
||||||
editable: editable,
|
editable: editable,
|
||||||
deletable: deletable,
|
deletable: deletable,
|
||||||
view_deleted: isAdminOrMod || isOwner || privData['posts:view_deleted'],
|
view_deleted: isAdminOrMod || isOwner || privData['posts:view_deleted'],
|
||||||
|
|||||||
@@ -25,7 +25,11 @@ module.exports = function (SocketTopics) {
|
|||||||
throw new Error('[[error:no-privileges]]');
|
throw new Error('[[error:no-privileges]]');
|
||||||
}
|
}
|
||||||
topicData.privileges = userPrivileges;
|
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;
|
result.topic.thread_tools = result.tools;
|
||||||
return result.topic;
|
return result.topic;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user