v1.18.x
Barış Soner Uşaklı 7 years ago
parent bd0983c6a1
commit 6f18cf368b

@ -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');

Loading…
Cancel
Save