Show ban notes in mod view tables and allow editing them

merge-requests/341/head
Thomas Lynch 2 years ago
parent 3b08cc684b
commit b69337e2f1
  1. 20
      controllers/forms/editbans.js
  2. 13
      db/bans.js
  3. 11
      models/forms/editbanduration.js
  4. 10
      models/forms/editbannote.js
  5. 1
      views/includes/bantable.pug
  6. 7
      views/includes/managebanform.pug
  7. 5
      views/mixins/ban.pug

@ -3,7 +3,8 @@
const removeBans = require(__dirname+'/../../models/forms/removebans.js')
, dynamicResponse = require(__dirname+'/../../lib/misc/dynamic.js')
, denyAppeals = require(__dirname+'/../../models/forms/denybanappeals.js')
, editBans = require(__dirname+'/../../models/forms/editbans.js')
, editBanDuration = require(__dirname+'/../../models/forms/editbanduration.js')
, editBanNote = require(__dirname+'/../../models/forms/editbannote.js')
, upgradeBans = require(__dirname+'/../../models/forms/upgradebans.js')
, paramConverter = require(__dirname+'/../../lib/middleware/input/paramconverter.js')
, { checkSchema, lengthBody, numberBody, inArrayBody } = require(__dirname+'/../../lib/input/schema.js');
@ -13,7 +14,7 @@ module.exports = {
paramConverter: paramConverter({
timeFields: ['ban_duration'],
numberFields: ['upgrade'],
trimFields: ['option'],
trimFields: ['option', 'ban_note'],
allowedArrays: ['checkedbans'],
objectIdArrays: ['checkedbans']
}),
@ -22,8 +23,9 @@ module.exports = {
const errors = await checkSchema([
{ result: lengthBody(req.body.checkedbans, 1), expected: false, error: 'Must select at least one ban' },
{ result: inArrayBody(req.body.option, ['unban', 'edit', 'upgrade', 'deny_appeal']), expected: true, error: 'Invalid ban action' },
{ result: req.body.option !== 'edit' || numberBody(req.body.ban_duration, 1), expected: true, error: 'Invalid ban duration' },
{ result: inArrayBody(req.body.option, ['unban', 'edit_duration', 'edit_note', 'upgrade', 'deny_appeal']), expected: true, error: 'Invalid ban action' },
{ result: req.body.option !== 'edit_duration' || numberBody(req.body.ban_duration, 1), expected: true, error: 'Invalid ban duration' },
{ result: req.body.option !== 'edit_note' || !lengthBody(req.body.ban_note, 1), expected: true, error: 'Invalid ban note' },
{ result: req.body.option !== 'upgrade' || inArrayBody(req.body.upgrade, [1, 2]), expected: true, error: 'Invalid ban upgrade option' },
]);
@ -53,9 +55,13 @@ module.exports = {
amount = await upgradeBans(req, res, next);
message = `Upgraded ${amount} bans`;
break;
case 'edit': //could do other properties in future
amount = await editBans(req, res, next);
message = `Edited ${amount} bans`;
case 'edit_duration':
amount = await editBanDuration(req, res, next);
message = `Edited duration for ${amount} bans`;
break;
case 'edit_note':
amount = await editBanNote(req, res, next);
message = `Edited note for ${amount} bans`;
break;
default:
throw 'Invalid ban action'; //should never happen anyway

@ -152,6 +152,19 @@ module.exports = {
});
},
editNote: (board, ids, newNote) => {
return db.updateMany({
'board': board,
'_id': {
'$in': ids
},
}, {
'$set': {
'note': newNote,
}
});
},
removeMany: (board, ids) => {
return db.deleteMany({
'board': board,

@ -0,0 +1,11 @@
'use strict';
const { Bans } = require(__dirname+'/../../db/');
module.exports = async (req) => {
//New ban expiry date is current date + ban_duration. Not based on the original ban issue date.
const newExpireAt = new Date(Date.now() + req.body.ban_duration);
return Bans.editDuration(req.params.board, req.body.checkedbans, newExpireAt).then(result => result.modifiedCount);
};

@ -0,0 +1,10 @@
'use strict';
const { Bans } = require(__dirname+'/../../db/');
module.exports = async (req) => {
//New ban note.
return Bans.editNote(req.params.board, req.body.checkedbans, req.body.ban_note).then(result => result.modifiedCount);
};

@ -14,3 +14,4 @@
th Seen?
th Appealable?
th Appeal
th Note

@ -25,7 +25,12 @@ else
.row
.label Edit Duration
label.postform-style.ph-5.mr-1
input(type='radio' name='option' value='edit')
input(type='radio' name='option' value='edit_duration')
input(type='text' name='ban_duration' placeholder='Ban duration e.g. 7d' autocomplete='off')
.row
.label Edit Note
label.postform-style.ph-5.mr-1
input(type='radio' name='option' value='edit_note')
input(type='text' name='ban_note')
input(type='submit' value='Submit')

@ -47,3 +47,8 @@ mixin ban(ban, banpage)
| No appeal submitted
else
| -
td
if ban.note
| #{ban.note}
else
| -

Loading…
Cancel
Save