globallogs with simple board and user filter to globalmanage page

merge-requests/208/head
fatchan 5 years ago
parent f270322a5b
commit c0ef4e5dad
  1. 4
      controllers/pages.js
  2. 82
      db/modlogs.js
  3. 1
      models/pages/globalmanage/index.js
  4. 44
      models/pages/globalmanage/logs.js
  5. 2
      views/mixins/globalmanagenav.pug
  6. 47
      views/pages/globalmanagelogs.pug
  7. 6
      views/pages/globalmanagesettings.pug

@ -13,7 +13,8 @@ const express = require('express')
, csrf = require(__dirname+'/../helpers/checks/csrfmiddleware.js')
//page models
, { manageReports, manageBanners, manageSettings, manageBans } = require(__dirname+'/../models/pages/manage/')
, { globalManageSettings, globalManageReports, globalManageBans, globalManageRecent, globalManageAccounts, globalManageNews } = require(__dirname+'/../models/pages/globalmanage/')
, { globalManageSettings, globalManageReports, globalManageBans,
globalManageRecent, globalManageAccounts, globalManageNews, globalManageLogs } = require(__dirname+'/../models/pages/globalmanage/')
, { changePassword, home, register, login, logout, create,
board, catalog, banners, randombanner, news, captchaPage,
captcha, thread, modlog, modloglist, account, boardlist } = require(__dirname+'/../models/pages/');
@ -52,6 +53,7 @@ router.get('/:board/manage/thread/:id(\\d+).html', sessionRefresh, isLoggedIn, B
router.get('/globalmanage/reports.html', sessionRefresh, isLoggedIn, calcPerms, hasPerms(1), csrf, globalManageReports);
router.get('/globalmanage/bans.html', sessionRefresh, isLoggedIn, calcPerms, hasPerms(1), csrf, globalManageBans);
router.get('/globalmanage/recent.html', sessionRefresh, isLoggedIn, calcPerms, hasPerms(1), csrf, globalManageRecent);
router.get('/globalmanage/globallogs.html', sessionRefresh, isLoggedIn, calcPerms, hasPerms(1), csrf, globalManageLogs);
router.get('/globalmanage/news.html', sessionRefresh, isLoggedIn, calcPerms, hasPerms(0), csrf, globalManageNews);
router.get('/globalmanage/accounts.html', sessionRefresh, isLoggedIn, calcPerms, hasPerms(0), csrf, globalManageAccounts);
router.get('/globalmanage/settings.html', sessionRefresh, isLoggedIn, calcPerms, hasPerms(0), csrf, globalManageSettings);

@ -9,53 +9,67 @@ module.exports = {
getDates: (board) => {
return db.aggregate([
{
'$match': {
'board': board._id
}
},
{
'$project': {
'year': {
'$year': '$date'
},
'month': {
'$month': '$date'
},
'day': {
'$dayOfMonth': '$date'
}
}
},
{
'$group': {
'_id': {
'year': '$year',
'month': '$month',
'day': '$day',
{
'$match': {
'board': board._id
}
},
{
'$project': {
'year': {
'$year': '$date'
},
'month': {
'$month': '$date'
},
'day': {
'$dayOfMonth': '$date'
}
}
},
{
'$group': {
'_id': {
'year': '$year',
'month': '$month',
'day': '$day',
},
'count': {
'count': {
'$sum': 1
}
}
},
}
},
{
'$project': {
'$project': {
'_id': 0,
'date': '$_id',
'count': '$count'
}
},
{
'$sort': {
'date.year': -1,
'date.month': -1,
'date.day': -1
}
{
'$sort': {
'date.year': -1,
'date.month': -1,
'date.day': -1
}
},
]).toArray();
},
find: (filter, offset, limit) => {
return db.find(filter)
.skip(offset)
.limit(limit)
.sort({
'_id': -1
})
.toArray();
},
count: (filter) => {
return db.countDocuments(filter);
},
findBetweenDate: (board, start, end) => {
const startDate = Mongo.ObjectId.createFromTime(Math.floor(start.getTime()/1000));
const endDate = Mongo.ObjectId.createFromTime(Math.floor(end.getTime()/1000));

@ -3,6 +3,7 @@
module.exports = {
globalManageReports: require(__dirname+'/reports.js'),
globalManageBans: require(__dirname+'/bans.js'),
globalManageLogs: require(__dirname+'/logs.js'),
globalManageRecent: require(__dirname+'/recent.js'),
globalManageNews: require(__dirname+'/news.js'),
globalManageAccounts: require(__dirname+'/accounts.js'),

@ -0,0 +1,44 @@
'use strict';
const { Modlogs } = require(__dirname+'/../../../db/')
, pageQueryConverter = require(__dirname+'/../../../helpers/pagequeryconverter.js')
, limit = 50;
module.exports = async (req, res, next) => {
const { page, offset, queryString } = pageQueryConverter(req.query, limit);
let filter = {};
const username = req.query.username;
if (username && !Array.isArray(username)) {
filter['name'] = username;
}
const uri = req.query.uri;
if (uri && !Array.isArray(uri)) {
filter['board'] = uri;
}
let logs, maxPage;
try {
[logs, maxPage] = await Promise.all([
Modlogs.find(filter, offset, limit),
Modlogs.count(filter),
]);
maxPage = Math.ceil(maxPage/limit);
} catch (err) {
return next(err)
}
res
.set('Cache-Control', 'private, max-age=5')
.render('globalmanagelogs', {
csrf: req.csrfToken(),
queryString,
username,
uri,
logs,
page,
maxPage,
});
}

@ -5,6 +5,8 @@ mixin globalmanagenav(selected)
a(href='bans.html' class=(selected === 'bans' ? 'bold' : '')) [Bans]
|
a(href='recent.html' class=(selected === 'recent' ? 'bold' : '')) [Recent]
|
a(href='globallogs.html' class=(selected === 'logs' ? 'bold' : '')) [Logs]
if permLevel === 0
|
a(href='accounts.html' class=(selected === 'accounts' ? 'bold' : '')) [Accounts]

@ -0,0 +1,47 @@
extends ../layout.pug
include ../mixins/ban.pug
include ../mixins/globalmanagenav.pug
block head
script(src='/js/all.js')
title Manage
block content
h1.board-title Global Management
br
+globalmanagenav('logs')
hr(size=1)
.form-wrapper.flexleft
h4.no-m-p Search:
form.form-post.mv-5(action=`/globalmanage/globallogs.html` method='GET')
input(type='hidden' value=page)
.row
.label Board URI
input(type='text' name='uri' value=uri)
.row
.label Username
input(type='text' name='username' value=username)
input(type='submit', value='Filter')
h4.no-m-p Global Logs:
if logs && logs.length > 0
.table-container.flex-center.mv-10.text-center
table
tr
th Date
th Board
th User
th Actions
th Post IDs
th Log Message
for log in logs
tr
td #{log.date.toLocaleString(undefined, {hour12:false})}
td #{log.board}
td #{log.user}
td #{log.actions}
td #{log.postIds}
td #{log.message || '-'}
.pages.mv-5
include ../includes/pages.pug
else
p No logs.

@ -14,12 +14,6 @@ block content
.form-wrapper.flexleft
form.form-post(action=`/forms/global/settings`, enctype='application/x-www-form-urlencoded', method='POST')
input(type='hidden' name='_csrf' value=csrf)
.row
.label Captcha Mode
select(name='captcha_mode')
option(value='0', selected=settings.captchaMode === 0) No Captcha
option(value='1', selected=settings.captchaMode === 1) Captcha for new thread
option(value='2', selected=settings.captchaMode === 2) Captcha for all posts
.row
.label Filters
textarea(name='filters' placeholder='newline separated, max 50') #{settings.filters.join('\n')}

Loading…
Cancel
Save