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]]
- disabled>[[admin/general/dashboard:restart]]
- disabled>[[admin/general/dashboard:rebuild-and-restart]]
+ disabled>[[admin/dashboard:restart]]
+ disabled>[[admin/dashboard:rebuild-and-restart]]
- [[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:description]]
-
-
-
-
-
-
-
-
-
-
- save
-
\ 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 @@
-
-