mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-27 17:16:14 +01:00 
			
		
		
		
	refactor: remove general menu from ACP (#8347)
* refactor: remove general menu from ACP * fix: incorrect translation keys, fixed tests
This commit is contained in:
		| @@ -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", | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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]]'; | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
|   | ||||
| @@ -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 = '<div class="text-center pull-left">' + | ||||
| 						'<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 class="text-center pull-left">' + | ||||
| 						'<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 class="text-center pull-left">' + | ||||
| 						'<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 class="text-center pull-left">' + | ||||
| 						'<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>'; | ||||
| 
 | ||||
| 		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, | ||||
| 			}]; | ||||
| 		} | ||||
| @@ -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'), | ||||
| 				}, 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); | ||||
|   | ||||
| @@ -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(); | ||||
| @@ -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' : ''); | ||||
| 		}); | ||||
| @@ -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]]'); | ||||
| 			}); | ||||
| 		}); | ||||
| 	}; | ||||
| @@ -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 () { | ||||
| @@ -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-' + | ||||
|   | ||||
| @@ -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'), | ||||
|   | ||||
| @@ -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; | ||||
| } | ||||
|   | ||||
| @@ -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 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, | ||||
| 	}); | ||||
| }; | ||||
|   | ||||
| @@ -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/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); | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
| 	<div class="col-lg-9"> | ||||
| 		<div class="panel panel-default" id="analytics-panel"> | ||||
| 			<div class="panel-heading"> | ||||
| 				[[admin/general/dashboard:forum-traffic]] | ||||
| 				[[admin/dashboard:forum-traffic]] | ||||
| 				<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> | ||||
| 					<i class="fa fa-expand"></i> | ||||
| @@ -16,19 +16,19 @@ | ||||
| 				<div class="row"> | ||||
| 					<div class="col-sm-3 hidden-xs text-center pageview-stats"> | ||||
| 						<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 class="col-sm-3 text-center pageview-stats"> | ||||
| 						<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 class="col-sm-3 hidden-xs text-center pageview-stats"> | ||||
| 						<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 class="col-sm-3 text-center pageview-stats"> | ||||
| 						<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> | ||||
| @@ -40,16 +40,16 @@ | ||||
| 					<thead> | ||||
| 						<tr> | ||||
| 							<th></th> | ||||
| 							<th class="text-right">[[admin/general/dashboard:stats.yesterday]]</th> | ||||
| 							<th class="text-right">[[admin/general/dashboard:stats.today]]</th> | ||||
| 							<th class="text-right">[[admin/dashboard:stats.yesterday]]</th> | ||||
| 							<th class="text-right">[[admin/dashboard:stats.today]]</th> | ||||
| 							<th></th> | ||||
| 							<th class="text-right">[[admin/general/dashboard:stats.last-week]]</th> | ||||
| 							<th class="text-right">[[admin/general/dashboard:stats.this-week]]</th> | ||||
| 							<th class="text-right">[[admin/dashboard:stats.last-week]]</th> | ||||
| 							<th class="text-right">[[admin/dashboard:stats.this-week]]</th> | ||||
| 							<th></th> | ||||
| 							<th class="text-right">[[admin/general/dashboard:stats.last-month]]</th> | ||||
| 							<th class="text-right">[[admin/general/dashboard:stats.this-month]]</th> | ||||
| 							<th class="text-right">[[admin/dashboard:stats.last-month]]</th> | ||||
| 							<th class="text-right">[[admin/dashboard:stats.this-month]]</th> | ||||
| 							<th></th> | ||||
| 							<th class="text-right">[[admin/general/dashboard:stats.all]]</th> | ||||
| 							<th class="text-right">[[admin/dashboard:stats.all]]</th> | ||||
| 						</tr> | ||||
| 					</thead> | ||||
| 					<tbody> | ||||
| @@ -79,13 +79,13 @@ | ||||
| 		<div class="row"> | ||||
| 			<div class="col-lg-4"> | ||||
| 				<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="graph-container pie-chart legend-down"> | ||||
| 							<canvas id="analytics-registered"></canvas> | ||||
| 							<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="anonymous"></div><span>(<span class="count"></span>) [[admin/general/dashboard:anonymous]]</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/dashboard:anonymous]]</span></li> | ||||
| 							</ul> | ||||
| 						</div> | ||||
| 					</div> | ||||
| @@ -94,16 +94,16 @@ | ||||
| 
 | ||||
