mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 08:36:12 +01:00
refactor: move plugin hook methods to plugin.hooks.*
This commit is contained in:
@@ -41,7 +41,7 @@ Analytics.init = async function () {
|
||||
Analytics.increment = function (keys, callback) {
|
||||
keys = Array.isArray(keys) ? keys : [keys];
|
||||
|
||||
plugins.fireHook('action:analytics.increment', { keys: keys });
|
||||
plugins.hooks.fire('action:analytics.increment', { keys: keys });
|
||||
|
||||
keys.forEach(function (key) {
|
||||
counters[key] = counters[key] || 0;
|
||||
|
||||
@@ -109,7 +109,7 @@ exports.postCommand = async function (caller, command, eventName, notification,
|
||||
filter:post.bookmark
|
||||
filter:post.unbookmark
|
||||
*/
|
||||
const filteredData = await plugins.fireHook('filter:post.' + command, {
|
||||
const filteredData = await plugins.hooks.fire('filter:post.' + command, {
|
||||
data: data,
|
||||
uid: caller.uid,
|
||||
});
|
||||
|
||||
@@ -128,7 +128,7 @@ usersAPI.changePassword = async function (caller, data) {
|
||||
|
||||
usersAPI.follow = async function (caller, data) {
|
||||
await user.follow(caller.uid, data.uid);
|
||||
plugins.fireHook('action:user.follow', {
|
||||
plugins.hooks.fire('action:user.follow', {
|
||||
fromUid: caller.uid,
|
||||
toUid: data.uid,
|
||||
});
|
||||
@@ -151,7 +151,7 @@ usersAPI.follow = async function (caller, data) {
|
||||
|
||||
usersAPI.unfollow = async function (caller, data) {
|
||||
await user.unfollow(caller.uid, data.uid);
|
||||
plugins.fireHook('action:user.unfollow', {
|
||||
plugins.hooks.fire('action:user.unfollow', {
|
||||
fromUid: caller.uid,
|
||||
toUid: data.uid,
|
||||
});
|
||||
@@ -185,7 +185,7 @@ usersAPI.ban = async function (caller, data) {
|
||||
ip: caller.ip,
|
||||
reason: data.reason || undefined,
|
||||
});
|
||||
plugins.fireHook('action:user.banned', {
|
||||
plugins.hooks.fire('action:user.banned', {
|
||||
callerUid: caller.uid,
|
||||
ip: caller.ip,
|
||||
uid: data.uid,
|
||||
@@ -207,7 +207,7 @@ usersAPI.unban = async function (caller, data) {
|
||||
targetUid: data.uid,
|
||||
ip: caller.ip,
|
||||
});
|
||||
plugins.fireHook('action:user.unbanned', {
|
||||
plugins.hooks.fire('action:user.unbanned', {
|
||||
callerUid: caller.uid,
|
||||
ip: caller.ip,
|
||||
uid: data.uid,
|
||||
@@ -278,7 +278,7 @@ async function processDeletion({ uid, method, password, caller }) {
|
||||
|
||||
sockets.server.sockets.emit('event:user_status_change', { uid: caller.uid, status: 'offline' });
|
||||
|
||||
plugins.fireHook('action:user.delete', {
|
||||
plugins.hooks.fire('action:user.delete', {
|
||||
callerUid: caller.uid,
|
||||
uid: uid,
|
||||
ip: caller.ip,
|
||||
|
||||
@@ -45,7 +45,7 @@ module.exports = function (Categories) {
|
||||
category.backgroundImage = data.backgroundImage;
|
||||
}
|
||||
|
||||
const result = await plugins.fireHook('filter:category.create', { category: category, data: data });
|
||||
const result = await plugins.hooks.fire('filter:category.create', { category: category, data: data });
|
||||
category = result.category;
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ module.exports = function (Categories) {
|
||||
await duplicateCategoriesChildren(category.cid, data.cloneFromCid, data.uid);
|
||||
}
|
||||
|
||||
plugins.fireHook('action:category.create', { category: category });
|
||||
plugins.hooks.fire('action:category.create', { category: category });
|
||||
return category;
|
||||
};
|
||||
|
||||
@@ -170,7 +170,7 @@ module.exports = function (Categories) {
|
||||
Categories.copyPrivilegesFrom = async function (fromCid, toCid, group) {
|
||||
group = group || '';
|
||||
|
||||
const data = await plugins.fireHook('filter:categories.copyPrivilegesFrom', {
|
||||
const data = await plugins.hooks.fire('filter:categories.copyPrivilegesFrom', {
|
||||
privileges: group ? privileges.groupPrivilegeList.slice() : privileges.privilegeList.slice(),
|
||||
fromCid: fromCid,
|
||||
toCid: toCid,
|
||||
|
||||
@@ -20,7 +20,7 @@ module.exports = function (Categories) {
|
||||
|
||||
const keys = cids.map(cid => 'category:' + cid);
|
||||
const categories = await (fields.length ? db.getObjectsFields(keys, fields) : db.getObjects(keys));
|
||||
const result = await plugins.fireHook('filter:category.getFields', {
|
||||
const result = await plugins.hooks.fire('filter:category.getFields', {
|
||||
cids: cids,
|
||||
categories: categories,
|
||||
fields: fields,
|
||||
|
||||
@@ -22,7 +22,7 @@ module.exports = function (Categories) {
|
||||
await topics.purgePostsAndTopic(tid, uid);
|
||||
});
|
||||
await purgeCategory(cid);
|
||||
plugins.fireHook('action:category.delete', { cid: cid, uid: uid });
|
||||
plugins.hooks.fire('action:category.delete', { cid: cid, uid: uid });
|
||||
};
|
||||
|
||||
async function purgeCategory(cid) {
|
||||
|
||||
@@ -59,7 +59,7 @@ Categories.getCategoryById = async function (data) {
|
||||
|
||||
|
||||
calculateTopicPostCount(category);
|
||||
const result = await plugins.fireHook('filter:category.get', { category: category, uid: data.uid });
|
||||
const result = await plugins.hooks.fire('filter:category.get', { category: category, uid: data.uid });
|
||||
return result.category;
|
||||
};
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ module.exports = function (Categories) {
|
||||
if (numRecentReplies > 0) {
|
||||
await db.sortedSetAdd('cid:' + cid + ':recent_tids', Date.now(), tid);
|
||||
}
|
||||
await plugins.fireHook('action:categories.updateRecentTid', { cid: cid, tid: tid });
|
||||
await plugins.hooks.fire('action:categories.updateRecentTid', { cid: cid, tid: tid });
|
||||
};
|
||||
|
||||
Categories.updateRecentTidForCid = async function (cid) {
|
||||
@@ -68,8 +68,8 @@ module.exports = function (Categories) {
|
||||
}
|
||||
const categoriesToLoad = categoryData.filter(c => c && c.numRecentReplies && parseInt(c.numRecentReplies, 10) > 0);
|
||||
let keys = [];
|
||||
if (plugins.hasListeners('filter:categories.getRecentTopicReplies')) {
|
||||
const result = await plugins.fireHook('filter:categories.getRecentTopicReplies', {
|
||||
if (plugins.hooks.hasListeners('filter:categories.getRecentTopicReplies')) {
|
||||
const result = await plugins.hooks.fire('filter:categories.getRecentTopicReplies', {
|
||||
categories: categoriesToLoad,
|
||||
uid: uid,
|
||||
query: query,
|
||||
|
||||
@@ -8,7 +8,7 @@ const user = require('../user');
|
||||
|
||||
module.exports = function (Categories) {
|
||||
Categories.getCategoryTopics = async function (data) {
|
||||
let results = await plugins.fireHook('filter:category.topics.prepare', data);
|
||||
let results = await plugins.hooks.fire('filter:category.topics.prepare', data);
|
||||
const tids = await Categories.getTopicIds(results);
|
||||
let topicsData = await topics.getTopicsByTids(tids, data.uid);
|
||||
topicsData = await user.blocks.filter(data.uid, topicsData);
|
||||
@@ -18,7 +18,7 @@ module.exports = function (Categories) {
|
||||
}
|
||||
topics.calculateTopicIndices(topicsData, data.start);
|
||||
|
||||
results = await plugins.fireHook('filter:category.topics.get', { cid: data.cid, topics: topicsData, uid: data.uid });
|
||||
results = await plugins.hooks.fire('filter:category.topics.get', { cid: data.cid, topics: topicsData, uid: data.uid });
|
||||
return { topics: results.topics, nextStart: data.stop + 1 };
|
||||
};
|
||||
|
||||
@@ -43,8 +43,8 @@ module.exports = function (Categories) {
|
||||
return pinnedTidsOnPage;
|
||||
}
|
||||
|
||||
if (plugins.hasListeners('filter:categories.getTopicIds')) {
|
||||
const result = await plugins.fireHook('filter:categories.getTopicIds', {
|
||||
if (plugins.hooks.hasListeners('filter:categories.getTopicIds')) {
|
||||
const result = await plugins.hooks.fire('filter:categories.getTopicIds', {
|
||||
tids: [],
|
||||
data: data,
|
||||
pinnedTids: pinnedTidsOnPage,
|
||||
@@ -74,8 +74,8 @@ module.exports = function (Categories) {
|
||||
};
|
||||
|
||||
Categories.getTopicCount = async function (data) {
|
||||
if (plugins.hasListeners('filter:categories.getTopicCount')) {
|
||||
const result = await plugins.fireHook('filter:categories.getTopicCount', {
|
||||
if (plugins.hooks.hasListeners('filter:categories.getTopicCount')) {
|
||||
const result = await plugins.hooks.fire('filter:categories.getTopicCount', {
|
||||
topicCount: data.category.topic_count,
|
||||
data: data,
|
||||
});
|
||||
@@ -112,7 +112,7 @@ module.exports = function (Categories) {
|
||||
set = [set, 'tag:' + data.tag + ':topics'];
|
||||
}
|
||||
}
|
||||
const result = await plugins.fireHook('filter:categories.buildTopicsSortedSet', {
|
||||
const result = await plugins.hooks.fire('filter:categories.buildTopicsSortedSet', {
|
||||
set: set,
|
||||
data: data,
|
||||
});
|
||||
@@ -122,7 +122,7 @@ module.exports = function (Categories) {
|
||||
Categories.getSortedSetRangeDirection = async function (sort) {
|
||||
sort = sort || 'newest_to_oldest';
|
||||
const direction = sort === 'newest_to_oldest' || sort === 'most_posts' || sort === 'most_votes' ? 'highest-to-lowest' : 'lowest-to-highest';
|
||||
const result = await plugins.fireHook('filter:categories.getSortedSetRangeDirection', {
|
||||
const result = await plugins.hooks.fire('filter:categories.getSortedSetRangeDirection', {
|
||||
sort: sort,
|
||||
direction: direction,
|
||||
});
|
||||
@@ -134,8 +134,8 @@ module.exports = function (Categories) {
|
||||
};
|
||||
|
||||
Categories.getPinnedTids = async function (data) {
|
||||
if (plugins.hasListeners('filter:categories.getPinnedTids')) {
|
||||
const result = await plugins.fireHook('filter:categories.getPinnedTids', {
|
||||
if (plugins.hooks.hasListeners('filter:categories.getPinnedTids')) {
|
||||
const result = await plugins.hooks.fire('filter:categories.getPinnedTids', {
|
||||
pinnedTids: [],
|
||||
data: data,
|
||||
});
|
||||
|
||||
@@ -27,7 +27,7 @@ module.exports = function (Categories) {
|
||||
const translated = await translator.translate(modifiedFields.name);
|
||||
modifiedFields.slug = cid + '/' + slugify(translated);
|
||||
}
|
||||
const result = await plugins.fireHook('filter:category.update', { cid: cid, category: modifiedFields });
|
||||
const result = await plugins.hooks.fire('filter:category.update', { cid: cid, category: modifiedFields });
|
||||
|
||||
const category = result.category;
|
||||
var fields = Object.keys(category);
|
||||
@@ -40,7 +40,7 @@ module.exports = function (Categories) {
|
||||
await async.eachSeries(fields, async function (key) {
|
||||
await updateCategoryField(cid, key, category[key]);
|
||||
});
|
||||
plugins.fireHook('action:category.update', { cid: cid, modified: category });
|
||||
plugins.hooks.fire('action:category.update', { cid: cid, modified: category });
|
||||
}
|
||||
|
||||
async function updateCategoryField(cid, key, value) {
|
||||
@@ -92,7 +92,7 @@ module.exports = function (Categories) {
|
||||
}
|
||||
|
||||
Categories.parseDescription = async function (cid, description) {
|
||||
const parsedDescription = await plugins.fireHook('filter:parse.raw', description);
|
||||
const parsedDescription = await plugins.hooks.fire('filter:parse.raw', description);
|
||||
await Categories.setCategoryField(cid, 'descriptionParsed', parsedDescription);
|
||||
};
|
||||
};
|
||||
|
||||
@@ -12,8 +12,8 @@ exports.handle404 = function handle404(req, res) {
|
||||
const relativePath = nconf.get('relative_path');
|
||||
const isClientScript = new RegExp('^' + relativePath + '\\/assets\\/src\\/.+\\.js(\\?v=\\w+)?$');
|
||||
|
||||
if (plugins.hasListeners('action:meta.override404')) {
|
||||
return plugins.fireHook('action:meta.override404', {
|
||||
if (plugins.hooks.hasListeners('action:meta.override404')) {
|
||||
return plugins.hooks.fire('action:meta.override404', {
|
||||
req: req,
|
||||
res: res,
|
||||
error: {},
|
||||
|
||||
@@ -19,7 +19,7 @@ blocksController.getBlocks = async function (req, res, next) {
|
||||
return next();
|
||||
}
|
||||
const uids = await user.blocks.list(userData.uid);
|
||||
const data = await plugins.fireHook('filter:user.getBlocks', {
|
||||
const data = await plugins.hooks.fire('filter:user.getBlocks', {
|
||||
uids: uids,
|
||||
uid: userData.uid,
|
||||
start: start,
|
||||
|
||||
@@ -112,7 +112,7 @@ helpers.getUserDataByUserSlug = async function (userslug, callerUID) {
|
||||
userData['cover:position'] = validator.escape(String(userData['cover:position'] || '50% 50%'));
|
||||
userData['username:disableEdit'] = !userData.isAdmin && meta.config['username:disableEdit'];
|
||||
userData['email:disableEdit'] = !userData.isAdmin && meta.config['email:disableEdit'];
|
||||
const hookData = await plugins.fireHook('filter:helpers.getUserDataByUserSlug', { userData: userData, callerUID: callerUID });
|
||||
const hookData = await plugins.hooks.fire('filter:helpers.getUserDataByUserSlug', { userData: userData, callerUID: callerUID });
|
||||
return hookData.userData;
|
||||
};
|
||||
|
||||
@@ -128,7 +128,7 @@ async function getAllData(uid, callerUID) {
|
||||
ips: user.getIPs(uid, 4),
|
||||
profile_menu: getProfileMenu(uid, callerUID),
|
||||
groups: groups.getUserGroups([uid]),
|
||||
sso: plugins.fireHook('filter:auth.list', { uid: uid, associations: [] }),
|
||||
sso: plugins.hooks.fire('filter:auth.list', { uid: uid, associations: [] }),
|
||||
canEdit: privileges.users.canEdit(callerUID, uid),
|
||||
canBanUser: privileges.users.canBanUser(callerUID, uid),
|
||||
isBlocked: user.blocks.is(uid, callerUID),
|
||||
@@ -183,7 +183,7 @@ async function getProfileMenu(uid, callerUID) {
|
||||
});
|
||||
}
|
||||
|
||||
return await plugins.fireHook('filter:user.profileMenu', {
|
||||
return await plugins.hooks.fire('filter:user.profileMenu', {
|
||||
uid: uid,
|
||||
callerUID: callerUID,
|
||||
links: links,
|
||||
@@ -197,7 +197,7 @@ async function parseAboutMe(userData) {
|
||||
return;
|
||||
}
|
||||
userData.aboutme = validator.escape(String(userData.aboutme || ''));
|
||||
const parsed = await plugins.fireHook('filter:parse.aboutme', userData.aboutme);
|
||||
const parsed = await plugins.hooks.fire('filter:parse.aboutme', userData.aboutme);
|
||||
userData.aboutmeParsed = translator.escape(parsed);
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ notificationsController.get = async function (req, res, next) {
|
||||
const stop = start + itemsPerPage - 1;
|
||||
|
||||
const [filters, isPrivileged] = await Promise.all([
|
||||
plugins.fireHook('filter:notifications.addFilters', {
|
||||
plugins.hooks.fire('filter:notifications.addFilters', {
|
||||
regularFilters: regularFilters,
|
||||
moderatorFilters: moderatorFilters,
|
||||
uid: req.uid,
|
||||
|
||||
@@ -33,7 +33,7 @@ settingsController.get = async function (req, res, next) {
|
||||
userData.acpLanguages = _.cloneDeep(languagesData);
|
||||
}
|
||||
|
||||
const data = await plugins.fireHook('filter:user.customSettings', {
|
||||
const data = await plugins.hooks.fire('filter:user.customSettings', {
|
||||
settings: settings,
|
||||
customSettings: [],
|
||||
uid: req.uid,
|
||||
@@ -110,7 +110,7 @@ settingsController.get = async function (req, res, next) {
|
||||
userData.hideFullname = meta.config.hideFullname || 0;
|
||||
userData.hideEmail = meta.config.hideEmail || 0;
|
||||
|
||||
userData.inTopicSearchAvailable = plugins.hasListeners('filter:topic.search');
|
||||
userData.inTopicSearchAvailable = plugins.hooks.hasListeners('filter:topic.search');
|
||||
|
||||
userData.maxTopicsPerPage = meta.config.maxTopicsPerPage;
|
||||
userData.maxPostsPerPage = meta.config.maxPostsPerPage;
|
||||
@@ -191,7 +191,7 @@ async function getNotificationSettings(userData) {
|
||||
if (privileges.isAdmin || privileges.isGlobalMod) {
|
||||
privilegedTypes.push('notificationType_new-user-flag');
|
||||
}
|
||||
const results = await plugins.fireHook('filter:user.notificationTypes', {
|
||||
const results = await plugins.hooks.fire('filter:user.notificationTypes', {
|
||||
types: notifications.baseTypes.slice(),
|
||||
privilegedTypes: privilegedTypes,
|
||||
});
|
||||
|
||||
@@ -27,7 +27,7 @@ categoriesController.get = async function (req, res, next) {
|
||||
});
|
||||
const selectedCategory = allCategories.find(c => c.selected);
|
||||
|
||||
const data = await plugins.fireHook('filter:admin.category.get', {
|
||||
const data = await plugins.hooks.fire('filter:admin.category.get', {
|
||||
req: req,
|
||||
res: res,
|
||||
category: category,
|
||||
@@ -53,7 +53,7 @@ categoriesController.getAll = async function (req, res) {
|
||||
'color', 'bgColor', 'backgroundImage', 'imageClass',
|
||||
];
|
||||
const categoriesData = await categories.getCategoriesFields(cids, fields);
|
||||
const result = await plugins.fireHook('filter:admin.categories.get', { categories: categoriesData, fields: fields });
|
||||
const result = await plugins.hooks.fire('filter:admin.categories.get', { categories: categoriesData, fields: fields });
|
||||
const tree = categories.getTree(result.categories, 0);
|
||||
res.render('admin/manage/categories', {
|
||||
categories: tree,
|
||||
|
||||
@@ -47,7 +47,7 @@ async function getNotices() {
|
||||
notDoneText: '[[admin/dashboard:restart-required]]',
|
||||
},
|
||||
{
|
||||
done: plugins.hasListeners('filter:search.query'),
|
||||
done: plugins.hooks.hasListeners('filter:search.query'),
|
||||
doneText: '[[admin/dashboard:search-plugin-installed]]',
|
||||
notDoneText: '[[admin/dashboard:search-plugin-not-installed]]',
|
||||
tooltip: '[[admin/dashboard:search-plugin-tooltip]]',
|
||||
@@ -62,7 +62,7 @@ async function getNotices() {
|
||||
});
|
||||
}
|
||||
|
||||
return await plugins.fireHook('filter:admin.notices', notices);
|
||||
return await plugins.hooks.fire('filter:admin.notices', notices);
|
||||
}
|
||||
|
||||
async function getLatestVersion() {
|
||||
|
||||
@@ -237,8 +237,8 @@ function validateUpload(res, uploadedFile, allowedTypes) {
|
||||
async function uploadImage(filename, folder, uploadedFile, req, res, next) {
|
||||
let imageData;
|
||||
try {
|
||||
if (plugins.hasListeners('filter:uploadImage')) {
|
||||
imageData = await plugins.fireHook('filter:uploadImage', { image: uploadedFile, uid: req.uid, folder: folder });
|
||||
if (plugins.hooks.hasListeners('filter:uploadImage')) {
|
||||
imageData = await plugins.hooks.fire('filter:uploadImage', { image: uploadedFile, uid: req.uid, folder: folder });
|
||||
} else {
|
||||
imageData = await file.saveFileToLocal(filename, folder, uploadedFile.path);
|
||||
}
|
||||
|
||||
@@ -189,7 +189,7 @@ usersController.registrationQueue = async function (req, res) {
|
||||
const data = await utils.promiseParallel({
|
||||
registrationQueueCount: db.sortedSetCard('registration:queue'),
|
||||
users: user.getRegistrationQueue(start, stop),
|
||||
customHeaders: plugins.fireHook('filter:admin.registrationQueue.customHeaders', { headers: [] }),
|
||||
customHeaders: plugins.hooks.fire('filter:admin.registrationQueue.customHeaders', { headers: [] }),
|
||||
invites: getInvites(),
|
||||
});
|
||||
var pageCount = Math.max(1, Math.ceil(data.registrationQueueCount / itemsPerPage));
|
||||
|
||||
@@ -65,7 +65,7 @@ apiController.loadConfig = async function (req) {
|
||||
topicPostSort: meta.config.topicPostSort || 'oldest_to_newest',
|
||||
categoryTopicSort: meta.config.categoryTopicSort || 'newest_to_oldest',
|
||||
csrf_token: req.uid >= 0 && req.csrfToken && req.csrfToken(),
|
||||
searchEnabled: plugins.hasListeners('filter:search.query'),
|
||||
searchEnabled: plugins.hooks.hasListeners('filter:search.query'),
|
||||
bootswatchSkin: meta.config.bootswatchSkin || '',
|
||||
enablePostHistory: meta.config.enablePostHistory === 1,
|
||||
timeagoCutoff: meta.config.timeagoCutoff !== '' ? Math.max(0, parseInt(meta.config.timeagoCutoff, 10)) : meta.config.timeagoCutoff,
|
||||
@@ -98,7 +98,7 @@ apiController.loadConfig = async function (req) {
|
||||
config.categoryTopicSort = settings.categoryTopicSort || config.categoryTopicSort;
|
||||
config.topicSearchEnabled = settings.topicSearchEnabled || false;
|
||||
config.bootswatchSkin = (meta.config.disableCustomUserSkins !== 1 && settings.bootswatchSkin && settings.bootswatchSkin !== '') ? settings.bootswatchSkin : '';
|
||||
config = await plugins.fireHook('filter:config.get', config);
|
||||
config = await plugins.hooks.fire('filter:config.get', config);
|
||||
return config;
|
||||
};
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ const sockets = require('../socket.io');
|
||||
const authenticationController = module.exports;
|
||||
|
||||
async function registerAndLoginUser(req, res, userData) {
|
||||
const data = await plugins.fireHook('filter:register.interstitial', {
|
||||
const data = await plugins.hooks.fire('filter:register.interstitial', {
|
||||
userData: userData,
|
||||
interstitials: [],
|
||||
});
|
||||
@@ -45,7 +45,7 @@ async function registerAndLoginUser(req, res, userData) {
|
||||
return;
|
||||
}
|
||||
const queue = await user.shouldQueueUser(req.ip);
|
||||
const result = await plugins.fireHook('filter:register.shouldQueue', { req: req, res: res, userData: userData, queue: queue });
|
||||
const result = await plugins.hooks.fire('filter:register.shouldQueue', { req: req, res: res, userData: userData, queue: queue });
|
||||
if (result.queue) {
|
||||
return await addToApprovalQueue(req, userData);
|
||||
}
|
||||
@@ -61,7 +61,7 @@ async function registerAndLoginUser(req, res, userData) {
|
||||
}
|
||||
await user.deleteInvitationKey(userData.email);
|
||||
const referrer = req.body.referrer || req.session.referrer || nconf.get('relative_path') + '/';
|
||||
const complete = await plugins.fireHook('filter:register.complete', { uid: uid, referrer: referrer });
|
||||
const complete = await plugins.hooks.fire('filter:register.complete', { uid: uid, referrer: referrer });
|
||||
req.session.returnTo = complete.referrer;
|
||||
return complete;
|
||||
}
|
||||
@@ -105,7 +105,7 @@ authenticationController.register = async function (req, res) {
|
||||
user.isPasswordValid(userData.password);
|
||||
|
||||
res.locals.processLogin = true; // set it to false in plugin if you wish to just register only
|
||||
await plugins.fireHook('filter:register.check', { req: req, res: res, userData: userData });
|
||||
await plugins.hooks.fire('filter:register.check', { req: req, res: res, userData: userData });
|
||||
|
||||
const data = await registerAndLoginUser(req, res, userData);
|
||||
if (data) {
|
||||
@@ -137,7 +137,7 @@ async function addToApprovalQueue(req, userData) {
|
||||
|
||||
authenticationController.registerComplete = function (req, res, next) {
|
||||
// For the interstitials that respond, execute the callback with the form body
|
||||
plugins.fireHook('filter:register.interstitial', {
|
||||
plugins.hooks.fire('filter:register.interstitial', {
|
||||
userData: req.session.registration,
|
||||
interstitials: [],
|
||||
}, function (err, data) {
|
||||
@@ -217,14 +217,14 @@ authenticationController.registerAbort = function (req, res) {
|
||||
};
|
||||
|
||||
authenticationController.login = function (req, res, next) {
|
||||
if (plugins.hasListeners('action:auth.overrideLogin')) {
|
||||
if (plugins.hooks.hasListeners('action:auth.overrideLogin')) {
|
||||
return continueLogin(req, res, next);
|
||||
}
|
||||
|
||||
var loginWith = meta.config.allowLoginWith || 'username-email';
|
||||
req.body.username = req.body.username.trim();
|
||||
|
||||
plugins.fireHook('filter:login.check', { req: req, res: res, userData: req.body }, (err) => {
|
||||
plugins.hooks.fire('filter:login.check', { req: req, res: res, userData: req.body }, (err) => {
|
||||
if (err) {
|
||||
return helpers.noScriptErrors(req, res, err.message, 403);
|
||||
}
|
||||
@@ -355,7 +355,7 @@ authenticationController.onSuccessfulLogin = async function (req, uid) {
|
||||
// Force session check for all connected socket.io clients with the same session id
|
||||
sockets.in('sess_' + req.sessionID).emit('checkSession', uid);
|
||||
|
||||
plugins.fireHook('action:user.loggedIn', { uid: uid, req: req });
|
||||
plugins.hooks.fire('action:user.loggedIn', { uid: uid, req: req });
|
||||
} catch (err) {
|
||||
req.session.destroy();
|
||||
throw err;
|
||||
@@ -428,14 +428,14 @@ authenticationController.logout = async function (req, res, next) {
|
||||
|
||||
await user.setUserField(uid, 'lastonline', Date.now() - (meta.config.onlineCutoff * 60000));
|
||||
await db.sortedSetAdd('users:online', Date.now() - (meta.config.onlineCutoff * 60000), uid);
|
||||
await plugins.fireHook('static:user.loggedOut', { req: req, res: res, uid: uid, sessionID: sessionID });
|
||||
await plugins.hooks.fire('static:user.loggedOut', { req: req, res: res, uid: uid, sessionID: sessionID });
|
||||
|
||||
// Force session check for all connected socket.io clients with the same session id
|
||||
sockets.in('sess_' + sessionID).emit('checkSession', 0);
|
||||
const payload = {
|
||||
next: nconf.get('relative_path') + '/',
|
||||
};
|
||||
plugins.fireHook('filter:user.logout', payload);
|
||||
plugins.hooks.fire('filter:user.logout', payload);
|
||||
|
||||
if (req.body.noscript === 'true') {
|
||||
return res.redirect(payload.next);
|
||||
|
||||
@@ -15,7 +15,7 @@ exports.get = async function (req, res, callback) {
|
||||
content: 'noindex',
|
||||
};
|
||||
|
||||
const data = await plugins.fireHook('filter:composer.build', {
|
||||
const data = await plugins.hooks.fire('filter:composer.build', {
|
||||
req: req,
|
||||
res: res,
|
||||
next: callback,
|
||||
|
||||
@@ -65,7 +65,7 @@ exports.handleErrors = function handleErrors(err, req, res, next) { // eslint-di
|
||||
}
|
||||
};
|
||||
|
||||
plugins.fireHook('filter:error.handle', {
|
||||
plugins.hooks.fire('filter:error.handle', {
|
||||
cases: cases,
|
||||
}, function (_err, data) {
|
||||
if (_err) {
|
||||
|
||||
@@ -116,7 +116,7 @@ helpers.buildTerms = function (url, term, query) {
|
||||
};
|
||||
|
||||
helpers.notAllowed = async function (req, res, error) {
|
||||
const data = await plugins.fireHook('filter:helpers.notAllowed', {
|
||||
const data = await plugins.hooks.fire('filter:helpers.notAllowed', {
|
||||
req: req,
|
||||
res: res,
|
||||
error: error,
|
||||
@@ -336,7 +336,7 @@ helpers.getHomePageRoutes = async function (uid) {
|
||||
name: 'Custom',
|
||||
},
|
||||
]);
|
||||
const data = await plugins.fireHook('filter:homepage.get', { routes: routes });
|
||||
const data = await plugins.hooks.fire('filter:homepage.get', { routes: routes });
|
||||
return data.routes;
|
||||
};
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ async function rewrite(req, res, next) {
|
||||
|
||||
const pathname = parsedUrl.pathname;
|
||||
const hook = 'action:homepage.get:' + pathname;
|
||||
if (!plugins.hasListeners(hook)) {
|
||||
if (!plugins.hooks.hasListeners(hook)) {
|
||||
req.url = req.path + (!req.path.endsWith('/') ? '/' : '') + pathname;
|
||||
} else {
|
||||
res.locals.homePageRoute = pathname;
|
||||
@@ -54,7 +54,7 @@ exports.rewrite = rewrite;
|
||||
function pluginHook(req, res, next) {
|
||||
var hook = 'action:homepage.get:' + res.locals.homePageRoute;
|
||||
|
||||
plugins.fireHook(hook, {
|
||||
plugins.hooks.fire(hook, {
|
||||
req: req,
|
||||
res: res,
|
||||
next: next,
|
||||
|
||||
@@ -184,7 +184,7 @@ Controllers.registerInterstitial = async function (req, res, next) {
|
||||
return res.redirect(nconf.get('relative_path') + '/register');
|
||||
}
|
||||
try {
|
||||
const data = await plugins.fireHook('filter:register.interstitial', {
|
||||
const data = await plugins.hooks.fire('filter:register.interstitial', {
|
||||
userData: req.session.registration,
|
||||
interstitials: [],
|
||||
});
|
||||
@@ -298,7 +298,7 @@ Controllers.manifest = async function (req, res) {
|
||||
});
|
||||
}
|
||||
|
||||
const data = await plugins.fireHook('filter:manifest.build', {
|
||||
const data = await plugins.hooks.fire('filter:manifest.build', {
|
||||
req: req,
|
||||
res: res,
|
||||
manifest: manifest,
|
||||
@@ -331,7 +331,7 @@ Controllers.termsOfUse = async function (req, res, next) {
|
||||
if (!meta.config.termsOfUse) {
|
||||
return next();
|
||||
}
|
||||
const termsOfUse = await plugins.fireHook('filter:parse.post', {
|
||||
const termsOfUse = await plugins.hooks.fire('filter:parse.post', {
|
||||
postData: {
|
||||
content: meta.config.termsOfUse || '',
|
||||
},
|
||||
|
||||
@@ -30,8 +30,8 @@ modsController.flags.list = async function (req, res, next) {
|
||||
const results = await Promise.all([
|
||||
user.isAdminOrGlobalMod(req.uid),
|
||||
user.getModeratedCids(req.uid),
|
||||
plugins.fireHook('filter:flags.validateFilters', { filters: validFilters }),
|
||||
plugins.fireHook('filter:flags.validateSort', { sorts: validSorts }),
|
||||
plugins.hooks.fire('filter:flags.validateFilters', { filters: validFilters }),
|
||||
plugins.hooks.fire('filter:flags.validateSort', { sorts: validSorts }),
|
||||
]);
|
||||
const [isAdminOrGlobalMod, moderatedCids,, { sorts }] = results;
|
||||
let [,, { filters }] = results;
|
||||
@@ -226,7 +226,7 @@ modsController.postQueue = async function (req, res, next) {
|
||||
(!categoriesData.selectedCids.length || categoriesData.selectedCids.includes(p.category.cid)) &&
|
||||
(isAdminOrGlobalMod || moderatedCids.includes(String(p.category.cid))));
|
||||
|
||||
({ posts: postData } = await plugins.fireHook('filter:post-queue.get', {
|
||||
({ posts: postData } = await plugins.hooks.fire('filter:post-queue.get', {
|
||||
posts: postData,
|
||||
req: req,
|
||||
}));
|
||||
@@ -281,6 +281,6 @@ async function addMetaData(postData) {
|
||||
postData.topic = await topics.getTopicFields(postData.data.tid, ['title', 'cid']);
|
||||
}
|
||||
postData.category = await categories.getCategoryData(postData.topic.cid);
|
||||
const result = await plugins.fireHook('filter:parse.post', { postData: postData.data });
|
||||
const result = await plugins.hooks.fire('filter:parse.post', { postData: postData.data });
|
||||
postData.data.content = result.postData.content;
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ const plugins = require('../plugins');
|
||||
const meta = require('../meta');
|
||||
|
||||
module.exports.handle = function (req, res, next) {
|
||||
if (plugins.hasListeners('filter:search.query')) {
|
||||
if (plugins.hooks.hasListeners('filter:search.query')) {
|
||||
res.type('application/opensearchdescription+xml').send(generateXML());
|
||||
} else {
|
||||
next();
|
||||
|
||||
@@ -15,7 +15,7 @@ const helpers = require('./helpers');
|
||||
const searchController = module.exports;
|
||||
|
||||
searchController.search = async function (req, res, next) {
|
||||
if (!plugins.hasListeners('filter:search.query')) {
|
||||
if (!plugins.hooks.hasListeners('filter:search.query')) {
|
||||
return next();
|
||||
}
|
||||
const page = Math.max(1, parseInt(req.query.page, 10)) || 1;
|
||||
|
||||
@@ -64,8 +64,8 @@ unreadController.get = async function (req, res) {
|
||||
};
|
||||
|
||||
async function getWatchedCategories(uid, cid, filter) {
|
||||
if (plugins.hasListeners('filter:unread.categories')) {
|
||||
return await plugins.fireHook('filter:unread.categories', { uid: uid, cid: cid });
|
||||
if (plugins.hooks.hasListeners('filter:unread.categories')) {
|
||||
return await plugins.hooks.fire('filter:unread.categories', { uid: uid, cid: cid });
|
||||
}
|
||||
const states = [categories.watchStates.watching];
|
||||
if (filter === 'watched') {
|
||||
|
||||
@@ -56,8 +56,8 @@ async function uploadAsImage(req, uploadedFile) {
|
||||
await image.checkDimensions(uploadedFile.path);
|
||||
await image.stripEXIF(uploadedFile.path);
|
||||
|
||||
if (plugins.hasListeners('filter:uploadImage')) {
|
||||
return await plugins.fireHook('filter:uploadImage', {
|
||||
if (plugins.hooks.hasListeners('filter:uploadImage')) {
|
||||
return await plugins.hooks.fire('filter:uploadImage', {
|
||||
image: uploadedFile,
|
||||
uid: req.uid,
|
||||
folder: 'files',
|
||||
@@ -122,8 +122,8 @@ uploadsController.uploadThumb = async function (req, res, next) {
|
||||
width: meta.config.topicThumbSize,
|
||||
height: meta.config.topicThumbSize,
|
||||
});
|
||||
if (plugins.hasListeners('filter:uploadImage')) {
|
||||
return await plugins.fireHook('filter:uploadImage', {
|
||||
if (plugins.hooks.hasListeners('filter:uploadImage')) {
|
||||
return await plugins.hooks.fire('filter:uploadImage', {
|
||||
image: uploadedFile,
|
||||
uid: req.uid,
|
||||
folder: 'files',
|
||||
@@ -135,8 +135,8 @@ uploadsController.uploadThumb = async function (req, res, next) {
|
||||
};
|
||||
|
||||
uploadsController.uploadFile = async function (uid, uploadedFile) {
|
||||
if (plugins.hasListeners('filter:uploadFile')) {
|
||||
return await plugins.fireHook('filter:uploadFile', {
|
||||
if (plugins.hooks.hasListeners('filter:uploadFile')) {
|
||||
return await plugins.hooks.fire('filter:uploadFile', {
|
||||
file: uploadedFile,
|
||||
uid: uid,
|
||||
folder: 'files',
|
||||
@@ -175,7 +175,7 @@ async function saveFileToLocal(uid, folder, uploadedFile) {
|
||||
};
|
||||
const fileKey = upload.url.replace(nconf.get('upload_url'), '');
|
||||
await db.sortedSetAdd('uid:' + uid + ':uploads', Date.now(), fileKey);
|
||||
const data = await plugins.fireHook('filter:uploadStored', { uid: uid, uploadedFile: uploadedFile, storedFile: storedFile });
|
||||
const data = await plugins.hooks.fire('filter:uploadStored', { uid: uid, uploadedFile: uploadedFile, storedFile: storedFile });
|
||||
return data.storedFile;
|
||||
}
|
||||
|
||||
|
||||
@@ -264,7 +264,7 @@ Emailer.sendToEmail = async (template, email, language, params) => {
|
||||
params.unsubUrl = unsubUrl;
|
||||
}
|
||||
|
||||
const result = await Plugins.fireHook('filter:email.params', {
|
||||
const result = await Plugins.hooks.fire('filter:email.params', {
|
||||
template: template,
|
||||
email: email,
|
||||
language: lang,
|
||||
@@ -280,7 +280,7 @@ Emailer.sendToEmail = async (template, email, language, params) => {
|
||||
translator.translate(params.subject, result.language),
|
||||
]);
|
||||
|
||||
const data = await Plugins.fireHook('filter:email.modify', {
|
||||
const data = await Plugins.hooks.fire('filter:email.modify', {
|
||||
_raw: params,
|
||||
to: email,
|
||||
from: meta.config['email:from'] || 'no-reply@' + getHostname(),
|
||||
@@ -299,8 +299,8 @@ Emailer.sendToEmail = async (template, email, language, params) => {
|
||||
});
|
||||
|
||||
try {
|
||||
if (Plugins.hasListeners('filter:email.send')) {
|
||||
await Plugins.fireHook('filter:email.send', data);
|
||||
if (Plugins.hooks.hasListeners('filter:email.send')) {
|
||||
await Plugins.hooks.fire('filter:email.send', data);
|
||||
} else {
|
||||
await Emailer.sendViaFallback(data);
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ events.log = async function (data) {
|
||||
], data.timestamp, eid),
|
||||
db.setObject('event:' + eid, data),
|
||||
]);
|
||||
plugins.fireHook('action:events.log', { data: data });
|
||||
plugins.hooks.fire('action:events.log', { data: data });
|
||||
};
|
||||
|
||||
events.getEvents = async function (filter, start, stop, from, to) {
|
||||
|
||||
10
src/flags.js
10
src/flags.js
@@ -76,7 +76,7 @@ Flags.init = async function () {
|
||||
};
|
||||
|
||||
try {
|
||||
const data = await plugins.fireHook('filter:flags.getFilters', hookData);
|
||||
const data = await plugins.hooks.fire('filter:flags.getFilters', hookData);
|
||||
Flags._filters = data.filters;
|
||||
} catch (err) {
|
||||
winston.error('[flags/init] Could not retrieve filters', err.stack);
|
||||
@@ -107,7 +107,7 @@ Flags.get = async function (flagId) {
|
||||
reports: reports,
|
||||
};
|
||||
|
||||
const data = await plugins.fireHook('filter:flags.get', {
|
||||
const data = await plugins.hooks.fire('filter:flags.get', {
|
||||
flag: flagObj,
|
||||
});
|
||||
return data.flag;
|
||||
@@ -177,7 +177,7 @@ Flags.list = async function (data) {
|
||||
});
|
||||
}));
|
||||
|
||||
const payload = await plugins.fireHook('filter:flags.list', {
|
||||
const payload = await plugins.hooks.fire('filter:flags.list', {
|
||||
flags: flags,
|
||||
page: filters.page,
|
||||
uid: data.uid,
|
||||
@@ -587,7 +587,7 @@ Flags.update = async function (flagId, uid, changeset) {
|
||||
tasks.push(Flags.appendHistory(flagId, uid, changeset));
|
||||
await Promise.all(tasks);
|
||||
|
||||
plugins.fireHook('action:flags.update', { flagId: flagId, changeset: changeset, uid: uid });
|
||||
plugins.hooks.fire('action:flags.update', { flagId: flagId, changeset: changeset, uid: uid });
|
||||
};
|
||||
|
||||
Flags.resolveFlag = async function (type, id, uid) {
|
||||
@@ -712,7 +712,7 @@ Flags.notify = async function (flagObj, uid) {
|
||||
throw new Error('[[error:invalid-data]]');
|
||||
}
|
||||
|
||||
plugins.fireHook('action:flags.create', {
|
||||
plugins.hooks.fire('action:flags.create', {
|
||||
flag: flagObj,
|
||||
});
|
||||
uids = uids.filter(_uid => parseInt(_uid, 10) !== parseInt(uid, 10));
|
||||
|
||||
@@ -40,7 +40,7 @@ module.exports = function (Groups) {
|
||||
disableLeave: disableLeave,
|
||||
};
|
||||
|
||||
await plugins.fireHook('filter:group.create', { group: groupData, data: data });
|
||||
await plugins.hooks.fire('filter:group.create', { group: groupData, data: data });
|
||||
|
||||
await db.sortedSetAdd('groups:createtime', groupData.createtime, groupData.name);
|
||||
await db.setObject('group:' + groupData.name, groupData);
|
||||
@@ -61,7 +61,7 @@ module.exports = function (Groups) {
|
||||
await db.setObjectField('groupslug:groupname', groupData.slug, groupData.name);
|
||||
|
||||
groupData = await Groups.getGroupData(groupData.name);
|
||||
plugins.fireHook('action:group.create', { group: groupData });
|
||||
plugins.hooks.fire('action:group.create', { group: groupData });
|
||||
return groupData;
|
||||
};
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ module.exports = function (Groups) {
|
||||
|
||||
groupData.forEach(group => modifyGroup(group, fields));
|
||||
|
||||
const results = await plugins.fireHook('filter:groups.get', { groups: groupData });
|
||||
const results = await plugins.hooks.fire('filter:groups.get', { groups: groupData });
|
||||
return results.groups;
|
||||
};
|
||||
|
||||
@@ -61,7 +61,7 @@ module.exports = function (Groups) {
|
||||
|
||||
Groups.setGroupField = async function (groupName, field, value) {
|
||||
await db.setObjectField('group:' + groupName, field, value);
|
||||
plugins.fireHook('action:group.set', { field: field, value: value, type: 'set' });
|
||||
plugins.hooks.fire('action:group.set', { field: field, value: value, type: 'set' });
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ module.exports = function (Groups) {
|
||||
removeGroupsFromPrivilegeGroups(groupNames),
|
||||
]);
|
||||
Groups.cache.reset();
|
||||
plugins.fireHook('action:groups.destroy', { groups: groupsData });
|
||||
plugins.hooks.fire('action:groups.destroy', { groups: groupsData });
|
||||
};
|
||||
|
||||
async function removeGroupsFromPrivilegeGroups(groupNames) {
|
||||
|
||||
@@ -135,7 +135,7 @@ Groups.get = async function (groupName, options) {
|
||||
if (!groupData) {
|
||||
return null;
|
||||
}
|
||||
const descriptionParsed = await plugins.fireHook('filter:parse.raw', groupData.description);
|
||||
const descriptionParsed = await plugins.hooks.fire('filter:parse.raw', groupData.description);
|
||||
groupData.descriptionParsed = descriptionParsed;
|
||||
groupData.categories = selectCategories.map((category) => {
|
||||
category.selected = groupData.memberPostCids.includes(category.cid);
|
||||
@@ -149,7 +149,7 @@ Groups.get = async function (groupName, options) {
|
||||
groupData.isPending = isPending;
|
||||
groupData.isInvited = isInvited;
|
||||
groupData.isOwner = isOwner;
|
||||
const results = await plugins.fireHook('filter:group.get', { group: groupData });
|
||||
const results = await plugins.hooks.fire('filter:group.get', { group: groupData });
|
||||
return results.group;
|
||||
};
|
||||
|
||||
@@ -194,7 +194,7 @@ Groups.getOwnersAndMembers = async function (groupName, uid, start, stop) {
|
||||
}
|
||||
}
|
||||
returnUsers = countToReturn > 0 ? returnUsers.slice(0, countToReturn) : returnUsers;
|
||||
const result = await plugins.fireHook('filter:group.getOwnersAndMembers', {
|
||||
const result = await plugins.hooks.fire('filter:group.getOwnersAndMembers', {
|
||||
users: returnUsers,
|
||||
uid: uid,
|
||||
start: start,
|
||||
|
||||
@@ -83,7 +83,7 @@ module.exports = function (Groups) {
|
||||
const set = type === 'invite' ? 'group:' + groupName + ':invited' : 'group:' + groupName + ':pending';
|
||||
await db.setAdd(set, uids);
|
||||
const hookName = type === 'invite' ? 'action:group.inviteMember' : 'action:group.requestMembership';
|
||||
plugins.fireHook(hookName, {
|
||||
plugins.hooks.fire(hookName, {
|
||||
groupName: groupName,
|
||||
uids: uids,
|
||||
});
|
||||
|
||||
@@ -63,7 +63,7 @@ module.exports = function (Groups) {
|
||||
|
||||
await setGroupTitleIfNotSet(groupsToJoin, uid);
|
||||
|
||||
plugins.fireHook('action:group.join', {
|
||||
plugins.hooks.fire('action:group.join', {
|
||||
groupNames: groupsToJoin,
|
||||
uid: uid,
|
||||
});
|
||||
|
||||
@@ -53,7 +53,7 @@ module.exports = function (Groups) {
|
||||
|
||||
await clearGroupTitleIfSet(groupsToLeave, uid);
|
||||
|
||||
plugins.fireHook('action:group.leave', {
|
||||
plugins.hooks.fire('action:group.leave', {
|
||||
groupNames: groupsToLeave,
|
||||
uid: uid,
|
||||
});
|
||||
|
||||
@@ -24,7 +24,7 @@ module.exports = function (Groups) {
|
||||
Groups.ownership.grant = async function (toUid, groupName) {
|
||||
// Note: No ownership checking is done here on purpose!
|
||||
await db.setAdd('group:' + groupName + ':owners', toUid);
|
||||
plugins.fireHook('action:group.grantOwnership', { uid: toUid, groupName: groupName });
|
||||
plugins.hooks.fire('action:group.grantOwnership', { uid: toUid, groupName: groupName });
|
||||
};
|
||||
|
||||
Groups.ownership.rescind = async function (toUid, groupName) {
|
||||
@@ -35,6 +35,6 @@ module.exports = function (Groups) {
|
||||
throw new Error('[[error:group-needs-owner]]');
|
||||
}
|
||||
await db.setRemove('group:' + groupName + ':owners', toUid);
|
||||
plugins.fireHook('action:group.rescindOwnership', { uid: toUid, groupName: groupName });
|
||||
plugins.hooks.fire('action:group.rescindOwnership', { uid: toUid, groupName: groupName });
|
||||
};
|
||||
};
|
||||
|
||||
@@ -19,7 +19,7 @@ module.exports = function (Groups) {
|
||||
throw new Error('[[error:no-group]]');
|
||||
}
|
||||
|
||||
({ values } = await plugins.fireHook('filter:group.update', {
|
||||
({ values } = await plugins.hooks.fire('filter:group.update', {
|
||||
groupName: groupName,
|
||||
values: values,
|
||||
}));
|
||||
@@ -75,7 +75,7 @@ module.exports = function (Groups) {
|
||||
await db.setObject('group:' + groupName, payload);
|
||||
await Groups.renameGroup(groupName, values.name);
|
||||
|
||||
plugins.fireHook('action:group.update', {
|
||||
plugins.hooks.fire('action:group.update', {
|
||||
name: groupName,
|
||||
values: values,
|
||||
});
|
||||
@@ -199,7 +199,7 @@ module.exports = function (Groups) {
|
||||
await renameGroupsMember(['groups:createtime', 'groups:visible:createtime', 'groups:visible:memberCount'], oldName, newName);
|
||||
await renameGroupsMember(['groups:visible:name'], oldName.toLowerCase() + ':' + oldName, newName.toLowerCase() + ':' + newName);
|
||||
|
||||
plugins.fireHook('action:group.rename', {
|
||||
plugins.hooks.fire('action:group.rename', {
|
||||
old: oldName,
|
||||
new: newName,
|
||||
});
|
||||
|
||||
20
src/image.js
20
src/image.js
@@ -23,8 +23,8 @@ function requireSharp() {
|
||||
|
||||
image.isFileTypeAllowed = async function (path) {
|
||||
const plugins = require('./plugins');
|
||||
if (plugins.hasListeners('filter:image.isFileTypeAllowed')) {
|
||||
return await plugins.fireHook('filter:image.isFileTypeAllowed', path);
|
||||
if (plugins.hooks.hasListeners('filter:image.isFileTypeAllowed')) {
|
||||
return await plugins.hooks.fire('filter:image.isFileTypeAllowed', path);
|
||||
}
|
||||
const sharp = require('sharp');
|
||||
await sharp(path, {
|
||||
@@ -33,8 +33,8 @@ image.isFileTypeAllowed = async function (path) {
|
||||
};
|
||||
|
||||
image.resizeImage = async function (data) {
|
||||
if (plugins.hasListeners('filter:image.resize')) {
|
||||
await plugins.fireHook('filter:image.resize', {
|
||||
if (plugins.hooks.hasListeners('filter:image.resize')) {
|
||||
await plugins.hooks.fire('filter:image.resize', {
|
||||
path: data.path,
|
||||
target: data.target,
|
||||
width: data.width,
|
||||
@@ -61,8 +61,8 @@ image.resizeImage = async function (data) {
|
||||
};
|
||||
|
||||
image.normalise = async function (path) {
|
||||
if (plugins.hasListeners('filter:image.normalise')) {
|
||||
await plugins.fireHook('filter:image.normalise', {
|
||||
if (plugins.hooks.hasListeners('filter:image.normalise')) {
|
||||
await plugins.hooks.fire('filter:image.normalise', {
|
||||
path: path,
|
||||
});
|
||||
} else {
|
||||
@@ -74,8 +74,8 @@ image.normalise = async function (path) {
|
||||
|
||||
image.size = async function (path) {
|
||||
let imageData;
|
||||
if (plugins.hasListeners('filter:image.size')) {
|
||||
imageData = await plugins.fireHook('filter:image.size', {
|
||||
if (plugins.hooks.hasListeners('filter:image.size')) {
|
||||
imageData = await plugins.hooks.fire('filter:image.size', {
|
||||
path: path,
|
||||
});
|
||||
} else {
|
||||
@@ -138,8 +138,8 @@ image.sizeFromBase64 = function (imageData) {
|
||||
};
|
||||
|
||||
image.uploadImage = async function (filename, folder, imageData) {
|
||||
if (plugins.hasListeners('filter:uploadImage')) {
|
||||
return await plugins.fireHook('filter:uploadImage', {
|
||||
if (plugins.hooks.hasListeners('filter:uploadImage')) {
|
||||
return await plugins.hooks.fire('filter:uploadImage', {
|
||||
image: imageData,
|
||||
uid: imageData.uid,
|
||||
folder: folder,
|
||||
|
||||
@@ -24,7 +24,7 @@ module.exports = function (Messaging) {
|
||||
const maximumChatMessageLength = meta.config.maximumChatMessageLength || 1000;
|
||||
content = String(content).trim();
|
||||
let length = String(content.length).trim();
|
||||
({ content, length } = await plugins.fireHook('filter:messaging.checkContent', { content, length }));
|
||||
({ content, length } = await plugins.hooks.fire('filter:messaging.checkContent', { content, length }));
|
||||
if (!content) {
|
||||
throw new Error('[[error:invalid-chat-message]]');
|
||||
}
|
||||
@@ -49,7 +49,7 @@ module.exports = function (Messaging) {
|
||||
message.ip = data.ip;
|
||||
}
|
||||
|
||||
message = await plugins.fireHook('filter:messaging.save', message);
|
||||
message = await plugins.hooks.fire('filter:messaging.save', message);
|
||||
await db.setObject('message:' + mid, message);
|
||||
const isNewSet = await Messaging.isNewSet(data.uid, data.roomId, timestamp);
|
||||
let uids = await db.getSortedSetRange('chat:room:' + data.roomId + ':uids', 0, -1);
|
||||
@@ -69,7 +69,7 @@ module.exports = function (Messaging) {
|
||||
messages[0].newSet = isNewSet;
|
||||
messages[0].mid = mid;
|
||||
messages[0].roomId = data.roomId;
|
||||
plugins.fireHook('action:messaging.save', { message: messages[0], data: data });
|
||||
plugins.hooks.fire('action:messaging.save', { message: messages[0], data: data });
|
||||
return messages[0];
|
||||
};
|
||||
|
||||
|
||||
@@ -121,7 +121,7 @@ module.exports = function (Messaging) {
|
||||
messages = [];
|
||||
}
|
||||
|
||||
const data = await plugins.fireHook('filter:messaging.getMessages', {
|
||||
const data = await plugins.hooks.fire('filter:messaging.getMessages', {
|
||||
messages: messages,
|
||||
uid: uid,
|
||||
roomId: roomId,
|
||||
@@ -144,7 +144,7 @@ async function modifyMessage(message, fields, mid) {
|
||||
}
|
||||
}
|
||||
|
||||
const payload = await plugins.fireHook('filter:messaging.getFields', {
|
||||
const payload = await plugins.hooks.fire('filter:messaging.getFields', {
|
||||
mid: mid,
|
||||
message: message,
|
||||
fields: fields,
|
||||
|
||||
@@ -16,7 +16,7 @@ module.exports = function (Messaging) {
|
||||
return;
|
||||
}
|
||||
|
||||
const payload = await plugins.fireHook('filter:messaging.edit', {
|
||||
const payload = await plugins.hooks.fire('filter:messaging.edit', {
|
||||
content: content,
|
||||
edited: Date.now(),
|
||||
});
|
||||
|
||||
@@ -54,7 +54,7 @@ Messaging.getMessages = async (params) => {
|
||||
};
|
||||
|
||||
async function canGet(hook, callerUid, uid) {
|
||||
const data = await plugins.fireHook(hook, {
|
||||
const data = await plugins.hooks.fire(hook, {
|
||||
callerUid: callerUid,
|
||||
uid: uid,
|
||||
canGet: parseInt(callerUid, 10) === parseInt(uid, 10),
|
||||
@@ -64,7 +64,7 @@ async function canGet(hook, callerUid, uid) {
|
||||
}
|
||||
|
||||
Messaging.parse = async (message, fromuid, uid, roomId, isNew) => {
|
||||
const parsed = await plugins.fireHook('filter:parse.raw', message);
|
||||
const parsed = await plugins.hooks.fire('filter:parse.raw', message);
|
||||
let messageData = {
|
||||
message: message,
|
||||
parsed: parsed,
|
||||
@@ -75,7 +75,7 @@ Messaging.parse = async (message, fromuid, uid, roomId, isNew) => {
|
||||
parsedMessage: parsed,
|
||||
};
|
||||
|
||||
messageData = await plugins.fireHook('filter:messaging.parse', messageData);
|
||||
messageData = await plugins.hooks.fire('filter:messaging.parse', messageData);
|
||||
return messageData ? messageData.parsedMessage : '';
|
||||
};
|
||||
|
||||
@@ -129,7 +129,7 @@ Messaging.getRecentChats = async (callerUid, uid, start, stop) => {
|
||||
|
||||
results.roomData = results.roomData.filter(Boolean);
|
||||
const ref = { rooms: results.roomData, nextStart: stop + 1 };
|
||||
return await plugins.fireHook('filter:messaging.getRecentChats', {
|
||||
return await plugins.hooks.fire('filter:messaging.getRecentChats', {
|
||||
rooms: ref.rooms,
|
||||
nextStart: ref.nextStart,
|
||||
uid: uid,
|
||||
@@ -160,7 +160,7 @@ Messaging.getTeaser = async (uid, roomId) => {
|
||||
teaser.content = validator.escape(String(teaser.content));
|
||||
}
|
||||
|
||||
const payload = await plugins.fireHook('filter:messaging.getTeaser', { teaser: teaser });
|
||||
const payload = await plugins.hooks.fire('filter:messaging.getTeaser', { teaser: teaser });
|
||||
return payload.teaser;
|
||||
};
|
||||
|
||||
@@ -222,7 +222,7 @@ Messaging.canMessageUser = async (uid, toUid) => {
|
||||
throw new Error('[[error:chat-restricted]]');
|
||||
}
|
||||
|
||||
await plugins.fireHook('static:messaging.canMessageUser', {
|
||||
await plugins.hooks.fire('static:messaging.canMessageUser', {
|
||||
uid: uid,
|
||||
toUid: toUid,
|
||||
});
|
||||
@@ -247,7 +247,7 @@ Messaging.canMessageRoom = async (uid, roomId) => {
|
||||
throw new Error('[[error:no-privileges]]');
|
||||
}
|
||||
|
||||
await plugins.fireHook('static:messaging.canMessageRoom', {
|
||||
await plugins.hooks.fire('static:messaging.canMessageRoom', {
|
||||
uid: uid,
|
||||
roomId: roomId,
|
||||
});
|
||||
|
||||
@@ -19,7 +19,7 @@ module.exports = function (Messaging) {
|
||||
message: messageObj,
|
||||
uids: uids,
|
||||
};
|
||||
data = await plugins.fireHook('filter:messaging.notify', data);
|
||||
data = await plugins.hooks.fire('filter:messaging.notify', data);
|
||||
if (!data || !data.uids || !data.uids.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ module.exports = function (Messaging) {
|
||||
|
||||
Messaging.isUserInRoom = async (uid, roomId) => {
|
||||
const inRoom = await db.isSortedSetMember('chat:room:' + roomId + ':uids', uid);
|
||||
const data = await plugins.fireHook('filter:messaging.isUserInRoom', { uid: uid, roomId: roomId, inRoom: inRoom });
|
||||
const data = await plugins.hooks.fire('filter:messaging.isUserInRoom', { uid: uid, roomId: roomId, inRoom: inRoom });
|
||||
return data.inRoom;
|
||||
};
|
||||
|
||||
@@ -185,7 +185,7 @@ module.exports = function (Messaging) {
|
||||
throw new Error('[[error:chat-room-name-too-long]]');
|
||||
}
|
||||
|
||||
const payload = await plugins.fireHook('filter:chat.renameRoom', {
|
||||
const payload = await plugins.hooks.fire('filter:chat.renameRoom', {
|
||||
uid: uid,
|
||||
roomId: roomId,
|
||||
newName: newName,
|
||||
@@ -198,7 +198,7 @@ module.exports = function (Messaging) {
|
||||
await db.setObjectField('chat:room:' + payload.roomId, 'roomName', payload.newName);
|
||||
await Messaging.addSystemMessage('room-rename, ' + payload.newName.replace(',', ','), payload.uid, payload.roomId);
|
||||
|
||||
plugins.fireHook('action:chat.renameRoom', {
|
||||
plugins.hooks.fire('action:chat.renameRoom', {
|
||||
roomId: payload.roomId,
|
||||
newName: payload.newName,
|
||||
});
|
||||
@@ -206,7 +206,7 @@ module.exports = function (Messaging) {
|
||||
|
||||
Messaging.canReply = async (roomId, uid) => {
|
||||
const inRoom = await db.isSortedSetMember('chat:room:' + roomId + ':uids', uid);
|
||||
const data = await plugins.fireHook('filter:messaging.canReply', { uid: uid, roomId: roomId, inRoom: inRoom, canReply: inRoom });
|
||||
const data = await plugins.hooks.fire('filter:messaging.canReply', { uid: uid, roomId: roomId, inRoom: inRoom, canReply: inRoom });
|
||||
return data.canReply;
|
||||
};
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ Blacklist.test = async function (clientIp) {
|
||||
) {
|
||||
try {
|
||||
// To return test failure, pass back an error in callback
|
||||
await plugins.fireHook('filter:blacklist.test', { ip: clientIp });
|
||||
await plugins.hooks.fire('filter:blacklist.test', { ip: clientIp });
|
||||
} catch (err) {
|
||||
analytics.increment('blacklist');
|
||||
throw err;
|
||||
|
||||
@@ -150,7 +150,7 @@ Configs.remove = async function (field) {
|
||||
};
|
||||
|
||||
Configs.registerHooks = () => {
|
||||
plugins.registerHook('core', {
|
||||
plugins.hooks.register('core', {
|
||||
hook: 'filter:settings.set',
|
||||
method: async ({ plugin, settings, quiet }) => {
|
||||
if (plugin === 'core.api' && Array.isArray(settings.tokens)) {
|
||||
@@ -170,7 +170,7 @@ Configs.registerHooks = () => {
|
||||
},
|
||||
});
|
||||
|
||||
plugins.registerHook('core', {
|
||||
plugins.hooks.register('core', {
|
||||
hook: 'filter:settings.get',
|
||||
method: async ({ plugin, values }) => {
|
||||
if (plugin === 'core.api' && Array.isArray(values.tokens)) {
|
||||
|
||||
@@ -31,7 +31,7 @@ Settings.get = async function (hash) {
|
||||
});
|
||||
}));
|
||||
|
||||
({ values: data } = await plugins.fireHook('filter:settings.get', { plugin: hash, values: data }));
|
||||
({ values: data } = await plugins.hooks.fire('filter:settings.get', { plugin: hash, values: data }));
|
||||
cache.set('settings:' + hash, data);
|
||||
return data;
|
||||
};
|
||||
@@ -54,7 +54,7 @@ Settings.set = async function (hash, values, quiet) {
|
||||
}
|
||||
}
|
||||
|
||||
({ plugin: hash, settings: values, quiet } = await plugins.fireHook('filter:settings.set', { plugin: hash, settings: values, quiet }));
|
||||
({ plugin: hash, settings: values, quiet } = await plugins.hooks.fire('filter:settings.set', { plugin: hash, settings: values, quiet }));
|
||||
|
||||
if (sortedLists.length) {
|
||||
await db.delete('settings:' + hash + ':sorted-lists');
|
||||
@@ -87,7 +87,7 @@ Settings.set = async function (hash, values, quiet) {
|
||||
|
||||
cache.del('settings:' + hash);
|
||||
|
||||
plugins.fireHook('action:settings.set', {
|
||||
plugins.hooks.fire('action:settings.set', {
|
||||
plugin: hash,
|
||||
settings: values,
|
||||
});
|
||||
|
||||
@@ -65,7 +65,7 @@ Tags.parse = async (req, data, meta, link) => {
|
||||
href: relative_path + '/manifest.webmanifest',
|
||||
}];
|
||||
|
||||
if (plugins.hasListeners('filter:search.query')) {
|
||||
if (plugins.hooks.hasListeners('filter:search.query')) {
|
||||
defaultLinks.push({
|
||||
rel: 'search',
|
||||
type: 'application/opensearchdescription+xml',
|
||||
@@ -140,8 +140,8 @@ Tags.parse = async (req, data, meta, link) => {
|
||||
}
|
||||
|
||||
const results = await utils.promiseParallel({
|
||||
tags: plugins.fireHook('filter:meta.getMetaTags', { req: req, data: data, tags: defaultTags }),
|
||||
links: plugins.fireHook('filter:meta.getLinkTags', { req: req, data: data, links: defaultLinks }),
|
||||
tags: plugins.hooks.fire('filter:meta.getMetaTags', { req: req, data: data, tags: defaultTags }),
|
||||
links: plugins.hooks.fire('filter:meta.getLinkTags', { req: req, data: data, links: defaultLinks }),
|
||||
});
|
||||
|
||||
meta = results.tags.tags.concat(meta || []).map(function (tag) {
|
||||
|
||||
@@ -36,7 +36,7 @@ middleware.renderHeader = async (req, res, data) => {
|
||||
const results = await utils.promiseParallel({
|
||||
userData: user.getUserFields(req.uid, ['username', 'userslug', 'email', 'picture', 'email:confirmed']),
|
||||
scripts: getAdminScripts(),
|
||||
custom_header: plugins.fireHook('filter:admin.header.build', custom_header),
|
||||
custom_header: plugins.hooks.fire('filter:admin.header.build', custom_header),
|
||||
configs: meta.configs.list(),
|
||||
latestVersion: getLatestVersion(),
|
||||
privileges: privileges.admin.get(req.uid),
|
||||
@@ -83,7 +83,7 @@ middleware.renderHeader = async (req, res, data) => {
|
||||
};
|
||||
|
||||
async function getAdminScripts() {
|
||||
const scripts = await plugins.fireHook('filter:admin.scripts.get', []);
|
||||
const scripts = await plugins.hooks.fire('filter:admin.scripts.get', []);
|
||||
return scripts.map(function (script) {
|
||||
return { src: script };
|
||||
});
|
||||
|
||||
@@ -34,7 +34,7 @@ middleware.buildHeader = helpers.try(async function buildHeader(req, res, next)
|
||||
const [config, isBanned] = await Promise.all([
|
||||
controllers.api.loadConfig(req),
|
||||
user.bans.isBanned(req.uid),
|
||||
plugins.fireHook('filter:middleware.buildHeader', { req: req, locals: res.locals }),
|
||||
plugins.hooks.fire('filter:middleware.buildHeader', { req: req, locals: res.locals }),
|
||||
]);
|
||||
|
||||
if (isBanned) {
|
||||
@@ -60,7 +60,7 @@ middleware.renderHeader = async function renderHeader(req, res, data) {
|
||||
'brand:logo:alt': meta.config['brand:logo:alt'] || '',
|
||||
'brand:logo:display': meta.config['brand:logo'] ? '' : 'hide',
|
||||
allowRegistration: registrationType === 'normal',
|
||||
searchEnabled: plugins.hasListeners('filter:search.query'),
|
||||
searchEnabled: plugins.hooks.hasListeners('filter:search.query'),
|
||||
config: res.locals.config,
|
||||
relative_path,
|
||||
bodyClass: data.bodyClass,
|
||||
@@ -173,7 +173,7 @@ middleware.renderHeader = async function renderHeader(req, res, data) {
|
||||
modifyTitle(templateValues);
|
||||
}
|
||||
|
||||
const hookReturn = await plugins.fireHook('filter:middleware.renderHeader', {
|
||||
const hookReturn = await plugins.hooks.fire('filter:middleware.renderHeader', {
|
||||
req: req,
|
||||
res: res,
|
||||
templateValues: templateValues,
|
||||
@@ -184,13 +184,13 @@ middleware.renderHeader = async function renderHeader(req, res, data) {
|
||||
};
|
||||
|
||||
middleware.renderFooter = async function renderFooter(req, res, templateValues) {
|
||||
const data = await plugins.fireHook('filter:middleware.renderFooter', {
|
||||
const data = await plugins.hooks.fire('filter:middleware.renderFooter', {
|
||||
req: req,
|
||||
res: res,
|
||||
templateValues: templateValues,
|
||||
});
|
||||
|
||||
const scripts = await plugins.fireHook('filter:scripts.get', []);
|
||||
const scripts = await plugins.hooks.fire('filter:scripts.get', []);
|
||||
|
||||
data.templateValues.scripts = scripts.map(function (script) {
|
||||
return { src: script };
|
||||
|
||||
@@ -82,7 +82,7 @@ middleware.pageView = helpers.try(async function pageView(req, res, next) {
|
||||
}
|
||||
next();
|
||||
await analytics.pageView({ ip: req.ip, uid: req.uid });
|
||||
plugins.fireHook('action:middleware.pageView', { req: req });
|
||||
plugins.hooks.fire('action:middleware.pageView', { req: req });
|
||||
});
|
||||
|
||||
middleware.pluginHooks = helpers.try(async function pluginHooks(req, res, next) {
|
||||
@@ -91,7 +91,7 @@ middleware.pluginHooks = helpers.try(async function pluginHooks(req, res, next)
|
||||
hookObj.method(req, res, next);
|
||||
});
|
||||
|
||||
await plugins.fireHook('response:router.page', {
|
||||
await plugins.hooks.fire('response:router.page', {
|
||||
req: req,
|
||||
res: res,
|
||||
});
|
||||
@@ -227,7 +227,7 @@ middleware.trimUploadTimestamps = function trimUploadTimestamps(req, res, next)
|
||||
|
||||
middleware.validateAuth = helpers.try(async function validateAuth(req, res, next) {
|
||||
try {
|
||||
await plugins.fireHook('static:auth.validate', {
|
||||
await plugins.hooks.fire('static:auth.validate', {
|
||||
user: res.locals.user,
|
||||
strategy: res.locals.strategy,
|
||||
});
|
||||
|
||||
@@ -33,10 +33,10 @@ module.exports = function (middleware) {
|
||||
options.url = (req.baseUrl + req.path.replace(/^\/api/, ''));
|
||||
options.bodyClass = buildBodyClass(req, res, options);
|
||||
|
||||
const buildResult = await plugins.fireHook('filter:' + template + '.build', { req: req, res: res, templateData: options });
|
||||
const buildResult = await plugins.hooks.fire('filter:' + template + '.build', { req: req, res: res, templateData: options });
|
||||
const templateToRender = buildResult.templateData.templateToRender || template;
|
||||
|
||||
const renderResult = await plugins.fireHook('filter:middleware.render', { req: req, res: res, templateData: buildResult.templateData });
|
||||
const renderResult = await plugins.hooks.fire('filter:middleware.render', { req: req, res: res, templateData: buildResult.templateData });
|
||||
options = renderResult.templateData;
|
||||
options._header = {
|
||||
tags: await meta.tags.parse(req, renderResult, res.locals.metaTags, res.locals.linkTags),
|
||||
|
||||
@@ -69,7 +69,7 @@ module.exports = function (middleware) {
|
||||
}
|
||||
}
|
||||
|
||||
await plugins.fireHook('response:middleware.authenticate', {
|
||||
await plugins.hooks.fire('response:middleware.authenticate', {
|
||||
req: req,
|
||||
res: res,
|
||||
next: function () {}, // no-op for backwards compatibility
|
||||
|
||||
@@ -78,7 +78,7 @@ async function getAvailable() {
|
||||
return item;
|
||||
});
|
||||
|
||||
return await plugins.fireHook('filter:navigation.available', core);
|
||||
return await plugins.hooks.fire('filter:navigation.available', core);
|
||||
}
|
||||
|
||||
require('../promisify')(admin);
|
||||
|
||||
@@ -38,7 +38,7 @@ Notifications.privilegedTypes = [
|
||||
];
|
||||
|
||||
Notifications.getAllNotificationTypes = async function () {
|
||||
const results = await plugins.fireHook('filter:user.notificationTypes', {
|
||||
const results = await plugins.hooks.fire('filter:user.notificationTypes', {
|
||||
types: Notifications.baseTypes.slice(),
|
||||
privilegedTypes: Notifications.privilegedTypes.slice(),
|
||||
});
|
||||
@@ -213,7 +213,7 @@ async function pushToUids(uids, notification) {
|
||||
|
||||
// Remove uid from recipients list if they have blocked the user triggering the notification
|
||||
uids = await User.blocks.filterUids(notification.from, uids);
|
||||
const data = await plugins.fireHook('filter:notification.push', { notification: notification, uids: uids });
|
||||
const data = await plugins.hooks.fire('filter:notification.push', { notification: notification, uids: uids });
|
||||
if (!data || !data.notification || !data.uids || !data.uids.length) {
|
||||
return;
|
||||
}
|
||||
@@ -227,7 +227,7 @@ async function pushToUids(uids, notification) {
|
||||
sendNotification(results.uidsToNotify),
|
||||
sendEmail(results.uidsToEmail),
|
||||
]);
|
||||
plugins.fireHook('action:notification.pushed', {
|
||||
plugins.hooks.fire('action:notification.pushed', {
|
||||
notification: notification,
|
||||
uids: results.uidsToNotify,
|
||||
uidsNotified: results.uidsToNotify,
|
||||
@@ -419,7 +419,7 @@ Notifications.merge = async function (notifications) {
|
||||
return notifications;
|
||||
}, notifications);
|
||||
|
||||
const data = await plugins.fireHook('filter:notifications.merge', {
|
||||
const data = await plugins.hooks.fire('filter:notifications.merge', {
|
||||
notifications: notifications,
|
||||
});
|
||||
return data && data.notifications;
|
||||
|
||||
@@ -3,211 +3,213 @@
|
||||
const winston = require('winston');
|
||||
const async = require('async');
|
||||
const utils = require('../utils');
|
||||
const plugins = require('.');
|
||||
|
||||
module.exports = function (Plugins) {
|
||||
Plugins.deprecatedHooks = {
|
||||
'filter:privileges:isUserAllowedTo': 'filter:privileges:isAllowedTo', // 👋 @ 1.16.0
|
||||
'filter:router.page': 'response:router.page', // 👋 @ 2.0.0
|
||||
};
|
||||
const Hooks = {};
|
||||
module.exports = Hooks;
|
||||
|
||||
Plugins.internals = {
|
||||
_register: function (data) {
|
||||
Plugins.loadedHooks[data.hook] = Plugins.loadedHooks[data.hook] || [];
|
||||
Plugins.loadedHooks[data.hook].push(data);
|
||||
},
|
||||
};
|
||||
Hooks.deprecatedHooks = {
|
||||
'filter:privileges:isUserAllowedTo': 'filter:privileges:isAllowedTo', // 👋 @ 1.16.0
|
||||
'filter:router.page': 'response:router.page', // 👋 @ 2.0.0
|
||||
};
|
||||
|
||||
const hookTypeToMethod = {
|
||||
filter: fireFilterHook,
|
||||
action: fireActionHook,
|
||||
static: fireStaticHook,
|
||||
response: fireResponseHook,
|
||||
};
|
||||
Hooks.internals = {
|
||||
_register: function (data) {
|
||||
plugins.loadedHooks[data.hook] = plugins.loadedHooks[data.hook] || [];
|
||||
plugins.loadedHooks[data.hook].push(data);
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
`data` is an object consisting of (* is required):
|
||||
`data.hook`*, the name of the NodeBB hook
|
||||
`data.method`*, the method called in that plugin (can be an array of functions)
|
||||
`data.priority`, the relative priority of the method when it is eventually called (default: 10)
|
||||
*/
|
||||
Plugins.registerHook = function (id, data) {
|
||||
if (!data.hook || !data.method) {
|
||||
winston.warn('[plugins/' + id + '] registerHook called with invalid data.hook/method', data);
|
||||
return;
|
||||
}
|
||||
const hookTypeToMethod = {
|
||||
filter: fireFilterHook,
|
||||
action: fireActionHook,
|
||||
static: fireStaticHook,
|
||||
response: fireResponseHook,
|
||||
};
|
||||
|
||||
// `hasOwnProperty` needed for hooks with no alternative (set to null)
|
||||
if (Plugins.deprecatedHooks.hasOwnProperty(data.hook)) {
|
||||
const deprecated = Plugins.deprecatedHooks[data.hook];
|
||||
/*
|
||||
`data` is an object consisting of (* is required):
|
||||
`data.hook`*, the name of the NodeBB hook
|
||||
`data.method`*, the method called in that plugin (can be an array of functions)
|
||||
`data.priority`, the relative priority of the method when it is eventually called (default: 10)
|
||||
*/
|
||||
Hooks.register = function (id, data) {
|
||||
if (!data.hook || !data.method) {
|
||||
winston.warn('[plugins/' + id + '] registerHook called with invalid data.hook/method', data);
|
||||
return;
|
||||
}
|
||||
|
||||
if (deprecated) {
|
||||
winston.warn(`[plugins/${id}] Hook "${data.hook}" is deprecated, please use "${deprecated}" instead.`);
|
||||
} else {
|
||||
winston.warn(`[plugins/${id}] Hook "${data.hook}" is deprecated, there is no alternative.`);
|
||||
}
|
||||
}
|
||||
// `hasOwnProperty` needed for hooks with no alternative (set to null)
|
||||
if (Hooks.deprecatedHooks.hasOwnProperty(data.hook)) {
|
||||
const deprecated = Hooks.deprecatedHooks[data.hook];
|
||||
|
||||
data.id = id;
|
||||
if (!data.priority) {
|
||||
data.priority = 10;
|
||||
}
|
||||
|
||||
if (Array.isArray(data.method) && data.method.every(method => typeof method === 'function' || typeof method === 'string')) {
|
||||
// Go go gadget recursion!
|
||||
data.method.forEach(function (method) {
|
||||
const singularData = { ...data, method: method };
|
||||
Plugins.registerHook(id, singularData);
|
||||
});
|
||||
} else if (typeof data.method === 'string' && data.method.length > 0) {
|
||||
const method = data.method.split('.').reduce(function (memo, prop) {
|
||||
if (memo && memo[prop]) {
|
||||
return memo[prop];
|
||||
}
|
||||
// Couldn't find method by path, aborting
|
||||
return null;
|
||||
}, Plugins.libraries[data.id]);
|
||||
|
||||
// Write the actual method reference to the hookObj
|
||||
data.method = method;
|
||||
|
||||
Plugins.internals._register(data);
|
||||
} else if (typeof data.method === 'function') {
|
||||
Plugins.internals._register(data);
|
||||
if (deprecated) {
|
||||
winston.warn(`[plugins/${id}] Hook "${data.hook}" is deprecated, please use "${deprecated}" instead.`);
|
||||
} else {
|
||||
winston.warn('[plugins/' + id + '] Hook method mismatch: ' + data.hook + ' => ' + data.method);
|
||||
winston.warn(`[plugins/${id}] Hook "${data.hook}" is deprecated, there is no alternative.`);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Plugins.unregisterHook = function (id, hook, method) {
|
||||
var hooks = Plugins.loadedHooks[hook] || [];
|
||||
Plugins.loadedHooks[hook] = hooks.filter(function (hookData) {
|
||||
return hookData && hookData.id !== id && hookData.method !== method;
|
||||
data.id = id;
|
||||
if (!data.priority) {
|
||||
data.priority = 10;
|
||||
}
|
||||
|
||||
if (Array.isArray(data.method) && data.method.every(method => typeof method === 'function' || typeof method === 'string')) {
|
||||
// Go go gadget recursion!
|
||||
data.method.forEach(function (method) {
|
||||
const singularData = { ...data, method: method };
|
||||
Hooks.register(id, singularData);
|
||||
});
|
||||
};
|
||||
|
||||
Plugins.fireHook = async function (hook, params) {
|
||||
const hookList = Plugins.loadedHooks[hook];
|
||||
const hookType = hook.split(':')[0];
|
||||
if (global.env === 'development' && hook !== 'action:plugins.firehook') {
|
||||
winston.verbose('[plugins/fireHook] ' + hook);
|
||||
}
|
||||
|
||||
if (!hookTypeToMethod[hookType]) {
|
||||
winston.warn('[plugins] Unknown hookType: ' + hookType + ', hook : ' + hook);
|
||||
return;
|
||||
}
|
||||
const result = await hookTypeToMethod[hookType](hook, hookList, params);
|
||||
|
||||
if (hook !== 'action:plugins.firehook') {
|
||||
Plugins.fireHook('action:plugins.firehook', { hook: hook, params: params });
|
||||
}
|
||||
if (result !== undefined) {
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
async function fireFilterHook(hook, hookList, params) {
|
||||
if (!Array.isArray(hookList) || !hookList.length) {
|
||||
return params;
|
||||
}
|
||||
|
||||
return await async.reduce(hookList, params, function (params, hookObj, next) {
|
||||
if (typeof hookObj.method !== 'function') {
|
||||
if (global.env === 'development') {
|
||||
winston.warn('[plugins] Expected method for hook \'' + hook + '\' in plugin \'' + hookObj.id + '\' not found, skipping.');
|
||||
}
|
||||
return next(null, params);
|
||||
} else if (typeof data.method === 'string' && data.method.length > 0) {
|
||||
const method = data.method.split('.').reduce(function (memo, prop) {
|
||||
if (memo && memo[prop]) {
|
||||
return memo[prop];
|
||||
}
|
||||
const returned = hookObj.method(params, next);
|
||||
// Couldn't find method by path, aborting
|
||||
return null;
|
||||
}, plugins.libraries[data.id]);
|
||||
|
||||
// Write the actual method reference to the hookObj
|
||||
data.method = method;
|
||||
|
||||
Hooks.internals._register(data);
|
||||
} else if (typeof data.method === 'function') {
|
||||
Hooks.internals._register(data);
|
||||
} else {
|
||||
winston.warn('[plugins/' + id + '] Hook method mismatch: ' + data.hook + ' => ' + data.method);
|
||||
}
|
||||
};
|
||||
|
||||
Hooks.unregister = function (id, hook, method) {
|
||||
var hooks = plugins.loadedHooks[hook] || [];
|
||||
plugins.loadedHooks[hook] = hooks.filter(function (hookData) {
|
||||
return hookData && hookData.id !== id && hookData.method !== method;
|
||||
});
|
||||
};
|
||||
|
||||
Hooks.fire = async function (hook, params) {
|
||||
const hookList = plugins.loadedHooks[hook];
|
||||
const hookType = hook.split(':')[0];
|
||||
if (global.env === 'development' && hook !== 'action:plugins.fireHook') {
|
||||
winston.verbose('[plugins/fireHook] ' + hook);
|
||||
}
|
||||
|
||||
if (!hookTypeToMethod[hookType]) {
|
||||
winston.warn('[plugins] Unknown hookType: ' + hookType + ', hook : ' + hook);
|
||||
return;
|
||||
}
|
||||
const result = await hookTypeToMethod[hookType](hook, hookList, params);
|
||||
|
||||
if (hook !== 'action:plugins.fireHook') {
|
||||
Hooks.fire('action:plugins.fireHook', { hook: hook, params: params });
|
||||
}
|
||||
if (result !== undefined) {
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
Hooks.hasListeners = function (hook) {
|
||||
return !!(plugins.loadedHooks[hook] && plugins.loadedHooks[hook].length > 0);
|
||||
};
|
||||
|
||||
async function fireFilterHook(hook, hookList, params) {
|
||||
if (!Array.isArray(hookList) || !hookList.length) {
|
||||
return params;
|
||||
}
|
||||
|
||||
return await async.reduce(hookList, params, function (params, hookObj, next) {
|
||||
if (typeof hookObj.method !== 'function') {
|
||||
if (global.env === 'development') {
|
||||
winston.warn('[plugins] Expected method for hook \'' + hook + '\' in plugin \'' + hookObj.id + '\' not found, skipping.');
|
||||
}
|
||||
return next(null, params);
|
||||
}
|
||||
const returned = hookObj.method(params, next);
|
||||
if (utils.isPromise(returned)) {
|
||||
returned.then(
|
||||
payload => setImmediate(next, null, payload),
|
||||
err => setImmediate(next, err)
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async function fireActionHook(hook, hookList, params) {
|
||||
if (!Array.isArray(hookList) || !hookList.length) {
|
||||
return;
|
||||
}
|
||||
for (const hookObj of hookList) {
|
||||
if (typeof hookObj.method !== 'function') {
|
||||
if (global.env === 'development') {
|
||||
winston.warn('[plugins] Expected method for hook \'' + hook + '\' in plugin \'' + hookObj.id + '\' not found, skipping.');
|
||||
}
|
||||
} else {
|
||||
/* eslint-disable no-await-in-loop */
|
||||
await hookObj.method(params);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function fireStaticHook(hook, hookList, params) {
|
||||
if (!Array.isArray(hookList) || !hookList.length) {
|
||||
return;
|
||||
}
|
||||
// don't bubble errors from these hooks, so bad plugins don't stop startup
|
||||
const noErrorHooks = ['static:app.load', 'static:assets.prepare', 'static:app.preload'];
|
||||
await async.each(hookList, function (hookObj, next) {
|
||||
if (typeof hookObj.method !== 'function') {
|
||||
return next();
|
||||
}
|
||||
|
||||
let timedOut = false;
|
||||
const timeoutId = setTimeout(function () {
|
||||
winston.warn('[plugins] Callback timed out, hook \'' + hook + '\' in plugin \'' + hookObj.id + '\'');
|
||||
timedOut = true;
|
||||
next();
|
||||
}, 5000);
|
||||
|
||||
const callback = (err) => {
|
||||
clearTimeout(timeoutId);
|
||||
if (err) {
|
||||
winston.error('[plugins] Error executing \'' + hook + '\' in plugin \'' + hookObj.id + '\'');
|
||||
winston.error(err.stack);
|
||||
}
|
||||
if (!timedOut) {
|
||||
next(noErrorHooks.includes(hook) ? null : err);
|
||||
}
|
||||
};
|
||||
try {
|
||||
const returned = hookObj.method(params, callback);
|
||||
if (utils.isPromise(returned)) {
|
||||
returned.then(
|
||||
payload => setImmediate(next, null, payload),
|
||||
err => setImmediate(next, err)
|
||||
payload => setImmediate(callback, null, payload),
|
||||
err => setImmediate(callback, err)
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (err) {
|
||||
callback(err);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async function fireActionHook(hook, hookList, params) {
|
||||
if (!Array.isArray(hookList) || !hookList.length) {
|
||||
async function fireResponseHook(hook, hookList, params) {
|
||||
if (!Array.isArray(hookList) || !hookList.length) {
|
||||
return;
|
||||
}
|
||||
await async.eachSeries(hookList, async (hookObj) => {
|
||||
if (typeof hookObj.method !== 'function') {
|
||||
if (global.env === 'development') {
|
||||
winston.warn('[plugins] Expected method for hook \'' + hook + '\' in plugin \'' + hookObj.id + '\' not found, skipping.');
|
||||
}
|
||||
return;
|
||||
}
|
||||
for (const hookObj of hookList) {
|
||||
if (typeof hookObj.method !== 'function') {
|
||||
if (global.env === 'development') {
|
||||
winston.warn('[plugins] Expected method for hook \'' + hook + '\' in plugin \'' + hookObj.id + '\' not found, skipping.');
|
||||
}
|
||||
} else {
|
||||
/* eslint-disable no-await-in-loop */
|
||||
await hookObj.method(params);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function fireStaticHook(hook, hookList, params) {
|
||||
if (!Array.isArray(hookList) || !hookList.length) {
|
||||
// Skip remaining hooks if headers have been sent
|
||||
if (params.res.headersSent) {
|
||||
return;
|
||||
}
|
||||
// don't bubble errors from these hooks, so bad plugins don't stop startup
|
||||
const noErrorHooks = ['static:app.load', 'static:assets.prepare', 'static:app.preload'];
|
||||
await async.each(hookList, function (hookObj, next) {
|
||||
if (typeof hookObj.method !== 'function') {
|
||||
return next();
|
||||
}
|
||||
|
||||
let timedOut = false;
|
||||
const timeoutId = setTimeout(function () {
|
||||
winston.warn('[plugins] Callback timed out, hook \'' + hook + '\' in plugin \'' + hookObj.id + '\'');
|
||||
timedOut = true;
|
||||
next();
|
||||
}, 5000);
|
||||
|
||||
const callback = (err) => {
|
||||
clearTimeout(timeoutId);
|
||||
if (err) {
|
||||
winston.error('[plugins] Error executing \'' + hook + '\' in plugin \'' + hookObj.id + '\'');
|
||||
winston.error(err.stack);
|
||||
}
|
||||
if (!timedOut) {
|
||||
next(noErrorHooks.includes(hook) ? null : err);
|
||||
}
|
||||
};
|
||||
try {
|
||||
const returned = hookObj.method(params, callback);
|
||||
if (utils.isPromise(returned)) {
|
||||
returned.then(
|
||||
payload => setImmediate(callback, null, payload),
|
||||
err => setImmediate(callback, err)
|
||||
);
|
||||
}
|
||||
} catch (err) {
|
||||
callback(err);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async function fireResponseHook(hook, hookList, params) {
|
||||
if (!Array.isArray(hookList) || !hookList.length) {
|
||||
return;
|
||||
}
|
||||
await async.eachSeries(hookList, async (hookObj) => {
|
||||
if (typeof hookObj.method !== 'function') {
|
||||
if (global.env === 'development') {
|
||||
winston.warn('[plugins] Expected method for hook \'' + hook + '\' in plugin \'' + hookObj.id + '\' not found, skipping.');
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Skip remaining hooks if headers have been sent
|
||||
if (params.res.headersSent) {
|
||||
return;
|
||||
}
|
||||
|
||||
await hookObj.method(params);
|
||||
});
|
||||
}
|
||||
|
||||
Plugins.hasListeners = function (hook) {
|
||||
return !!(Plugins.loadedHooks[hook] && Plugins.loadedHooks[hook].length > 0);
|
||||
};
|
||||
};
|
||||
await hookObj.method(params);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -21,9 +21,16 @@ const Plugins = module.exports;
|
||||
|
||||
require('./install')(Plugins);
|
||||
require('./load')(Plugins);
|
||||
require('./hooks')(Plugins);
|
||||
require('./usage')(Plugins);
|
||||
Plugins.data = require('./data');
|
||||
Plugins.hooks = require('./hooks');
|
||||
|
||||
// Backwards compatibility for hooks, remove in v1.16.0
|
||||
Plugins.registerHook = Plugins.hooks.register;
|
||||
Plugins.unregisterHook = Plugins.hooks.unregister;
|
||||
Plugins.fireHook = Plugins.hooks.fire;
|
||||
Plugins.hasListeners = Plugins.hooks.hasListeners;
|
||||
// end
|
||||
|
||||
Plugins.getPluginPaths = Plugins.data.getPluginPaths;
|
||||
Plugins.loadPluginInfo = Plugins.data.loadPluginInfo;
|
||||
@@ -138,7 +145,7 @@ Plugins.reload = async function () {
|
||||
|
||||
Plugins.reloadRoutes = async function (params) {
|
||||
var controllers = require('../controllers');
|
||||
await Plugins.fireHook('static:app.load', { app: app, router: params.router, middleware: middleware, controllers: controllers });
|
||||
await Plugins.hooks.fire('static:app.load', { app: app, router: params.router, middleware: middleware, controllers: controllers });
|
||||
winston.verbose('[plugins] All plugins reloaded and rerouted');
|
||||
};
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ module.exports = function (Plugins) {
|
||||
await db.sortedSetAdd('plugins:active', count, id);
|
||||
}
|
||||
meta.reloadRequired = true;
|
||||
Plugins.fireHook(isActive ? 'action:plugin.deactivate' : 'action:plugin.activate', { id: id });
|
||||
Plugins.hooks.fire(isActive ? 'action:plugin.deactivate' : 'action:plugin.activate', { id: id });
|
||||
return { id: id, active: !isActive };
|
||||
};
|
||||
|
||||
@@ -100,7 +100,7 @@ module.exports = function (Plugins) {
|
||||
}
|
||||
await runPackageManagerCommandAsync(type, id, version || 'latest');
|
||||
const pluginData = await Plugins.get(id);
|
||||
Plugins.fireHook('action:plugin.' + type, { id: id, version: version });
|
||||
Plugins.hooks.fire('action:plugin.' + type, { id: id, version: version });
|
||||
return pluginData;
|
||||
}
|
||||
|
||||
|
||||
@@ -160,7 +160,7 @@ module.exports = function (Plugins) {
|
||||
}
|
||||
|
||||
if (Array.isArray(pluginData.hooks)) {
|
||||
pluginData.hooks.forEach(hook => Plugins.registerHook(pluginData.id, hook));
|
||||
pluginData.hooks.forEach(hook => Plugins.hooks.register(pluginData.id, hook));
|
||||
}
|
||||
} catch (err) {
|
||||
winston.warn('[plugins] Unable to load library for: ' + pluginData.id);
|
||||
|
||||
@@ -41,7 +41,7 @@ module.exports = function (Posts) {
|
||||
postData.bookmarks = await db.setCount('pid:' + pid + ':users_bookmarked');
|
||||
await Posts.setPostField(pid, 'bookmarks', postData.bookmarks);
|
||||
|
||||
plugins.fireHook('action:post.' + type, {
|
||||
plugins.hooks.fire('action:post.' + type, {
|
||||
pid: pid,
|
||||
uid: uid,
|
||||
owner: postData.uid,
|
||||
|
||||
@@ -47,7 +47,7 @@ module.exports = function (Posts) {
|
||||
postData.handle = data.handle;
|
||||
}
|
||||
|
||||
let result = await plugins.fireHook('filter:post.create', { post: postData, data: data });
|
||||
let result = await plugins.hooks.fire('filter:post.create', { post: postData, data: data });
|
||||
postData = result.post;
|
||||
await db.setObject('post:' + postData.pid, postData);
|
||||
|
||||
@@ -65,9 +65,9 @@ module.exports = function (Posts) {
|
||||
Posts.uploads.sync(postData.pid),
|
||||
]);
|
||||
|
||||
result = await plugins.fireHook('filter:post.get', { post: postData, uid: data.uid });
|
||||
result = await plugins.hooks.fire('filter:post.get', { post: postData, uid: data.uid });
|
||||
result.post.isMain = isMain;
|
||||
plugins.fireHook('action:post.save', { post: _.clone(result.post) });
|
||||
plugins.hooks.fire('action:post.save', { post: _.clone(result.post) });
|
||||
return result.post;
|
||||
};
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ module.exports = function (Posts) {
|
||||
}
|
||||
const keys = pids.map(pid => 'post:' + pid);
|
||||
const postData = await (fields.length ? db.getObjectsFields(keys, fields) : db.getObjects(keys));
|
||||
const result = await plugins.fireHook('filter:post.getFields', {
|
||||
const result = await plugins.hooks.fire('filter:post.getFields', {
|
||||
pids: pids,
|
||||
posts: postData,
|
||||
fields: fields,
|
||||
@@ -51,7 +51,7 @@ module.exports = function (Posts) {
|
||||
|
||||
Posts.setPostFields = async function (pid, data) {
|
||||
await db.setObject('post:' + pid, data);
|
||||
plugins.fireHook('action:post.setFields', { data: { ...data, pid } });
|
||||
plugins.hooks.fire('action:post.setFields', { data: { ...data, pid } });
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ module.exports = function (Posts) {
|
||||
|
||||
async function deleteOrRestore(type, pid, uid) {
|
||||
const isDeleting = type === 'delete';
|
||||
await plugins.fireHook('filter:post.' + type, { pid: pid, uid: uid });
|
||||
await plugins.hooks.fire('filter:post.' + type, { pid: pid, uid: uid });
|
||||
await Posts.setPostFields(pid, {
|
||||
deleted: isDeleting ? 1 : 0,
|
||||
deleterUid: isDeleting ? uid : 0,
|
||||
@@ -38,7 +38,7 @@ module.exports = function (Posts) {
|
||||
db.sortedSetAdd('cid:' + topicData.cid + ':pids', postData.timestamp, pid),
|
||||
]);
|
||||
await categories.updateRecentTidForCid(postData.cid);
|
||||
plugins.fireHook('action:post.' + type, { post: _.clone(postData), uid: uid });
|
||||
plugins.hooks.fire('action:post.' + type, { post: _.clone(postData), uid: uid });
|
||||
if (type === 'delete') {
|
||||
await flags.resolveFlag('post', pid, uid);
|
||||
}
|
||||
@@ -52,7 +52,7 @@ module.exports = function (Posts) {
|
||||
}
|
||||
const topicData = await topics.getTopicFields(postData.tid, ['tid', 'cid', 'pinned']);
|
||||
postData.cid = topicData.cid;
|
||||
await plugins.fireHook('filter:post.purge', { post: postData, pid: pid, uid: uid });
|
||||
await plugins.hooks.fire('filter:post.purge', { post: postData, pid: pid, uid: uid });
|
||||
await Promise.all([
|
||||
deletePostFromTopicUserNotification(postData, topicData),
|
||||
deletePostFromCategoryRecentPosts(postData),
|
||||
@@ -64,7 +64,7 @@ module.exports = function (Posts) {
|
||||
Posts.uploads.dissociateAll(pid),
|
||||
]);
|
||||
await flags.resolveFlag('post', pid, uid);
|
||||
plugins.fireHook('action:post.purge', { post: postData, uid: uid });
|
||||
plugins.hooks.fire('action:post.purge', { post: postData, uid: uid });
|
||||
await db.delete('post:' + pid);
|
||||
};
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ module.exports = function (Posts) {
|
||||
const post = await postDiffLoad(pid, since, uid);
|
||||
post.content = String(post.content || '');
|
||||
|
||||
const result = await plugins.fireHook('filter:parse.post', { postData: post });
|
||||
const result = await plugins.hooks.fire('filter:parse.post', { postData: post });
|
||||
result.postData.content = translator.escape(result.postData.content);
|
||||
return result.postData;
|
||||
};
|
||||
|
||||
@@ -40,7 +40,7 @@ module.exports = function (Posts) {
|
||||
editPostData.handle = data.handle;
|
||||
}
|
||||
|
||||
const result = await plugins.fireHook('filter:post.edit', {
|
||||
const result = await plugins.hooks.fire('filter:post.edit', {
|
||||
req: data.req,
|
||||
post: editPostData,
|
||||
data: data,
|
||||
@@ -79,7 +79,7 @@ module.exports = function (Posts) {
|
||||
nid: 'edit_post:' + data.pid + ':uid:' + data.uid,
|
||||
});
|
||||
|
||||
plugins.fireHook('action:post.edit', { post: _.clone(returnPostData), data: data, uid: data.uid });
|
||||
plugins.hooks.fire('action:post.edit', { post: _.clone(returnPostData), data: data, uid: data.uid });
|
||||
|
||||
require('./cache').del(String(postData.pid));
|
||||
pubsub.publish('post:edit', String(postData.pid));
|
||||
@@ -134,7 +134,7 @@ module.exports = function (Posts) {
|
||||
}
|
||||
await topics.validateTags(data.tags, topicData.cid);
|
||||
|
||||
const results = await plugins.fireHook('filter:topic.edit', {
|
||||
const results = await plugins.hooks.fire('filter:topic.edit', {
|
||||
req: data.req,
|
||||
topic: newTopicData,
|
||||
data: data,
|
||||
@@ -147,7 +147,7 @@ module.exports = function (Posts) {
|
||||
newTopicData.oldTitle = topicData.title;
|
||||
newTopicData.timestamp = topicData.timestamp;
|
||||
const renamed = translator.escape(validator.escape(String(title))) !== topicData.title;
|
||||
plugins.fireHook('action:topic.edit', { topic: newTopicData, uid: data.uid });
|
||||
plugins.hooks.fire('action:topic.edit', { topic: newTopicData, uid: data.uid });
|
||||
return {
|
||||
tid: tid,
|
||||
cid: newTopicData.cid,
|
||||
|
||||
@@ -48,7 +48,7 @@ Posts.getPostsByPids = async function (pids, uid) {
|
||||
let posts = await Posts.getPostsData(pids);
|
||||
posts = await Promise.all(posts.map(p => Posts.parsePost(p)));
|
||||
posts = await user.blocks.filter(uid, posts);
|
||||
const data = await plugins.fireHook('filter:post.getPosts', { posts: posts, uid: uid });
|
||||
const data = await plugins.hooks.fire('filter:post.getPosts', { posts: posts, uid: uid });
|
||||
if (!data || !Array.isArray(data.posts)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ module.exports = function (Posts) {
|
||||
return postData;
|
||||
}
|
||||
|
||||
const data = await plugins.fireHook('filter:parse.post', { postData: postData });
|
||||
const data = await plugins.hooks.fire('filter:parse.post', { postData: postData });
|
||||
data.postData.content = translator.escape(data.postData.content);
|
||||
if (data.postData.pid) {
|
||||
cache.set(pid, data.postData.content);
|
||||
@@ -70,7 +70,7 @@ module.exports = function (Posts) {
|
||||
|
||||
Posts.parseSignature = async function (userData, uid) {
|
||||
userData.signature = sanitizeSignature(userData.signature || '');
|
||||
return await plugins.fireHook('filter:parse.signature', { userData: userData, uid: uid });
|
||||
return await plugins.hooks.fire('filter:parse.signature', { userData: userData, uid: uid });
|
||||
};
|
||||
|
||||
Posts.relativeToAbsolute = function (content, regex) {
|
||||
@@ -121,11 +121,11 @@ module.exports = function (Posts) {
|
||||
});
|
||||
|
||||
// Some plugins might need to adjust or whitelist their own tags...
|
||||
sanitizeConfig = await plugins.fireHook('filter:sanitize.config', sanitizeConfig);
|
||||
sanitizeConfig = await plugins.hooks.fire('filter:sanitize.config', sanitizeConfig);
|
||||
};
|
||||
|
||||
Posts.registerHooks = () => {
|
||||
plugins.registerHook('core', {
|
||||
plugins.hooks.register('core', {
|
||||
hook: 'filter:parse.post',
|
||||
method: async (data) => {
|
||||
data.postData.content = Posts.sanitize(data.postData.content);
|
||||
@@ -133,17 +133,17 @@ module.exports = function (Posts) {
|
||||
},
|
||||
});
|
||||
|
||||
plugins.registerHook('core', {
|
||||
plugins.hooks.register('core', {
|
||||
hook: 'filter:parse.raw',
|
||||
method: async content => Posts.sanitize(content),
|
||||
});
|
||||
|
||||
plugins.registerHook('core', {
|
||||
plugins.hooks.register('core', {
|
||||
hook: 'filter:parse.aboutme',
|
||||
method: async content => Posts.sanitize(content),
|
||||
});
|
||||
|
||||
plugins.registerHook('core', {
|
||||
plugins.hooks.register('core', {
|
||||
hook: 'filter:parse.signature',
|
||||
method: async (data) => {
|
||||
data.userData.signature = Posts.sanitize(data.userData.signature);
|
||||
|
||||
@@ -18,7 +18,7 @@ module.exports = function (Posts) {
|
||||
const userData = await user.getUserFields(uid, ['uid', 'reputation', 'postcount']);
|
||||
const isMemberOfExempt = await groups.isMemberOfAny(userData.uid, meta.config.groupsExemptFromPostQueue);
|
||||
const shouldQueue = meta.config.postQueue && !isMemberOfExempt && (!userData.uid || userData.reputation < meta.config.postQueueReputationThreshold || userData.postcount <= 0);
|
||||
const result = await plugins.fireHook('filter:post.shouldQueue', {
|
||||
const result = await plugins.hooks.fire('filter:post.shouldQueue', {
|
||||
shouldQueue: !!shouldQueue,
|
||||
uid: uid,
|
||||
data: data,
|
||||
@@ -57,7 +57,7 @@ module.exports = function (Posts) {
|
||||
type: type,
|
||||
data: data,
|
||||
};
|
||||
payload = await plugins.fireHook('filter:post-queue.save', payload);
|
||||
payload = await plugins.hooks.fire('filter:post-queue.save', payload);
|
||||
payload.data = JSON.stringify(data);
|
||||
|
||||
await db.sortedSetAdd('post:queue', now, id);
|
||||
|
||||
@@ -54,7 +54,7 @@ module.exports = function (Posts) {
|
||||
posts = posts.filter(post => tidToTopic[post.tid]);
|
||||
|
||||
posts = await parsePosts(posts, options);
|
||||
const result = await plugins.fireHook('filter:post.getPostSummaryByPids', { posts: posts, uid: uid });
|
||||
const result = await plugins.hooks.fire('filter:post.getPostSummaryByPids', { posts: posts, uid: uid });
|
||||
return result.posts;
|
||||
};
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ module.exports = function (Posts) {
|
||||
const [isMemberOfGroups, signature, customProfileInfo] = await Promise.all([
|
||||
checkGroupMembership(userData.uid, userData.groupTitleArray),
|
||||
parseSignature(userData, uid, canUseSignature),
|
||||
plugins.fireHook('filter:posts.custom_profile_info', { profile: [], uid: userData.uid }),
|
||||
plugins.hooks.fire('filter:posts.custom_profile_info', { profile: [], uid: userData.uid }),
|
||||
]);
|
||||
|
||||
if (isMemberOfGroups && userData.groupTitleArray) {
|
||||
@@ -49,7 +49,7 @@ module.exports = function (Posts) {
|
||||
userData.signature = signature;
|
||||
userData.custom_profile_info = customProfileInfo.profile;
|
||||
|
||||
return await plugins.fireHook('filter:posts.modifyUserInfo', userData);
|
||||
return await plugins.hooks.fire('filter:posts.modifyUserInfo', userData);
|
||||
}));
|
||||
};
|
||||
|
||||
@@ -94,7 +94,7 @@ module.exports = function (Posts) {
|
||||
'signature', 'banned', 'banned:expire', 'status',
|
||||
'lastonline', 'groupTitle',
|
||||
];
|
||||
const result = await plugins.fireHook('filter:posts.addUserFields', {
|
||||
const result = await plugins.hooks.fire('filter:posts.addUserFields', {
|
||||
fields: fields,
|
||||
uid: uid,
|
||||
uids: uids,
|
||||
@@ -166,7 +166,7 @@ module.exports = function (Posts) {
|
||||
updateTopicPosters(postData, toUid),
|
||||
]);
|
||||
|
||||
plugins.fireHook('action:post.changeOwner', {
|
||||
plugins.hooks.fire('action:post.changeOwner', {
|
||||
posts: _.cloneDeep(postData),
|
||||
toUid: toUid,
|
||||
});
|
||||
@@ -228,7 +228,7 @@ module.exports = function (Posts) {
|
||||
]);
|
||||
|
||||
const changedTopics = mainPosts.map(p => tidToTopic[p.tid]);
|
||||
plugins.fireHook('action:topic.changeOwner', {
|
||||
plugins.hooks.fire('action:topic.changeOwner', {
|
||||
topics: _.cloneDeep(changedTopics),
|
||||
toUid: toUid,
|
||||
});
|
||||
|
||||
@@ -144,7 +144,7 @@ module.exports = function (Posts) {
|
||||
current = 'unvote';
|
||||
}
|
||||
|
||||
plugins.fireHook('action:post.' + hook, {
|
||||
plugins.hooks.fire('action:post.' + hook, {
|
||||
pid: pid,
|
||||
uid: uid,
|
||||
owner: owner,
|
||||
@@ -251,7 +251,7 @@ module.exports = function (Posts) {
|
||||
downvotes: postData.downvotes,
|
||||
}),
|
||||
]);
|
||||
plugins.fireHook('action:post.updatePostVoteCount', { post: postData });
|
||||
plugins.hooks.fire('action:post.updatePostVoteCount', { post: postData });
|
||||
};
|
||||
|
||||
async function updateTopicVoteCount(postData) {
|
||||
|
||||
@@ -120,14 +120,14 @@ module.exports = function (privileges) {
|
||||
|
||||
async function getLabels() {
|
||||
return await utils.promiseParallel({
|
||||
users: plugins.fireHook('filter:privileges.admin.list_human', privilegeLabels.slice()),
|
||||
groups: plugins.fireHook('filter:privileges.admin.groups.list_human', privilegeLabels.slice()),
|
||||
users: plugins.hooks.fire('filter:privileges.admin.list_human', privilegeLabels.slice()),
|
||||
groups: plugins.hooks.fire('filter:privileges.admin.groups.list_human', privilegeLabels.slice()),
|
||||
});
|
||||
}
|
||||
|
||||
const keys = await utils.promiseParallel({
|
||||
users: plugins.fireHook('filter:privileges.admin.list', userPrivilegeList.slice()),
|
||||
groups: plugins.fireHook('filter:privileges.admin.groups.list', groupPrivilegeList.slice()),
|
||||
users: plugins.hooks.fire('filter:privileges.admin.list', userPrivilegeList.slice()),
|
||||
groups: plugins.hooks.fire('filter:privileges.admin.groups.list', groupPrivilegeList.slice()),
|
||||
});
|
||||
|
||||
const payload = await utils.promiseParallel({
|
||||
@@ -152,7 +152,7 @@ module.exports = function (privileges) {
|
||||
const privData = _.zipObject(privileges.admin.userPrivilegeList, combined);
|
||||
|
||||
privData.superadmin = isAdministrator;
|
||||
return await plugins.fireHook('filter:privileges.admin.get', privData);
|
||||
return await plugins.hooks.fire('filter:privileges.admin.get', privData);
|
||||
};
|
||||
|
||||
privileges.admin.can = async function (privilege, uid) {
|
||||
@@ -169,7 +169,7 @@ module.exports = function (privileges) {
|
||||
|
||||
privileges.admin.give = async function (privileges, groupName) {
|
||||
await helpers.giveOrRescind(groups.join, privileges, 'admin', groupName);
|
||||
plugins.fireHook('action:privileges.admin.give', {
|
||||
plugins.hooks.fire('action:privileges.admin.give', {
|
||||
privileges: privileges,
|
||||
groupNames: Array.isArray(groupName) ? groupName : [groupName],
|
||||
});
|
||||
@@ -177,7 +177,7 @@ module.exports = function (privileges) {
|
||||
|
||||
privileges.admin.rescind = async function (privileges, groupName) {
|
||||
await helpers.giveOrRescind(groups.leave, privileges, 'admin', groupName);
|
||||
plugins.fireHook('action:privileges.admin.rescind', {
|
||||
plugins.hooks.fire('action:privileges.admin.rescind', {
|
||||
privileges: privileges,
|
||||
groupNames: Array.isArray(groupName) ? groupName : [groupName],
|
||||
});
|
||||
|
||||
@@ -17,14 +17,14 @@ module.exports = function (privileges) {
|
||||
privileges.categories.list = async function (cid) {
|
||||
async function getLabels() {
|
||||
return await utils.promiseParallel({
|
||||
users: plugins.fireHook('filter:privileges.list_human', privileges.privilegeLabels.slice()),
|
||||
groups: plugins.fireHook('filter:privileges.groups.list_human', privileges.privilegeLabels.slice()),
|
||||
users: plugins.hooks.fire('filter:privileges.list_human', privileges.privilegeLabels.slice()),
|
||||
groups: plugins.hooks.fire('filter:privileges.groups.list_human', privileges.privilegeLabels.slice()),
|
||||
});
|
||||
}
|
||||
|
||||
const keys = await utils.promiseParallel({
|
||||
users: plugins.fireHook('filter:privileges.list', privileges.userPrivilegeList.slice()),
|
||||
groups: plugins.fireHook('filter:privileges.groups.list', privileges.groupPrivilegeList.slice()),
|
||||
users: plugins.hooks.fire('filter:privileges.list', privileges.userPrivilegeList.slice()),
|
||||
groups: plugins.hooks.fire('filter:privileges.groups.list', privileges.groupPrivilegeList.slice()),
|
||||
});
|
||||
|
||||
const payload = await utils.promiseParallel({
|
||||
@@ -55,7 +55,7 @@ module.exports = function (privileges) {
|
||||
const privData = _.zipObject(privs, combined);
|
||||
const isAdminOrMod = isAdministrator || isModerator;
|
||||
|
||||
return await plugins.fireHook('filter:privileges.categories.get', {
|
||||
return await plugins.hooks.fire('filter:privileges.categories.get', {
|
||||
...privData,
|
||||
cid: cid,
|
||||
uid: uid,
|
||||
@@ -135,7 +135,7 @@ module.exports = function (privileges) {
|
||||
|
||||
privileges.categories.give = async function (privileges, cid, members) {
|
||||
await helpers.giveOrRescind(groups.join, privileges, cid, members);
|
||||
plugins.fireHook('action:privileges.categories.give', {
|
||||
plugins.hooks.fire('action:privileges.categories.give', {
|
||||
privileges: privileges,
|
||||
cids: Array.isArray(cid) ? cid : [cid],
|
||||
members: Array.isArray(members) ? members : [members],
|
||||
@@ -144,7 +144,7 @@ module.exports = function (privileges) {
|
||||
|
||||
privileges.categories.rescind = async function (privileges, cid, members) {
|
||||
await helpers.giveOrRescind(groups.leave, privileges, cid, members);
|
||||
plugins.fireHook('action:privileges.categories.rescind', {
|
||||
plugins.hooks.fire('action:privileges.categories.rescind', {
|
||||
privileges: privileges,
|
||||
cids: Array.isArray(cid) ? cid : [cid],
|
||||
members: Array.isArray(members) ? members : [members],
|
||||
|
||||
@@ -53,14 +53,14 @@ module.exports = function (privileges) {
|
||||
privileges.global.list = async function () {
|
||||
async function getLabels() {
|
||||
return await utils.promiseParallel({
|
||||
users: plugins.fireHook('filter:privileges.global.list_human', privileges.global.privilegeLabels.slice()),
|
||||
groups: plugins.fireHook('filter:privileges.global.groups.list_human', privileges.global.privilegeLabels.slice()),
|
||||
users: plugins.hooks.fire('filter:privileges.global.list_human', privileges.global.privilegeLabels.slice()),
|
||||
groups: plugins.hooks.fire('filter:privileges.global.groups.list_human', privileges.global.privilegeLabels.slice()),
|
||||
});
|
||||
}
|
||||
|
||||
const keys = await utils.promiseParallel({
|
||||
users: plugins.fireHook('filter:privileges.global.list', privileges.global.userPrivilegeList.slice()),
|
||||
groups: plugins.fireHook('filter:privileges.global.groups.list', privileges.global.groupPrivilegeList.slice()),
|
||||
users: plugins.hooks.fire('filter:privileges.global.list', privileges.global.userPrivilegeList.slice()),
|
||||
groups: plugins.hooks.fire('filter:privileges.global.groups.list', privileges.global.groupPrivilegeList.slice()),
|
||||
});
|
||||
|
||||
const payload = await utils.promiseParallel({
|
||||
@@ -84,7 +84,7 @@ module.exports = function (privileges) {
|
||||
const combined = userPrivileges.map(allowed => allowed || isAdministrator);
|
||||
const privData = _.zipObject(privileges.global.userPrivilegeList, combined);
|
||||
|
||||
return await plugins.fireHook('filter:privileges.global.get', privData);
|
||||
return await plugins.hooks.fire('filter:privileges.global.get', privData);
|
||||
};
|
||||
|
||||
privileges.global.can = async function (privilege, uid) {
|
||||
@@ -101,7 +101,7 @@ module.exports = function (privileges) {
|
||||
|
||||
privileges.global.give = async function (privileges, groupName) {
|
||||
await helpers.giveOrRescind(groups.join, privileges, 0, groupName);
|
||||
plugins.fireHook('action:privileges.global.give', {
|
||||
plugins.hooks.fire('action:privileges.global.give', {
|
||||
privileges: privileges,
|
||||
groupNames: Array.isArray(groupName) ? groupName : [groupName],
|
||||
});
|
||||
@@ -109,7 +109,7 @@ module.exports = function (privileges) {
|
||||
|
||||
privileges.global.rescind = async function (privileges, groupName) {
|
||||
await helpers.giveOrRescind(groups.leave, privileges, 0, groupName);
|
||||
plugins.fireHook('action:privileges.global.rescind', {
|
||||
plugins.hooks.fire('action:privileges.global.rescind', {
|
||||
privileges: privileges,
|
||||
groupNames: Array.isArray(groupName) ? groupName : [groupName],
|
||||
});
|
||||
|
||||
@@ -22,7 +22,7 @@ helpers.isUsersAllowedTo = async function (privilege, uids, cid) {
|
||||
groups.isMembersOfGroupList(uids, 'cid:' + cid + ':privileges:groups:' + privilege),
|
||||
]);
|
||||
const allowed = uids.map((uid, index) => hasUserPrivilege[index] || hasGroupPrivilege[index]);
|
||||
const result = await plugins.fireHook('filter:privileges:isUsersAllowedTo', { allowed: allowed, privilege: privilege, uids: uids, cid: cid });
|
||||
const result = await plugins.hooks.fire('filter:privileges:isUsersAllowedTo', { allowed: allowed, privilege: privilege, uids: uids, cid: cid });
|
||||
return result.allowed;
|
||||
};
|
||||
|
||||
@@ -34,8 +34,8 @@ helpers.isAllowedTo = async function (privilege, uidOrGroupName, cid) {
|
||||
allowed = await isAllowedToCids(privilege, uidOrGroupName, cid);
|
||||
}
|
||||
if (allowed) {
|
||||
({ allowed } = await plugins.fireHook('filter:privileges:isUserAllowedTo', { allowed: allowed, privilege: privilege, uid: uidOrGroupName, cid: cid }));
|
||||
({ allowed } = await plugins.fireHook('filter:privileges:isAllowedTo', { allowed: allowed, privilege: privilege, uid: uidOrGroupName, cid: cid }));
|
||||
({ allowed } = await plugins.hooks.fire('filter:privileges:isUserAllowedTo', { allowed: allowed, privilege: privilege, uid: uidOrGroupName, cid: cid }));
|
||||
({ allowed } = await plugins.hooks.fire('filter:privileges:isAllowedTo', { allowed: allowed, privilege: privilege, uid: uidOrGroupName, cid: cid }));
|
||||
return allowed;
|
||||
}
|
||||
throw new Error('[[error:invalid-data]]');
|
||||
|
||||
@@ -101,7 +101,7 @@ module.exports = function (privileges) {
|
||||
((!post.topic.deleted && !post.deleted) || canViewDeleted[post.topic.cid] || results.isAdmin);
|
||||
}).map(post => post.pid);
|
||||
|
||||
const data = await plugins.fireHook('filter:privileges.posts.filter', {
|
||||
const data = await plugins.hooks.fire('filter:privileges.posts.filter', {
|
||||
privilege: privilege,
|
||||
uid: uid,
|
||||
pids: pids,
|
||||
@@ -144,7 +144,7 @@ module.exports = function (privileges) {
|
||||
results.pid = parseInt(pid, 10);
|
||||
results.uid = uid;
|
||||
|
||||
const result = await plugins.fireHook('filter:privileges.posts.edit', results);
|
||||
const result = await plugins.hooks.fire('filter:privileges.posts.edit', results);
|
||||
return { flag: result.edit && (result.owner || result.isMod), message: '[[error:no-privileges]]' };
|
||||
};
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ module.exports = function (privileges) {
|
||||
const editable = isAdminOrMod;
|
||||
const deletable = (privData['topics:delete'] && (isOwner || isModerator)) || isAdministrator;
|
||||
|
||||
return await plugins.fireHook('filter:privileges.topics.get', {
|
||||
return await plugins.hooks.fire('filter:privileges.topics.get', {
|
||||
'topics:reply': (privData['topics:reply'] && ((!topicData.locked && !topicData.deleted) || isModerator)) || isAdministrator,
|
||||
'topics:read': privData['topics:read'] || isAdministrator,
|
||||
'topics:tag': privData['topics:tag'] || isAdministrator,
|
||||
@@ -78,7 +78,7 @@ module.exports = function (privileges) {
|
||||
|
||||
tids = topicsData.filter(t => cidsSet.has(t.cid) && (!t.deleted || canViewDeleted[t.cid] || results.isAdmin)).map(t => t.tid);
|
||||
|
||||
const data = await plugins.fireHook('filter:privileges.topics.filter', {
|
||||
const data = await plugins.hooks.fire('filter:privileges.topics.filter', {
|
||||
privilege: privilege,
|
||||
uid: uid,
|
||||
tids: tids,
|
||||
|
||||
@@ -64,7 +64,7 @@ module.exports = function (privileges) {
|
||||
}
|
||||
|
||||
async function filterIsModerator(cid, uid, isModerator) {
|
||||
const data = await plugins.fireHook('filter:user.isModerator', { uid: uid, cid: cid, isModerator: isModerator });
|
||||
const data = await plugins.hooks.fire('filter:user.isModerator', { uid: uid, cid: cid, isModerator: isModerator });
|
||||
if ((Array.isArray(uid) || Array.isArray(cid)) && !Array.isArray(data.isModerator)) {
|
||||
throw new Error('filter:user.isModerator - i/o mismatch');
|
||||
}
|
||||
@@ -82,7 +82,7 @@ module.exports = function (privileges) {
|
||||
privileges.users.isAdministrator(uid),
|
||||
]);
|
||||
|
||||
const data = await plugins.fireHook('filter:user.canEdit', {
|
||||
const data = await plugins.hooks.fire('filter:user.canEdit', {
|
||||
isAdmin: isAdmin,
|
||||
isGlobalMod: isGlobalMod,
|
||||
isTargetAdmin: isTargetAdmin,
|
||||
@@ -99,7 +99,7 @@ module.exports = function (privileges) {
|
||||
privileges.users.isAdministrator(uid),
|
||||
]);
|
||||
|
||||
const data = await plugins.fireHook('filter:user.canBanUser', {
|
||||
const data = await plugins.hooks.fire('filter:user.canBanUser', {
|
||||
canBan: canBan && !isTargetAdmin,
|
||||
callerUid: callerUid,
|
||||
uid: uid,
|
||||
@@ -114,7 +114,7 @@ module.exports = function (privileges) {
|
||||
const privilegeName = privilege.split('-').map(word => word.slice(0, 1).toUpperCase() + word.slice(1)).join('');
|
||||
let payload = { uid };
|
||||
payload[`can${privilegeName}`] = await privileges.global.can(privilege, uid);
|
||||
payload = await plugins.fireHook(`filter:user.has${privilegeName}Privilege`, payload);
|
||||
payload = await plugins.hooks.fire(`filter:user.has${privilegeName}Privilege`, payload);
|
||||
return payload[`can${privilegeName}`];
|
||||
}
|
||||
};
|
||||
|
||||
@@ -37,9 +37,9 @@ rewards.delete = async function (data) {
|
||||
rewards.get = async function () {
|
||||
return await utils.promiseParallel({
|
||||
active: getActiveRewards(),
|
||||
conditions: plugins.fireHook('filter:rewards.conditions', []),
|
||||
conditionals: plugins.fireHook('filter:rewards.conditionals', []),
|
||||
rewards: plugins.fireHook('filter:rewards.rewards', []),
|
||||
conditions: plugins.hooks.fire('filter:rewards.conditions', []),
|
||||
conditionals: plugins.hooks.fire('filter:rewards.conditionals', []),
|
||||
rewards: plugins.hooks.fire('filter:rewards.rewards', []),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ async function checkCondition(reward, method) {
|
||||
method = util.promisify(method);
|
||||
}
|
||||
const value = await method();
|
||||
const bool = await plugins.fireHook('filter:rewards.checkConditional:' + reward.conditional, { left: value, right: reward.value });
|
||||
const bool = await plugins.hooks.fire('filter:rewards.checkConditional:' + reward.conditional, { left: value, right: reward.value });
|
||||
return bool;
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ async function giveRewards(uid, rewards) {
|
||||
const rewardData = await getRewardsByRewardData(rewards);
|
||||
for (let i = 0; i < rewards.length; i++) {
|
||||
/* eslint-disable no-await-in-loop */
|
||||
await plugins.fireHook('action:rewards.award:' + rewards[i].rid, { uid: uid, reward: rewardData[i] });
|
||||
await plugins.hooks.fire('action:rewards.award:' + rewards[i].rid, { uid: uid, reward: rewardData[i] });
|
||||
await db.sortedSetIncrBy('uid:' + uid + ':rewards', 1, rewards[i].id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,9 +79,9 @@ Auth.reloadRoutes = async function (params) {
|
||||
const router = params.router;
|
||||
|
||||
// Local Logins
|
||||
if (plugins.hasListeners('action:auth.overrideLogin')) {
|
||||
if (plugins.hooks.hasListeners('action:auth.overrideLogin')) {
|
||||
winston.warn('[authentication] Login override detected, skipping local login strategy.');
|
||||
plugins.fireHook('action:auth.overrideLogin');
|
||||
plugins.hooks.fire('action:auth.overrideLogin');
|
||||
} else {
|
||||
passport.use(new passportLocal({ passReqToCallback: true }, controllers.authentication.localLogin));
|
||||
}
|
||||
@@ -91,7 +91,7 @@ Auth.reloadRoutes = async function (params) {
|
||||
|
||||
// Additional logins via SSO plugins
|
||||
try {
|
||||
loginStrategies = await plugins.fireHook('filter:auth.init', loginStrategies);
|
||||
loginStrategies = await plugins.hooks.fire('filter:auth.init', loginStrategies);
|
||||
} catch (err) {
|
||||
winston.error('[authentication] ' + err.stack);
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ Write.reload = async (params) => {
|
||||
* `/api/v3/plugins`.
|
||||
*/
|
||||
const pluginRouter = require('express').Router();
|
||||
await plugins.fireHook('static:api.routes', {
|
||||
await plugins.hooks.fire('static:api.routes', {
|
||||
router: pluginRouter,
|
||||
middleware,
|
||||
helpers,
|
||||
|
||||
@@ -43,7 +43,7 @@ async function searchInContent(data) {
|
||||
|
||||
async function doSearch(type, searchIn) {
|
||||
if (searchIn.includes(data.searchIn)) {
|
||||
return await plugins.fireHook('filter:search.query', {
|
||||
return await plugins.hooks.fire('filter:search.query', {
|
||||
index: type,
|
||||
content: data.query,
|
||||
matchWords: data.matchWords || 'all',
|
||||
@@ -70,7 +70,7 @@ async function searchInContent(data) {
|
||||
allPids = await privileges.posts.filter('topics:read', allPids, data.uid);
|
||||
allPids = await filterAndSort(allPids, data);
|
||||
|
||||
const metadata = await plugins.fireHook('filter:search.inContent', {
|
||||
const metadata = await plugins.hooks.fire('filter:search.inContent', {
|
||||
pids: allPids,
|
||||
});
|
||||
|
||||
@@ -87,13 +87,13 @@ async function searchInContent(data) {
|
||||
}
|
||||
|
||||
returnData.posts = await posts.getPostSummaryByPids(metadata.pids, data.uid, {});
|
||||
await plugins.fireHook('filter:search.contentGetResult', { result: returnData, data: data });
|
||||
await plugins.hooks.fire('filter:search.contentGetResult', { result: returnData, data: data });
|
||||
delete metadata.pids;
|
||||
return Object.assign(returnData, metadata);
|
||||
}
|
||||
|
||||
async function filterAndSort(pids, data) {
|
||||
if (data.sortBy === 'relevance' && !data.replies && !data.timeRange && !data.hasTags && !plugins.hasListeners('filter:search.filterAndSort')) {
|
||||
if (data.sortBy === 'relevance' && !data.replies && !data.timeRange && !data.hasTags && !plugins.hooks.hasListeners('filter:search.filterAndSort')) {
|
||||
return pids;
|
||||
}
|
||||
let postsData = await getMatchedPosts(pids, data);
|
||||
@@ -108,7 +108,7 @@ async function filterAndSort(pids, data) {
|
||||
|
||||
sortPosts(postsData, data);
|
||||
|
||||
const result = await plugins.fireHook('filter:search.filterAndSort', { pids: pids, posts: postsData, data: data });
|
||||
const result = await plugins.hooks.fire('filter:search.filterAndSort', { pids: pids, posts: postsData, data: data });
|
||||
return result.posts.map(post => post && post.pid);
|
||||
}
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ sitemap.getPages = async function () {
|
||||
priority: 0.4,
|
||||
}];
|
||||
|
||||
const data = await plugins.fireHook('filter:sitemap.getPages', { urls: urls });
|
||||
const data = await plugins.hooks.fire('filter:sitemap.getPages', { urls: urls });
|
||||
|
||||
const smStream = new SitemapStream({ hostname: nconf.get('url') });
|
||||
data.urls.forEach(url => smStream.write(url));
|
||||
|
||||
@@ -24,7 +24,7 @@ social.getPostSharing = async function () {
|
||||
class: 'fa-twitter',
|
||||
},
|
||||
];
|
||||
networks = await plugins.fireHook('filter:social.posts', networks);
|
||||
networks = await plugins.hooks.fire('filter:social.posts', networks);
|
||||
const activated = await db.getSetMembers('social:posts.activated');
|
||||
networks.forEach(function (network) {
|
||||
network.activated = activated.includes(network.id);
|
||||
|
||||
@@ -31,7 +31,7 @@ Categories.getAll = async function () {
|
||||
'color', 'bgColor', 'backgroundImage', 'imageClass',
|
||||
];
|
||||
const categoriesData = await categories.getCategoriesFields(cids, fields);
|
||||
const result = await plugins.fireHook('filter:admin.categories.get', { categories: categoriesData, fields: fields });
|
||||
const result = await plugins.hooks.fire('filter:admin.categories.get', { categories: categoriesData, fields: fields });
|
||||
return categories.getTree(result.categories, 0);
|
||||
};
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ Config.setMultiple = async function (socket, data) {
|
||||
key: field,
|
||||
value: data[field],
|
||||
};
|
||||
plugins.fireHook('action:config.set', setting);
|
||||
plugins.hooks.fire('action:config.set', setting);
|
||||
logger.monitorConfig({ io: index.server }, setting);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ async function notifyUids(uid, uids, type, result) {
|
||||
uids = filterTidCidIgnorers(watchStateUids, watchStates);
|
||||
uids = await user.blocks.filterUids(uid, uids);
|
||||
uids = await user.blocks.filterUids(post.topic.uid, uids);
|
||||
const data = await plugins.fireHook('filter:sockets.sendNewPostToUids', { uidsTo: uids, uidFrom: uid, type: type });
|
||||
const data = await plugins.hooks.fire('filter:sockets.sendNewPostToUids', { uidsTo: uids, uidFrom: uid, type: type });
|
||||
|
||||
post.ip = undefined;
|
||||
|
||||
|
||||
@@ -179,7 +179,7 @@ async function validateSession(socket) {
|
||||
if (!sessionData) {
|
||||
throw new Error('[[error:invalid-session]]');
|
||||
}
|
||||
const result = await plugins.fireHook('static:sockets.validateSession', {
|
||||
const result = await plugins.hooks.fire('static:sockets.validateSession', {
|
||||
req: req,
|
||||
socket: socket,
|
||||
session: sessionData,
|
||||
|
||||
@@ -71,7 +71,7 @@ SocketModules.chats.send = async function (socket, data) {
|
||||
if (!canChat) {
|
||||
throw new Error('[[error:no-privileges]]');
|
||||
}
|
||||
const results = await plugins.fireHook('filter:messaging.send', {
|
||||
const results = await plugins.hooks.fire('filter:messaging.send', {
|
||||
data: data,
|
||||
uid: socket.uid,
|
||||
});
|
||||
|
||||
@@ -67,7 +67,7 @@ SocketPosts.getRawPost = async function (socket, pid) {
|
||||
throw new Error('[[error:no-post]]');
|
||||
}
|
||||
postData.pid = pid;
|
||||
const result = await plugins.fireHook('filter:post.getRawPost', { uid: socket.uid, postData: postData });
|
||||
const result = await plugins.hooks.fire('filter:post.getRawPost', { uid: socket.uid, postData: postData });
|
||||
return result.postData.content;
|
||||
};
|
||||
|
||||
@@ -182,7 +182,7 @@ SocketPosts.editQueuedContent = async function (socket, data) {
|
||||
}
|
||||
await posts.editQueuedContent(socket.uid, data);
|
||||
if (data.content) {
|
||||
return await plugins.fireHook('filter:parse.post', { postData: data });
|
||||
return await plugins.hooks.fire('filter:parse.post', { postData: data });
|
||||
}
|
||||
return { postData: data };
|
||||
};
|
||||
|
||||
@@ -29,7 +29,7 @@ module.exports = function (SocketPosts) {
|
||||
canFlag: privileges.posts.canFlag(data.pid, socket.uid),
|
||||
flagged: flags.exists('post', data.pid, socket.uid), // specifically, whether THIS calling user flagged
|
||||
bookmarked: posts.hasBookmarked(data.pid, socket.uid),
|
||||
tools: plugins.fireHook('filter:post.tools', { pid: data.pid, uid: socket.uid, tools: [] }),
|
||||
tools: plugins.hooks.fire('filter:post.tools', { pid: data.pid, uid: socket.uid, tools: [] }),
|
||||
postSharing: social.getActivePostSharing(),
|
||||
history: posts.diffs.exists(data.pid),
|
||||
canViewInfo: privileges.global.can('view:users:info', socket.uid),
|
||||
|
||||
@@ -27,7 +27,7 @@ module.exports = function (SocketTopics) {
|
||||
throw new Error('[[error:no-privileges]]');
|
||||
}
|
||||
topicData.privileges = userPrivileges;
|
||||
const result = await plugins.fireHook('filter:topic.thread_tools', { topic: topicData, uid: socket.uid, tools: [] });
|
||||
const result = await plugins.hooks.fire('filter:topic.thread_tools', { topic: topicData, uid: socket.uid, tools: [] });
|
||||
result.topic.thread_tools = result.tools;
|
||||
return result.topic;
|
||||
};
|
||||
|
||||
@@ -100,7 +100,7 @@ SocketUser.reset.commit = async function (socket, data) {
|
||||
const [uid] = await Promise.all([
|
||||
db.getObjectField('reset:uid', data.code),
|
||||
user.reset.commit(data.code, data.password),
|
||||
plugins.fireHook('action:password.reset', { uid: socket.uid }),
|
||||
plugins.hooks.fire('action:password.reset', { uid: socket.uid }),
|
||||
]);
|
||||
|
||||
await events.log({
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user