added four new hooks: filter:categories.recent, filter:privileges.categories.get, filter:privileges.posts.filter, filter:privileges.topics.filter

v1.18.x
Julian Lam 11 years ago
parent b480bff3fd
commit 20ea40133b

@ -8,7 +8,8 @@ var async = require('async'),
db = require('../database'),
posts = require('../posts'),
topics = require('../topics'),
privileges = require('../privileges');
privileges = require('../privileges'),
plugins = require('../plugins');
module.exports = function(Categories) {
Categories.getRecentReplies = function(cid, uid, count, callback) {
@ -25,7 +26,12 @@ module.exports = function(Categories) {
return callback(err, []);
}
posts.getPostSummaryByPids(pids, uid, {stripTags: true}, callback);
plugins.fireHook('filter:categories.recent', {
uid: uid,
pids: pids
}, function(err, data) {
posts.getPostSummaryByPids(data.pids, uid, {stripTags: true}, callback);
});
});
});
};

@ -16,6 +16,10 @@ var async = require('async'),
module.exports = function(Posts) {
Posts.getPostSummaryByPids = function(pids, uid, options, callback) {
if (!pids || !Array.isArray(pids) || !pids.length) {
return callback(null, []);
}
options.stripTags = options.hasOwnProperty('stripTags') ? options.stripTags : false;
options.parse = options.hasOwnProperty('parse') ? options.parse : true;
options.extraFields = options.hasOwnProperty('extraFields') ? options.extraFields : [];

@ -6,8 +6,8 @@ var async = require('async'),
user = require('../user'),
categories = require('../categories'),
groups = require('../groups'),
helpers = require('./helpers');
helpers = require('./helpers'),
plugins = require('../plugins');
module.exports = function(privileges) {
@ -34,12 +34,14 @@ module.exports = function(privileges) {
var isAdminOrMod = results.isAdministrator || results.isModerator;
callback(null, {
plugins.fireHook('filter:privileges.categories.get', {
cid: cid,
uid: uid,
'topics:create': results['topics:create'][0] || isAdminOrMod,
editable: isAdminOrMod,
view_deleted: isAdminOrMod,
read: results.read[0] || isAdminOrMod
});
}, callback);
});
};

@ -9,7 +9,8 @@ var async = require('async'),
user = require('../user'),
helpers = require('./helpers'),
groups = require('../groups'),
categories = require('../categories');
categories = require('../categories'),
plugins = require('../plugins');
module.exports = function(privileges) {
@ -94,7 +95,14 @@ module.exports = function(privileges) {
}).map(function(post) {
return post.pid;
});
callback(null, pids);
plugins.fireHook('filter:privileges.posts.filter', {
privilege: privilege,
uid: uid,
pids: pids
}, function(err, data) {
callback(null, data.pids);
});
});
});
};

@ -91,7 +91,14 @@ module.exports = function(privileges) {
}).map(function(topic) {
return topic.tid;
});
callback(null, tids);
plugins.fireHook('filter:privileges.topics.filter', {
privilege: privilege,
uid: uid,
tids: tids
}, function(err, data) {
callback(null, data.tids);
});
});
});
};

@ -115,37 +115,39 @@ module.exports = function(Topics) {
return callback(null, tids);
}
var keys = tids.map(function(tid) {
return 'topic:' + tid;
});
db.getObjectsFields(keys, ['tid', 'cid'], function(err, topics) {
if (err) {
return callback(err);
}
var topicCids = topics.filter(function(topic) {
return topic && topic.cid;
}).map(function(topic) {
return topic.cid.toString();
privileges.topics.filter('read', tids, uid, function(err, tids) {
var keys = tids.map(function(tid) {
return 'topic:' + tid;
});
topicCids = topicCids.filter(function(cid) {
return ignoredCids.indexOf(cid) === -1;
});
privileges.categories.filterCids('read', topicCids, uid, function(err, readableCids) {
db.getObjectsFields(keys, ['tid', 'cid'], function(err, topics) {
if (err) {
return callback(err);
}
topics = topics.filter(function(topic) {
return topic.cid && readableCids.indexOf(topic.cid.toString()) !== -1;
var topicCids = topics.filter(function(topic) {
return topic && topic.cid;
}).map(function(topic) {
return topic.tid;
return topic.cid.toString();
});
topicCids = topicCids.filter(function(cid) {
return ignoredCids.indexOf(cid) === -1;
});
callback(null, topics);
privileges.categories.filterCids('read', topicCids, uid, function(err, readableCids) {
if (err) {
return callback(err);
}
topics = topics.filter(function(topic) {
return topic.cid && readableCids.indexOf(topic.cid.toString()) !== -1;
}).map(function(topic) {
return topic.tid;
});
callback(null, topics);
});
});
});
}

Loading…
Cancel
Save