diff --git a/src/privileges/topics.js b/src/privileges/topics.js index a53f34bd98..f0134bf304 100644 --- a/src/privileges/topics.js +++ b/src/privileges/topics.js @@ -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'], diff --git a/src/socket.io/topics/tools.js b/src/socket.io/topics/tools.js index baafd88d1a..80bab41662 100644 --- a/src/socket.io/topics/tools.js +++ b/src/socket.io/topics/tools.js @@ -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; };