diff --git a/helpers/posting/name.js b/helpers/posting/name.js index 8874218a..90148a07 100644 --- a/helpers/posting/name.js +++ b/helpers/posting/name.js @@ -2,11 +2,14 @@ const getTripCode = require(__dirname+'/tripcode.js') , nameRegex = /^(?(?!##).*?)?(?:##(?[^ ]{1}.*?))?(?##(? .*?)?)?$/ - , capcodeLevels = ['Admin', 'Global Staff', 'Board Owner', 'Board Mod']; + , staffLevels = ['Admin', 'Global Staff', 'Board Owner', 'Board Mod'] + , staffLevelsRegex = new RegExp(`(${staffLevels.join('|')})+`, 'igm') -module.exports = async (inputName, permLevel, boardSettings) => { +module.exports = async (inputName, permLevel, boardSettings, boardOwner, username) => { - const { forceAnon, defaultName } = boardSettings; + const { forceAnon, defaultName, moderators } = boardSettings; + const isBoardOwner = username === boardOwner; + const isBoardMod = moderators.includes(username); let name = defaultName; let tripcode = null; @@ -26,12 +29,15 @@ module.exports = async (inputName, permLevel, boardSettings) => { } //capcode if (permLevel < 4 && groups.capcode) { - let type = capcodeLevels[permLevel]; - capcode = groups.capcodetext ? groups.capcodetext.trim() : type; - if (type.toLowerCase() === capcode.toLowerCase()) { - capcode = type; - } else { - capcode = `${type} ${capcode}`; + let capcodeInput = groups.capcodetext ? groups.capcodetext.trim() : ''; + //by default, use board staff if ismod/owner, else use higher staff + let staffLevel = staffLevels.find((sl, l) => capcodeInput.toLowerCase().startsWith(sl.toLowerCase()) && l === permLevel) + || (isBoardOwner ? staffLevels[2] + : isBoardMod ? staffLevels[3] + : staffLevels[permLevel]); //kill me + capcode = staffLevel; + if (capcodeInput && capcodeInput.toLowerCase() !== staffLevel.toLowerCase()) { + capcode = `${staffLevel} ${capcodeInput.replace(staffLevelsRegex, '').trim()}`; } capcode = `## ${capcode}`; } @@ -41,3 +47,23 @@ module.exports = async (inputName, permLevel, boardSettings) => { return { name, tripcode, capcode }; } + +//console.table([ +// +//{test:'Global Staff is also Board Mod', input:'##', output: test('##', 1, {forceAnon: false, defaultName:'Anon', moderators:['user']}, 'boardowner', 'user')}, +//{test:'Global Staff is also Board Mod', input:'## test', output: test('## test', 1, {forceAnon: false, defaultName:'Anon', moderators:['user']}, 'boardowner', 'user')}, +//{test:'Global Staff is also Board Mod', input:'## Global Staff', output: test('## Global Staff', 1, {forceAnon: false, defaultName:'Anon', moderators:['user']}, 'boardowner', 'user')}, +//{test:'Global Staff is also Board Mod', input:'## Global Staff test', output: test('## Global Staff test', 1, {forceAnon: false, defaultName:'Anon', moderators:['user']}, 'boardowner', 'user')}, +//{}, +//{test:'Global Staff is also Board Owner', input:'##', output: test('##', 1, {forceAnon: false, defaultName:'Anon', moderators:['boardmod']}, 'user', 'user')}, +//{test:'Global Staff is also Board Owner', input:'## test', output: test('## test', 1, {forceAnon: false, defaultName:'Anon', moderators:['boardmod']}, 'user', 'user')}, +//{test:'Global Staff is also Board Owner', input:'## Global Staff', output: test('## Global Staff', 1, {forceAnon: false, defaultName:'Anon', moderators:['boardmod']}, 'user', 'user')}, +//{test:'Global Staff is also Board Owner', input:'## Global Staff test', output: test('## Global Staff test', 1, {forceAnon: false, defaultName:'Anon', moderators:['boardmod']}, 'user', 'user')}, +//{}, +//{test:'Global Staff is not board staff', input:'##', output: test('##', 1, {forceAnon: false, defaultName:'Anon', moderators:['boardmod']}, 'boardowner', 'user')}, +//{test:'Global Staff is not board staff', input:'## test', output: test('## test', 1, {forceAnon: false, defaultName:'Anon', moderators:['boardmod']}, 'boardowner', 'user')}, +//{test:'Global Staff is not board staff', input:'## Global Staff', output: test('## Global Staff', 1, {forceAnon: false, defaultName:'Anon', moderators:['boardmod']}, 'boardowner', 'user')}, +//{test:'Global Staff is not board staff', input:'## Global Staff test', output: test('## Global Staff test', 1, {forceAnon: false, defaultName:'Anon', moderators:['boardmod']}, 'boardowner', 'user')}, +// +//]); + diff --git a/models/forms/editpost.js b/models/forms/editpost.js index a0ce23ea..69aa59ae 100644 --- a/models/forms/editpost.js +++ b/models/forms/editpost.js @@ -74,7 +74,8 @@ todo: handle some more situations } //new name, trip and cap - const { name, tripcode, capcode } = await nameHandler(req.body.name, res.locals.permLevel, board.settings); + const { name, tripcode, capcode } = await nameHandler(req.body.name, res.locals.permLevel, + board.settings, board.owner, res.locals.user ? res.locals.user.username : null); //new message and quotes const nomarkup = prepareMarkdown(req.body.message, false); const { message, quotes, crossquotes } = await messageHandler(nomarkup, req.body.board, post.thread); diff --git a/models/forms/makepost.js b/models/forms/makepost.js index 0a517782..2734002b 100644 --- a/models/forms/makepost.js +++ b/models/forms/makepost.js @@ -334,7 +334,8 @@ module.exports = async (req, res, next) => { let email = (res.locals.permLevel < 4 || (!forceAnon && !sageOnlyEmail) || req.body.email === 'sage') ? req.body.email : null; //get name, trip and cap - const { name, tripcode, capcode } = await nameHandler(req.body.name, res.locals.permLevel, res.locals.board.settings); + const { name, tripcode, capcode } = await nameHandler(req.body.name, res.locals.permLevel, + res.locals.board.settings, res.locals.board.owner, res.locals.user ? res.locals.user.username : null); //get message, quotes and crossquote array const nomarkup = prepareMarkdown(req.body.message, true); const { message, quotes, crossquotes } = await messageHandler(nomarkup, req.params.board, req.body.thread); diff --git a/views/pages/editpost.pug b/views/pages/editpost.pug index 5833fc36..05a32019 100644 --- a/views/pages/editpost.pug +++ b/views/pages/editpost.pug @@ -20,8 +20,7 @@ block content include ../includes/posticons.pug input.edit.post-subject(value=post.subject placeholder='Subject' type='text' name='subject' maxlength=globalLimits.fieldLength.subject) input.edit.post-name(value=post.email type='text' name='email' placeholder='Email' maxlength=globalLimits.fieldLength.email) - - const capcodeInput = post.capcode && post.capcode.length > 0 ? '## '+post.capcode.split(' ').slice(2) : ''; - input.edit.post-name(type='text' name='name' placeholder='Name' maxlength=globalLimits.fieldLength.name value=post.name+capcodeInput) + input.edit.post-name(type='text' name='name' placeholder='Name' maxlength=globalLimits.fieldLength.name value=post.name+(post.capcode || '')) if post.country && post.country.code span(class=`flag flag-${post.country.code.toLowerCase()}` title=post.country.name alt=post.country.name) |