'use strict'; var async = require('async'), winston = require('winston'), meta = require('../meta'), posts = require('../posts'), topics = require('../topics'), user = require('../user'), helpers = require('./helpers'), groups = require('../groups'), categories = require('../categories'), plugins = require('../plugins'); module.exports = function(privileges) { privileges.posts = {}; privileges.posts.get = function(pids, uid, callback) { if (!Array.isArray(pids) || !pids.length) { return callback(null, []); } async.parallel({ manage: function(next) { helpers.hasEnoughReputationFor(['privileges:manage_content', 'privileges:manage_topic'], uid, next); }, isAdministrator: function(next) { user.isAdministrator(uid, next); }, }, function(err, userResults) { if(err) { return callback(err); } var userPriv = userResults.isAdministrator || userResults.manage; async.parallel({ isOwner: function(next) { posts.isOwner(pids, uid, next); }, isModerator: function(next) { posts.isModerator(pids, uid, next); } }, function(err, postResults) { if (err) { return callback(err); } var privileges = []; for (var i=0; i postEditDuration * 1000) { return callback(null, {isEditExpired: true}); } topics.isLocked(postData.tid, next); }, function(isLocked, next) { if (isLocked) { return callback(null, {isLocked: true}); } helpers.some([ function(next) { posts.isOwner(pid, uid, next); }, function(next) { helpers.hasEnoughReputationFor(['privileges:manage_content', 'privileges:manage_topic'], uid, next); } ], function(err, editable) { next(err, {editable: editable}); }); } ], callback); } function isPostTopicLocked(pid, callback) { posts.getPostField(pid, 'tid', function(err, tid) { if (err) { return callback(err); } topics.isLocked(tid, callback); }); } function isAdminOrMod(pid, uid, callback) { helpers.some([ function(next) { posts.getCidByPid(pid, function(err, cid) { if (err || !cid) { return next(err, false); } user.isModerator(uid, cid, next); }); }, function(next) { user.isAdministrator(uid, next); } ], callback); } };