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.
74 lines
1.6 KiB
JavaScript
74 lines
1.6 KiB
JavaScript
'use strict';
|
|
|
|
var async = require('async'),
|
|
|
|
posts = require('./posts'),
|
|
privileges = require('./privileges'),
|
|
cache = require('./posts/cache');
|
|
|
|
(function(PostTools) {
|
|
|
|
PostTools.edit = function(data, callback) {
|
|
posts.edit(data, callback);
|
|
};
|
|
|
|
PostTools.delete = function(uid, pid, callback) {
|
|
togglePostDelete(uid, pid, true, callback);
|
|
};
|
|
|
|
PostTools.restore = function(uid, pid, callback) {
|
|
togglePostDelete(uid, pid, false, callback);
|
|
};
|
|
|
|
function togglePostDelete(uid, pid, isDelete, callback) {
|
|
async.waterfall([
|
|
function(next) {
|
|
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]]'));
|
|
}
|
|
next();
|
|
}
|
|
], function(err) {
|
|
if (err) {
|
|
return callback(err);
|
|
}
|
|
|
|
if (isDelete) {
|
|
cache.del(pid);
|
|
posts.delete(pid, callback);
|
|
} else {
|
|
posts.restore(pid, function(err, postData) {
|
|
if (err) {
|
|
return callback(err);
|
|
}
|
|
posts.parsePost(postData, callback);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
PostTools.purge = function(uid, pid, callback) {
|
|
privileges.posts.canEdit(pid, uid, function(err, canEdit) {
|
|
if (err || !canEdit) {
|
|
return callback(err || new Error('[[error:no-privileges]]'));
|
|
}
|
|
cache.del(pid);
|
|
posts.purge(pid, callback);
|
|
});
|
|
};
|
|
|
|
|
|
}(exports));
|