refactor: remove general menu from ACP (#8347)

* refactor: remove general menu from ACP

* fix: incorrect translation keys, fixed tests
v1.18.x
Julian Lam 5 years ago committed by GitHub
parent d1df08269f
commit a51fff8bd1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,11 +1,6 @@
{ {
"dashboard": "Dashboard",
"section-general": "General", "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", "section-manage": "Manage",
"manage/categories": "Categories", "manage/categories": "Categories",
@ -22,17 +17,22 @@
"section-settings": "Settings", "section-settings": "Settings",
"settings/general": "General", "settings/general": "General",
"settings/homepage": "Home Page",
"settings/navigation": "Navigation",
"settings/reputation": "Reputation", "settings/reputation": "Reputation",
"settings/email": "Email", "settings/email": "Email",
"settings/user": "User", "settings/user": "User",
"settings/group": "Group", "settings/group": "Group",
"settings/guest": "Guests", "settings/guest": "Guests",
"settings/uploads": "Uploads", "settings/uploads": "Uploads",
"settings/languages": "Languages",
"settings/post": "Post", "settings/post": "Post",
"settings/chat": "Chat", "settings/chat": "Chat",
"settings/pagination": "Pagination", "settings/pagination": "Pagination",
"settings/tags": "Tags", "settings/tags": "Tags",
"settings/notifications": "Notifications", "settings/notifications": "Notifications",
"settings/sounds": "Sounds",
"settings/social": "Social",
"settings/cookies": "Cookies", "settings/cookies": "Cookies",
"settings/web-crawler": "Web Crawler", "settings/web-crawler": "Web Crawler",
"settings/sockets": "Sockets", "settings/sockets": "Sockets",

@ -260,7 +260,7 @@ paths:
imageClass: imageClass:
type: string type: string
- $ref: components/schemas/CommonProps.yaml#/CommonProps - $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/general/dashboard: /api/admin/dashboard:
get: get:
tags: tags:
- admin - admin
@ -355,7 +355,7 @@ paths:
type: string type: string
description: An ISO 8601 formatted date string (complementing `timestamp`) description: An ISO 8601 formatted date string (complementing `timestamp`)
- $ref: components/schemas/CommonProps.yaml#/CommonProps - $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/general/languages: /api/admin/settings/languages:
get: get:
tags: tags:
- admin - admin
@ -391,7 +391,7 @@ paths:
type: integer type: integer
description: Whether the forum will attempt to guess language based on browser's `Accept-Language` header description: Whether the forum will attempt to guess language based on browser's `Accept-Language` header
- $ref: components/schemas/CommonProps.yaml#/CommonProps - $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/general/sounds: /api/admin/settings/sounds:
get: get:
tags: tags:
- admin - admin
@ -460,7 +460,7 @@ paths:
selected: selected:
type: boolean type: boolean
- $ref: components/schemas/CommonProps.yaml#/CommonProps - $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/general/navigation: /api/admin/settings/navigation:
get: get:
tags: tags:
- admin - admin
@ -568,7 +568,7 @@ paths:
type: array type: array
description: A clone of `enabled` description: A clone of `enabled`
- $ref: components/schemas/CommonProps.yaml#/CommonProps - $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/general/homepage: /api/admin/settings/homepage:
get: get:
tags: tags:
- admin - admin
@ -592,7 +592,7 @@ paths:
name: name:
type: string type: string
- $ref: components/schemas/CommonProps.yaml#/CommonProps - $ref: components/schemas/CommonProps.yaml#/CommonProps
/api/admin/general/social: /api/admin/settings/social:
get: get:
tags: tags:
- admin - admin

@ -71,7 +71,7 @@
// If index is requested, load the dashboard // If index is requested, load the dashboard
if (url === 'admin') { if (url === 'admin') {
url = 'admin/general/dashboard'; url = 'admin/dashboard';
} }
url = [config.relative_path, url].join('/'); url = [config.relative_path, url].join('/');
@ -100,12 +100,17 @@
pageTitle = '[[admin/menu:section-plugins]] > ' + mainTitle; pageTitle = '[[admin/menu:section-plugins]] > ' + mainTitle;
} else { } else {
var matches = url.match(/admin\/(.+?)\/(.+?)$/); var matches = url.match(/admin\/(.+?)\/(.+?)$/);
mainTitle = '[[admin/menu:' + matches[1] + '/' + matches[2] + ']]'; if (matches) {
pageTitle = '[[admin/menu:section-' + mainTitle = '[[admin/menu:' + matches[1] + '/' + matches[2] + ']]';
(matches[1] === 'development' ? 'advanced' : matches[1]) + pageTitle = '[[admin/menu:section-' +
']]' + (matches[2] ? (' > ' + mainTitle) : ''); (matches[1] === 'development' ? 'advanced' : matches[1]) +
if (matches[2] === 'settings') { ']]' + (matches[2] ? (' > ' + mainTitle) : '');
mainTitle = translator.compile('admin/menu:settings.page-title', mainTitle); if (matches[2] === 'settings') {
mainTitle = translator.compile('admin/menu:settings.page-title', mainTitle);
}
} else {
mainTitle = '[[admin/menu:dashboard]]';
pageTitle = '[[admin/menu:dashboard]]';
} }
} }

@ -1,7 +1,7 @@
'use strict'; '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 Admin = {};
var intervals = { var intervals = {
rooms: false, rooms: false,
@ -64,19 +64,19 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress'
var html = '<div class="text-center pull-left">' + var html = '<div class="text-center pull-left">' +
'<span class="formatted-number">' + data.onlineRegisteredCount + '</span>' + '<span class="formatted-number">' + data.onlineRegisteredCount + '</span>' +
'<div class="stat">[[admin/general/dashboard:active-users.users]]</div>' + '<div class="stat">[[admin/dashboard:active-users.users]]</div>' +
'</div>' + '</div>' +
'<div class="text-center pull-left">' + '<div class="text-center pull-left">' +
'<span class="formatted-number">' + data.onlineGuestCount + '</span>' + '<span class="formatted-number">' + data.onlineGuestCount + '</span>' +
'<div class="stat">[[admin/general/dashboard:active-users.guests]]</div>' + '<div class="stat">[[admin/dashboard:active-users.guests]]</div>' +
'</div>' + '</div>' +
'<div class="text-center pull-left">' + '<div class="text-center pull-left">' +
'<span class="formatted-number">' + (data.onlineRegisteredCount + data.onlineGuestCount) + '</span>' + '<span class="formatted-number">' + (data.onlineRegisteredCount + data.onlineGuestCount) + '</span>' +
'<div class="stat">[[admin/general/dashboard:active-users.total]]</div>' + '<div class="stat">[[admin/dashboard:active-users.total]]</div>' +
'</div>' + '</div>' +
'<div class="text-center pull-left">' + '<div class="text-center pull-left">' +
'<span class="formatted-number">' + data.socketCount + '</span>' + '<span class="formatted-number">' + data.socketCount + '</span>' +
'<div class="stat">[[admin/general/dashboard:active-users.connections]]</div>' + '<div class="stat">[[admin/dashboard:active-users.connections]]</div>' +
'</div>'; '</div>';
updateRegisteredGraph(data.onlineRegisteredCount, data.onlineGuestCount); updateRegisteredGraph(data.onlineRegisteredCount, data.onlineGuestCount);
@ -144,18 +144,18 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress'
var t = translator.Translator.create(); var t = translator.Translator.create();
Promise.all([ Promise.all([
t.translateKey('admin/general/dashboard:graphs.page-views', []), t.translateKey('admin/dashboard:graphs.page-views', []),
t.translateKey('admin/general/dashboard:graphs.page-views-registered', []), t.translateKey('admin/dashboard:graphs.page-views-registered', []),
t.translateKey('admin/general/dashboard:graphs.page-views-guest', []), t.translateKey('admin/dashboard:graphs.page-views-guest', []),
t.translateKey('admin/general/dashboard:graphs.page-views-bot', []), t.translateKey('admin/dashboard:graphs.page-views-bot', []),
t.translateKey('admin/general/dashboard:graphs.unique-visitors', []), t.translateKey('admin/dashboard:graphs.unique-visitors', []),
t.translateKey('admin/general/dashboard:graphs.registered-users', []), t.translateKey('admin/dashboard:graphs.registered-users', []),
t.translateKey('admin/general/dashboard:graphs.anonymous-users', []), t.translateKey('admin/dashboard:graphs.anonymous-users', []),
t.translateKey('admin/general/dashboard:on-categories', []), t.translateKey('admin/dashboard:on-categories', []),
t.translateKey('admin/general/dashboard:reading-posts', []), t.translateKey('admin/dashboard:reading-posts', []),
t.translateKey('admin/general/dashboard:browsing-topics', []), t.translateKey('admin/dashboard:browsing-topics', []),
t.translateKey('admin/general/dashboard:recent', []), t.translateKey('admin/dashboard:recent', []),
t.translateKey('admin/general/dashboard:unread', []), t.translateKey('admin/dashboard:unread', []),
]).then(function (translations) { ]).then(function (translations) {
var data = { var data = {
labels: trafficLabels, labels: trafficLabels,
@ -334,7 +334,7 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress'
$(this).addClass('active'); $(this).addClass('active');
require(['translator'], function (translator) { 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); $('[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) { Benchpress.parse('admin/partials/pageviews-range-select', {}, function (html) {
var modal = bootbox.dialog({ var modal = bootbox.dialog({
title: '[[admin/general/dashboard:page-views-custom]]', title: '[[admin/dashboard:page-views-custom]]',
message: html, message: html,
buttons: { buttons: {
submit: { submit: {
@ -501,7 +501,7 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress'
function updateTopicsGraph(topics) { function updateTopicsGraph(topics) {
if (!topics.length) { if (!topics.length) {
topics = [{ topics = [{
title: '[[admin/general/dashboard:no-users-browsing]]', title: '[[admin/dashboard:no-users-browsing]]',
count: 1, count: 1,
}]; }];
} }

@ -1,12 +0,0 @@
'use strict';
define('admin/general/languages', ['admin/settings'], function (Settings) {
var Languages = {};
Languages.init = function () {
Settings.prepare();
};
return Languages;
});

@ -122,7 +122,7 @@ define('admin/settings', ['uploader'], function (uploader) {
accept: uploadBtn.attr('data-accept'), accept: uploadBtn.attr('data-accept'),
}, function (image) { }, function (image) {
// need to move these into template, ex data-callback // need to move these into template, ex data-callback
if (ajaxify.currentPage === 'admin/general/sounds') { if (ajaxify.currentPage === 'admin/settings/sounds') {
ajaxify.refresh(); ajaxify.refresh();
} else { } else {
$('#' + uploadBtn.attr('data-target')).val(image); $('#' + uploadBtn.attr('data-target')).val(image);

@ -1,7 +1,7 @@
'use strict'; 'use strict';
define('admin/general/homepage', ['admin/settings'], function () { define('admin/settings/homepage', ['admin/settings'], function () {
function toggleCustomRoute() { function toggleCustomRoute() {
if ($('[data-field="homePageRoute"]').val()) { if ($('[data-field="homePageRoute"]').val()) {
$('#homePageCustom').hide(); $('#homePageCustom').hide();

@ -1,7 +1,7 @@
'use strict'; '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 navigation = {};
var available; var available;
@ -70,7 +70,7 @@ define('admin/general/navigation', ['translator', 'iconSelect', 'benchpress', 'j
data.title = translator.escape(data.title); data.title = translator.escape(data.title);
data.text = translator.escape(data.text); data.text = translator.escape(data.text);
data.groups = ajaxify.data.groups; 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) { translator.translate(li, function (li) {
li = $(translator.unescape(li)); li = $(translator.unescape(li));
el.after(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) { translator.translate(li, function (li) {
li = $(translator.unescape(li)); li = $(translator.unescape(li));
$('#enabled').append(li); $('#enabled').append(li);
@ -146,7 +146,7 @@ define('admin/general/navigation', ['translator', 'iconSelect', 'benchpress', 'j
function toggle() { function toggle() {
var btn = $(this); var btn = $(this);
var disabled = btn.hasClass('btn-success'); 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.toggleClass('btn-warning').toggleClass('btn-success').html(html);
btn.parents('li').find('[name="enabled"]').val(disabled ? 'on' : ''); btn.parents('li').find('[name="enabled"]').val(disabled ? 'on' : '');
}); });

@ -1,7 +1,7 @@
'use strict'; 'use strict';
define('admin/general/social', [], function () { define('admin/settings/social', [], function () {
var social = {}; var social = {};
social.init = function () { social.init = function () {
@ -18,7 +18,7 @@ define('admin/general/social', [], function () {
return app.alertError(err); return app.alertError(err);
} }
app.alertSuccess('[[admin/general/social:save-success]]'); app.alertSuccess('[[admin/settings/social:save-success]]');
}); });
}); });
}; };

@ -1,7 +1,7 @@
'use strict'; '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 = {}; var SoundsAdmin = {};
SoundsAdmin.init = function () { SoundsAdmin.init = function () {

@ -137,7 +137,7 @@ function initDict(language, callback) {
var title = namespace; var title = namespace;
if (/admin\/general\/dashboard$/.test(title)) { if (/admin\/general\/dashboard$/.test(title)) {
title = '[[admin/menu:general/dashboard]]'; title = '[[admin/menu:dashboard]]';
} else { } else {
title = title.match(/admin\/(.+?)\/(.+?)$/); title = title.match(/admin\/(.+?)\/(.+?)$/);
title = '[[admin/menu:section-' + title = '[[admin/menu:section-' +

@ -22,13 +22,8 @@ var adminController = {
database: require('./admin/database'), database: require('./admin/database'),
cache: require('./admin/cache'), cache: require('./admin/cache'),
plugins: require('./admin/plugins'), plugins: require('./admin/plugins'),
languages: require('./admin/languages'),
settings: require('./admin/settings'), settings: require('./admin/settings'),
logger: require('./admin/logger'), logger: require('./admin/logger'),
sounds: require('./admin/sounds'),
homepage: require('./admin/homepage'),
navigation: require('./admin/navigation'),
social: require('./admin/social'),
themes: require('./admin/themes'), themes: require('./admin/themes'),
users: require('./admin/users'), users: require('./admin/users'),
uploads: require('./admin/uploads'), uploads: require('./admin/uploads'),

@ -24,7 +24,7 @@ dashboardController.get = async function (req, res) {
]); ]);
const version = nconf.get('version'); const version = nconf.get('version');
res.render('admin/general/dashboard', { res.render('admin/dashboard', {
version: version, version: version,
lookupFailed: latestVersion === null, lookupFailed: latestVersion === null,
latestVersion: latestVersion, latestVersion: latestVersion,
@ -41,14 +41,14 @@ async function getNotices() {
const notices = [ const notices = [
{ {
done: !meta.reloadRequired, done: !meta.reloadRequired,
doneText: '[[admin/general/dashboard:restart-not-required]]', doneText: '[[admin/dashboard:restart-not-required]]',
notDoneText: '[[admin/general/dashboard:restart-required]]', notDoneText: '[[admin/dashboard:restart-required]]',
}, },
{ {
done: plugins.hasListeners('filter:search.query'), done: plugins.hasListeners('filter:search.query'),
doneText: '[[admin/general/dashboard:search-plugin-installed]]', doneText: '[[admin/dashboard:search-plugin-installed]]',
notDoneText: '[[admin/general/dashboard:search-plugin-not-installed]]', notDoneText: '[[admin/dashboard:search-plugin-not-installed]]',
tooltip: '[[admin/general/dashboard:search-plugin-tooltip]]', tooltip: '[[admin/dashboard:search-plugin-tooltip]]',
link: '/admin/extend/plugins', link: '/admin/extend/plugins',
}, },
]; ];
@ -56,7 +56,7 @@ async function getNotices() {
if (global.env !== 'production') { if (global.env !== 'production') {
notices.push({ notices.push({
done: false, 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('posts:pid', 'postCount'),
getStatsForSet('topics:tid', 'topicCount'), getStatsForSet('topics:tid', 'topicCount'),
]); ]);
results[0].name = '[[admin/general/dashboard:unique-visitors]]'; results[0].name = '[[admin/dashboard:unique-visitors]]';
results[1].name = '[[admin/general/dashboard:new-users]]'; results[1].name = '[[admin/dashboard:new-users]]';
results[2].name = '[[admin/general/dashboard:posts]]'; results[2].name = '[[admin/dashboard:posts]]';
results[3].name = '[[admin/general/dashboard:topics]]'; results[3].name = '[[admin/dashboard:topics]]';
cache.set('admin:stats', results, 600000); cache.set('admin:stats', results, 600000);
return results; return results;
} }

@ -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 });
};

@ -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,
});
};

@ -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);
};

@ -4,25 +4,21 @@ const meta = require('../../meta');
const emailer = require('../../emailer'); const emailer = require('../../emailer');
const notifications = require('../../notifications'); const notifications = require('../../notifications');
const groups = require('../../groups'); 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; const settingsController = module.exports;
settingsController.get = async function (req, res, next) { settingsController.get = async function (req, res) {
const term = req.params.term ? req.params.term : 'general'; const term = req.params.term || 'general';
res.render('admin/settings/' + term);
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);
}
}; };
async function renderEmail(req, res) { settingsController.email = async (req, res) => {
const emails = await emailer.getTemplates(meta.config); const emails = await emailer.getTemplates(meta.config);
res.render('admin/settings/email', { 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')), sendable: emails.filter(e => !e.path.includes('_plaintext') && !e.path.includes('partials')),
services: emailer.listServices(), services: emailer.listServices(),
}); });
} };
async function renderUser(req, res) { settingsController.user = async (req, res) => {
const notificationTypes = await notifications.getAllNotificationTypes(); const notificationTypes = await notifications.getAllNotificationTypes();
const notificationSettings = notificationTypes.map(function (type) { const notificationSettings = notificationTypes.map(function (type) {
return { return {
@ -43,11 +39,97 @@ async function renderUser(req, res) {
res.render('admin/settings/user', { res.render('admin/settings/user', {
notificationSettings: notificationSettings, notificationSettings: notificationSettings,
}); });
} };
async function renderPost(req, res) { settingsController.post = async (req, res) => {
const groupData = await groups.getNonPrivilegeGroups('groups:createtime', 0, -1); const groupData = await groups.getNonPrivilegeGroups('groups:createtime', 0, -1);
res.render('admin/settings/post', { res.render('admin/settings/post', {
groupsExemptFromPostQueue: groupData, 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,
});
};

@ -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,
});
};

@ -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);
};

@ -7,12 +7,7 @@ module.exports = function (app, middleware, controllers) {
helpers.setupAdminPageRoute(app, '/admin', middleware, middlewares, controllers.admin.dashboard.get); 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/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/manage/categories', middleware, middlewares, controllers.admin.categories.getAll); 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); 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/uploads', middleware, middlewares, controllers.admin.uploads.get);
helpers.setupAdminPageRoute(app, '/admin/manage/digest', middleware, middlewares, controllers.admin.digest.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/settings/:term?', middleware, middlewares, controllers.admin.settings.get);
helpers.setupAdminPageRoute(app, '/admin/appearance/:term?', middleware, middlewares, controllers.admin.appearance.get); helpers.setupAdminPageRoute(app, '/admin/appearance/:term?', middleware, middlewares, controllers.admin.appearance.get);

@ -2,7 +2,7 @@
<div class="col-lg-9"> <div class="col-lg-9">
<div class="panel panel-default" id="analytics-panel"> <div class="panel panel-default" id="analytics-panel">
<div class="panel-heading"> <div class="panel-heading">
[[admin/general/dashboard:forum-traffic]] [[admin/dashboard:forum-traffic]]
<div class="pull-right"> <div class="pull-right">
<a id="view-as-json" href="{config.relative_path}/api/admin/analytics&type=hourly"><i class="fa fa-terminal"></i></a> <a id="view-as-json" href="{config.relative_path}/api/admin/analytics&type=hourly"><i class="fa fa-terminal"></i></a>
<i class="fa fa-expand"></i> <i class="fa fa-expand"></i>
@ -16,19 +16,19 @@
<div class="row"> <div class="row">
<div class="col-sm-3 hidden-xs text-center pageview-stats"> <div class="col-sm-3 hidden-xs text-center pageview-stats">
<div><strong id="pageViewsThirty">0</strong></div> <div><strong id="pageViewsThirty">0</strong></div>
<div><a href="#" class="updatePageviewsGraph" data-action="updateGraph" data-units="days" data-amount="30">[[admin/general/dashboard:page-views-thirty]]</a></div> <div><a href="#" class="updatePageviewsGraph" data-action="updateGraph" data-units="days" data-amount="30">[[admin/dashboard:page-views-thirty]]</a></div>
</div> </div>
<div class="col-sm-3 text-center pageview-stats"> <div class="col-sm-3 text-center pageview-stats">
<div><strong id="pageViewsSeven">0</strong></div> <div><strong id="pageViewsSeven">0</strong></div>
<div><a href="#" class="updatePageviewsGraph" data-action="updateGraph" data-units="days" data-amount="7">[[admin/general/dashboard:page-views-seven]]</a></div> <div><a href="#" class="updatePageviewsGraph" data-action="updateGraph" data-units="days" data-amount="7">[[admin/dashboard:page-views-seven]]</a></div>
</div> </div>
<div class="col-sm-3 hidden-xs text-center pageview-stats"> <div class="col-sm-3 hidden-xs text-center pageview-stats">
<div><strong id="pageViewsPastDay">0</strong></div> <div><strong id="pageViewsPastDay">0</strong></div>
<div><a href="#" class="updatePageviewsGraph active" data-action="updateGraph" data-units="hours">[[admin/general/dashboard:page-views-last-day]]</a></div> <div><a href="#" class="updatePageviewsGraph active" data-action="updateGraph" data-units="hours">[[admin/dashboard:page-views-last-day]]</a></div>
</div> </div>
<div class="col-sm-3 text-center pageview-stats"> <div class="col-sm-3 text-center pageview-stats">
<div><strong><i class="fa fa-clock-o"></i></strong></div> <div><strong><i class="fa fa-clock-o"></i></strong></div>
<div><a href="#" class="updatePageviewsGraph" data-action="updateGraph" data-units="custom">[[admin/general/dashboard:page-views-custom]]</a></div> <div><a href="#" class="updatePageviewsGraph" data-action="updateGraph" data-units="custom">[[admin/dashboard:page-views-custom]]</a></div>
</div> </div>
</div> </div>
</div> </div>
@ -40,16 +40,16 @@
<thead> <thead>
<tr> <tr>
<th></th> <th></th>
<th class="text-right">[[admin/general/dashboard:stats.yesterday]]</th> <th class="text-right">[[admin/dashboard:stats.yesterday]]</th>
<th class="text-right">[[admin/general/dashboard:stats.today]]</th> <th class="text-right">[[admin/dashboard:stats.today]]</th>
<th></th> <th></th>
<th class="text-right">[[admin/general/dashboard:stats.last-week]]</th> <th class="text-right">[[admin/dashboard:stats.last-week]]</th>
<th class="text-right">[[admin/general/dashboard:stats.this-week]]</th> <th class="text-right">[[admin/dashboard:stats.this-week]]</th>
<th></th> <th></th>
<th class="text-right">[[admin/general/dashboard:stats.last-month]]</th> <th class="text-right">[[admin/dashboard:stats.last-month]]</th>
<th class="text-right">[[admin/general/dashboard:stats.this-month]]</th> <th class="text-right">[[admin/dashboard:stats.this-month]]</th>
<th></th> <th></th>
<th class="text-right">[[admin/general/dashboard:stats.all]]</th> <th class="text-right">[[admin/dashboard:stats.all]]</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -79,13 +79,13 @@
<div class="row"> <div class="row">
<div class="col-lg-4"> <div class="col-lg-4">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading">[[admin/general/dashboard:anonymous-registered-users]]</div> <div class="panel-heading">[[admin/dashboard:anonymous-registered-users]]</div>
<div class="panel-body"> <div class="panel-body">
<div class="graph-container pie-chart legend-down"> <div class="graph-container pie-chart legend-down">
<canvas id="analytics-registered"></canvas> <canvas id="analytics-registered"></canvas>
<ul class="graph-legend" id="analytics-legend"> <ul class="graph-legend" id="analytics-legend">
<li><div class="registered"></div><span>(<span class="count"></span>) [[admin/general/dashboard:registered]]</span></li> <li><div class="registered"></div><span>(<span class="count"></span>) [[admin/dashboard:registered]]</span></li>
<li><div class="anonymous"></div><span>(<span class="count"></span>) [[admin/general/dashboard:anonymous]]</span></li> <li><div class="anonymous"></div><span>(<span class="count"></span>) [[admin/dashboard:anonymous]]</span></li>
</ul> </ul>
</div> </div>
</div> </div>
@ -94,16 +94,16 @@
<div class="col-lg-4"> <div class="col-lg-4">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading">[[admin/general/dashboard:user-presence]]</div> <div class="panel-heading">[[admin/dashboard:user-presence]]</div>
<div class="panel-body"> <div class="panel-body">
<div class="graph-container pie-chart legend-down"> <div class="graph-container pie-chart legend-down">
<canvas id="analytics-presence"></canvas> <canvas id="analytics-presence"></canvas>
<ul class="graph-legend" id="analytics-presence-legend"> <ul class="graph-legend" id="analytics-presence-legend">
<li><div class="reading-posts"></div><span>(<span class="count"></span>) [[admin/general/dashboard:reading-posts]]</span></li> <li><div class="reading-posts"></div><span>(<span class="count"></span>) [[admin/dashboard:reading-posts]]</span></li>
<li><div class="on-categories"></div><span>(<span class="count"></span>) [[admin/general/dashboard:on-categories]]</span></li> <li><div class="on-categories"></div><span>(<span class="count"></span>) [[admin/dashboard:on-categories]]</span></li>
<li><div class="browsing-topics"></div><span>(<span class="count"></span>) [[admin/general/dashboard:browsing-topics]]</span></li> <li><div class="browsing-topics"></div><span>(<span class="count"></span>) [[admin/dashboard:browsing-topics]]</span></li>
<li><div class="recent"></div><span>(<span class="count"></span>) [[admin/general/dashboard:recent]]</span></li> <li><div class="recent"></div><span>(<span class="count"></span>) [[admin/dashboard:recent]]</span></li>
<li><div class="unread"></div><span>(<span class="count"></span>) [[admin/general/dashboard:unread]]</span></li> <li><div class="unread"></div><span>(<span class="count"></span>) [[admin/dashboard:unread]]</span></li>
</ul> </ul>
</div> </div>
</div> </div>
@ -111,7 +111,7 @@
</div> </div>
<div class="col-lg-4"> <div class="col-lg-4">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading">[[admin/general/dashboard:high-presence-topics]]</div> <div class="panel-heading">[[admin/dashboard:high-presence-topics]]</div>
<div class="panel-body"> <div class="panel-body">
<div class="graph-container pie-chart legend-down"> <div class="graph-container pie-chart legend-down">
<canvas id="analytics-topics"></canvas> <canvas id="analytics-topics"></canvas>
@ -125,74 +125,74 @@
<div class="col-lg-3"> <div class="col-lg-3">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading">[[admin/general/dashboard:control-panel]]</div> <div class="panel-heading">[[admin/dashboard:control-panel]]</div>
<div class="panel-body text-center"> <div class="panel-body text-center">
<p> <p>
<button class="btn btn-block btn-warning restart"<!-- IF !canRestart --> disabled<!-- END -->>[[admin/general/dashboard:restart]]</button> <button class="btn btn-block btn-warning restart"<!-- IF !canRestart --> disabled<!-- END -->>[[admin/dashboard:restart]]</button>
<button class="btn btn-block btn-danger rebuild-and-restart"<!-- IF !canRestart --> disabled<!-- END -->>[[admin/general/dashboard:rebuild-and-restart]]</button> <button class="btn btn-block btn-danger rebuild-and-restart"<!-- IF !canRestart --> disabled<!-- END -->>[[admin/dashboard:rebuild-and-restart]]</button>
</p> </p>
<!-- IF lastrestart --> <!-- IF lastrestart -->
<p> <p>
[[admin/general/dashboard:last-restarted-by]]<br /> [[admin/dashboard:last-restarted-by]]<br />
<a href="{config.relative_path}/uid/{lastrestart.uid}"><span class="label label-info">{lastrestart.user.username}</span></a> <span class="timeago" title="{lastrestart.timestampISO}"></span> <a href="{config.relative_path}/uid/{lastrestart.uid}"><span class="label label-info">{lastrestart.user.username}</span></a> <span class="timeago" title="{lastrestart.timestampISO}"></span>
</p> </p>
<!-- ENDIF lastrestart --> <!-- ENDIF lastrestart -->
<p class="<!-- IF canRestart -->help-block<!-- ELSE -->alert alert-warning<!-- END -->"> <p class="<!-- IF canRestart -->help-block<!-- ELSE -->alert alert-warning<!-- END -->">
<!-- IF canRestart --> <!-- IF canRestart -->
[[admin/general/dashboard:restart-warning]] [[admin/dashboard:restart-warning]]
<!-- ELSE --> <!-- ELSE -->
[[admin/general/dashboard:restart-disabled]] [[admin/dashboard:restart-disabled]]
<!-- END --> <!-- END -->
</p> </p>
<p> <p>
<a href="{config.relative_path}/admin/settings/advanced" class="btn btn-info btn-block" data-placement="bottom" data-toggle="tooltip" title="[[admin/general/dashboard:maintenance-mode-title]]">[[admin/general/dashboard:maintenance-mode]]</a> <a href="{config.relative_path}/admin/settings/advanced" class="btn btn-info btn-block" data-placement="bottom" data-toggle="tooltip" title="[[admin/dashboard:maintenance-mode-title]]">[[admin/dashboard:maintenance-mode]]</a>
</p> </p>
<hr /> <hr />
<span id="toggle-realtime">[[admin/general/dashboard:realtime-chart-updates]] <strong>OFF</strong> <i class="fa fa fa-toggle-off pointer"></i></span> <span id="toggle-realtime">[[admin/dashboard:realtime-chart-updates]] <strong>OFF</strong> <i class="fa fa fa-toggle-off pointer"></i></span>
</div> </div>
</div> </div>
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading">[[admin/general/dashboard:active-users]]</div> <div class="panel-heading">[[admin/dashboard:active-users]]</div>
<div class="panel-body"> <div class="panel-body">
<div id="active-users" class="stats"></div> <div id="active-users" class="stats"></div>
</div> </div>
</div> </div>
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading">[[admin/general/dashboard:updates]]</div> <div class="panel-heading">[[admin/dashboard:updates]]</div>
<div class="panel-body"> <div class="panel-body">
<div class="alert <!-- IF lookupFailed -->alert-danger<!-- ELSE --><!-- IF upgradeAvailable -->alert-warning<!-- ELSE --><!-- IF currentPrerelease -->alert-info<!-- ELSE -->alert-success<!-- END --><!-- END --><!-- END --> version-check"> <div class="alert <!-- IF lookupFailed -->alert-danger<!-- ELSE --><!-- IF upgradeAvailable -->alert-warning<!-- ELSE --><!-- IF currentPrerelease -->alert-info<!-- ELSE -->alert-success<!-- END --><!-- END --><!-- END --> version-check">
<p>[[admin/general/dashboard:running-version, {version}]]</p> <p>[[admin/dashboard:running-version, {version}]]</p>
<p> <p>
<!-- IF lookupFailed --> <!-- IF lookupFailed -->
[[admin/general/dashboard:latest-lookup-failed]] [[admin/dashboard:latest-lookup-failed]]
<!-- ELSE --> <!-- ELSE -->
<!-- IF upgradeAvailable --> <!-- IF upgradeAvailable -->
<!-- IF currentPrerelease --> <!-- IF currentPrerelease -->
[[admin/general/dashboard:prerelease-upgrade-available, {latestVersion}]] [[admin/dashboard:prerelease-upgrade-available, {latestVersion}]]
<!-- ELSE --> <!-- ELSE -->
[[admin/general/dashboard:upgrade-available, {latestVersion}]] [[admin/dashboard:upgrade-available, {latestVersion}]]
<!-- END --> <!-- END -->
<!-- ELSE --> <!-- ELSE -->
<!-- IF currentPrerelease --> <!-- IF currentPrerelease -->
[[admin/general/dashboard:prerelease-warning]] [[admin/dashboard:prerelease-warning]]
<!-- ELSE --> <!-- ELSE -->
[[admin/general/dashboard:up-to-date]] [[admin/dashboard:up-to-date]]
<!-- END --> <!-- END -->
<!-- END --> <!-- END -->
<!-- END --> <!-- END -->
</p> </p>
</div> </div>
<p> <p>
[[admin/general/dashboard:keep-updated]] [[admin/dashboard:keep-updated]]
</p> </p>
</div> </div>
</div> </div>
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading">[[admin/general/dashboard:notices]]</div> <div class="panel-heading">[[admin/dashboard:notices]]</div>
<div class="panel-body"> <div class="panel-body">
<!-- BEGIN notices --> <!-- BEGIN notices -->
<div> <div>

@ -1,36 +0,0 @@
<div class="languages">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">[[admin/general/languages:language-settings]]</div>
<div class="col-sm-10 col-xs-12">
<p>
[[admin/general/languages:description]]
</p>
<form class="row">
<div class="form-group col-sm-6">
<label for="defaultLang">[[admin/general/languages:default-language]]</label>
<select id="language" data-field="defaultLang" class="form-control">
<!-- BEGIN languages -->
<option value="{languages.code}" <!-- IF languages.selected -->selected<!-- ENDIF languages.selected -->>{languages.name} ({languages.code})</option>
<!-- END languages -->
</select>
</div>
</form>
<form class="row">
<div class="form-group col-sm-6">
<div class="checkbox">
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="autoDetectLang" <!-- IF autoDetectLang -->checked<!-- ENDIF autoDetectLang -->/>
<span class="mdl-switch__label">[[admin/general/languages:auto-detect]]</span>
</label>
</div>
</div>
</form>
</div>
</div>
</div>
<button id="save" class="floating-button mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
<i class="material-icons">save</i>
</button>

@ -9,18 +9,6 @@
</ul> </ul>
</section> </section>
<section class="menu-section">
<h3 class="menu-section-title">[[admin/menu:section-general]]</h3>
<ul class="menu-section-list">
<li><a href="{relative_path}/admin/general/dashboard">[[admin/menu:general/dashboard]]</a></li>
<li><a href="{relative_path}/admin/general/homepage">[[admin/menu:general/homepage]]</a></li>
<li><a href="{relative_path}/admin/general/navigation">[[admin/menu:general/navigation]]</a></li>
<li><a href="{relative_path}/admin/general/languages">[[admin/menu:general/languages]]</a></li>
<li><a href="{relative_path}/admin/general/sounds">[[admin/menu:general/sounds]]</a></li>
<li><a href="{relative_path}/admin/general/social">[[admin/menu:general/social]]</a></li>
</ul>
</section>
<section class="menu-section"> <section class="menu-section">
<h3 class="menu-section-title">[[admin/menu:section-manage]]</h3> <h3 class="menu-section-title">[[admin/menu:section-manage]]</h3>
<ul class="menu-section-list"> <ul class="menu-section-list">
@ -42,10 +30,13 @@
<h3 class="menu-section-title">[[admin/menu:section-settings]]</h3> <h3 class="menu-section-title">[[admin/menu:section-settings]]</h3>
<ul class="menu-section-list"> <ul class="menu-section-list">
<li><a href="{relative_path}/admin/settings/general">[[admin/menu:section-general]]</a></li> <li><a href="{relative_path}/admin/settings/general">[[admin/menu:section-general]]</a></li>
<li><a href="{relative_path}/admin/settings/homepage">[[admin/menu:settings/homepage]]</a></li>
<li><a href="{relative_path}/admin/settings/navigation">[[admin/menu:settings/navigation]]</a></li>
<li><a href="{relative_path}/admin/settings/user">[[admin/menu:settings/user]]</a></li> <li><a href="{relative_path}/admin/settings/user">[[admin/menu:settings/user]]</a></li>
<li><a href="{relative_path}/admin/settings/group">[[admin/menu:settings/group]]</a></li> <li><a href="{relative_path}/admin/settings/group">[[admin/menu:settings/group]]</a></li>
<li><a href="{relative_path}/admin/settings/tags">[[admin/menu:manage/tags]]</a></li> <li><a href="{relative_path}/admin/settings/tags">[[admin/menu:manage/tags]]</a></li>
<li><a href="{relative_path}/admin/settings/post">[[admin/menu:settings/post]]</a></li> <li><a href="{relative_path}/admin/settings/post">[[admin/menu:settings/post]]</a></li>
<li><a href="{relative_path}/admin/settings/languages">[[admin/menu:settings/languages]]</a></li>
<li><a href="{relative_path}/admin/settings/email">[[admin/menu:settings/email]]</a></li> <li><a href="{relative_path}/admin/settings/email">[[admin/menu:settings/email]]</a></li>
<li><a href="{relative_path}/admin/settings/reputation">[[admin/menu:settings/reputation]]</a></li> <li><a href="{relative_path}/admin/settings/reputation">[[admin/menu:settings/reputation]]</a></li>
<li><a href="{relative_path}/admin/settings/guest">[[admin/menu:settings/guest]]</a></li> <li><a href="{relative_path}/admin/settings/guest">[[admin/menu:settings/guest]]</a></li>
@ -53,6 +44,8 @@
<li><a href="{relative_path}/admin/settings/chat">[[admin/menu:settings/chat]]</a></li> <li><a href="{relative_path}/admin/settings/chat">[[admin/menu:settings/chat]]</a></li>
<li><a href="{relative_path}/admin/settings/pagination">[[admin/menu:settings/pagination]]</a></li> <li><a href="{relative_path}/admin/settings/pagination">[[admin/menu:settings/pagination]]</a></li>
<li><a href="{relative_path}/admin/settings/notifications">[[admin/menu:settings/notifications]]</a></li> <li><a href="{relative_path}/admin/settings/notifications">[[admin/menu:settings/notifications]]</a></li>
<li><a href="{relative_path}/admin/settings/sounds">[[admin/menu:settings/sounds]]</a></li>
<li><a href="{relative_path}/admin/settings/social">[[admin/menu:settings/social]]</a></li>
<li><a href="{relative_path}/admin/settings/cookies">[[admin/menu:settings/cookies]]</a></li> <li><a href="{relative_path}/admin/settings/cookies">[[admin/menu:settings/cookies]]</a></li>
<li><a href="{relative_path}/admin/settings/web-crawler">[[admin/menu:settings/web-crawler]]</a></li> <li><a href="{relative_path}/admin/settings/web-crawler">[[admin/menu:settings/web-crawler]]</a></li>
<li><a href="{relative_path}/admin/settings/sockets">[[admin/menu:settings/sockets]]</a></li> <li><a href="{relative_path}/admin/settings/sockets">[[admin/menu:settings/sockets]]</a></li>
@ -171,17 +164,7 @@
<ul id="main-menu"> <ul id="main-menu">
<li class="menu-item"> <li class="menu-item">
<a href="{relative_path}/admin/general/dashboard">[[admin/menu:general/dashboard]]</a> <a href="{relative_path}/admin/dashboard">[[admin/menu:dashboard]]</a>
</li>
<li class="dropdown menu-item">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">[[admin/menu:section-general]]</a>
<ul class="dropdown-menu" role="menu">
<li><a href="{relative_path}/admin/general/homepage">[[admin/menu:general/homepage]]</a></li>
<li><a href="{relative_path}/admin/general/navigation">[[admin/menu:general/navigation]]</a></li>
<li><a href="{relative_path}/admin/general/languages">[[admin/menu:general/languages]]</a></li>
<li><a href="{relative_path}/admin/general/sounds">[[admin/menu:general/sounds]]</a></li>
<li><a href="{relative_path}/admin/general/social">[[admin/menu:general/social]]</a></li>
</ul>
</li> </li>
<li class="dropdown menu-item"> <li class="dropdown menu-item">
<a id="manage-menu" href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">[[admin/menu:section-manage]]</a> <a id="manage-menu" href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">[[admin/menu:section-manage]]</a>
@ -203,10 +186,13 @@
<a id="settings-menu" href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">[[admin/menu:section-settings]]</a> <a id="settings-menu" href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">[[admin/menu:section-settings]]</a>
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
<li><a id="settings-general" href="{relative_path}/admin/settings/general">[[admin/menu:section-general]]</a></li> <li><a id="settings-general" href="{relative_path}/admin/settings/general">[[admin/menu:section-general]]</a></li>
<li><a href="{relative_path}/admin/settings/homepage">[[admin/menu:settings/homepage]]</a></li>
<li><a href="{relative_path}/admin/settings/navigation">[[admin/menu:settings/navigation]]</a></li>
<li><a href="{relative_path}/admin/settings/user">[[admin/menu:settings/user]]</a></li> <li><a href="{relative_path}/admin/settings/user">[[admin/menu:settings/user]]</a></li>
<li><a href="{relative_path}/admin/settings/group">[[admin/menu:settings/group]]</a></li> <li><a href="{relative_path}/admin/settings/group">[[admin/menu:settings/group]]</a></li>
<li><a href="{relative_path}/admin/settings/tags">[[admin/menu:manage/tags]]</a></li> <li><a href="{relative_path}/admin/settings/tags">[[admin/menu:manage/tags]]</a></li>
<li><a href="{relative_path}/admin/settings/post">[[admin/menu:settings/post]]</a></li> <li><a href="{relative_path}/admin/settings/post">[[admin/menu:settings/post]]</a></li>
<li><a href="{relative_path}/admin/settings/languages">[[admin/menu:settings/languages]]</a></li>
<li><a href="{relative_path}/admin/settings/email">[[admin/menu:settings/email]]</a></li> <li><a href="{relative_path}/admin/settings/email">[[admin/menu:settings/email]]</a></li>
<li><a href="{relative_path}/admin/settings/reputation">[[admin/menu:settings/reputation]]</a></li> <li><a href="{relative_path}/admin/settings/reputation">[[admin/menu:settings/reputation]]</a></li>
<li><a href="{relative_path}/admin/settings/guest">[[admin/menu:settings/guest]]</a></li> <li><a href="{relative_path}/admin/settings/guest">[[admin/menu:settings/guest]]</a></li>
@ -214,6 +200,8 @@
<li><a href="{relative_path}/admin/settings/chat">[[admin/menu:settings/chat]]</a></li> <li><a href="{relative_path}/admin/settings/chat">[[admin/menu:settings/chat]]</a></li>
<li><a href="{relative_path}/admin/settings/pagination">[[admin/menu:settings/pagination]]</a></li> <li><a href="{relative_path}/admin/settings/pagination">[[admin/menu:settings/pagination]]</a></li>
<li><a href="{relative_path}/admin/settings/notifications">[[admin/menu:settings/notifications]]</a></li> <li><a href="{relative_path}/admin/settings/notifications">[[admin/menu:settings/notifications]]</a></li>
<li><a href="{relative_path}/admin/settings/sounds">[[admin/menu:settings/sounds]]</a></li>
<li><a href="{relative_path}/admin/settings/social">[[admin/menu:settings/social]]</a></li>
<li><a href="{relative_path}/admin/settings/cookies">[[admin/menu:settings/cookies]]</a></li> <li><a href="{relative_path}/admin/settings/cookies">[[admin/menu:settings/cookies]]</a></li>
<li><a href="{relative_path}/admin/settings/web-crawler">[[admin/menu:settings/web-crawler]]</a></li> <li><a href="{relative_path}/admin/settings/web-crawler">[[admin/menu:settings/web-crawler]]</a></li>
<li><a href="{relative_path}/admin/settings/sockets">[[admin/menu:settings/sockets]]</a></li> <li><a href="{relative_path}/admin/settings/sockets">[[admin/menu:settings/sockets]]</a></li>

@ -1,20 +1,20 @@
<form role="form"> <form role="form">
<fieldset> <fieldset>
<div class="alert alert-danger hidden">[[admin/general/dashboard:page-views-custom-error]]</div> <div class="alert alert-danger hidden">[[admin/dashboard:page-views-custom-error]]</div>
<div class="row"> <div class="row">
<div class="col-xs-6"> <div class="col-xs-6">
<div class="form-group"> <div class="form-group">
<label for="startRange">[[admin/general/dashboard:page-views-custom-start]]</label> <label for="startRange">[[admin/dashboard:page-views-custom-start]]</label>
<input class="form-control" type="date" id="startRange" name="startRange" /> <input class="form-control" type="date" id="startRange" name="startRange" />
</div> </div>
</div> </div>
<div class="col-xs-6"> <div class="col-xs-6">
<div class="form-group"> <div class="form-group">
<label for="endRange">[[admin/general/dashboard:page-views-custom-end]]</label> <label for="endRange">[[admin/dashboard:page-views-custom-end]]</label>
<input class="form-control" type="date" id="endRange" name="endRange" /> <input class="form-control" type="date" id="endRange" name="endRange" />
</div> </div>
</div> </div>
</div> </div>
<p class="help-block">[[admin/general/dashboard:page-views-custom-help]]</p> <p class="help-block">[[admin/dashboard:page-views-custom-help]]</p>
</fieldset> </fieldset>
</form> </form>

@ -1,12 +1,12 @@
<div class="row"> <div class="row">
<div class="col-sm-2 col-xs-12 settings-header">[[admin/general/homepage:home-page]]</div> <div class="col-sm-2 col-xs-12 settings-header">[[admin/settings/homepage:home-page]]</div>
<div class="col-sm-10 col-xs-12"> <div class="col-sm-10 col-xs-12">
<p> <p>
[[admin/general/homepage:description]] [[admin/settings/homepage:description]]
</p> </p>
<form class="row"> <form class="row">
<div class="col-sm-6"> <div class="col-sm-6">
<label>[[admin/general/homepage:home-page-route]]</label> <label>[[admin/settings/homepage:home-page-route]]</label>
<select class="form-control" data-field="homePageRoute"> <select class="form-control" data-field="homePageRoute">
<!-- BEGIN routes --> <!-- BEGIN routes -->
<option value="{routes.route}">{routes.name}</option> <option value="{routes.route}">{routes.name}</option>
@ -14,18 +14,18 @@
</select> </select>
<div id="homePageCustom" style="display: none;"> <div id="homePageCustom" style="display: none;">
<br> <br>
<label>[[admin/general/homepage:custom-route]]</label> <label>[[admin/settings/homepage:custom-route]]</label>
<input type="text" class="form-control" data-field="homePageCustom"/> <input type="text" class="form-control" data-field="homePageCustom"/>
</div> </div>
<br> <br>
<div class="checkbox"> <div class="checkbox">
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect"> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="allowUserHomePage"> <input class="mdl-switch__input" type="checkbox" data-field="allowUserHomePage">
<span class="mdl-switch__label"><strong>[[admin/general/homepage:allow-user-home-pages]]</strong></span> <span class="mdl-switch__label"><strong>[[admin/settings/homepage:allow-user-home-pages]]</strong></span>
</label> </label>
</div> </div>
<br> <br>
<label>[[admin/general/homepage:home-page-title]]</label> <label>[[admin/settings/homepage:home-page-title]]</label>
<input class="form-control" type="text" data-field="homePageTitle" placeholder="[[pages:home]]"> <input class="form-control" type="text" data-field="homePageTitle" placeholder="[[pages:home]]">
</div> </div>
</form> </form>

@ -0,0 +1,34 @@
<!-- IMPORT admin/partials/settings/header.tpl -->
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">[[admin/settings/languages:language-settings]]</div>
<div class="col-sm-10 col-xs-12">
<p>
[[admin/settings/languages:description]]
</p>
<form class="row">
<div class="form-group col-sm-6">
<label for="defaultLang">[[admin/settings/languages:default-language]]</label>
<select id="language" data-field="defaultLang" class="form-control">
<!-- BEGIN languages -->
<option value="{languages.code}" <!-- IF languages.selected -->selected<!-- ENDIF languages.selected -->>{languages.name} ({languages.code})</option>
<!-- END languages -->
</select>
</div>
</form>
<form class="row">
<div class="form-group col-sm-6">
<div class="checkbox">
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="autoDetectLang" <!-- IF autoDetectLang -->checked<!-- ENDIF autoDetectLang -->/>
<span class="mdl-switch__label">[[admin/settings/languages:auto-detect]]</span>
</label>
</div>
</div>
</form>
</div>
</div>
<!-- IMPORT admin/partials/settings/footer.tpl -->

@ -21,10 +21,10 @@
<div class="row"> <div class="row">
<div class="col-sm-1"> <div class="col-sm-1">
<div class="form-group"> <div class="form-group">
<label>[[admin/general/navigation:icon]]</label> <label>[[admin/settings/navigation:icon]]</label>
<br/> <br/>
<span class="iconPicker"><i class="fa fa-2x {enabled.iconClass}"></i> <span class="iconPicker"><i class="fa fa-2x {enabled.iconClass}"></i>
<a class="change-icon-link <!-- IF enabled.iconClass -->hidden<!-- ENDIF enabled.iconClass -->" href="#">[[admin/general/navigation:change-icon]]</a> <a class="change-icon-link <!-- IF enabled.iconClass -->hidden<!-- ENDIF enabled.iconClass -->" href="#">[[admin/settings/navigation:change-icon]]</a>
<input class="form-control" type="hidden" name="iconClass" value="{enabled.iconClass}" /> <input class="form-control" type="hidden" name="iconClass" value="{enabled.iconClass}" />
</span> </span>
</div> </div>
@ -32,21 +32,21 @@
<div class="col-sm-3"> <div class="col-sm-3">
<div class="form-group"> <div class="form-group">
<label>[[admin/general/navigation:route]]</label> <label>[[admin/settings/navigation:route]]</label>
<input class="form-control" type="text" name="route" value="{enabled.route}" /> <input class="form-control" type="text" name="route" value="{enabled.route}" />
</div> </div>
</div> </div>
<div class="col-sm-4"> <div class="col-sm-4">
<div class="form-group"> <div class="form-group">
<label>[[admin/general/navigation:class]]</label> <label>[[admin/settings/navigation:class]]</label>
<input class="form-control" type="text" name="class" value="{enabled.class}" /> <input class="form-control" type="text" name="class" value="{enabled.class}" />
</div> </div>
</div> </div>
<div class="col-sm-4"> <div class="col-sm-4">
<div class="form-group"> <div class="form-group">
<label>[[admin/general/navigation:id]]</label> <label>[[admin/settings/navigation:id]]</label>
<input class="form-control" type="text" name="id" value="{enabled.id}" /> <input class="form-control" type="text" name="id" value="{enabled.id}" />
</div> </div>
</div> </div>
@ -54,26 +54,26 @@
<div class="row"> <div class="row">
<div class="col-sm-4"> <div class="col-sm-4">
<div class="form-group"> <div class="form-group">
<label>[[admin/general/navigation:text]]</label> <label>[[admin/settings/navigation:text]]</label>
<input class="form-control unescape" type="text" name="text" value="{enabled.text}" /> <input class="form-control unescape" type="text" name="text" value="{enabled.text}" />
</div> </div>
</div> </div>
<div class="col-sm-4"> <div class="col-sm-4">
<div class="form-group"> <div class="form-group">
<label>[[admin/general/navigation:text-class]]</label> <label>[[admin/settings/navigation:text-class]]</label>
<input class="form-control" type="text" name="textClass" value="{enabled.textClass}" /> <input class="form-control" type="text" name="textClass" value="{enabled.textClass}" />
</div> </div>
</div> </div>
<div class="col-sm-4"> <div class="col-sm-4">
<div class="form-group"> <div class="form-group">
<label>[[admin/general/navigation:tooltip]]</label> <label>[[admin/settings/navigation:tooltip]]</label>
<input class="form-control unescape" type="text" name="title" value="{enabled.title}" /> <input class="form-control unescape" type="text" name="title" value="{enabled.title}" />
</div> </div>
</div> </div>
</div> </div>
<strong>[[admin/general/navigation:groups]]</strong> <strong>[[admin/settings/navigation:groups]]</strong>
<div> <div>
<select name="groups" class="form-control" size="10" multiple> <select name="groups" class="form-control" size="10" multiple>
<!-- BEGIN enabled.groups --> <!-- BEGIN enabled.groups -->
@ -85,15 +85,15 @@
<div class="checkbox"> <div class="checkbox">
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect"> <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" name="property:targetBlank" <!-- IF enabled.properties.targetBlank -->checked<!-- ENDIF enabled.properties.targetBlank -->/> <input class="mdl-switch__input" type="checkbox" name="property:targetBlank" <!-- IF enabled.properties.targetBlank -->checked<!-- ENDIF enabled.properties.targetBlank -->/>
<span class="mdl-switch__label"><strong>[[admin/general/navigation:open-new-window]]</strong></span> <span class="mdl-switch__label"><strong>[[admin/settings/navigation:open-new-window]]</strong></span>
</label> </label>
</div> </div>
<button class="btn btn-danger delete">[[admin/general/navigation:btn.delete]]</button> <button class="btn btn-danger delete">[[admin/settings/navigation:btn.delete]]</button>
<!-- IF enabled.enabled --> <!-- IF enabled.enabled -->
<button class="btn btn-warning toggle">[[admin/general/navigation:btn.disable]]</button> <button class="btn btn-warning toggle">[[admin/settings/navigation:btn.disable]]</button>
<!-- ELSE --> <!-- ELSE -->
<button class="btn btn-success toggle">[[admin/general/navigation:btn.enable]]</button> <button class="btn btn-success toggle">[[admin/settings/navigation:btn.enable]]</button>
<!-- ENDIF enabled.enabled --> <!-- ENDIF enabled.enabled -->
<input type="hidden" name="enabled" value="{enabled.enabled}" /> <input type="hidden" name="enabled" value="{enabled.enabled}" />
</form> </form>
@ -104,7 +104,7 @@
<div class="col-lg-3"> <div class="col-lg-3">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading">[[admin/general/navigation:available-menu-items]]</div> <div class="panel-heading">[[admin/settings/navigation:available-menu-items]]</div>
<div class="panel-body"> <div class="panel-body">
<ul id="available"> <ul id="available">
<li data-id="custom" class="clearfix"> <li data-id="custom" class="clearfix">
@ -112,7 +112,7 @@
<i class="fa fa-fw fa-plus-circle"></i> <i class="fa fa-fw fa-plus-circle"></i>
</div> </div>
<p> <p>
<strong>[[admin/general/navigation:custom-route]]</strong> <strong>[[admin/settings/navigation:custom-route]]</strong>
</p> </p>
</li> </li>
<!-- BEGIN available --> <!-- BEGIN available -->
@ -122,7 +122,7 @@
</div> </div>
<p> <p>
<strong>{available.text}</strong> {available.route} <br/> <strong>{available.text}</strong> {available.route} <br/>
<!-- IF available.core --> [[admin/general/navigation:core]] <!-- ELSE --> [[admin/general/navigation:plugin]] <!-- ENDIF available.core --> <!-- IF available.core --> [[admin/settings/navigation:core]] <!-- ELSE --> [[admin/settings/navigation:plugin]] <!-- ENDIF available.core -->
</p> </p>
</li> </li>
<!-- END available --> <!-- END available -->

@ -1,7 +1,7 @@
<div class="social settings"> <div class="social settings">
<form role="form"> <form role="form">
<div class="row"> <div class="row">
<div class="col-sm-2 col-xs-12 settings-header">[[admin/general/social:post-sharing]]</div> <div class="col-sm-2 col-xs-12 settings-header">[[admin/settings/social:post-sharing]]</div>
<div class="col-sm-10 col-xs-12"> <div class="col-sm-10 col-xs-12">
<div class="form-group" id="postSharingNetworks"> <div class="form-group" id="postSharingNetworks">
<!-- BEGIN posts --> <!-- BEGIN posts -->
@ -12,7 +12,7 @@
</label> </label>
</div> </div>
<!-- END posts --> <!-- END posts -->
<small>[[admin/general/social:info-plugins-additional]]</small> <small>[[admin/settings/social:info-plugins-additional]]</small>
</div> </div>
</div> </div>
</div> </div>

@ -2,9 +2,9 @@
<div class="col-xs-12"> <div class="col-xs-12">
<form role="form"> <form role="form">
<div class="row"> <div class="row">
<div class="col-sm-2 col-xs-12 settings-header">[[admin/general/sounds:notifications]]</div> <div class="col-sm-2 col-xs-12 settings-header">[[admin/settings/sounds:notifications]]</div>
<div class="col-sm-10 col-xs-12"> <div class="col-sm-10 col-xs-12">
<label for="notification">[[admin/general/sounds:notifications]]</label> <label for="notification">[[admin/settings/sounds:notifications]]</label>
<div class="row"> <div class="row">
<div class="form-group col-xs-9"> <div class="form-group col-xs-9">
<select class="form-control" id="notification" data-field="notification"> <select class="form-control" id="notification" data-field="notification">
@ -21,16 +21,16 @@
</select> </select>
</div> </div>
<div class="btn-group col-xs-3"> <div class="btn-group col-xs-3">
<button type="button" class="form-control btn btn-sm btn-default" data-action="play"><span class="hidden-xs">[[admin/general/sounds:play-sound]] </span><i class="fa fa-play"></i></button> <button type="button" class="form-control btn btn-sm btn-default" data-action="play"><span class="hidden-xs">[[admin/settings/sounds:play-sound]] </span><i class="fa fa-play"></i></button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-sm-2 col-xs-12 settings-header">[[admin/general/sounds:chat-messages]]</div> <div class="col-sm-2 col-xs-12 settings-header">[[admin/settings/sounds:chat-messages]]</div>
<div class="col-sm-10 col-xs-12"> <div class="col-sm-10 col-xs-12">
<label for="chat-incoming">[[admin/general/sounds:incoming-message]]</label> <label for="chat-incoming">[[admin/settings/sounds:incoming-message]]</label>
<div class="row"> <div class="row">
<div class="form-group col-xs-9"> <div class="form-group col-xs-9">
<select class="form-control" id="chat-incoming" data-field="chat-incoming"> <select class="form-control" id="chat-incoming" data-field="chat-incoming">
@ -47,11 +47,11 @@
</select> </select>
</div> </div>
<div class="btn-group col-xs-3"> <div class="btn-group col-xs-3">
<button type="button" class="form-control btn btn-sm btn-default" data-action="play"><span class="hidden-xs">[[admin/general/sounds:play-sound]] </span><i class="fa fa-play"></i></button> <button type="button" class="form-control btn btn-sm btn-default" data-action="play"><span class="hidden-xs">[[admin/settings/sounds:play-sound]] </span><i class="fa fa-play"></i></button>
</div> </div>
</div> </div>
<label for="chat-outgoing">[[admin/general/sounds:outgoing-message]]</label> <label for="chat-outgoing">[[admin/settings/sounds:outgoing-message]]</label>
<div class="row"> <div class="row">
<div class="form-group col-xs-9"> <div class="form-group col-xs-9">
<select class="form-control" id="chat-outgoing" data-field="chat-outgoing"> <select class="form-control" id="chat-outgoing" data-field="chat-outgoing">
@ -68,7 +68,7 @@
</select> </select>
</div> </div>
<div class="btn-group col-xs-3"> <div class="btn-group col-xs-3">
<button type="button" class="form-control btn btn-sm btn-default" data-action="play"><span class="hidden-xs">[[admin/general/sounds:play-sound]] </span><i class="fa fa-play"></i></button> <button type="button" class="form-control btn btn-sm btn-default" data-action="play"><span class="hidden-xs">[[admin/settings/sounds:play-sound]] </span><i class="fa fa-play"></i></button>
</div> </div>
</div> </div>
@ -81,7 +81,7 @@
data-accept="audio/*" data-accept="audio/*"
type="button" type="button"
class="btn btn-primary" class="btn btn-primary"
value="[[admin/general/sounds:upload-new-sound]]" value="[[admin/settings/sounds:upload-new-sound]]"
></input> ></input>
</span> </span>
</div> </div>

@ -174,8 +174,8 @@ describe('Admin Controllers', function () {
}); });
}); });
it('should load /admin/general/homepage', function (done) { it('should load /admin/settings/homepage', function (done) {
request(nconf.get('url') + '/api/admin/general/homepage', { jar: jar, json: true }, function (err, res, body) { request(nconf.get('url') + '/api/admin/settings/homepage', { jar: jar, json: true }, function (err, res, body) {
assert.ifError(err); assert.ifError(err);
assert.equal(res.statusCode, 200); assert.equal(res.statusCode, 200);
assert(body.routes); assert(body.routes);
@ -413,13 +413,13 @@ describe('Admin Controllers', function () {
}); });
}); });
it('should load /admin/general/navigation', function (done) { it('should load /admin/settings/navigation', function (done) {
var navigation = require('../src/navigation/admin'); var navigation = require('../src/navigation/admin');
var data = require('../install/data/navigation.json'); var data = require('../install/data/navigation.json');
navigation.save(data, function (err) { navigation.save(data, function (err) {
assert.ifError(err); assert.ifError(err);
request(nconf.get('url') + '/api/admin/general/navigation', { jar: jar, json: true }, function (err, res, body) { request(nconf.get('url') + '/api/admin/settings/navigation', { jar: jar, json: true }, function (err, res, body) {
assert.ifError(err); assert.ifError(err);
assert(body); assert(body);
assert(body.available); assert(body.available);
@ -456,8 +456,8 @@ describe('Admin Controllers', function () {
}); });
}); });
it('should load /admin/general/sounds', function (done) { it('should load /admin/settings/sounds', function (done) {
request(nconf.get('url') + '/api/admin/general/sounds', { jar: jar, json: true }, function (err, res, body) { request(nconf.get('url') + '/api/admin/settings/sounds', { jar: jar, json: true }, function (err, res, body) {
assert.ifError(err); assert.ifError(err);
assert.equal(res.statusCode, 200); assert.equal(res.statusCode, 200);
assert(body); assert(body);
@ -510,8 +510,8 @@ describe('Admin Controllers', function () {
}); });
}); });
it('should load /admin/general/languages', function (done) { it('should load /admin/settings/languages', function (done) {
request(nconf.get('url') + '/api/admin/general/languages', { jar: jar, json: true }, function (err, res, body) { request(nconf.get('url') + '/api/admin/settings/languages', { jar: jar, json: true }, function (err, res, body) {
assert.ifError(err); assert.ifError(err);
assert.equal(res.statusCode, 200); assert.equal(res.statusCode, 200);
assert(body); assert(body);
@ -519,11 +519,11 @@ describe('Admin Controllers', function () {
}); });
}); });
it('should load /admin/general/social', function (done) { it('should load /admin/settings/social', function (done) {
var socketAdmin = require('../src/socket.io/admin'); var socketAdmin = require('../src/socket.io/admin');
socketAdmin.social.savePostSharingNetworks({ uid: adminUid }, ['facebook', 'twitter'], function (err) { socketAdmin.social.savePostSharingNetworks({ uid: adminUid }, ['facebook', 'twitter'], function (err) {
assert.ifError(err); assert.ifError(err);
request(nconf.get('url') + '/api/admin/general/social', { jar: jar, json: true }, function (err, res, body) { request(nconf.get('url') + '/api/admin/settings/social', { jar: jar, json: true }, function (err, res, body) {
assert.ifError(err); assert.ifError(err);
assert(body); assert(body);
body = body.posts.map(function (network) { body = body.posts.map(function (network) {

Loading…
Cancel
Save