You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nodebb/src/posts/tools.js

76 lines
1.7 KiB
JavaScript

'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.canDelete(pid, uid, next);
},
function (canDelete, next) {
if (!canDelete.flag) {
return next(new Error(canDelete.message));
}
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);
};
};