| 			<div class="col-lg-4"> | ||||
| 				<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="graph-container pie-chart legend-down"> | ||||
| 							<canvas id="analytics-presence"></canvas> | ||||
| 							<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="on-categories"></div><span>(<span class="count"></span>) [[admin/general/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="recent"></div><span>(<span class="count"></span>) [[admin/general/dashboard:recent]]</span></li> | ||||
| 								<li><div class="unread"></div><span>(<span class="count"></span>) [[admin/general/dashboard:unread]]</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/dashboard:on-categories]]</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/dashboard:recent]]</span></li> | ||||
| 								<li><div class="unread"></div><span>(<span class="count"></span>) [[admin/dashboard:unread]]</span></li> | ||||
| 							</ul> | ||||
| 						</div> | ||||
| 					</div> | ||||
| @@ -111,7 +111,7 @@ | ||||
| 			</div> | ||||
| 			<div class="col-lg-4"> | ||||
| 				<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="graph-container pie-chart legend-down"> | ||||
| 							<canvas id="analytics-topics"></canvas> | ||||
| @@ -125,74 +125,74 @@ | ||||
| 
 | ||||
| 	<div class="col-lg-3"> | ||||
| 		<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"> | ||||
| 				<p> | ||||
| 					<button class="btn btn-block btn-warning restart"<!-- IF !canRestart --> disabled<!-- END -->>[[admin/general/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-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/dashboard:rebuild-and-restart]]</button> | ||||
| 				</p> | ||||
| 				<!-- IF lastrestart --> | ||||
| 				<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> | ||||
| 				</p> | ||||
| 				<!-- ENDIF lastrestart --> | ||||
| 				<p class="<!-- IF canRestart -->help-block<!-- ELSE -->alert alert-warning<!-- END -->"> | ||||
| 					<!-- IF canRestart --> | ||||
| 					[[admin/general/dashboard:restart-warning]] | ||||
| 					[[admin/dashboard:restart-warning]] | ||||
| 					<!-- ELSE --> | ||||
| 					[[admin/general/dashboard:restart-disabled]] | ||||
| 					[[admin/dashboard:restart-disabled]] | ||||
| 					<!-- END --> | ||||
| 				</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> | ||||
| 
 | ||||
| 				<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 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 id="active-users" class="stats"></div> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 
 | ||||
| 		<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="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> | ||||
| 					<!-- IF lookupFailed --> | ||||
| 					[[admin/general/dashboard:latest-lookup-failed]] | ||||
| 					[[admin/dashboard:latest-lookup-failed]] | ||||
| 					<!-- ELSE --> | ||||
| 						<!-- IF upgradeAvailable --> | ||||
| 							<!-- IF currentPrerelease --> | ||||
| 							[[admin/general/dashboard:prerelease-upgrade-available, {latestVersion}]] | ||||
| 							[[admin/dashboard:prerelease-upgrade-available, {latestVersion}]] | ||||
| 							<!-- ELSE --> | ||||
| 							[[admin/general/dashboard:upgrade-available, {latestVersion}]] | ||||
| 							[[admin/dashboard:upgrade-available, {latestVersion}]] | ||||
| 							<!-- END --> | ||||
| 						<!-- ELSE --> | ||||
| 							<!-- IF currentPrerelease --> | ||||
| 							[[admin/general/dashboard:prerelease-warning]] | ||||
| 							[[admin/dashboard:prerelease-warning]] | ||||
| 							<!-- ELSE --> | ||||
| 							[[admin/general/dashboard:up-to-date]] | ||||
| 							[[admin/dashboard:up-to-date]] | ||||
| 							<!-- END --> | ||||
| 						<!-- END --> | ||||
| 					<!-- END --> | ||||
| 					</p> | ||||
| 				</div> | ||||
| 				<p> | ||||
| 					[[admin/general/dashboard:keep-updated]] | ||||
| 					[[admin/dashboard:keep-updated]] | ||||
| 				</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 
 | ||||
