mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-05-06 10:17:15 +02:00
feat: change user search to use filters array
This commit is contained in:
@@ -36,7 +36,7 @@ async function getUsers(req, res) {
|
||||
resultsPerPage = 50;
|
||||
}
|
||||
let sortBy = validator.escape(req.query.sortBy || '');
|
||||
const filterBy = Array.isArray(req.query.filter) ? req.query.filter : [req.query.filter];
|
||||
const filterBy = Array.isArray(req.query.filters) ? req.query.filters : [req.query.filters];
|
||||
const start = Math.max(0, page - 1) * resultsPerPage;
|
||||
const stop = start + resultsPerPage - 1;
|
||||
|
||||
@@ -129,12 +129,14 @@ usersController.search = async function (req, res) {
|
||||
if (![50, 100, 250, 500].includes(resultsPerPage)) {
|
||||
resultsPerPage = 50;
|
||||
}
|
||||
|
||||
const searchData = await user.search({
|
||||
uid: req.uid,
|
||||
query: req.query.query,
|
||||
searchBy: req.query.searchBy,
|
||||
sortBy: req.query.sortBy,
|
||||
sortDirection: sortDirection,
|
||||
filters: req.query.filters,
|
||||
page: page,
|
||||
resultsPerPage: resultsPerPage,
|
||||
findUids: async function (query, searchBy, hardCap) {
|
||||
@@ -229,7 +231,7 @@ function render(req, res, data) {
|
||||
data.adminInviteOnly = registrationType === 'admin-invite-only';
|
||||
data['sort_' + data.sortBy] = true;
|
||||
data['searchBy_' + validator.escape(String(req.query.searchBy))] = true;
|
||||
const filterBy = Array.isArray(req.query.filter) ? req.query.filter : [req.query.filter];
|
||||
const filterBy = Array.isArray(req.query.filters) ? req.query.filters : [req.query.filters];
|
||||
filterBy.forEach(function (filter) {
|
||||
data['filterBy_' + validator.escape(String(filter))] = true;
|
||||
});
|
||||
|
||||
@@ -21,7 +21,7 @@ usersController.index = async function (req, res, next) {
|
||||
flagged: usersController.getFlaggedUsers,
|
||||
};
|
||||
|
||||
if (req.query.term) {
|
||||
if (req.query.query) {
|
||||
await usersController.search(req, res, next);
|
||||
} else if (sectionToController[section]) {
|
||||
await sectionToController[section](req, res, next);
|
||||
@@ -35,19 +35,25 @@ usersController.search = async function (req, res) {
|
||||
privileges.global.can('search:users', req.uid),
|
||||
user.isPrivileged(req.uid),
|
||||
]);
|
||||
|
||||
if (!allowed || ((req.query.searchBy === 'ip' || req.query.searchBy === 'email' || req.query.bannedOnly === 'true' || req.query.flaggedOnly === 'true') && !isPrivileged)) {
|
||||
let filters = req.query.filters || [];
|
||||
filters = Array.isArray(filters) ? filters : [filters];
|
||||
if (!allowed ||
|
||||
((
|
||||
req.query.searchBy === 'ip' ||
|
||||
req.query.searchBy === 'email' ||
|
||||
filters.includes('banned') ||
|
||||
filters.includes('flagged')
|
||||
) && !isPrivileged)
|
||||
) {
|
||||
throw new Error('[[error:no-privileges]]');
|
||||
}
|
||||
const [searchData, isAdminOrGlobalMod] = await Promise.all([
|
||||
user.search({
|
||||
query: req.query.term,
|
||||
query: req.query.query,
|
||||
searchBy: req.query.searchBy || 'username',
|
||||
page: req.query.page || 1,
|
||||
sortBy: req.query.sortBy || 'joindate',
|
||||
onlineOnly: req.query.onlineOnly === 'true',
|
||||
bannedOnly: req.query.bannedOnly === 'true',
|
||||
flaggedOnly: req.query.flaggedOnly === 'true',
|
||||
filters: filters,
|
||||
}),
|
||||
user.isAdminOrGlobalMod(req.uid),
|
||||
]);
|
||||
|
||||
Reference in New Issue
Block a user