diff --git a/public/language/en-GB/admin/general/dashboard.json b/public/language/en-GB/admin/dashboard.json similarity index 100% rename from public/language/en-GB/admin/general/dashboard.json rename to public/language/en-GB/admin/dashboard.json diff --git a/public/language/en-GB/admin/menu.json b/public/language/en-GB/admin/menu.json index 1f275e03ae..90e8b4185a 100644 --- a/public/language/en-GB/admin/menu.json +++ b/public/language/en-GB/admin/menu.json @@ -1,11 +1,6 @@ { + "dashboard": "Dashboard", "section-general": "General", - "general/dashboard": "Dashboard", - "general/homepage": "Home Page", - "general/navigation": "Navigation", - "general/languages": "Languages", - "general/sounds": "Sounds", - "general/social": "Social", "section-manage": "Manage", "manage/categories": "Categories", @@ -22,17 +17,22 @@ "section-settings": "Settings", "settings/general": "General", + "settings/homepage": "Home Page", + "settings/navigation": "Navigation", "settings/reputation": "Reputation", "settings/email": "Email", "settings/user": "User", "settings/group": "Group", "settings/guest": "Guests", "settings/uploads": "Uploads", + "settings/languages": "Languages", "settings/post": "Post", "settings/chat": "Chat", "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/sounds": "Sounds", + "settings/social": "Social", "settings/cookies": "Cookies", "settings/web-crawler": "Web Crawler", "settings/sockets": "Sockets", diff --git a/public/language/en-GB/admin/general/homepage.json b/public/language/en-GB/admin/settings/homepage.json similarity index 100% rename from public/language/en-GB/admin/general/homepage.json rename to public/language/en-GB/admin/settings/homepage.json diff --git a/public/language/en-GB/admin/general/languages.json b/public/language/en-GB/admin/settings/languages.json similarity index 100% rename from public/language/en-GB/admin/general/languages.json rename to public/language/en-GB/admin/settings/languages.json diff --git a/public/language/en-GB/admin/general/navigation.json b/public/language/en-GB/admin/settings/navigation.json similarity index 100% rename from public/language/en-GB/admin/general/navigation.json rename to public/language/en-GB/admin/settings/navigation.json diff --git a/public/language/en-GB/admin/general/social.json b/public/language/en-GB/admin/settings/social.json similarity index 100% rename from public/language/en-GB/admin/general/social.json rename to public/language/en-GB/admin/settings/social.json diff --git a/public/language/en-GB/admin/general/sounds.json b/public/language/en-GB/admin/settings/sounds.json similarity index 100% rename from public/language/en-GB/admin/general/sounds.json rename to public/language/en-GB/admin/settings/sounds.json diff --git a/public/openapi/read.yaml b/public/openapi/read.yaml index 458bd6a3de..e29449b696 100644 --- a/public/openapi/read.yaml +++ b/public/openapi/read.yaml @@ -260,7 +260,7 @@ paths: imageClass: type: string - $ref: components/schemas/CommonProps.yaml#/CommonProps - /api/admin/general/dashboard: + /api/admin/dashboard: get: tags: - admin @@ -355,7 +355,7 @@ paths: type: string description: An ISO 8601 formatted date string (complementing `timestamp`) - $ref: components/schemas/CommonProps.yaml#/CommonProps - /api/admin/general/languages: + /api/admin/settings/languages: get: tags: - admin @@ -391,7 +391,7 @@ paths: type: integer description: Whether the forum will attempt to guess language based on browser's `Accept-Language` header - $ref: components/schemas/CommonProps.yaml#/CommonProps - /api/admin/general/sounds: + /api/admin/settings/sounds: get: tags: - admin @@ -460,7 +460,7 @@ paths: selected: type: boolean - $ref: components/schemas/CommonProps.yaml#/CommonProps - /api/admin/general/navigation: + /api/admin/settings/navigation: get: tags: - admin @@ -568,7 +568,7 @@ paths: type: array description: A clone of `enabled` - $ref: components/schemas/CommonProps.yaml#/CommonProps - /api/admin/general/homepage: + /api/admin/settings/homepage: get: tags: - admin @@ -592,7 +592,7 @@ paths: name: type: string - $ref: components/schemas/CommonProps.yaml#/CommonProps - /api/admin/general/social: + /api/admin/settings/social: get: tags: - admin diff --git a/public/src/admin/admin.js b/public/src/admin/admin.js index 0b0bfc86a0..b55f7ce12f 100644 --- a/public/src/admin/admin.js +++ b/public/src/admin/admin.js @@ -71,7 +71,7 @@ // If index is requested, load the dashboard if (url === 'admin') { - url = 'admin/general/dashboard'; + url = 'admin/dashboard'; } url = [config.relative_path, url].join('/'); @@ -100,12 +100,17 @@ pageTitle = '[[admin/menu:section-plugins]] > ' + mainTitle; } else { var matches = url.match(/admin\/(.+?)\/(.+?)$/); - mainTitle = '[[admin/menu:' + matches[1] + '/' + matches[2] + ']]'; - pageTitle = '[[admin/menu:section-' + - (matches[1] === 'development' ? 'advanced' : matches[1]) + - ']]' + (matches[2] ? (' > ' + mainTitle) : ''); - if (matches[2] === 'settings') { - mainTitle = translator.compile('admin/menu:settings.page-title', mainTitle); + if (matches) { + mainTitle = '[[admin/menu:' + matches[1] + '/' + matches[2] + ']]'; + pageTitle = '[[admin/menu:section-' + + (matches[1] === 'development' ? 'advanced' : matches[1]) + + ']]' + (matches[2] ? (' > ' + mainTitle) : ''); + if (matches[2] === 'settings') { + mainTitle = translator.compile('admin/menu:settings.page-title', mainTitle); + } + } else { + mainTitle = '[[admin/menu:dashboard]]'; + pageTitle = '[[admin/menu:dashboard]]'; } } diff --git a/public/src/admin/general/dashboard.js b/public/src/admin/dashboard.js similarity index 91% rename from public/src/admin/general/dashboard.js rename to public/src/admin/dashboard.js index b4d6afb797..780f705bb1 100644 --- a/public/src/admin/general/dashboard.js +++ b/public/src/admin/dashboard.js @@ -1,7 +1,7 @@ 'use strict'; -define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress'], function (semver, Chart, translator, Benchpress) { +define('admin/dashboard', ['semver', 'Chart', 'translator', 'benchpress'], function (semver, Chart, translator, Benchpress) { var Admin = {}; var intervals = { rooms: false, @@ -64,19 +64,19 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress' var html = '
' + '' + data.onlineRegisteredCount + '' + - '
[[admin/general/dashboard:active-users.users]]
' + + '
[[admin/dashboard:active-users.users]]
' + '
' + '
' + '' + data.onlineGuestCount + '' + - '
[[admin/general/dashboard:active-users.guests]]
' + + '
[[admin/dashboard:active-users.guests]]
' + '
' + '
' + '' + (data.onlineRegisteredCount + data.onlineGuestCount) + '' + - '
[[admin/general/dashboard:active-users.total]]
' + + '
[[admin/dashboard:active-users.total]]
' + '
' + '
' + '' + data.socketCount + '' + - '
[[admin/general/dashboard:active-users.connections]]
' + + '
[[admin/dashboard:active-users.connections]]
' + '
'; updateRegisteredGraph(data.onlineRegisteredCount, data.onlineGuestCount); @@ -144,18 +144,18 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress' var t = translator.Translator.create(); Promise.all([ - t.translateKey('admin/general/dashboard:graphs.page-views', []), - t.translateKey('admin/general/dashboard:graphs.page-views-registered', []), - t.translateKey('admin/general/dashboard:graphs.page-views-guest', []), - t.translateKey('admin/general/dashboard:graphs.page-views-bot', []), - t.translateKey('admin/general/dashboard:graphs.unique-visitors', []), - t.translateKey('admin/general/dashboard:graphs.registered-users', []), - t.translateKey('admin/general/dashboard:graphs.anonymous-users', []), - t.translateKey('admin/general/dashboard:on-categories', []), - t.translateKey('admin/general/dashboard:reading-posts', []), - t.translateKey('admin/general/dashboard:browsing-topics', []), - t.translateKey('admin/general/dashboard:recent', []), - t.translateKey('admin/general/dashboard:unread', []), + t.translateKey('admin/dashboard:graphs.page-views', []), + t.translateKey('admin/dashboard:graphs.page-views-registered', []), + t.translateKey('admin/dashboard:graphs.page-views-guest', []), + t.translateKey('admin/dashboard:graphs.page-views-bot', []), + t.translateKey('admin/dashboard:graphs.unique-visitors', []), + t.translateKey('admin/dashboard:graphs.registered-users', []), + t.translateKey('admin/dashboard:graphs.anonymous-users', []), + t.translateKey('admin/dashboard:on-categories', []), + t.translateKey('admin/dashboard:reading-posts', []), + t.translateKey('admin/dashboard:browsing-topics', []), + t.translateKey('admin/dashboard:recent', []), + t.translateKey('admin/dashboard:unread', []), ]).then(function (translations) { var data = { labels: trafficLabels, @@ -334,7 +334,7 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress' $(this).addClass('active'); require(['translator'], function (translator) { - translator.translate('[[admin/general/dashboard:page-views-custom]]', function (translated) { + translator.translate('[[admin/dashboard:page-views-custom]]', function (translated) { $('[data-action="updateGraph"][data-units="custom"]').text(translated); }); }); @@ -345,7 +345,7 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress' Benchpress.parse('admin/partials/pageviews-range-select', {}, function (html) { var modal = bootbox.dialog({ - title: '[[admin/general/dashboard:page-views-custom]]', + title: '[[admin/dashboard:page-views-custom]]', message: html, buttons: { submit: { @@ -501,7 +501,7 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress' function updateTopicsGraph(topics) { if (!topics.length) { topics = [{ - title: '[[admin/general/dashboard:no-users-browsing]]', + title: '[[admin/dashboard:no-users-browsing]]', count: 1, }]; } diff --git a/public/src/admin/general/languages.js b/public/src/admin/general/languages.js deleted file mode 100644 index 05d3175b27..0000000000 --- a/public/src/admin/general/languages.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - - -define('admin/general/languages', ['admin/settings'], function (Settings) { - var Languages = {}; - - Languages.init = function () { - Settings.prepare(); - }; - - return Languages; -}); diff --git a/public/src/admin/settings.js b/public/src/admin/settings.js index 89fa99edc3..b1f2127214 100644 --- a/public/src/admin/settings.js +++ b/public/src/admin/settings.js @@ -122,7 +122,7 @@ define('admin/settings', ['uploader'], function (uploader) { accept: uploadBtn.attr('data-accept'), }, function (image) { // need to move these into template, ex data-callback - if (ajaxify.currentPage === 'admin/general/sounds') { + if (ajaxify.currentPage === 'admin/settings/sounds') { ajaxify.refresh(); } else { $('#' + uploadBtn.attr('data-target')).val(image); diff --git a/public/src/admin/general/homepage.js b/public/src/admin/settings/homepage.js similarity index 83% rename from public/src/admin/general/homepage.js rename to public/src/admin/settings/homepage.js index ca5438c6a1..d3e8e5ab75 100644 --- a/public/src/admin/general/homepage.js +++ b/public/src/admin/settings/homepage.js @@ -1,7 +1,7 @@ 'use strict'; -define('admin/general/homepage', ['admin/settings'], function () { +define('admin/settings/homepage', ['admin/settings'], function () { function toggleCustomRoute() { if ($('[data-field="homePageRoute"]').val()) { $('#homePageCustom').hide(); diff --git a/public/src/admin/general/navigation.js b/public/src/admin/settings/navigation.js similarity index 89% rename from public/src/admin/general/navigation.js rename to public/src/admin/settings/navigation.js index 2979d80f84..cfb78cf754 100644 --- a/public/src/admin/general/navigation.js +++ b/public/src/admin/settings/navigation.js @@ -1,7 +1,7 @@ 'use strict'; -define('admin/general/navigation', ['translator', 'iconSelect', 'benchpress', 'jqueryui'], function (translator, iconSelect, Benchpress) { +define('admin/settings/navigation', ['translator', 'iconSelect', 'benchpress', 'jqueryui'], function (translator, iconSelect, Benchpress) { var navigation = {}; var available; @@ -70,7 +70,7 @@ define('admin/general/navigation', ['translator', 'iconSelect', 'benchpress', 'j data.title = translator.escape(data.title); data.text = translator.escape(data.text); data.groups = ajaxify.data.groups; - Benchpress.parse('admin/general/navigation', 'navigation', { navigation: [data] }, function (li) { + Benchpress.parse('admin/settings/navigation', 'navigation', { navigation: [data] }, function (li) { translator.translate(li, function (li) { li = $(translator.unescape(li)); el.after(li); @@ -78,7 +78,7 @@ define('admin/general/navigation', ['translator', 'iconSelect', 'benchpress', 'j }); }); - Benchpress.parse('admin/general/navigation', 'enabled', { enabled: [data] }, function (li) { + Benchpress.parse('admin/settings/navigation', 'enabled', { enabled: [data] }, function (li) { translator.translate(li, function (li) { li = $(translator.unescape(li)); $('#enabled').append(li); @@ -146,7 +146,7 @@ define('admin/general/navigation', ['translator', 'iconSelect', 'benchpress', 'j function toggle() { var btn = $(this); var disabled = btn.hasClass('btn-success'); - translator.translate(disabled ? '[[admin/general/navigation:btn.disable]]' : '[[admin/general/navigation:btn.enable]]', function (html) { + translator.translate(disabled ? '[[admin/settings/navigation:btn.disable]]' : '[[admin/settings/navigation:btn.enable]]', function (html) { btn.toggleClass('btn-warning').toggleClass('btn-success').html(html); btn.parents('li').find('[name="enabled"]').val(disabled ? 'on' : ''); }); diff --git a/public/src/admin/general/social.js b/public/src/admin/settings/social.js similarity index 80% rename from public/src/admin/general/social.js rename to public/src/admin/settings/social.js index 49ee4e6ad0..294357eb84 100644 --- a/public/src/admin/general/social.js +++ b/public/src/admin/settings/social.js @@ -1,7 +1,7 @@ 'use strict'; -define('admin/general/social', [], function () { +define('admin/settings/social', [], function () { var social = {}; social.init = function () { @@ -18,7 +18,7 @@ define('admin/general/social', [], function () { return app.alertError(err); } - app.alertSuccess('[[admin/general/social:save-success]]'); + app.alertSuccess('[[admin/settings/social:save-success]]'); }); }); }; diff --git a/public/src/admin/general/sounds.js b/public/src/admin/settings/sounds.js similarity index 75% rename from public/src/admin/general/sounds.js rename to public/src/admin/settings/sounds.js index 4c7376ce59..d78ec566d0 100644 --- a/public/src/admin/general/sounds.js +++ b/public/src/admin/settings/sounds.js @@ -1,7 +1,7 @@ 'use strict'; -define('admin/general/sounds', ['sounds', 'settings', 'admin/settings'], function (Sounds, Settings, AdminSettings) { +define('admin/settings/sounds', ['sounds', 'settings', 'admin/settings'], function (Sounds, Settings, AdminSettings) { var SoundsAdmin = {}; SoundsAdmin.init = function () { diff --git a/src/admin/search.js b/src/admin/search.js index ebb6d9db4a..19ef71fd63 100644 --- a/src/admin/search.js +++ b/src/admin/search.js @@ -137,7 +137,7 @@ function initDict(language, callback) { var title = namespace; if (/admin\/general\/dashboard$/.test(title)) { - title = '[[admin/menu:general/dashboard]]'; + title = '[[admin/menu:dashboard]]'; } else { title = title.match(/admin\/(.+?)\/(.+?)$/); title = '[[admin/menu:section-' + diff --git a/src/controllers/admin.js b/src/controllers/admin.js index 267e1f9e6d..773745c97d 100644 --- a/src/controllers/admin.js +++ b/src/controllers/admin.js @@ -22,13 +22,8 @@ var adminController = { database: require('./admin/database'), cache: require('./admin/cache'), plugins: require('./admin/plugins'), - languages: require('./admin/languages'), settings: require('./admin/settings'), logger: require('./admin/logger'), - sounds: require('./admin/sounds'), - homepage: require('./admin/homepage'), - navigation: require('./admin/navigation'), - social: require('./admin/social'), themes: require('./admin/themes'), users: require('./admin/users'), uploads: require('./admin/uploads'), diff --git a/src/controllers/admin/dashboard.js b/src/controllers/admin/dashboard.js index 539147d2fb..04a0b78949 100644 --- a/src/controllers/admin/dashboard.js +++ b/src/controllers/admin/dashboard.js @@ -24,7 +24,7 @@ dashboardController.get = async function (req, res) { ]); const version = nconf.get('version'); - res.render('admin/general/dashboard', { + res.render('admin/dashboard', { version: version, lookupFailed: latestVersion === null, latestVersion: latestVersion, @@ -41,14 +41,14 @@ async function getNotices() { const notices = [ { done: !meta.reloadRequired, - doneText: '[[admin/general/dashboard:restart-not-required]]', - notDoneText: '[[admin/general/dashboard:restart-required]]', + doneText: '[[admin/dashboard:restart-not-required]]', + notDoneText: '[[admin/dashboard:restart-required]]', }, { done: plugins.hasListeners('filter:search.query'), - doneText: '[[admin/general/dashboard:search-plugin-installed]]', - notDoneText: '[[admin/general/dashboard:search-plugin-not-installed]]', - tooltip: '[[admin/general/dashboard:search-plugin-tooltip]]', + doneText: '[[admin/dashboard:search-plugin-installed]]', + notDoneText: '[[admin/dashboard:search-plugin-not-installed]]', + tooltip: '[[admin/dashboard:search-plugin-tooltip]]', link: '/admin/extend/plugins', }, ]; @@ -56,7 +56,7 @@ async function getNotices() { if (global.env !== 'production') { notices.push({ done: false, - notDoneText: '[[admin/general/dashboard:running-in-development]]', + notDoneText: '[[admin/dashboard:running-in-development]]', }); } @@ -120,10 +120,10 @@ async function getStats() { getStatsForSet('posts:pid', 'postCount'), getStatsForSet('topics:tid', 'topicCount'), ]); - results[0].name = '[[admin/general/dashboard:unique-visitors]]'; - results[1].name = '[[admin/general/dashboard:new-users]]'; - results[2].name = '[[admin/general/dashboard:posts]]'; - results[3].name = '[[admin/general/dashboard:topics]]'; + results[0].name = '[[admin/dashboard:unique-visitors]]'; + results[1].name = '[[admin/dashboard:new-users]]'; + results[2].name = '[[admin/dashboard:posts]]'; + results[3].name = '[[admin/dashboard:topics]]'; cache.set('admin:stats', results, 600000); return results; } diff --git a/src/controllers/admin/homepage.js b/src/controllers/admin/homepage.js deleted file mode 100644 index 30bbc1855c..0000000000 --- a/src/controllers/admin/homepage.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -const helpers = require('../helpers'); - -const homePageController = module.exports; - -homePageController.get = async function (req, res) { - const routes = await helpers.getHomePageRoutes(req.uid); - res.render('admin/general/homepage', { routes: routes }); -}; diff --git a/src/controllers/admin/languages.js b/src/controllers/admin/languages.js deleted file mode 100644 index 3fc85ed341..0000000000 --- a/src/controllers/admin/languages.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -const languages = require('../../languages'); -const meta = require('../../meta'); - -const languagesController = module.exports; - -languagesController.get = async function (req, res) { - const languageData = await languages.list(); - languageData.forEach(function (language) { - language.selected = language.code === meta.config.defaultLang; - }); - - res.render('admin/general/languages', { - languages: languageData, - autoDetectLang: meta.config.autoDetectLang, - }); -}; diff --git a/src/controllers/admin/navigation.js b/src/controllers/admin/navigation.js deleted file mode 100644 index 7dae04991c..0000000000 --- a/src/controllers/admin/navigation.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - - -const navigationAdmin = require('../../navigation/admin'); -const groups = require('../../groups'); - -const navigationController = module.exports; - -navigationController.get = async function (req, res) { - const [admin, allGroups] = await Promise.all([ - navigationAdmin.getAdmin(), - groups.getNonPrivilegeGroups('groups:createtime', 0, -1), - ]); - - allGroups.sort((a, b) => b.system - a.system); - - admin.groups = allGroups.map(group => ({ name: group.name, displayName: group.displayName })); - admin.enabled.forEach(function (enabled, index) { - enabled.index = index; - enabled.selected = index === 0; - - enabled.groups = admin.groups.map(function (group) { - return { - displayName: group.displayName, - selected: enabled.groups.includes(group.name), - }; - }); - }); - - admin.available.forEach(function (available) { - available.groups = admin.groups; - }); - - admin.navigation = admin.enabled.slice(); - - res.render('admin/general/navigation', admin); -}; diff --git a/src/controllers/admin/settings.js b/src/controllers/admin/settings.js index 461ef014f7..f7b0d529e7 100644 --- a/src/controllers/admin/settings.js +++ b/src/controllers/admin/settings.js @@ -4,25 +4,21 @@ const meta = require('../../meta'); const emailer = require('../../emailer'); const notifications = require('../../notifications'); const groups = require('../../groups'); +const languages = require('../../languages'); +const plugins = require('../../plugins'); +const navigationAdmin = require('../../navigation/admin'); +const social = require('../../social'); +const helpers = require('../helpers'); const settingsController = module.exports; -settingsController.get = async function (req, res, next) { - const term = req.params.term ? req.params.term : 'general'; - - if (term === 'email') { - await renderEmail(req, res, next); - } else if (term === 'user') { - await renderUser(req, res, next); - } else if (term === 'post') { - await renderPost(req, res, next); - } else { - res.render('admin/settings/' + term); - } +settingsController.get = async function (req, res) { + const term = req.params.term || 'general'; + res.render('admin/settings/' + term); }; -async function renderEmail(req, res) { +settingsController.email = async (req, res) => { const emails = await emailer.getTemplates(meta.config); res.render('admin/settings/email', { @@ -30,9 +26,9 @@ async function renderEmail(req, res) { sendable: emails.filter(e => !e.path.includes('_plaintext') && !e.path.includes('partials')), services: emailer.listServices(), }); -} +}; -async function renderUser(req, res) { +settingsController.user = async (req, res) => { const notificationTypes = await notifications.getAllNotificationTypes(); const notificationSettings = notificationTypes.map(function (type) { return { @@ -43,11 +39,97 @@ async function renderUser(req, res) { res.render('admin/settings/user', { notificationSettings: notificationSettings, }); -} +}; -async function renderPost(req, res) { +settingsController.post = async (req, res) => { const groupData = await groups.getNonPrivilegeGroups('groups:createtime', 0, -1); res.render('admin/settings/post', { groupsExemptFromPostQueue: groupData, }); -} +}; + +settingsController.languages = async function (req, res) { + const languageData = await languages.list(); + languageData.forEach(function (language) { + language.selected = language.code === meta.config.defaultLang; + }); + + res.render('admin/settings/languages', { + languages: languageData, + autoDetectLang: meta.config.autoDetectLang, + }); +}; + +settingsController.sounds = async function (req, res) { + const types = [ + 'notification', + 'chat-incoming', + 'chat-outgoing', + ]; + const settings = await meta.configs.getFields(types) || {}; + var output = {}; + + types.forEach(function (type) { + var soundpacks = plugins.soundpacks.map(function (pack) { + var sounds = Object.keys(pack.sounds).map(function (soundName) { + var value = pack.name + ' | ' + soundName; + return { + name: soundName, + value: value, + selected: value === settings[type], + }; + }); + + return { + name: pack.name, + sounds: sounds, + }; + }); + + output[type + '-sound'] = soundpacks; + }); + + res.render('admin/settings/sounds', output); +}; + +settingsController.navigation = async function (req, res) { + const [admin, allGroups] = await Promise.all([ + navigationAdmin.getAdmin(), + groups.getNonPrivilegeGroups('groups:createtime', 0, -1), + ]); + + allGroups.sort((a, b) => b.system - a.system); + + admin.groups = allGroups.map(group => ({ name: group.name, displayName: group.displayName })); + admin.enabled.forEach(function (enabled, index) { + enabled.index = index; + enabled.selected = index === 0; + + enabled.groups = admin.groups.map(function (group) { + return { + displayName: group.displayName, + selected: enabled.groups.includes(group.name), + }; + }); + }); + + admin.available.forEach(function (available) { + available.groups = admin.groups; + }); + + admin.navigation = admin.enabled.slice(); + + res.render('admin/settings/navigation', admin); +}; + +settingsController.homepage = async function (req, res) { + const routes = await helpers.getHomePageRoutes(req.uid); + res.render('admin/settings/homepage', { routes: routes }); +}; + +settingsController.social = async function (req, res) { + const posts = await social.getPostSharing(); + res.render('admin/settings/social', { + posts: posts, + }); +}; diff --git a/src/controllers/admin/social.js b/src/controllers/admin/social.js deleted file mode 100644 index d08bf67f7d..0000000000 --- a/src/controllers/admin/social.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -const social = require('../../social'); - -const socialController = module.exports; - -socialController.get = async function (req, res) { - const posts = await social.getPostSharing(); - res.render('admin/general/social', { - posts: posts, - }); -}; diff --git a/src/controllers/admin/sounds.js b/src/controllers/admin/sounds.js deleted file mode 100644 index ab82009596..0000000000 --- a/src/controllers/admin/sounds.js +++ /dev/null @@ -1,38 +0,0 @@ -'use strict'; - -const plugins = require('../../plugins'); -const meta = require('../../meta'); - -const soundsController = module.exports; - -soundsController.get = async function (req, res) { - const types = [ - 'notification', - 'chat-incoming', - 'chat-outgoing', - ]; - const settings = await meta.configs.getFields(types) || {}; - var output = {}; - - types.forEach(function (type) { - var soundpacks = plugins.soundpacks.map(function (pack) { - var sounds = Object.keys(pack.sounds).map(function (soundName) { - var value = pack.name + ' | ' + soundName; - return { - name: soundName, - value: value, - selected: value === settings[type], - }; - }); - - return { - name: pack.name, - sounds: sounds, - }; - }); - - output[type + '-sound'] = soundpacks; - }); - - res.render('admin/general/sounds', output); -}; diff --git a/src/routes/admin.js b/src/routes/admin.js index 7e8f2ccbc5..9130b002ea 100644 --- a/src/routes/admin.js +++ b/src/routes/admin.js @@ -7,12 +7,7 @@ module.exports = function (app, middleware, controllers) { helpers.setupAdminPageRoute(app, '/admin', middleware, middlewares, controllers.admin.dashboard.get); - helpers.setupAdminPageRoute(app, '/admin/general/dashboard', middleware, middlewares, controllers.admin.dashboard.get); - helpers.setupAdminPageRoute(app, '/admin/general/languages', middleware, middlewares, controllers.admin.languages.get); - helpers.setupAdminPageRoute(app, '/admin/general/sounds', middleware, middlewares, controllers.admin.sounds.get); - helpers.setupAdminPageRoute(app, '/admin/general/navigation', middleware, middlewares, controllers.admin.navigation.get); - helpers.setupAdminPageRoute(app, '/admin/general/homepage', middleware, middlewares, controllers.admin.homepage.get); - helpers.setupAdminPageRoute(app, '/admin/general/social', middleware, middlewares, controllers.admin.social.get); + helpers.setupAdminPageRoute(app, '/admin/dashboard', middleware, middlewares, controllers.admin.dashboard.get); helpers.setupAdminPageRoute(app, '/admin/manage/categories', middleware, middlewares, controllers.admin.categories.getAll); helpers.setupAdminPageRoute(app, '/admin/manage/categories/:category_id', middleware, middlewares, controllers.admin.categories.get); @@ -43,6 +38,14 @@ module.exports = function (app, middleware, controllers) { helpers.setupAdminPageRoute(app, '/admin/manage/uploads', middleware, middlewares, controllers.admin.uploads.get); helpers.setupAdminPageRoute(app, '/admin/manage/digest', middleware, middlewares, controllers.admin.digest.get); + helpers.setupAdminPageRoute(app, '/admin/settings/email', middleware, middlewares, controllers.admin.settings.email); + helpers.setupAdminPageRoute(app, '/admin/settings/user', middleware, middlewares, controllers.admin.settings.user); + helpers.setupAdminPageRoute(app, '/admin/settings/post', middleware, middlewares, controllers.admin.settings.post); + helpers.setupAdminPageRoute(app, '/admin/settings/languages', middleware, middlewares, controllers.admin.settings.languages); + helpers.setupAdminPageRoute(app, '/admin/settings/sounds', middleware, middlewares, controllers.admin.settings.sounds); + helpers.setupAdminPageRoute(app, '/admin/settings/navigation', middleware, middlewares, controllers.admin.settings.navigation); + helpers.setupAdminPageRoute(app, '/admin/settings/homepage', middleware, middlewares, controllers.admin.settings.homepage); + helpers.setupAdminPageRoute(app, '/admin/settings/social', middleware, middlewares, controllers.admin.settings.social); helpers.setupAdminPageRoute(app, '/admin/settings/:term?', middleware, middlewares, controllers.admin.settings.get); helpers.setupAdminPageRoute(app, '/admin/appearance/:term?', middleware, middlewares, controllers.admin.appearance.get); diff --git a/src/views/admin/general/dashboard.tpl b/src/views/admin/dashboard.tpl similarity index 67% rename from src/views/admin/general/dashboard.tpl rename to src/views/admin/dashboard.tpl index 5ca72fb616..781d4ef782 100644 --- a/src/views/admin/general/dashboard.tpl +++ b/src/views/admin/dashboard.tpl @@ -2,7 +2,7 @@
- [[admin/general/dashboard:forum-traffic]] + [[admin/dashboard:forum-traffic]] @@ -40,16 +40,16 @@ - [[admin/general/dashboard:stats.yesterday]] - [[admin/general/dashboard:stats.today]] + [[admin/dashboard:stats.yesterday]] + [[admin/dashboard:stats.today]] - [[admin/general/dashboard:stats.last-week]] - [[admin/general/dashboard:stats.this-week]] + [[admin/dashboard:stats.last-week]] + [[admin/dashboard:stats.this-week]] - [[admin/general/dashboard:stats.last-month]] - [[admin/general/dashboard:stats.this-month]] + [[admin/dashboard:stats.last-month]] + [[admin/dashboard:stats.this-month]] - [[admin/general/dashboard:stats.all]] + [[admin/dashboard:stats.all]] @@ -79,13 +79,13 @@
-
[[admin/general/dashboard:anonymous-registered-users]]
+
[[admin/dashboard:anonymous-registered-users]]
    -
  • () [[admin/general/dashboard:registered]]
  • -
  • () [[admin/general/dashboard:anonymous]]
  • +
  • () [[admin/dashboard:registered]]
  • +
  • () [[admin/dashboard:anonymous]]
@@ -94,16 +94,16 @@
-
[[admin/general/dashboard:user-presence]]
+
[[admin/dashboard:user-presence]]
    -
  • () [[admin/general/dashboard:reading-posts]]
  • -
  • () [[admin/general/dashboard:on-categories]]
  • -
  • () [[admin/general/dashboard:browsing-topics]]
  • -
  • () [[admin/general/dashboard:recent]]
  • -
  • () [[admin/general/dashboard:unread]]
  • +
  • () [[admin/dashboard:reading-posts]]
  • +
  • () [[admin/dashboard:on-categories]]
  • +
  • () [[admin/dashboard:browsing-topics]]
  • +
  • () [[admin/dashboard:recent]]
  • +
  • () [[admin/dashboard:unread]]
@@ -111,7 +111,7 @@
-
[[admin/general/dashboard:high-presence-topics]]
+
[[admin/dashboard:high-presence-topics]]
@@ -125,74 +125,74 @@
-
[[admin/general/dashboard:control-panel]]
+
[[admin/dashboard:control-panel]]

- - + +

- [[admin/general/dashboard:last-restarted-by]]
+ [[admin/dashboard:last-restarted-by]]
{lastrestart.user.username}

- [[admin/general/dashboard:restart-warning]] + [[admin/dashboard:restart-warning]] - [[admin/general/dashboard:restart-disabled]] + [[admin/dashboard:restart-disabled]]

- [[admin/general/dashboard:maintenance-mode]] + [[admin/dashboard:maintenance-mode]]


- [[admin/general/dashboard:realtime-chart-updates]] OFF + [[admin/dashboard:realtime-chart-updates]] OFF
-
[[admin/general/dashboard:active-users]]
+
[[admin/dashboard:active-users]]
-
[[admin/general/dashboard:updates]]
+
[[admin/dashboard:updates]]
-

[[admin/general/dashboard:running-version, {version}]]

+

[[admin/dashboard:running-version, {version}]]

- [[admin/general/dashboard:latest-lookup-failed]] + [[admin/dashboard:latest-lookup-failed]] - [[admin/general/dashboard:prerelease-upgrade-available, {latestVersion}]] + [[admin/dashboard:prerelease-upgrade-available, {latestVersion}]] - [[admin/general/dashboard:upgrade-available, {latestVersion}]] + [[admin/dashboard:upgrade-available, {latestVersion}]] - [[admin/general/dashboard:prerelease-warning]] + [[admin/dashboard:prerelease-warning]] - [[admin/general/dashboard:up-to-date]] + [[admin/dashboard:up-to-date]]

- [[admin/general/dashboard:keep-updated]] + [[admin/dashboard:keep-updated]]

-
[[admin/general/dashboard:notices]]
+
[[admin/dashboard:notices]]
diff --git a/src/views/admin/general/languages.tpl b/src/views/admin/general/languages.tpl deleted file mode 100644 index 747c5d43af..0000000000 --- a/src/views/admin/general/languages.tpl +++ /dev/null @@ -1,36 +0,0 @@ -
-
-
[[admin/general/languages:language-settings]]
-
-

- [[admin/general/languages:description]] -

- -
-
- - -
-
- -
-
-
- -
-
-
-
-
-
- - \ No newline at end of file diff --git a/src/views/admin/partials/menu.tpl b/src/views/admin/partials/menu.tpl index b236cf99de..31f557308f 100644 --- a/src/views/admin/partials/menu.tpl +++ b/src/views/admin/partials/menu.tpl @@ -9,18 +9,6 @@ - -