split global management pages into separate each page

merge-requests/208/head
fatchan 5 years ago
parent 830d0cc40e
commit 549313c49a
  1. 2
      controllers/forms/addnews.js
  2. 4
      controllers/forms/deleteboard.js
  3. 2
      controllers/forms/deletenews.js
  4. 2
      controllers/forms/editaccounts.js
  5. 4
      controllers/forms/globalactions.js
  6. 2
      controllers/forms/removebans.js
  7. 24
      controllers/pages.js
  8. 4
      models/forms/actionhandler.js
  9. 2
      models/forms/addnews.js
  10. 2
      models/forms/deletenews.js
  11. 2
      models/forms/editaccounts.js
  12. 28
      models/pages/globalmanage.js
  13. 19
      models/pages/globalmanage/accounts.js
  14. 19
      models/pages/globalmanage/bans.js
  15. 4
      models/pages/globalmanage/boards.js
  16. 9
      models/pages/globalmanage/index.js
  17. 19
      models/pages/globalmanage/news.js
  18. 19
      models/pages/globalmanage/reports.js
  19. 8
      models/pages/manage/index.js
  20. 2
      views/includes/navbar.pug
  21. 13
      views/mixins/globalmanagenav.pug
  22. 95
      views/pages/globalmanage.pug
  23. 35
      views/pages/globalmanageaccounts.pug
  24. 24
      views/pages/globalmanagebans.pug
  25. 24
      views/pages/globalmanageboards.pug
  26. 35
      views/pages/globalmanagenews.pug
  27. 24
      views/pages/globalmanagereports.pug

@ -23,7 +23,7 @@ module.exports = async (req, res, next) => {
return res.status(400).render('message', {
'title': 'Bad request',
'errors': errors,
'redirect': '/globalmanage.html'
'redirect': '/globalmanage/news.html'
});
}

@ -38,7 +38,7 @@ module.exports = async (req, res, next) => {
return res.status(400).render('message', {
'title': 'Bad request',
'errors': errors,
'redirect': req.params.board ? `/${req.params.board}/manage.html` : '/globalmanage.html'
'redirect': req.params.board ? `/${req.params.board}/manage/settings.html` : '/globalmanage/boards.html'
});
}
@ -51,7 +51,7 @@ module.exports = async (req, res, next) => {
return res.render('message', {
'title': 'Success',
'message': 'Board deleted',
'redirect': req.params.board ? '/' : '/globalmanage.html'
'redirect': req.params.board ? '/' : '/globalmanage/boards.html'
});
}

@ -14,7 +14,7 @@ module.exports = async (req, res, next) => {
return res.status(400).render('message', {
'title': 'Bad request',
'errors': errors,
'redirect': '/globalmanage.html'
'redirect': '/globalmanage/news.html'
})
}

@ -20,7 +20,7 @@ module.exports = async (req, res, next) => {
return res.status(400).render('message', {
'title': 'Bad request',
'errors': errors,
'redirect': '/globalmanage.html'
'redirect': '/globalmanage/accounts.html'
})
}

@ -47,7 +47,7 @@ module.exports = async (req, res, next) => {
return res.status(400).render('message', {
'title': 'Bad request',
'errors': errors,
'redirect': '/globalmanage.html'
'redirect': '/globalmanage/reports.html'
})
}
@ -61,7 +61,7 @@ module.exports = async (req, res, next) => {
return res.status(404).render('message', {
'title': 'Not found',
'errors': 'Selected posts not found',
'redirect': '/globalmanage.html'
'redirect': '/globalmanage/reports.html'
})
}

