mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-01-08 16:42:48 +01:00
71 lines
2.1 KiB
JavaScript
71 lines
2.1 KiB
JavaScript
'use strict';
|
|
|
|
const validator = require('validator');
|
|
const db = require('../../database');
|
|
const events = require('../../events');
|
|
const pagination = require('../../pagination');
|
|
const user = require('../../user');
|
|
const groups = require('../../groups');
|
|
|
|
const eventsController = module.exports;
|
|
|
|
eventsController.get = async function (req, res) {
|
|
const page = parseInt(req.query.page, 10) || 1;
|
|
const itemsPerPage = parseInt(req.query.perPage, 10) || 20;
|
|
const start = (page - 1) * itemsPerPage;
|
|
const stop = start + itemsPerPage - 1;
|
|
let uids;
|
|
if (req.query.username) {
|
|
uids = [await user.getUidByUsername(req.query.username)];
|
|
} else if (req.query.group) {
|
|
uids = await groups.getMembers(req.query.group, 0, -1);
|
|
}
|
|
|
|
// Limit by date
|
|
let from = req.query.start ? new Date(req.query.start) : undefined;
|
|
let to = req.query.end ? new Date(req.query.end) : new Date();
|
|
from = from && from.setUTCHours(0, 0, 0, 0); // setHours returns a unix timestamp (Number, not Date)
|
|
to = to && to.setUTCHours(23, 59, 59, 999); // setHours returns a unix timestamp (Number, not Date)
|
|
|
|
const currentFilter = req.query.type || '';
|
|
const [eventCount, eventData, counts] = await Promise.all([
|
|
events.getEventCount({
|
|
filter: currentFilter,
|
|
uids,
|
|
from: from || '-inf',
|
|
to,
|
|
}),
|
|
events.getEvents({
|
|
filter: currentFilter,
|
|
uids,
|
|
start,
|
|
stop,
|
|
from: from || '-inf',
|
|
to,
|
|
}),
|
|
db.sortedSetsCard([''].concat(events.types).map(type => `events:time${type ? `:${type}` : ''}`)),
|
|
]);
|
|
|
|
const types = [''].concat(events.types).map((type, index) => ({
|
|
value: type,
|
|
name: type || 'all',
|
|
selected: type === currentFilter,
|
|
count: counts[index],
|
|
}));
|
|
|
|
const pageCount = Math.max(1, Math.ceil(eventCount / itemsPerPage));
|
|
|
|
res.render('admin/advanced/events', {
|
|
events: eventData,
|
|
pagination: pagination.create(page, pageCount, req.query),
|
|
types: types,
|
|
query: {
|
|
start: validator.escape(String(req.query.start)),
|
|
end: validator.escape(String(req.query.end)),
|
|
username: validator.escape(String(req.query.username)),
|
|
group: validator.escape(String(req.query.group)),
|
|
perPage: validator.escape(String(req.query.perPage)),
|
|
},
|
|
});
|
|
};
|