You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.3 KiB
JavaScript
71 lines
2.3 KiB
JavaScript
'use strict';
|
|
|
|
const user = require('../../user');
|
|
const helpers = require('../helpers');
|
|
const plugins = require('../../plugins');
|
|
const pagination = require('../../pagination');
|
|
|
|
const notificationsController = module.exports;
|
|
|
|
notificationsController.get = async function (req, res, next) {
|
|
const regularFilters = [
|
|
{ name: '[[notifications:all]]', filter: '' },
|
|
{ name: '[[global:topics]]', filter: 'new-topic' },
|
|
{ name: '[[notifications:replies]]', filter: 'new-reply' },
|
|
{ name: '[[notifications:chat]]', filter: 'new-chat' },
|
|
{ name: '[[notifications:follows]]', filter: 'follow' },
|
|
{ name: '[[notifications:upvote]]', filter: 'upvote' },
|
|
];
|
|
|
|
const moderatorFilters = [
|
|
{ name: '[[notifications:new-flags]]', filter: 'new-post-flag' },
|
|
{ name: '[[notifications:my-flags]]', filter: 'my-flags' },
|
|
{ name: '[[notifications:bans]]', filter: 'ban' },
|
|
];
|
|
|
|
const filter = req.query.filter || '';
|
|
const page = Math.max(1, req.query.page || 1);
|
|
const itemsPerPage = 20;
|
|
const start = (page - 1) * itemsPerPage;
|
|
const stop = start + itemsPerPage - 1;
|
|
|
|
const [filters, isPrivileged] = await Promise.all([
|
|
plugins.fireHook('filter:notifications.addFilters', {
|
|
regularFilters: regularFilters,
|
|
moderatorFilters: moderatorFilters,
|
|
uid: req.uid,
|
|
}),
|
|
user.isPrivileged(req.uid),
|
|
]);
|
|
|
|
let allFilters = filters.regularFilters;
|
|
if (isPrivileged) {
|
|
allFilters = allFilters.concat([
|
|
{ separator: true },
|
|
]).concat(filters.moderatorFilters);
|
|
}
|
|
const selectedFilter = allFilters.find(function (filterData) {
|
|
filterData.selected = filterData.filter === filter;
|
|
return filterData.selected;
|
|
});
|
|
if (!selectedFilter) {
|
|
return next();
|
|
}
|
|
let nids = await user.notifications.getAll(req.uid, selectedFilter.filter);
|
|
const pageCount = Math.max(1, Math.ceil(nids.length / itemsPerPage));
|
|
nids = nids.slice(start, stop + 1);
|
|
|
|
const notifications = await user.notifications.getNotifications(nids, req.uid);
|
|
|
|
res.render('notifications', {
|
|
notifications: notifications,
|
|
pagination: pagination.create(page, pageCount, req.query),
|
|
filters: allFilters,
|
|
regularFilters: regularFilters,
|
|
moderatorFilters: moderatorFilters,
|
|
selectedFilter: selectedFilter,
|
|
title: '[[pages:notifications]]',
|
|
breadcrumbs: helpers.buildBreadcrumbs([{ text: '[[pages:notifications]]' }]),
|
|
});
|
|
};
|