diff --git a/public/src/client/topic/postTools.js b/public/src/client/topic/postTools.js index df0511f0fc..2f5a617572 100644 --- a/public/src/client/topic/postTools.js +++ b/public/src/client/topic/postTools.js @@ -201,10 +201,7 @@ define('forum/topic/postTools', ['composer', 'share', 'navigator'], function(com } function showVotes(pid) { - if (!app.isAdmin) { - return; - } - socket.emit('admin.getVoters', pid, function(err, data) { + socket.emit('posts.getVoters', {pid: pid, cid: ajaxify.variables.get('category_id')}, function(err, data) { if (err) { return app.alertError(err.message); } diff --git a/src/socket.io/admin.js b/src/socket.io/admin.js index a2f09aa8b1..de824c3457 100644 --- a/src/socket.io/admin.js +++ b/src/socket.io/admin.js @@ -283,35 +283,6 @@ SocketAdmin.getMoreFlags = function(socket, after, callback) { }); }; -SocketAdmin.getVoters = function(socket, pid, callback) { - async.parallel({ - upvoteUids: function(next) { - db.getSetMembers('pid:' + pid + ':upvote', next); - }, - downvoteUids: function(next) { - db.getSetMembers('pid:' + pid + ':downvote', next); - } - }, function(err, results) { - if (err) { - return callback(err); - } - async.parallel({ - upvoters: function(next) { - user.getMultipleUserFields(results.upvoteUids, ['username', 'userslug', 'picture'], next); - }, - upvoteCount: function(next) { - next(null, results.upvoteUids.length); - }, - downvoters: function(next) { - user.getMultipleUserFields(results.downvoteUids, ['username', 'userslug', 'picture'], next); - }, - downvoteCount: function(next) { - next(null, results.downvoteUids.length); - } - }, callback); - }); -}; - SocketAdmin.takeHeapSnapshot = function(socket, data, callback) { require('heapdump').writeSnapshot(callback); }; diff --git a/src/socket.io/posts.js b/src/socket.io/posts.js index 3794b2db3e..46abd5b71e 100644 --- a/src/socket.io/posts.js +++ b/src/socket.io/posts.js @@ -69,6 +69,55 @@ SocketPosts.reply = function(socket, data, callback) { }); }; +SocketPosts.getVoters = function(socket, data, callback) { + var pid = data.pid, + cid = data.cid, + uid = socket.uid; + + async.parallel([ + function(next) { + user.isAdministrator(uid, next); + }, + function(next) { + user.isModerator(uid, cid, next); + } + ], function(err, tests) { + if (tests[0] || tests[1]) { + getVoters(pid, callback); + } + }) + +}; + +function getVoters(pid, callback) { + async.parallel({ + upvoteUids: function(next) { + db.getSetMembers('pid:' + pid + ':upvote', next); + }, + downvoteUids: function(next) { + db.getSetMembers('pid:' + pid + ':downvote', next); + } + }, function(err, results) { + if (err) { + return callback(err); + } + async.parallel({ + upvoters: function(next) { + user.getMultipleUserFields(results.upvoteUids, ['username', 'userslug', 'picture'], next); + }, + upvoteCount: function(next) { + next(null, results.upvoteUids.length); + }, + downvoters: function(next) { + user.getMultipleUserFields(results.downvoteUids, ['username', 'userslug', 'picture'], next); + }, + downvoteCount: function(next) { + next(null, results.downvoteUids.length); + } + }, callback); + }); +} + SocketPosts.upvote = function(socket, data, callback) { favouriteCommand(socket, 'upvote', 'voted', 'notifications:upvoted_your_post_in', data, callback); };