all files / src/posts/ tools.js

25% Statements 9/36
0% Branches 0/18
8.33% Functions 1/12
25% Lines 9/36
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                                                                                                                                     
'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);
	};
 
};