diff --git a/src/controllers/accounts/edit.js b/src/controllers/accounts/edit.js index f3b8ce58ec..599f898c24 100644 --- a/src/controllers/accounts/edit.js +++ b/src/controllers/accounts/edit.js @@ -6,13 +6,16 @@ const helpers = require('../helpers'); const groups = require('../../groups'); const privileges = require('../../privileges'); const plugins = require('../../plugins'); -const accountHelpers = require('./helpers'); const file = require('../../file'); const editController = module.exports; -editController.get = async function (req, res) { - const [{ +editController.get = async function (req, res, next) { + const { userData } = res.locals; + if (!userData) { + return next(); + } + const { username, userslug, isSelf, @@ -20,36 +23,36 @@ editController.get = async function (req, res) { groups: _groups, groupTitleArray, allowMultipleBadges, - }, canUseSignature, canManageUsers] = await Promise.all([ - accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query), + } = userData; + + const [canUseSignature, canManageUsers] = await Promise.all([ privileges.global.can('signature', req.uid), privileges.admin.can('admin:users', req.uid), ]); - const payload = {}; - payload.maximumSignatureLength = meta.config.maximumSignatureLength; - payload.maximumAboutMeLength = meta.config.maximumAboutMeLength; - payload.maximumProfileImageSize = meta.config.maximumProfileImageSize; - payload.allowMultipleBadges = meta.config.allowMultipleBadges === 1; - payload.allowAccountDelete = meta.config.allowAccountDelete === 1; - payload.allowWebsite = !isSelf || !!meta.config['reputation:disabled'] || reputation >= meta.config['min:rep:website']; - payload.allowAboutMe = !isSelf || !!meta.config['reputation:disabled'] || reputation >= meta.config['min:rep:aboutme']; - payload.allowSignature = canUseSignature && (!isSelf || !!meta.config['reputation:disabled'] || reputation >= meta.config['min:rep:signature']); - payload.profileImageDimension = meta.config.profileImageDimension; - payload.defaultAvatar = user.getDefaultAvatar(); + userData.maximumSignatureLength = meta.config.maximumSignatureLength; + userData.maximumAboutMeLength = meta.config.maximumAboutMeLength; + userData.maximumProfileImageSize = meta.config.maximumProfileImageSize; + userData.allowMultipleBadges = meta.config.allowMultipleBadges === 1; + userData.allowAccountDelete = meta.config.allowAccountDelete === 1; + userData.allowWebsite = !isSelf || !!meta.config['reputation:disabled'] || reputation >= meta.config['min:rep:website']; + userData.allowAboutMe = !isSelf || !!meta.config['reputation:disabled'] || reputation >= meta.config['min:rep:aboutme']; + userData.allowSignature = canUseSignature && (!isSelf || !!meta.config['reputation:disabled'] || reputation >= meta.config['min:rep:signature']); + userData.profileImageDimension = meta.config.profileImageDimension; + userData.defaultAvatar = user.getDefaultAvatar(); - payload.groups = _groups.filter(g => g && g.userTitleEnabled && !groups.isPrivilegeGroup(g.name) && g.name !== 'registered-users'); + userData.groups = _groups.filter(g => g && g.userTitleEnabled && !groups.isPrivilegeGroup(g.name) && g.name !== 'registered-users'); if (req.uid === res.locals.uid || canManageUsers) { const { associations } = await plugins.hooks.fire('filter:auth.list', { uid: res.locals.uid, associations: [] }); - payload.sso = associations; + userData.sso = associations; } if (!allowMultipleBadges) { - payload.groupTitle = groupTitleArray[0]; + userData.groupTitle = groupTitleArray[0]; } - payload.groups.sort((a, b) => { + userData.groups.sort((a, b) => { const i1 = groupTitleArray.indexOf(a.name); const i2 = groupTitleArray.indexOf(b.name); if (i1 === -1) { @@ -59,14 +62,14 @@ editController.get = async function (req, res) { } return i1 - i2; }); - payload.groups.forEach((group) => { + userData.groups.forEach((group) => { group.userTitle = group.userTitle || group.displayName; group.selected = groupTitleArray.includes(group.name); }); - payload.groupSelectSize = Math.min(10, Math.max(5, payload.groups.length + 1)); + userData.groupSelectSize = Math.min(10, Math.max(5, userData.groups.length + 1)); - payload.title = `[[pages:account/edit, ${username}]]`; - payload.breadcrumbs = helpers.buildBreadcrumbs([ + userData.title = `[[pages:account/edit, ${username}]]`; + userData.breadcrumbs = helpers.buildBreadcrumbs([ { text: username, url: `/user/${userslug}`, @@ -75,9 +78,9 @@ editController.get = async function (req, res) { text: '[[user:edit]]', }, ]); - payload.editButtons = []; + userData.editButtons = []; - res.render('account/edit', payload); + res.render('account/edit', userData); }; editController.password = async function (req, res, next) { @@ -102,6 +105,7 @@ editController.email = async function (req, res, next) { }; async function renderRoute(name, req, res) { + const { userData } = res.locals; const [isAdmin, { username, userslug }, hasPassword] = await Promise.all([ privileges.admin.can('admin:users', req.uid), user.getUserFields(res.locals.uid, ['username', 'userslug']), @@ -112,14 +116,14 @@ async function renderRoute(name, req, res) { return helpers.notAllowed(req, res); } - const payload = { hasPassword }; + userData.hasPassword = hasPassword; if (name === 'password') { - payload.minimumPasswordLength = meta.config.minimumPasswordLength; - payload.minimumPasswordStrength = meta.config.minimumPasswordStrength; + userData.minimumPasswordLength = meta.config.minimumPasswordLength; + userData.minimumPasswordStrength = meta.config.minimumPasswordStrength; } - payload.title = `[[pages:account/edit/${name}, ${username}]]`; - payload.breadcrumbs = helpers.buildBreadcrumbs([ + userData.title = `[[pages:account/edit/${name}, ${username}]]`; + userData.breadcrumbs = helpers.buildBreadcrumbs([ { text: username, url: `/user/${userslug}`, @@ -133,7 +137,7 @@ async function renderRoute(name, req, res) { }, ]); - res.render(`account/edit/${name}`, payload); + res.render(`account/edit/${name}`, userData); } editController.uploadPicture = async function (req, res, next) { diff --git a/src/controllers/accounts/profile.js b/src/controllers/accounts/profile.js index 1ef9756784..287f3d786d 100644 --- a/src/controllers/accounts/profile.js +++ b/src/controllers/accounts/profile.js @@ -9,7 +9,6 @@ const posts = require('../../posts'); const categories = require('../../categories'); const plugins = require('../../plugins'); const privileges = require('../../privileges'); -const accountHelpers = require('./helpers'); const helpers = require('../helpers'); const utils = require('../../utils'); @@ -26,7 +25,7 @@ profileController.get = async function (req, res, next) { } } - const userData = await accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query); + const { userData } = res.locals; if (!userData) { return next(); } diff --git a/src/controllers/accounts/settings.js b/src/controllers/accounts/settings.js index 2f5259822a..6248bc5ddd 100644 --- a/src/controllers/accounts/settings.js +++ b/src/controllers/accounts/settings.js @@ -13,13 +13,12 @@ const plugins = require('../../plugins'); const notifications = require('../../notifications'); const db = require('../../database'); const helpers = require('../helpers'); -const accountHelpers = require('./helpers'); const slugify = require('../../slugify'); const settingsController = module.exports; settingsController.get = async function (req, res, next) { - const userData = await accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query); + const { userData } = res.locals; if (!userData) { return next(); } diff --git a/src/middleware/render.js b/src/middleware/render.js index 4ae47a4161..e01110936f 100644 --- a/src/middleware/render.js +++ b/src/middleware/render.js @@ -116,7 +116,7 @@ module.exports = function (middleware) { } try { - await renderMethod(template, { ...res.locals.templateValues, ...options }, fn); + await renderMethod(template, options, fn); } catch (err) { next(err); } diff --git a/src/middleware/user.js b/src/middleware/user.js index 342730c507..902f10aadd 100644 --- a/src/middleware/user.js +++ b/src/middleware/user.js @@ -248,7 +248,7 @@ module.exports = function (middleware) { }; middleware.buildAccountData = async (req, res, next) => { - res.locals.templateValues = await accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query); + res.locals.userData = await accountHelpers.getUserDataByUserSlug(req.params.userslug, req.uid, req.query); next(); };