| 		<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"> | ||||
| 			<!-- BEGIN notices --> | ||||
| 				<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> | ||||
| 	</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"> | ||||
| 		<h3 class="menu-section-title">[[admin/menu:section-manage]]</h3> | ||||
| 		<ul class="menu-section-list"> | ||||
| @@ -42,10 +30,13 @@ | ||||
| 		<h3 class="menu-section-title">[[admin/menu:section-settings]]</h3> | ||||
| 		<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/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/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/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/reputation">[[admin/menu:settings/reputation]]</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/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/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/web-crawler">[[admin/menu:settings/web-crawler]]</a></li> | ||||
| 			<li><a href="{relative_path}/admin/settings/sockets">[[admin/menu:settings/sockets]]</a></li> | ||||
| @@ -171,17 +164,7 @@ | ||||
|  | ||||
| 		<ul id="main-menu"> | ||||
| 			<li class="menu-item"> | ||||
| 				<a href="{relative_path}/admin/general/dashboard">[[admin/menu:general/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> | ||||
| 				<a href="{relative_path}/admin/dashboard">[[admin/menu:dashboard]]</a> | ||||
| 			</li> | ||||
| 			<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> | ||||
| @@ -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> | ||||
| 				<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 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/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/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/reputation">[[admin/menu:settings/reputation]]</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/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/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/web-crawler">[[admin/menu:settings/web-crawler]]</a></li> | ||||
| 					<li><a href="{relative_path}/admin/settings/sockets">[[admin/menu:settings/sockets]]</a></li> | ||||
|   | ||||
| @@ -1,20 +1,20 @@ | ||||
| <form role="form"> | ||||
| 	<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="col-xs-6"> | ||||
| 				<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" /> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 			<div class="col-xs-6"> | ||||
| 				<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" /> | ||||
| 				</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> | ||||
| </form> | ||||
| @@ -1,12 +1,12 @@ | ||||
| <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"> | ||||
| 		<p> | ||||
| 			[[admin/general/homepage:description]] | ||||
| 			[[admin/settings/homepage:description]] | ||||
| 		</p> | ||||
| 		<form class="row"> | ||||
| 			<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"> | ||||
| 					<!-- BEGIN routes --> | ||||
| 					<option value="{routes.route}">{routes.name}</option> | ||||
| @@ -14,18 +14,18 @@ | ||||
| 				</select> | ||||
| 				<div id="homePageCustom" style="display: none;"> | ||||
| 					<br> | ||||
| 					<label>[[admin/general/homepage:custom-route]]</label> | ||||
| 					<label>[[admin/settings/homepage:custom-route]]</label> | ||||
| 					<input type="text" class="form-control" data-field="homePageCustom"/> | ||||
| 				</div> | ||||
| 				<br> | ||||
| 				<div class="checkbox"> | ||||
| 					<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect"> | ||||
| 						<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> | ||||
| 				</div> | ||||
| 				<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]]"> | ||||
| 			</div> | ||||
| 		</form> | ||||
							
								
								
									
										34
									
								
								src/views/admin/settings/languages.tpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								src/views/admin/settings/languages.tpl
									
									
									
									
									
										Normal file
									
								
							| @@ -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="col-sm-1"> | ||||
