mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-02 12:05:57 +01:00
closes #4631
This commit is contained in:
@@ -188,7 +188,7 @@ define('forum/topic/events', [
|
||||
var isDeleted = postEl.hasClass('deleted');
|
||||
postTools.toggle(data.pid, isDeleted);
|
||||
|
||||
if (!app.user.isAdmin && !app.user.isGlobalMod && parseInt(data.uid, 10) !== parseInt(app.user.uid, 10)) {
|
||||
if (!ajaxify.data.privileges.isAdminOrMod && parseInt(data.uid, 10) !== parseInt(app.user.uid, 10)) {
|
||||
postEl.find('[component="post/tools"]').toggleClass('hidden', isDeleted);
|
||||
if (isDeleted) {
|
||||
postEl.find('[component="post/content"]').translateHtml('[[topic:post_is_deleted]]');
|
||||
|
||||
@@ -31,7 +31,7 @@ define('forum/topic/posts', [
|
||||
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 || ((app.user.uid || ajaxify.data.postSharing.length) && !post.deleted);
|
||||
post.display_post_menu = ajaxify.data.privileges.isAdminOrMod || (post.selfPost && !ajaxify.data.locked) || ((app.user.uid || ajaxify.data.postSharing.length) && !post.deleted);
|
||||
});
|
||||
|
||||
updatePostCounts(data.posts);
|
||||
|
||||
@@ -173,15 +173,24 @@ define('forum/topic/threadTools', [
|
||||
return;
|
||||
}
|
||||
|
||||
var isLocked = data.isLocked && !app.user.isAdmin;
|
||||
var isLocked = data.isLocked && !ajaxify.data.privileges.isAdminOrMod;
|
||||
|
||||
components.get('topic/lock').toggleClass('hidden', data.isLocked);
|
||||
components.get('topic/unlock').toggleClass('hidden', !data.isLocked);
|
||||
components.get('topic/reply/container').toggleClass('hidden', isLocked);
|
||||
components.get('topic/reply/locked').toggleClass('hidden', !isLocked);
|
||||
|
||||
threadEl.find('[component="post/reply"], [component="post/quote"], [component="post/edit"], [component="post/delete"]').toggleClass('hidden', isLocked);
|
||||
var hideReply = (data.isLocked || ajaxify.data.deleted) && !ajaxify.data.privileges.isAdminOrMod;
|
||||
|
||||
components.get('topic/reply/container').toggleClass('hidden', hideReply);
|
||||
components.get('topic/reply/locked').toggleClass('hidden', ajaxify.data.privileges.isAdminOrMod || !data.isLocked || ajaxify.data.deleted);
|
||||
|
||||
threadEl.find('[component="post"]:not(.deleted) [component="post/reply"], [component="post"]:not(.deleted) [component="post/quote"]').toggleClass('hidden', hideReply);
|
||||
threadEl.find('[component="post/edit"], [component="post/delete"]').toggleClass('hidden', isLocked);
|
||||
|
||||
threadEl.find('[component="post"][data-uid="'+app.user.uid+'"].deleted [component="post/tools"]').toggleClass('hidden', isLocked);
|
||||
|
||||
$('[component="post/header"] i.fa-lock').toggleClass('hidden', !data.isLocked);
|
||||
$('[component="post/tools"] .dropdown-menu').html('');
|
||||
ajaxify.data.locked = data.isLocked;
|
||||
};
|
||||
|
||||
ThreadTools.setDeleteState = function(data) {
|
||||
@@ -195,9 +204,17 @@ define('forum/topic/threadTools', [
|
||||
components.get('topic/purge').toggleClass('hidden', !data.isDelete);
|
||||
components.get('topic/deleted/message').toggleClass('hidden', !data.isDelete);
|
||||
|
||||
var hideReply = data.isDelete && !ajaxify.data.privileges.isAdminOrMod;
|
||||
|
||||
components.get('topic/reply/container').toggleClass('hidden', hideReply);
|
||||
components.get('topic/reply/locked').toggleClass('hidden', ajaxify.data.privileges.isAdminOrMod || !ajaxify.data.locked || data.isDelete);
|
||||
threadEl.find('[component="post"]:not(.deleted) [component="post/reply"], [component="post"]:not(.deleted) [component="post/quote"]').toggleClass('hidden', hideReply);
|
||||
|
||||
threadEl.toggleClass('deleted', data.isDelete);
|
||||
ajaxify.data.deleted = data.isDelete;
|
||||
};
|
||||
|
||||
|
||||
ThreadTools.setPinnedState = function(data) {
|
||||
var threadEl = components.get('topic');
|
||||
if (parseInt(data.tid, 10) !== parseInt(threadEl.attr('data-tid'), 10)) {
|
||||
@@ -207,6 +224,7 @@ define('forum/topic/threadTools', [
|
||||
components.get('topic/pin').toggleClass('hidden', data.isPinned);
|
||||
components.get('topic/unpin').toggleClass('hidden', !data.isPinned);
|
||||
$('[component="post/header"] i.fa-thumb-tack').toggleClass('hidden', !data.isPinned);
|
||||
ajaxify.data.pinned = data.isPinned;
|
||||
};
|
||||
|
||||
function setFollowState(state) {
|
||||
|
||||
@@ -17,7 +17,7 @@ module.exports = function(privileges) {
|
||||
privileges.topics.get = function(tid, uid, callback) {
|
||||
var topic;
|
||||
async.waterfall([
|
||||
async.apply(topics.getTopicFields, tid, ['cid', 'uid', 'locked']),
|
||||
async.apply(topics.getTopicFields, tid, ['cid', 'uid', 'locked', 'deleted']),
|
||||
function(_topic, next) {
|
||||
topic = _topic;
|
||||
async.parallel({
|
||||
@@ -42,14 +42,19 @@ module.exports = function(privileges) {
|
||||
|
||||
var disabled = parseInt(results.disabled, 10) === 1;
|
||||
var locked = parseInt(topic.locked, 10) === 1;
|
||||
var deleted = parseInt(topic.deleted, 10) === 1;
|
||||
|
||||
var isAdminOrMod = results.isAdministrator || results.isModerator;
|
||||
var editable = isAdminOrMod;
|
||||
var deletable = isAdminOrMod || (results.isOwner && results['topics:delete'][0]);
|
||||
|
||||
plugins.fireHook('filter:privileges.topics.get', {
|
||||
'topics:reply': (results['topics:reply'][0] && !locked) || isAdminOrMod,
|
||||
read: results.read[0] || isAdminOrMod,
|
||||
'topics:reply': (results['topics:reply'][0] && !locked && !deleted) || isAdminOrMod,
|
||||
'topics:read': results['topics:read'][0] || isAdminOrMod,
|
||||
'topics:delete': (results.isOwner && results['topics:delete'][0]) || isAdminOrMod,
|
||||
'posts:edit': (results['posts:edit'][0] && !locked) || isAdminOrMod,
|
||||
'posts:delete': (results['posts:delete'][0] && !locked) || isAdminOrMod,
|
||||
read: results.read[0] || isAdminOrMod,
|
||||
view_thread_tools: editable || deletable,
|
||||
editable: editable,
|
||||
deletable: deletable,
|
||||
@@ -57,9 +62,7 @@ module.exports = function(privileges) {
|
||||
isAdminOrMod: isAdminOrMod,
|
||||
disabled: disabled,
|
||||
tid: tid,
|
||||
uid: uid,
|
||||
'posts:edit': (results['posts:edit'][0] && !locked) || isAdminOrMod,
|
||||
'posts:delete': (results['posts:delete'][0] && !locked) || isAdminOrMod
|
||||
uid: uid
|
||||
}, callback);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -205,6 +205,10 @@ module.exports = function(Topics) {
|
||||
return next(new Error('[[error:topic-locked]]'));
|
||||
}
|
||||
|
||||
if (parseInt(results.topicData.deleted, 10) === 1 && !results.isAdminOrMod) {
|
||||
return next(new Error('[[error:topic-deleted]]'));
|
||||
}
|
||||
|
||||
if (!results.canReply) {
|
||||
return next(new Error('[[error:no-privileges]]'));
|
||||
}
|
||||
|
||||
@@ -145,7 +145,7 @@ module.exports = function(Topics) {
|
||||
post.display_delete_tools = topicPrivileges.isAdminOrMod || (post.selfPost && topicPrivileges['posts:delete']);
|
||||
post.display_moderator_tools = post.display_edit_tools || post.display_delete_tools;
|
||||
post.display_move_tools = topicPrivileges.isAdminOrMod && post.index !== 0;
|
||||
post.display_post_menu = topicPrivileges.isAdminOrMod || post.selfPost || ((loggedIn || topicData.postSharing.length) && !post.deleted);
|
||||
post.display_post_menu = topicPrivileges.isAdminOrMod || (post.selfPost && !topicData.locked) || ((loggedIn || topicData.postSharing.length) && !post.deleted);
|
||||
post.ip = topicPrivileges.isAdminOrMod ? post.ip : undefined;
|
||||
|
||||
if (post.deleted && !(topicPrivileges.isAdminOrMod || post.selfPost)) {
|
||||
|
||||
Reference in New Issue
Block a user