mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-01-10 17:42:52 +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: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'],
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user