From 06bac6520066d6b84e8ec6bbd6a9275c6af5d366 Mon Sep 17 00:00:00 2001 From: Thomas Lynch Date: Mon, 8 Feb 2021 14:30:34 +0000 Subject: [PATCH] add global announcements, now that there is global settings, DUH close #301 --- configs/template.js.example | 5 +++++ controllers/forms/globalsettings.js | 1 + helpers/render.js | 5 +++-- models/forms/changeglobalsettings.js | 12 ++++++++++++ views/includes/announcements.pug | 5 +++++ views/pages/globalmanagesettings.pug | 3 +++ 6 files changed, 29 insertions(+), 2 deletions(-) diff --git a/configs/template.js.example b/configs/template.js.example index b84242e4..64c19ab8 100644 --- a/configs/template.js.example +++ b/configs/template.js.example @@ -1,5 +1,10 @@ module.exports = { + globalAnnouncement: { + markdown: '', + raw: '', + }, + secureCookies: true, //check referrer to prevent some CSRF attack diff --git a/controllers/forms/globalsettings.js b/controllers/forms/globalsettings.js index 30119086..39dbd102 100644 --- a/controllers/forms/globalsettings.js +++ b/controllers/forms/globalsettings.js @@ -28,6 +28,7 @@ module.exports = async (req, res, next) => { } return false; }, expected: false, error: 'Extra mime types must be like type/subtype' }, + { result: lengthBody(req.body.global_announcement, 0, 10000), expected: false, error: 'Global announcement must not exceed 10000 characters' }, { result: lengthBody(req.body.filters, 0, 5000), expected: false, error: 'Filter text cannot exceed 5000 characters' }, { result: numberBody(req.body.filter_mode, 0, 2), expected: false, error: 'Filter mode must be a number from 0-2' }, { result: numberBody(req.body.ban_duration), expected: false, error: 'Invalid filter auto ban duration' }, diff --git a/helpers/render.js b/helpers/render.js index 1154539e..fd183f2f 100644 --- a/helpers/render.js +++ b/helpers/render.js @@ -14,13 +14,13 @@ const { outputFile } = require('fs-extra') let { enableUserBoardCreation, enableUserAccountCreation, lockWait, globalLimits, boardDefaults, cacheTemplates, - meta, enableWebring, captchaOptions } = config.get + meta, enableWebring, captchaOptions, globalAnnouncement } = config.get , renderLocals = null; const updateLocals = () => { ({ enableUserBoardCreation, enableUserAccountCreation, lockWait, globalLimits, boardDefaults, cacheTemplates, - meta, enableWebring, captchaOptions } = config.get); + meta, enableWebring, captchaOptions, globalAnnouncement } = config.get); renderLocals = { cache: cacheTemplates, meta, @@ -36,6 +36,7 @@ const updateLocals = () => { googleRecaptchaSiteKey: google.siteKey, hcaptchaSitekey: hcaptcha.siteKey, captchaGridSize: captchaOptions.grid.size, + globalAnnouncement, }; }; diff --git a/models/forms/changeglobalsettings.js b/models/forms/changeglobalsettings.js index 4032b865..755f315a 100644 --- a/models/forms/changeglobalsettings.js +++ b/models/forms/changeglobalsettings.js @@ -6,6 +6,8 @@ const { Boards, Posts, Accounts } = require(__dirname+'/../../db/') , buildQueue = require(__dirname+'/../../queue.js') , redis = require(__dirname+'/../../redis.js') , config = require(__dirname+'/../../config.js') + , { prepareMarkdown } = require(__dirname+'/../../helpers/posting/markdown.js') + , messageHandler = require(__dirname+'/../../helpers/posting/message.js') , { trimSetting, numberSetting, booleanSetting, arraySetting } = require(__dirname+'/../../helpers/setting.js') , { remove } = require('fs-extra'); @@ -14,6 +16,12 @@ module.exports = async (req, res, next) => { const promises = []; const oldSettings = config.get; + const announcement = req.body.global_announcement === null ? null : prepareMarkdown(req.body.global_announcement, false); + let markdownAnnouncement = oldSettings.globalAnnouncement.markdown; + if (announcement !== oldSettings.globalAnnouncement.raw) { + ({ message: markdownAnnouncement } = await messageHandler(announcement, null, null)) + } + const newSettings = { filters: arraySetting(req.body.filters, oldSettings.filters), filterMode: numberSetting(req.body.filter_mode, oldSettings.filterMode), @@ -22,6 +30,10 @@ module.exports = async (req, res, next) => { allowedHosts: arraySetting(req.body.allowed_hosts, oldSettings.allowedHosts), countryCodeHeader: trimSetting(req.body.country_code_header, oldSettings.countryCodeHeader), ipHeader: trimSetting(req.body.ip_header, oldSettings.ipHeader), + globalAnnouncement: { + raw: trimSetting(announcement, oldSettings.globalAnnouncement.raw), + markdown: trimSetting(markdownAnnouncement, oldSettings.globalAnnouncement.markdown), + }, meta: { siteName: trimSetting(req.body.meta_site_name, oldSettings.meta.siteName), url: trimSetting(req.body.meta_url, oldSettings.meta.url), diff --git a/views/includes/announcements.pug b/views/includes/announcements.pug index a1cdb3d4..04081e49 100644 --- a/views/includes/announcements.pug +++ b/views/includes/announcements.pug @@ -1,3 +1,8 @@ +if globalAnnouncement.markdown + hr(size=1) + pre.post-message.no-m-p.text-center !{globalAnnouncement.markdown} + if !board.settings.announcement.markdown + hr(size=1) if board.settings.announcement.markdown hr(size=1) pre.post-message.no-m-p.text-center !{board.settings.announcement.markdown} diff --git a/views/pages/globalmanagesettings.pug b/views/pages/globalmanagesettings.pug index 33faae87..6daa2f2f 100644 --- a/views/pages/globalmanagesettings.pug +++ b/views/pages/globalmanagesettings.pug @@ -45,6 +45,9 @@ block content .row h4.mv-5 Server + .row + .label Global Announcement + textarea(name='global_announcement') #{settings.globalAnnouncement.raw} .row .label Country Code Header input(type='text' name='country_code_header' value=settings.countryCodeHeader)