action:post.upvote / action:post.downvote now sends current status; new: action:post.unvote

v1.18.x
psychobunny 11 years ago
parent 0d6be40238
commit 8c98f47688

@ -122,7 +122,7 @@ var async = require('async'),
}); });
} }
Favourites.upvote = function(pid, uid, callback) { Favourites.upvote = function(pid, uid, commmand, callback) {
if (parseInt(meta.config['reputation:disabled'], 10) === 1) { if (parseInt(meta.config['reputation:disabled'], 10) === 1) {
return callback(new Error('[[error:reputation-system-disabled]]')); return callback(new Error('[[error:reputation-system-disabled]]'));
} }
@ -131,16 +131,12 @@ var async = require('async'),
if (err) { if (err) {
return callback(err); return callback(err);
} }
plugins.fireHook('action:post.upvote', {
pid: pid,
uid: uid
});
callback(null, votes); callback(null, votes);
}); });
}; };
Favourites.downvote = function(pid, uid, callback) { Favourites.downvote = function(pid, uid, command, callback) {
if (parseInt(meta.config['reputation:disabled'], 10) === 1) { if (parseInt(meta.config['reputation:disabled'], 10) === 1) {
return callback(new Error('[[error:reputation-system-disabled]]')); return callback(new Error('[[error:reputation-system-disabled]]'));
} }
@ -162,17 +158,14 @@ var async = require('async'),
if (err) { if (err) {
return callback(err); return callback(err);
} }
plugins.fireHook('action:post.downvote', {
pid: pid,
uid: uid
});
callback(null, votes); callback(null, votes);
}); });
}); });
}; };
function toggleVote(type, pid, uid, callback) { function toggleVote(type, pid, uid, callback) {
Favourites.unvote(pid, uid, function(err) { Favourites.unvote(pid, uid, type, function(err) {
if (err) { if (err) {
return callback(err); return callback(err);
} }
@ -181,24 +174,43 @@ var async = require('async'),
}); });
} }
Favourites.unvote = function(pid, uid, callback) { Favourites.unvote = function(pid, uid, command, callback) {
Favourites.hasVoted(pid, uid, function(err, voteStatus) { Favourites.hasVoted(pid, uid, function(err, voteStatus) {
if (err) { if (err) {
return callback(err); return callback(err);
} }
var hook,
current = voteStatus.upvoted ? 'upvote' : 'downvote';
if (voteStatus.upvoted && command === 'downvote' || voteStatus.downvoted && command === 'upvote') {
hook = command;
} else if (voteStatus.upvoted || voteStatus.downvoted) {
hook = 'unvote';
} else {
hook = command;
current = 'unvote';
}
plugins.fireHook('action:post.' + hook, {
pid: pid,
uid: uid,
current: current
});
if (!voteStatus || (!voteStatus.upvoted && !voteStatus.downvoted)) { if (!voteStatus || (!voteStatus.upvoted && !voteStatus.downvoted)) {
return callback(); return callback();
} }
vote(voteStatus.upvoted ? 'downvote' : 'upvote', true, pid, uid, callback); vote(voteStatus.upvoted ? 'downvote' : 'upvote', true, pid, uid, callback);
}); });
}; }
Favourites.hasVoted = function(pid, uid, callback) { Favourites.hasVoted = function(pid, uid, callback) {
if (!parseInt(uid, 10)) { if (!parseInt(uid, 10)) {
return callback(null, {upvoted: false, downvoted: false}); return callback(null, {upvoted: false, downvoted: false});
} }
db.isMemberOfSets(['pid:' + pid + ':upvote', 'pid:' + pid + ':downvote'], uid, function(err, hasVoted) { db.isMemberOfSets(['pid:' + pid + ':upvote', 'pid:' + pid + ':downvote'], uid, function(err, hasVoted) {
if (err) { if (err) {
return callback(err); return callback(err);
@ -231,11 +243,11 @@ var async = require('async'),
}, callback); }, callback);
}; };
Favourites.favourite = function (pid, uid, callback) { Favourites.favourite = function (pid, uid, command, callback) {
toggleFavourite('favourite', pid, uid, callback); toggleFavourite('favourite', pid, uid, callback);
}; };
Favourites.unfavourite = function(pid, uid, callback) { Favourites.unfavourite = function(pid, uid, command, callback) {
toggleFavourite('unfavourite', pid, uid, callback); toggleFavourite('unfavourite', pid, uid, callback);
}; };

@ -115,7 +115,7 @@ function favouriteCommand(command, eventName, socket, data, callback) {
return callback(new Error('[[error:post-deleted]]')); return callback(new Error('[[error:post-deleted]]'));
} }
favourites[command](data.pid, socket.uid, function(err, result) { favourites[command](data.pid, socket.uid, command, function(err, result) {
if (err) { if (err) {
return callback(err); return callback(err);
} }

Loading…
Cancel
Save