| 							<div class="form-group"> | ||||
| 								<label>[[admin/general/navigation:icon]]</label> | ||||
| 								<label>[[admin/settings/navigation:icon]]</label> | ||||
| 								<br/> | ||||
| 								<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}" /> | ||||
| 								</span> | ||||
| 							</div> | ||||
| @@ -32,21 +32,21 @@ | ||||
| 
 | ||||
| 						<div class="col-sm-3"> | ||||
| 							<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}" /> | ||||
| 							</div> | ||||
| 						</div> | ||||
| 
 | ||||
| 						<div class="col-sm-4"> | ||||
| 							<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}" /> | ||||
| 							</div> | ||||
| 						</div> | ||||
| 
 | ||||
| 						<div class="col-sm-4"> | ||||
| 							<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}" /> | ||||
| 							</div> | ||||
| 						</div> | ||||
| @@ -54,26 +54,26 @@ | ||||
| 					<div class="row"> | ||||
| 						<div class="col-sm-4"> | ||||
| 							<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}" /> | ||||
| 							</div> | ||||
| 						</div> | ||||
| 						<div class="col-sm-4"> | ||||
| 							<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}" /> | ||||
| 							</div> | ||||
| 						</div> | ||||
| 
 | ||||
| 						<div class="col-sm-4"> | ||||
| 							<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}" /> | ||||
| 							</div> | ||||
| 						</div> | ||||
| 					</div> | ||||
| 
 | ||||
| 					<strong>[[admin/general/navigation:groups]]</strong> | ||||
| 					<strong>[[admin/settings/navigation:groups]]</strong> | ||||
| 					<div> | ||||
| 						<select name="groups" class="form-control" size="10" multiple> | ||||
| 							<!-- BEGIN enabled.groups --> | ||||
| @@ -85,15 +85,15 @@ | ||||
| 					<div class="checkbox"> | ||||
| 						<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 -->/> | ||||
| 							<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> | ||||
| 					</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 --> | ||||
| 					<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 --> | ||||
| 					<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 --> | ||||
| 					<input type="hidden" name="enabled" value="{enabled.enabled}" /> | ||||
| 				</form> | ||||
| @@ -104,7 +104,7 @@ | ||||
| 
 | ||||
| 	<div class="col-lg-3"> | ||||
| 		<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"> | ||||
| 				<ul id="available"> | ||||
| 					<li data-id="custom" class="clearfix"> | ||||
| @@ -112,7 +112,7 @@ | ||||
| 							<i class="fa fa-fw fa-plus-circle"></i> | ||||
| 						</div> | ||||
| 						<p> | ||||
| 							<strong>[[admin/general/navigation:custom-route]]</strong> | ||||
| 							<strong>[[admin/settings/navigation:custom-route]]</strong> | ||||
| 						</p> | ||||
| 					</li> | ||||
| 					<!-- BEGIN available --> | ||||
| @@ -122,7 +122,7 @@ | ||||
| 						</div> | ||||
| 						<p> | ||||
| 							<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> | ||||
| 					</li> | ||||
| 					<!-- END available --> | ||||
| @@ -1,7 +1,7 @@ | ||||
| <div class="social settings"> | ||||
| 	<form role="form"> | ||||
| 		<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="form-group" id="postSharingNetworks"> | ||||
| 					<!-- BEGIN posts --> | ||||
| @@ -12,7 +12,7 @@ | ||||
| 						</label> | ||||
| 					</div> | ||||
| 					<!-- END posts --> | ||||
| 					<small>[[admin/general/social:info-plugins-additional]]</small> | ||||
| 					<small>[[admin/settings/social:info-plugins-additional]]</small> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 		</div> | ||||
| @@ -2,9 +2,9 @@ | ||||
| 	<div class="col-xs-12"> | ||||
| 		<form role="form"> | ||||
| 			<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"> | ||||
| 					<label for="notification">[[admin/general/sounds:notifications]]</label> | ||||
| 					<label for="notification">[[admin/settings/sounds:notifications]]</label> | ||||
| 					<div class="row"> | ||||
| 						<div class="form-group col-xs-9"> | ||||
| 							<select class="form-control" id="notification" data-field="notification"> | ||||
| @@ -21,16 +21,16 @@ | ||||
| 							</select> | ||||
| 						</div> | ||||
| 						<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 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"> | ||||
| 					<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="form-group col-xs-9"> | ||||
| 							<select class="form-control" id="chat-incoming" data-field="chat-incoming"> | ||||
| @@ -47,11 +47,11 @@ | ||||
| 							</select> | ||||
| 						</div> | ||||
| 						<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> | ||||
| 
 | ||||
