|
|
|
@ -278,76 +278,85 @@ var db = require('./database'),
|
|
|
|
|
|
|
|
|
|
Posts.getPostSummaryByPids = function(pids, stripTags, callback) {
|
|
|
|
|
|
|
|
|
|
function getPostSummary(pid, callback) {
|
|
|
|
|
function getPostSummary(post, callback) {
|
|
|
|
|
|
|
|
|
|
async.waterfall([
|
|
|
|
|
function(next) {
|
|
|
|
|
Posts.getPostFields(pid, ['pid', 'tid', 'content', 'uid', 'timestamp', 'deleted'], function(err, postData) {
|
|
|
|
|
if(err) {
|
|
|
|
|
return next(err);
|
|
|
|
|
}
|
|
|
|
|
post.relativeTime = utils.toISOString(post.timestamp);
|
|
|
|
|
|
|
|
|
|
if (parseInt(postData.deleted, 10) === 1) {
|
|
|
|
|
return callback(null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
postData.relativeTime = utils.toISOString(postData.timestamp);
|
|
|
|
|
next(null, postData);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
function(postData, next) {
|
|
|
|
|
Posts.addUserInfoToPost(postData, function() {
|
|
|
|
|
next(null, postData);
|
|
|
|
|
async.parallel([
|
|
|
|
|
function(next) {
|
|
|
|
|
Posts.addUserInfoToPost(post, function() {
|
|
|
|
|
next(null, post);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
function(postData, next) {
|
|
|
|
|
topics.getTopicFields(postData.tid, ['title', 'cid', 'slug', 'deleted'], function(err, topicData) {
|
|
|
|
|
function(next) {
|
|
|
|
|
topics.getTopicFields(post.tid, ['title', 'cid', 'slug', 'deleted'], function(err, topicData) {
|
|
|
|
|
if (err) {
|
|
|
|
|
return callback(err);
|
|
|
|
|
return next(err);
|
|
|
|
|
} else if (parseInt(topicData.deleted, 10) === 1) {
|
|
|
|
|
return callback(null);
|
|
|
|
|
return callback();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
categories.getCategoryFields(topicData.cid, ['name', 'icon', 'slug'], function(err, categoryData) {
|
|
|
|
|
postData.category = categoryData;
|
|
|
|
|
if (err) {
|
|
|
|
|
return next(err);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
post.category = categoryData;
|
|
|
|
|
topicData.title = validator.escape(topicData.title);
|
|
|
|
|
postData.topic = topicData;
|
|
|
|
|
next(null, postData);
|
|
|
|
|
post.topic = topicData;
|
|
|
|
|
next();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
function(postData, next) {
|
|
|
|
|
if (!postData.content) {
|
|
|
|
|
return next(null, postData);
|
|
|
|
|
function(next) {
|
|
|
|
|
if (!post.content) {
|
|
|
|
|
return next();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
postTools.parse(postData.content, function(err, content) {
|
|
|
|
|
postTools.parse(post.content, function(err, content) {
|
|
|
|
|
if(err) {
|
|
|
|
|
return next(err);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(stripTags) {
|
|
|
|
|
var s = S(content);
|
|
|
|
|
postData.content = s.stripTags.apply(s, utils.getTagsExcept(['img', 'i', 'p'])).s;
|
|
|
|
|
post.content = s.stripTags.apply(s, utils.getTagsExcept(['img', 'i', 'p'])).s;
|
|
|
|
|
} else {
|
|
|
|
|
postData.content = content;
|
|
|
|
|
post.content = content;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
next(null, postData);
|
|
|
|
|
next();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
], callback);
|
|
|
|
|
], function(err) {
|
|
|
|
|
callback(err, post);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async.map(pids, getPostSummary, function(err, posts) {
|
|
|
|
|
if(err) {
|
|
|
|
|
var keys = pids.map(function(pid) {
|
|
|
|
|
return 'post:' + pid;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
db.getObjectsFields(keys, ['pid', 'tid', 'content', 'uid', 'timestamp', 'deleted'], function(err, posts) {
|
|
|
|
|
if (err) {
|
|
|
|
|
return callback(err);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
posts = posts.filter(function(p) {
|
|
|
|
|
return p;
|
|
|
|
|
return !!p || parseInt(p.deleted, 10) !== 1;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
callback(null, posts);
|
|
|
|
|
async.map(posts, getPostSummary, function(err, posts) {
|
|
|
|
|
if (err) {
|
|
|
|
|
return callback(err);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
posts = posts.filter(function(post) {
|
|
|
|
|
return !!post;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return callback(null, posts);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|