1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | 1× 1× 1× 1× 1× 1× 1× 1× 1× | 'use strict'; var async = require('async'); var privileges = require('../privileges'); var cache = require('./cache'); module.exports = function(Posts) { Posts.tools = {}; Posts.tools.delete = function(uid, pid, callback) { togglePostDelete(uid, pid, true, callback); }; Posts.tools.restore = function(uid, pid, callback) { togglePostDelete(uid, pid, false, callback); }; function togglePostDelete(uid, pid, isDelete, callback) { async.waterfall([ function (next) { Posts.exists(pid, next); }, function (exists, next) { if (!exists) { return next(new Error('[[error:no-post]]')); } Posts.getPostField(pid, 'deleted', next); }, function (deleted, next) { if (parseInt(deleted, 10) === 1 && isDelete) { return next(new Error('[[error:post-already-deleted]]')); } else if(parseInt(deleted, 10) !== 1 && !isDelete) { return next(new Error('[[error:post-already-restored]]')); } privileges.posts.canEdit(pid, uid, next); }, function (canEdit, next) { if (!canEdit) { return next(new Error('[[error:no-privileges]]')); } if (isDelete) { cache.del(pid); Posts.delete(pid, uid, next); } else { Posts.restore(pid, uid, function(err, postData) { if (err) { return next(err); } Posts.parsePost(postData, next); }); } } ], callback); } Posts.tools.purge = function(uid, pid, callback) { async.waterfall([ function (next) { privileges.posts.canPurge(pid, uid, next); }, function (canPurge, next) { if (!canPurge) { return next(new Error('[[error:no-privileges]]')); } cache.del(pid); Posts.purge(pid, uid, next); } ], callback); }; }; |