@ -11,7 +11,7 @@ module.exports = async (req, res, next) => {
errors.push('Must select 1-10 bans')
}
const redirect = req.params.board ? `/${req.params.board}/manage/bans.html` : '/globalmanage.html';
const redirect = req.params.board ? `/${req.params.board}/manage/bans.html` : '/globalmanage/bans.html';
if (errors.length > 0) {
return res.status(400).render('message', {

@ -14,9 +14,8 @@ const express = require('express')
//page models
, home = require(__dirname+'/../models/pages/home.js')
, register = require(__dirname+'/../models/pages/register.js')
, manage = require(__dirname+'/../models/pages/manage.js')
, { managereports, managebanners, managesettings, managebans } = require(__dirname+'/../models/pages/manage/') //todo: refactor more into categories like this
, globalManage = require(__dirname+'/../models/pages/globalmanage.js')
, { manageReports, manageBanners, manageSettings, manageBans } = require(__dirname+'/../models/pages/manage/')
, { globalManageReports, globalManageBans, globalManageBoards, globalManageAccounts, globalManageNews } = require(__dirname+'/../models/pages/globalmanage/')
, changePassword = require(__dirname+'/../models/pages/changepassword.js')
, login = require(__dirname+'/../models/pages/login.js')
, create = require(__dirname+'/../models/pages/create.js')
@ -84,14 +83,17 @@ router.get('/logout', (req, res, next) => {
router.get('/:board/banners.html', Boards.exists, banners);
//board manage pages
router.get('/:board/manage/reports.html', sessionRefresh, isLoggedIn, Boards.exists, calcPerms, hasPerms(3), csrf, managereports);
router.get('/:board/manage/bans.html', sessionRefresh, isLoggedIn, Boards.exists, calcPerms, hasPerms(3), csrf, managebans);
router.get('/:board/manage/settings.html', sessionRefresh, isLoggedIn, Boards.exists, calcPerms, hasPerms(2), csrf, managesettings);
router.get('/:board/manage/banners.html', sessionRefresh, isLoggedIn, Boards.exists, calcPerms, hasPerms(2), csrf, managebanners);
//global manage page
router.get('/globalmanage.html', sessionRefresh, isLoggedIn, calcPerms, hasPerms(1), csrf, globalManage);
//todo: separate pages for global rports, bans, user management and news jsut like per-board manage pages
router.get('/:board/manage/reports.html', sessionRefresh, isLoggedIn, Boards.exists, calcPerms, hasPerms(3), csrf, manageReports);
router.get('/:board/manage/bans.html', sessionRefresh, isLoggedIn, Boards.exists, calcPerms, hasPerms(3), csrf, manageBans);
router.get('/:board/manage/settings.html', sessionRefresh, isLoggedIn, Boards.exists, calcPerms, hasPerms(2), csrf, manageSettings);
router.get('/:board/manage/banners.html', sessionRefresh, isLoggedIn, Boards.exists, calcPerms, hasPerms(2), csrf, manageBanners);
//global manage pages
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/news.html', sessionRefresh, isLoggedIn, calcPerms, hasPerms(0), csrf, globalManageNews);
router.get('/globalmanage/accounts.html', sessionRefresh, isLoggedIn, calcPerms, hasPerms(1), csrf, globalManageAccounts);
router.get('/globalmanage/boards.html', sessionRefresh, isLoggedIn, calcPerms, hasPerms(1), csrf, globalManageBoards);
module.exports = router;

@ -40,7 +40,7 @@ module.exports = async (req, res, next) => {
return res.status(403).render('message', {
'title': 'Forbidden',
'error': 'Password did not match any selected posts',
'redirect': `/${req.params.board ? req.params.board+'/' : 'globalmanage.html'}`
'redirect': `/${req.params.board ? req.params.board+'/' : 'globalmanage/reports.html'}`
});
}
res.locals.posts = passwordPosts
@ -434,7 +434,7 @@ module.exports = async (req, res, next) => {
return res.render('message', {
'title': 'Success',
'messages': messages,
'redirect': `/${req.params.board ? req.params.board+'/' : 'globalmanage.html'}`
'redirect': `/${req.params.board ? req.params.board+'/' : 'globalmanage/reports.html'}`
});
}

@ -35,7 +35,7 @@ module.exports = async (req, res, next) => {
return res.render('message', {
'title': 'Success',
'message': 'Added newspost',
'redirect': '/globalmanage.html'
'redirect': '/globalmanage/news.html'
});
}

@ -15,7 +15,7 @@ module.exports = async (req, res, next) => {
return res.render('message', {
'title': 'Success',
'message': 'Deleted news',
'redirect': '/globalmanage.html'
'redirect': '/globalmanage/news.html'
});
}

@ -15,7 +15,7 @@ module.exports = async (req, res, next) => {
return res.render('message', {
'title': 'Success',
'message': `${req.body.delete_account ? 'Deleted' : 'Edited'} ${amount} accounts`,
'redirect': '/globalmanage.html'
'redirect': '/globalmanage/accounts.html'
});
}

@ -1,28 +0,0 @@
'use strict';
const { Bans, News, Posts, Accounts } = require(__dirname+'/../../db/')
module.exports = async (req, res, next) => {
let reports, bans, news, accounts;
try {
[ reports, bans, news, accounts ] = await Promise.all([
Posts.getGlobalReports(),
Bans.getGlobalBans(),
News.find(),
Accounts.find(),
]);
} catch (err) {
return next(err)
}
//render the page
res.render('globalmanage', {
csrf: req.csrfToken(),
reports,
bans,
news,
accounts,
});
}

@ -0,0 +1,19 @@
'use strict';
const { Accounts } = require(__dirname+'/../../../db/');
module.exports = async (req, res, next) => {
let accounts;
try {
accounts = await Accounts.find();
} catch (err) {
return next(err)
}
res.render('globalmanageaccounts', {
csrf: req.csrfToken(),
accounts,
});
}

@ -0,0 +1,19 @@
'use strict';
const { Bans } = require(__dirname+'/../../../db/');
module.exports = async (req, res, next) => {
let bans;
try {
bans = await Bans.getGlobalBans();
} catch (err) {
return next(err)
}
res.render('globalmanagebans', {
csrf: req.csrfToken(),
bans,
});
}

@ -2,8 +2,8 @@
module.exports = async (req, res, next) => {
res.render('manage', {
//csrf: req.csrfToken(),
res.render('globalmanageboards', {
csrf: req.csrfToken(),
});
}

@ -0,0 +1,9 @@
'use strict';
module.exports = {
globalManageReports: require(__dirname+'/reports.js'),
globalManageBans: require(__dirname+'/bans.js'),
globalManageBoards: require(__dirname+'/boards.js'),
globalManageNews: require(__dirname+'/news.js'),
globalManageAccounts: require(__dirname+'/accounts.js'),
}

@ -0,0 +1,19 @@
'use strict';
const { News } = require(__dirname+'/../../../db/');
module.exports = async (req, res, next) => {
let news;
try {
news = await News.find();
} catch (err) {
return next(err)
}
res.render('globalmanagenews', {
csrf: req.csrfToken(),
news,
});
}

@ -0,0 +1,19 @@
'use strict';
const { Posts } = require(__dirname+'/../../../db/');
module.exports = async (req, res, next) => {
let reports;
try {
reports = await Posts.getGlobalReports();
} catch (err) {
return next(err)
}
res.render('globalmanagereports', {
csrf: req.csrfToken(),
reports,
});
}

@ -1,8 +1,8 @@
'use strict';
module.exports = {
managereports: require(__dirname+'/reports.js'),
managesettings: require(__dirname+'/settings.js'),
managebans: require(__dirname+'/bans.js'),
managebanners: require(__dirname+'/banners.js'),
manageReports: require(__dirname+'/reports.js'),
manageSettings: require(__dirname+'/settings.js'),
manageBans: require(__dirname+'/bans.js'),
manageBanners: require(__dirname+'/banners.js'),
}

@ -1,6 +1,6 @@
nav.navbar#top
a.nav-item(href='/') Home
a.nav-item(href='/news.html') News
a.nav-item(href=`/${board ? board._id+'/manage/reports' : 'globalmanage'}.html`) Manage
a.nav-item(href=`/${board ? board._id+'/manage/reports' : 'globalmanage/reports'}.html`) Manage
a.nav-item(href='/create.html') Create
a.nav-item.right(href='/logout') Logout

@ -0,0 +1,13 @@
mixin globalmanagenav(selected)
nav.pages
a(href=`/globalmanage/reports.html` class=(selected === 'reports' ? 'bold' : '')) [Reports]
|
a(href=`/globalmanage/bans.html` class=(selected === 'bans' ? 'bold' : '')) [Bans]
|
a(href=`/globalmanage/boards.html` class=(selected === 'boards' ? 'bold' : '')) [Boards]
if permLevel === 0
|
a(href=`/globalmanage/accounts.html` class=(selected === 'accounts' ? 'bold' : '')) [Accounts]
|
a(href=`/globalmanage/news.html` class=(selected === 'news' ? 'bold' : '')) [News]

@ -1,95 +0,0 @@
extends ../layout.pug
include ../mixins/post.pug
include ../mixins/ban.pug
include ../mixins/newspost.pug
block head
script(src='/js/all.js')
title Manage
block content
h1.board-title Global Management
hr(size=1)
h4.no-m-p Add News:
section.form-wrapper.flexleft.mt-10
form.form-post(action=`/forms/global/addnews`, enctype='application/x-www-form-urlencoded', method='POST')
input(type='hidden' name='_csrf' value=csrf)
section.row
.label Title
input(type='text' name='title' required)
section.row
.label Message
textarea(name='message' placeholder='supports post styling' required)
input(type='submit', value='submit')
hr(size=1)
if news.length > 0
h4.no-m-p Delete News:
section.form-wrapper.flexleft.mt-10
form.form-post(action=`/forms/global/deletenews`, enctype='application/x-www-form-urlencoded', method='POST')
input(type='hidden' name='_csrf' value=csrf)
each post in news
+newspost(post, true)
if news.length === 1
.anchor
input(type='submit', value='delete')
hr(size=1)
h4.no-m-p Delete board:
section.form-wrapper.flexleft.mt-10
form.form-post(action=`/forms/global/deleteboard`, enctype='application/x-www-form-urlencoded', method='POST')
input(type='hidden' name='_csrf' value=csrf)
section.row
.label I'm sure
label.postform-style.ph-5
input(type='checkbox', name='confirm', value='true' required)
section.row
.label Board URI
input(type='text' name='uri' required)
input(type='submit', value='submit')
hr(size=1)
h4.no-m-p Accounts:
section.form-wrapper.flexleft.mt-10
form.form-post(action=`/forms/global/editaccounts` method='POST' enctype='application/x-www-form-urlencoded')
input(type='hidden' name='_csrf' value=csrf)
.table-container.flex-left.mv-10
table
tr
th
th Username
th Auth Level
for account in accounts
tr
td: input(type='checkbox', name='checkedaccounts[]' value=account._id)
td #{account._id}
td #{account.authLevel}
section.row
.label Delete Accounts
label.postform-style.ph-5
input(type='checkbox', name='delete_account', value='true')
section.row
.label Auth Level
input(type='number' name='auth_level')
input(type='submit', value='apply')
hr(size=1)
h4.no-m-p Global Reports:
form(action=`/forms/global/actions` method='POST' enctype='application/x-www-form-urlencoded')
input(type='hidden' name='_csrf' value=csrf)
if reports.length === 0
p No reports.
else
for report in reports
section.thread
+post(report, false, false, true)
hr(size=1)
include ../includes/actionfooter_globalmanage.pug
hr(size=1)
h4.no-m-p Global Bans & Appeals:
form(action=`/forms/global/unban` method='POST' enctype='application/x-www-form-urlencoded')
input(type='hidden' name='_csrf' value=csrf)
if bans.length === 0
p No bans.
else
include ../includes/bantable.pug
for ban in bans
+ban(ban)
section.action-wrapper
input(type='submit', value='unban')

@ -0,0 +1,35 @@
extends ../layout.pug
include ../mixins/globalmanagenav.pug
block head
script(src='/js/all.js')
title Manage
block content
h1.board-title Global Management
br
+globalmanagenav('accounts')
hr(size=1)
h4.no-m-p Accounts:
section.form-wrapper.flexleft.mt-10
form.form-post(action=`/forms/global/editaccounts` method='POST' enctype='application/x-www-form-urlencoded')
input(type='hidden' name='_csrf' value=csrf)
.table-container.flex-left.mv-10
table
tr
th
th Username
th Auth Level
for account in accounts
tr
td: input(type='checkbox', name='checkedaccounts[]' value=account._id)
td #{account._id}
td #{account.authLevel}
section.row
.label Delete Accounts
label.postform-style.ph-5
input(type='checkbox', name='delete_account', value='true')
section.row
.label Set Auth Level
input(type='number' name='auth_level')
input(type='submit', value='apply')

@ -0,0 +1,24 @@
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('bans')
hr(size=1)
h4.no-m-p Global Bans & Appeals:
form(action=`/forms/global/unban` method='POST' enctype='application/x-www-form-urlencoded')
input(type='hidden' name='_csrf' value=csrf)
if bans.length === 0
p No bans.
else
include ../includes/bantable.pug
for ban in bans
+ban(ban)
section.action-wrapper
input(type='submit', value='unban')

@ -0,0 +1,24 @@
extends ../layout.pug
include ../mixins/globalmanagenav.pug
block head
script(src='/js/all.js')
title Manage
block content
h1.board-title Global Management
br
+globalmanagenav('boards')
hr(size=1)
h4.no-m-p Delete board:
section.form-wrapper.flexleft.mt-10
form.form-post(action=`/forms/global/deleteboard`, enctype='application/x-www-form-urlencoded', method='POST')
input(type='hidden' name='_csrf' value=csrf)
section.row
.label I'm sure
label.postform-style.ph-5
input(type='checkbox', name='confirm', value='true' required)
section.row
.label Board URI
input(type='text' name='uri' required)
input(type='submit', value='submit')

@ -0,0 +1,35 @@
extends ../layout.pug
include ../mixins/newspost.pug
include ../mixins/globalmanagenav.pug
block head
script(src='/js/all.js')
title Manage
block content
h1.board-title Global Management
br
+globalmanagenav('news')
hr(size=1)
h4.no-m-p Add News:
section.form-wrapper.flexleft.mt-10
form.form-post(action=`/forms/global/addnews`, enctype='application/x-www-form-urlencoded', method='POST')
input(type='hidden' name='_csrf' value=csrf)
section.row
.label Title
input(type='text' name='title' required)
section.row
.label Message
textarea(name='message' placeholder='supports post styling' required)
input(type='submit', value='submit')
if news.length > 0
hr(size=1)
h4.no-m-p Delete News:
section.form-wrapper.flexleft.mt-10
form.form-post(action=`/forms/global/deletenews`, enctype='application/x-www-form-urlencoded', method='POST')
input(type='hidden' name='_csrf' value=csrf)
each post in news
+newspost(post, true)
if news.length === 1
.anchor
input(type='submit', value='delete')

@ -0,0 +1,24 @@
extends ../layout.pug
include ../mixins/post.pug
include ../mixins/globalmanagenav.pug
block head
script(src='/js/all.js')
title Manage
block content
h1.board-title Global Management
br
+globalmanagenav('reports')
hr(size=1)
h4.no-m-p Global Reports:
form(action=`/forms/global/actions` method='POST' enctype='application/x-www-form-urlencoded')
input(type='hidden' name='_csrf' value=csrf)
if reports.length === 0
p No reports.
else
for report in reports
section.thread
+post(report, false, false, true)
hr(size=1)
include ../includes/actionfooter_globalmanage.pug
Loading…
Cancel
Save