mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-01-02 13:50:36 +01:00
closes #6741
This commit is contained in:
@@ -61,7 +61,7 @@ module.exports = function (Topics) {
|
||||
_postData = _postData.filter(function (post) {
|
||||
return post && parseInt(post.pid, 10);
|
||||
});
|
||||
user.blocks.filter(uid, _postData, next);
|
||||
handleBlocks(uid, _postData, next);
|
||||
},
|
||||
function (_postData, next) {
|
||||
postData = _postData;
|
||||
@@ -77,7 +77,6 @@ module.exports = function (Topics) {
|
||||
users[user.uid] = user;
|
||||
});
|
||||
|
||||
|
||||
async.each(postData, function (post, next) {
|
||||
// If the post author isn't represented in the retrieved users' data, then it means they were deleted, assume guest.
|
||||
if (!users.hasOwnProperty(post.uid)) {
|
||||
@@ -112,6 +111,57 @@ module.exports = function (Topics) {
|
||||
], callback);
|
||||
};
|
||||
|
||||
function handleBlocks(uid, teasers, callback) {
|
||||
async.mapSeries(teasers, function (postData, nextPost) {
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
user.blocks.is(postData.uid, uid, next);
|
||||
},
|
||||
function (isBlocked, next) {
|
||||
if (!isBlocked) {
|
||||
return nextPost(null, postData);
|
||||
}
|
||||
getPreviousNonBlockedPost(postData, uid, next);
|
||||
},
|
||||
], nextPost);
|
||||
}, callback);
|
||||
}
|
||||
|
||||
function getPreviousNonBlockedPost(postData, uid, callback) {
|
||||
let isBlocked = false;
|
||||
let prevPost = postData;
|
||||
Topics.getPids(postData.tid, function (err, pids) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
async.doWhilst(function (next) {
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
const index = pids.lastIndexOf(String(prevPost.pid));
|
||||
if (index <= 0) {
|
||||
return callback(null, null);
|
||||
}
|
||||
|
||||
posts.getPostFields(pids[index - 1], ['pid', 'uid', 'timestamp', 'tid', 'content'], next);
|
||||
},
|
||||
function (_prevPost, next) {
|
||||
prevPost = _prevPost;
|
||||
user.blocks.is(prevPost.uid, uid, next);
|
||||
},
|
||||
function (_isBlocked, next) {
|
||||
isBlocked = _isBlocked;
|
||||
next();
|
||||
},
|
||||
], next);
|
||||
}, function () {
|
||||
return isBlocked && prevPost && prevPost.pid;
|
||||
}, function (err) {
|
||||
callback(err, prevPost);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Topics.getTeasersByTids = function (tids, uid, callback) {
|
||||
if (typeof uid === 'function') {
|
||||
winston.warn('[Topics.getTeasersByTids] this usage is deprecated please provide uid');
|
||||
|
||||
Reference in New Issue
Block a user