From 989107d9b5aae70bc570304bbbdafe843f714603 Mon Sep 17 00:00:00 2001 From: Opliko <25460763+oplik0@users.noreply.github.com> Date: Wed, 23 Oct 2019 01:25:54 +0200 Subject: [PATCH] feat: Add filter:topic.delete and filter:topic.restore (#7946) (#7989) * Add filter:topic.delete * Don't return undefined data * add topic.restore and pass canRestore to filter * fix some bugs created by conflict resolution and new changes * more readable hook * fix styling for TravisCI * literally just two newlines so that TravisCI builds again --- src/topics/tools.js | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/topics/tools.js b/src/topics/tools.js index 7b3fbe977e..6a1fdf1cd7 100644 --- a/src/topics/tools.js +++ b/src/topics/tools.js @@ -27,35 +27,36 @@ module.exports = function (Topics) { throw new Error('[[error:no-topic]]'); } const canDelete = await privileges.topics.canDelete(tid, uid); - if (!canDelete) { + + const data = await plugins.fireHook(isDelete ? 'filter:topic.delete' : 'filter:topic.restore', { topicData: topicData, uid: uid, isDelete: isDelete, canDelete: canDelete, canRestore: canDelete }); + + if ((!data.canDelete && data.isDelete) || (!data.canRestore && !data.isDelete)) { throw new Error('[[error:no-privileges]]'); } - - if (topicData.deleted && isDelete) { + if (data.topicData.deleted && data.isDelete) { throw new Error('[[error:topic-already-deleted]]'); - } else if (!topicData.deleted && !isDelete) { + } else if (!data.topicData.deleted && !data.isDelete) { throw new Error('[[error:topic-already-restored]]'); } - - if (isDelete) { - await Topics.delete(tid, uid); + if (data.isDelete) { + await Topics.delete(data.topicData.tid, data.uid); } else { - await Topics.restore(tid); + await Topics.restore(data.topicData.tid); } - topicData.deleted = isDelete ? 1 : 0; + data.topicData.deleted = data.isDelete ? 1 : 0; - if (isDelete) { - plugins.fireHook('action:topic.delete', { topic: topicData, uid: uid }); + if (data.isDelete) { + plugins.fireHook('action:topic.delete', { topic: data.topicData, uid: data.uid }); } else { - plugins.fireHook('action:topic.restore', { topic: topicData, uid: uid }); + plugins.fireHook('action:topic.restore', { topic: data.topicData, uid: data.uid }); } - const userData = await user.getUserFields(uid, ['username', 'userslug']); + const userData = await user.getUserFields(data.uid, ['username', 'userslug']); return { - tid: tid, - cid: topicData.cid, - isDelete: isDelete, - uid: uid, + tid: data.topicData.tid, + cid: data.topicData.cid, + isDelete: data.isDelete, + uid: data.uid, user: userData, }; }