| 					<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="form-group col-xs-9"> | ||||
| 							<select class="form-control" id="chat-outgoing" data-field="chat-outgoing"> | ||||
| @@ -68,7 +68,7 @@ | ||||
| 							</select> | ||||
| 						</div> | ||||
| 						<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> | ||||
| 
 | ||||
| @@ -81,7 +81,7 @@ | ||||
| 								data-accept="audio/*" | ||||
| 								type="button" | ||||
| 								class="btn btn-primary" | ||||
| 								value="[[admin/general/sounds:upload-new-sound]]" | ||||
| 								value="[[admin/settings/sounds:upload-new-sound]]" | ||||
| 							></input> | ||||
| 						</span> | ||||
| 					</div> | ||||
| @@ -174,8 +174,8 @@ describe('Admin Controllers', function () { | ||||
| 		}); | ||||
| 	}); | ||||
|  | ||||
| 	it('should load /admin/general/homepage', function (done) { | ||||
| 		request(nconf.get('url') + '/api/admin/general/homepage', { jar: jar, json: true }, function (err, res, body) { | ||||
| 	it('should load /admin/settings/homepage', function (done) { | ||||
| 		request(nconf.get('url') + '/api/admin/settings/homepage', { jar: jar, json: true }, function (err, res, body) { | ||||
| 			assert.ifError(err); | ||||
| 			assert.equal(res.statusCode, 200); | ||||
| 			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 data = require('../install/data/navigation.json'); | ||||
|  | ||||
| 		navigation.save(data, function (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(body); | ||||
| 				assert(body.available); | ||||
| @@ -456,8 +456,8 @@ describe('Admin Controllers', function () { | ||||
| 		}); | ||||
| 	}); | ||||
|  | ||||
| 	it('should load /admin/general/sounds', function (done) { | ||||
| 		request(nconf.get('url') + '/api/admin/general/sounds', { jar: jar, json: true }, function (err, res, body) { | ||||
| 	it('should load /admin/settings/sounds', function (done) { | ||||
| 		request(nconf.get('url') + '/api/admin/settings/sounds', { jar: jar, json: true }, function (err, res, body) { | ||||
| 			assert.ifError(err); | ||||
| 			assert.equal(res.statusCode, 200); | ||||
| 			assert(body); | ||||
| @@ -510,8 +510,8 @@ describe('Admin Controllers', function () { | ||||
| 		}); | ||||
| 	}); | ||||
|  | ||||
| 	it('should load /admin/general/languages', function (done) { | ||||
| 		request(nconf.get('url') + '/api/admin/general/languages', { jar: jar, json: true }, function (err, res, body) { | ||||
| 	it('should load /admin/settings/languages', function (done) { | ||||
| 		request(nconf.get('url') + '/api/admin/settings/languages', { jar: jar, json: true }, function (err, res, body) { | ||||
| 			assert.ifError(err); | ||||
| 			assert.equal(res.statusCode, 200); | ||||
| 			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'); | ||||
| 		socketAdmin.social.savePostSharingNetworks({ uid: adminUid }, ['facebook', 'twitter'], function (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(body); | ||||
| 				body = body.posts.map(function (network) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user