mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-01 19:46:01 +01:00
added four new hooks: filter:categories.recent, filter:privileges.categories.get, filter:privileges.posts.filter, filter:privileges.topics.filter
This commit is contained in:
@@ -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();
|
||||
});
|
||||
|
||||
callback(null, topics);
|
||||
topicCids = topicCids.filter(function(cid) {
|
||||
return ignoredCids.indexOf(cid) === -1;
|
||||
});
|
||||
|
||||
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);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user