diff --git a/public/openapi/read/topic/topic_id.yaml b/public/openapi/read/topic/topic_id.yaml index 129aab5927..88081d23dc 100644 --- a/public/openapi/read/topic/topic_id.yaml +++ b/public/openapi/read/topic/topic_id.yaml @@ -263,6 +263,8 @@ get: type: number selfPost: type: boolean + topicOwnerPost: + type: boolean display_edit_tools: type: boolean display_delete_tools: diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index 1f46cbbfc3..8e14941524 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -47,11 +47,16 @@ define('forum/topic/posts', [ Posts.modifyPostsByPrivileges = function (posts) { posts.forEach(function (post) { post.selfPost = !!app.user.uid && parseInt(post.uid, 10) === parseInt(app.user.uid, 10); + post.topicOwnerPost = parseInt(post.uid, 10) === parseInt(ajaxify.data.uid, 10); + post.display_edit_tools = (ajaxify.data.privileges['posts:edit'] && post.selfPost) || ajaxify.data.privileges.isAdminOrMod; post.display_delete_tools = (ajaxify.data.privileges['posts:delete'] && post.selfPost) || ajaxify.data.privileges.isAdminOrMod; post.display_moderator_tools = post.display_edit_tools || post.display_delete_tools; post.display_move_tools = ajaxify.data.privileges.isAdminOrMod; - post.display_post_menu = ajaxify.data.privileges.isAdminOrMod || (post.selfPost && !ajaxify.data.locked) || ((app.user.uid || ajaxify.data.postSharing.length) && !post.deleted); + post.display_post_menu = ajaxify.data.privileges.isAdminOrMod || + (post.selfPost && !ajaxify.data.locked && !post.deleted) || + (post.selfPost && post.deleted && parseInt(post.deleterUid, 10) === parseInt(app.user.uid, 10)) || + ((app.user.uid || ajaxify.data.postSharing.length) && !post.deleted); }); }; diff --git a/src/topics/posts.js b/src/topics/posts.js index 1268630474..ae631be1ae 100644 --- a/src/topics/posts.js +++ b/src/topics/posts.js @@ -28,7 +28,7 @@ module.exports = function (Topics) { if (!Array.isArray(postData) || !postData.length) { return []; } - var pids = postData.map(post => post && post.pid); + const pids = postData.map(post => post && post.pid); async function getPostUserData(field, method) { const uids = _.uniq(postData.filter(p => p && parseInt(p[field], 10) >= 0).map(p => p[field])); @@ -80,9 +80,10 @@ module.exports = function (Topics) { }; Topics.modifyPostsByPrivilege = function (topicData, topicPrivileges) { - var loggedIn = parseInt(topicPrivileges.uid, 10) > 0; + const loggedIn = parseInt(topicPrivileges.uid, 10) > 0; topicData.posts.forEach(function (post) { if (post) { + post.topicOwnerPost = parseInt(topicData.uid, 10) === parseInt(post.uid, 10); post.display_edit_tools = topicPrivileges.isAdminOrMod || (post.selfPost && topicPrivileges['posts:edit']); post.display_delete_tools = topicPrivileges.isAdminOrMod || (post.selfPost && topicPrivileges['posts:delete']); post.display_moderator_tools = post.display_edit_tools || post.display_delete_tools;