From 7c8a901b841878c7d63940baa551f5982958874e Mon Sep 17 00:00:00 2001
From: Carl Schwan <carl@carlschwan.eu>
Date: Thu, 10 Feb 2022 23:56:05 +0100
Subject: [PATCH] Cleanup admin settings js files

* Move admin.js to webpack, so that this use the bundled jquery files
  instead of the deprecated window.$ Also fixing formatting

* Remove log.js that seems to be from a time where logreader was bundled
  with server and I couldn't find an usage of it anymore

* Fix recent regression in rebuild navigation function (now not depending on
  jquery anymore and bundled by webpack).

Signed-off-by: Carl Schwan <carl@carlschwan.eu>
---
 apps/settings/css/settings.scss               |  15 +
 apps/settings/js/admin.js                     | 333 -----------------
 apps/settings/js/apps.js                      | 113 ------
 apps/settings/js/log.js                       |  85 -----
 .../lib/Controller/AppSettingsController.php  |   1 -
 apps/settings/src/admin.js                    | 335 ++++++++++++++++++
 apps/settings/src/mixins/AppManagement.js     |  27 +-
 .../src/service/rebuild-navigation.js         | 130 +++++++
 apps/settings/src/store/apps.js               |  16 +-
 apps/settings/templates/settings/frame.php    |   3 +-
 dist/settings-apps-647.js                     | Bin 47570 -> 50673 bytes
 dist/settings-apps-647.js.map                 | Bin 130165 -> 138355 bytes
 dist/settings-legacy-admin.js                 | Bin 0 -> 11107 bytes
 dist/settings-legacy-admin.js.map             | Bin 0 -> 30303 bytes
 ...ings-vue-settings-apps-users-management.js | Bin 22837 -> 22839 bytes
 ...-vue-settings-apps-users-management.js.map | Bin 86920 -> 87030 bytes
 webpack.modules.js                            |   1 +
 17 files changed, 507 insertions(+), 552 deletions(-)
 delete mode 100644 apps/settings/js/admin.js
 delete mode 100644 apps/settings/js/apps.js
 delete mode 100644 apps/settings/js/log.js
 create mode 100644 apps/settings/src/admin.js
 create mode 100644 apps/settings/src/service/rebuild-navigation.js
 create mode 100644 dist/settings-legacy-admin.js
 create mode 100644 dist/settings-legacy-admin.js.map

diff --git a/apps/settings/css/settings.scss b/apps/settings/css/settings.scss
index 7b261d67181..d9073b9a138 100644
--- a/apps/settings/css/settings.scss
+++ b/apps/settings/css/settings.scss
@@ -1755,3 +1755,18 @@ doesnotexist:-o-prefocus, .strengthify-wrapper {
 		}
 	}
 }
+
+.animated {
+    animation: blink-animation 1s steps(5, start) 4;
+}
+
+@keyframes blink-animation {
+  to {
+    opacity: 0.6;
+  }
+}
+@-webkit-keyframes blink-animation {
+  to {
+    opacity: 1;
+  }
+}
diff --git a/apps/settings/js/admin.js b/apps/settings/js/admin.js
deleted file mode 100644
index 20d9843fe14..00000000000
--- a/apps/settings/js/admin.js
+++ /dev/null
@@ -1,333 +0,0 @@
-window.addEventListener('DOMContentLoaded', function(){
-	$('#excludedGroups,#linksExcludedGroups').each(function (index, element) {
-		OC.Settings.setupGroupsSelect($(element));
-		$(element).change(function(ev) {
-			var groups = ev.val || [];
-			groups = JSON.stringify(groups);
-			OCP.AppConfig.setValue('core', $(this).attr('name'), groups);
-		});
-	});
-
-
-	$('#loglevel').change(function(){
-		$.post(OC.generateUrl('/settings/admin/log/level'), {level: $(this).val()},function(){
-			OC.Log.reload();
-		} );
-	});
-
-	$('#backgroundjobs span.crondate').tooltip({placement: 'top'});
-
-	$('#backgroundjobs input').change(function(){
-		if($(this).is(':checked')){
-			var mode = $(this).val();
-			if (mode === 'ajax' || mode === 'webcron' || mode === 'cron') {
-				OCP.AppConfig.setValue('core', 'backgroundjobs_mode', mode, {
-					success: function() {
-						// clear cron errors on background job mode change
-						OCP.AppConfig.deleteKey('core', 'cronErrors');
-					}
-				});
-			}
-		}
-	});
-
-	$('#shareAPIEnabled').change(function() {
-		$('#shareAPI p:not(#enable)').toggleClass('hidden', !this.checked);
-	});
-
-	$('#enableEncryption').change(function() {
-		$('#encryptionAPI div#EncryptionWarning').toggleClass('hidden');
-	});
-
-	$('#reallyEnableEncryption').click(function() {
-		$('#encryptionAPI div#EncryptionWarning').toggleClass('hidden');
-		$('#encryptionAPI div#EncryptionSettingsArea').toggleClass('hidden');
-		OCP.AppConfig.setValue('core', 'encryption_enabled', 'yes');
-		$('#enableEncryption').attr('disabled', 'disabled');
-	});
-
-	$('#startmigration').click(function(event){
-		$(window).on('beforeunload.encryption', function(e) {
-			return t('settings', 'Migration in progress. Please wait until the migration is finished');
-		});
-		event.preventDefault();
-		$('#startmigration').prop('disabled', true);
-		OC.msg.startAction('#startmigration_msg', t('settings', 'Migration started …'));
-		$.post(OC.generateUrl('/settings/admin/startmigration'), '', function(data){
-			OC.msg.finishedAction('#startmigration_msg', data);
-			if (data['status'] === 'success') {
-				$('#encryptionAPI div#selectEncryptionModules').toggleClass('hidden');
-				$('#encryptionAPI div#migrationWarning').toggleClass('hidden');
-			} else {
-				$('#startmigration').prop('disabled', false);
-			}
-			$(window).off('beforeunload.encryption');
-
-		});
-	});
-
-	$('#shareapiExpireAfterNDays').on('input', function() {
-		this.value = this.value.replace(/\D/g, '');
-	});
-
-	$('#shareAPI input:not(.noJSAutoUpdate)').change(function() {
-		var value = $(this).val();
-		if ($(this).attr('type') === 'checkbox') {
-			if (this.checked) {
-				value = 'yes';
-			} else {
-				value = 'no';
-			}
-		}
-		OCP.AppConfig.setValue('core', $(this).attr('name'), value);
-	});
-
-	$('#shareapiDefaultExpireDate').change(function() {
-		$("#setDefaultExpireDate").toggleClass('hidden', !this.checked);
-	});
-
-	$('#shareapiDefaultInternalExpireDate').change(function() {
-		$("#setDefaultInternalExpireDate").toggleClass('hidden', !this.checked);
-	});
-
-	$('#shareapiDefaultRemoteExpireDate').change(function() {
-		$("#setDefaultRemoteExpireDate").toggleClass('hidden', !this.checked);
-	});
-
-	$('#publicShareDisclaimer').change(function() {
-		$("#publicShareDisclaimerText").toggleClass('hidden', !this.checked);
-		if(!this.checked) {
-			savePublicShareDisclaimerText('');
-		}
-	});
-
-	$('#shareApiDefaultPermissionsSection input').change(function(ev) {
-		var $el = $('#shareApiDefaultPermissions');
-		var $target = $(ev.target);
-
-		var value = $el.val();
-		if ($target.is(':checked')) {
-			value = value | $target.val();
-		} else {
-			value = value & ~$target.val();
-		}
-
-		// always set read permission
-		value |= OC.PERMISSION_READ;
-
-		// this will trigger the field's change event and will save it
-		$el.val(value).change();
-
-		ev.preventDefault();
-
-		return false;
-	});
-
-	var savePublicShareDisclaimerText = _.debounce(function(value) {
-		var options = {
-			success: function() {
-				OC.msg.finishedSuccess('#publicShareDisclaimerStatus', t('settings', 'Saved'));
-			},
-			error: function() {
-				OC.msg.finishedError('#publicShareDisclaimerStatus', t('settings', 'Not saved'));
-			}
-		};
-
-		OC.msg.startSaving('#publicShareDisclaimerStatus');
-		if (_.isString(value) && value !== '') {
-			OCP.AppConfig.setValue('core', 'shareapi_public_link_disclaimertext', value, options);
-		} else {
-			$('#publicShareDisclaimerText').val('');
-			OCP.AppConfig.deleteKey('core', 'shareapi_public_link_disclaimertext', options);
-		}
-	}, 500);
-
-	$('#publicShareDisclaimerText').on('change, keyup', function() {
-		savePublicShareDisclaimerText(this.value);
-	});
-
-	$('#shareapi_allow_share_dialog_user_enumeration').on('change', function() {
-		$('#shareapi_restrict_user_enumeration_to_group_setting').toggleClass('hidden', !this.checked);
-		$('#shareapi_restrict_user_enumeration_to_phone_setting').toggleClass('hidden', !this.checked);
-		$('#shareapi_restrict_user_enumeration_combinewarning_setting').toggleClass('hidden', !this.checked);
-	})
-
-	$('#allowLinks').change(function() {
-		$("#publicLinkSettings").toggleClass('hidden', !this.checked);
-		$('#setDefaultExpireDate').toggleClass('hidden', !(this.checked && $('#shareapiDefaultExpireDate')[0].checked));
-	});
-
-	$('#mail_smtpauth').change(function() {
-		if (!this.checked) {
-			$('#mail_credentials').addClass('hidden');
-		} else {
-			$('#mail_credentials').removeClass('hidden');
-		}
-	});
-
-	$('#mail_smtpmode').change(function() {
-		if ($(this).val() !== 'smtp') {
-			$('#setting_smtpauth').addClass('hidden');
-			$('#setting_smtphost').addClass('hidden');
-			$('#mail_smtpsecure_label').addClass('hidden');
-			$('#mail_smtpsecure').addClass('hidden');
-			$('#mail_credentials').addClass('hidden');
-			$('#mail_sendmailmode_label, #mail_sendmailmode').removeClass('hidden');
-		} else {
-			$('#setting_smtpauth').removeClass('hidden');
-			$('#setting_smtphost').removeClass('hidden');
-			$('#mail_smtpsecure_label').removeClass('hidden');
-			$('#mail_smtpsecure').removeClass('hidden');
-			if ($('#mail_smtpauth').is(':checked')) {
-				$('#mail_credentials').removeClass('hidden');
-			}
-			$('#mail_sendmailmode_label, #mail_sendmailmode').addClass('hidden');
-		}
-	});
-
-	var changeEmailSettings = function() {
-		if (OC.PasswordConfirmation.requiresPasswordConfirmation()) {
-			OC.PasswordConfirmation.requirePasswordConfirmation(changeEmailSettings);
-			return;
-		}
-
-		OC.msg.startSaving('#mail_settings_msg');
-		$.ajax({
-			url: OC.generateUrl('/settings/admin/mailsettings'),
-			type: 'POST',
-			data: $('#mail_general_settings_form').serialize(),
-			success: function(){
-				OC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'));
-			},
-			error: function(xhr){
-				OC.msg.finishedError('#mail_settings_msg', xhr.responseJSON);
-			}
-		});
-	};
-
-	var toggleEmailCredentials = function() {
-		if (OC.PasswordConfirmation.requiresPasswordConfirmation()) {
-			OC.PasswordConfirmation.requirePasswordConfirmation(toggleEmailCredentials);
-			return;
-		}
-
-		OC.msg.startSaving('#mail_settings_msg');
-		$.ajax({
-			url: OC.generateUrl('/settings/admin/mailsettings/credentials'),
-			type: 'POST',
-			data: $('#mail_credentials_settings').serialize(),
-			success: function(){
-				OC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'));
-			},
-			error: function(xhr){
-				OC.msg.finishedError('#mail_settings_msg', xhr.responseJSON);
-			}
-		});
-	};
-
-	$('#mail_general_settings_form').change(changeEmailSettings);
-	$('#mail_credentials_settings_submit').click(toggleEmailCredentials);
-	$('#mail_smtppassword').click(function() {
-		if (this.type === 'text' && this.value === '********') {
-			this.type = 'password';
-			this.value = '';
-		}
-	});
-
-	$('#sendtestemail').click(function(event){
-		event.preventDefault();
-		OC.msg.startAction('#sendtestmail_msg', t('settings', 'Sending…'));
-
-		$.ajax({
-			url: OC.generateUrl('/settings/admin/mailtest'),
-			type: 'POST',
-			success: function(){
-				OC.msg.finishedSuccess('#sendtestmail_msg', t('settings', 'Email sent'));
-			},
-			error: function(xhr){
-				OC.msg.finishedError('#sendtestmail_msg', xhr.responseJSON);
-			}
-		});
-	});
-
-	$('#allowGroupSharing').change(function() {
-		$('#allowGroupSharing').toggleClass('hidden', !this.checked);
-	});
-
-	$('#shareapiExcludeGroups').change(function() {
-		$("#selectExcludedGroups").toggleClass('hidden', !this.checked);
-	});
-
-	var setupChecks = function () {
-		// run setup checks then gather error messages
-		$.when(
-			OC.SetupChecks.checkWebDAV(),
-			OC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/webfinger', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),
-			OC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/nodeinfo', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),
-			OC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/caldav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
-			OC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/carddav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
-			OC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocm-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
-			OC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocs-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
-			OC.SetupChecks.checkSetup(),
-			OC.SetupChecks.checkGeneric(),
-			OC.SetupChecks.checkWOFF2Loading(OC.filePath('core', '', 'fonts/NotoSans-Regular-latin.woff2'), OC.theme.docPlaceholderUrl),
-			OC.SetupChecks.checkDataProtected()
-		).then(function (check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11) {
-			var messages = [].concat(check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11);
-			var $el = $('#postsetupchecks');
-			$('#security-warning-state-loading').addClass('hidden');
-
-			var hasMessages = false;
-			var $errorsEl = $el.find('.errors');
-			var $warningsEl = $el.find('.warnings');
-			var $infoEl = $el.find('.info');
-
-			for (var i = 0; i < messages.length; i++) {
-				switch (messages[i].type) {
-					case OC.SetupChecks.MESSAGE_TYPE_INFO:
-						$infoEl.append('<li>' + messages[i].msg + '</li>');
-						break;
-					case OC.SetupChecks.MESSAGE_TYPE_WARNING:
-						$warningsEl.append('<li>' + messages[i].msg + '</li>');
-						break;
-					case OC.SetupChecks.MESSAGE_TYPE_ERROR:
-					default:
-						$errorsEl.append('<li>' + messages[i].msg + '</li>');
-				}
-			}
-
-			if ($errorsEl.find('li').length > 0) {
-				$errorsEl.removeClass('hidden');
-				hasMessages = true;
-			}
-			if ($warningsEl.find('li').length > 0) {
-				$warningsEl.removeClass('hidden');
-				hasMessages = true;
-			}
-			if ($infoEl.find('li').length > 0) {
-				$infoEl.removeClass('hidden');
-				hasMessages = true;
-			}
-
-			if (hasMessages) {
-				$('#postsetupchecks-hint').removeClass('hidden');
-				if ($errorsEl.find('li').length > 0) {
-					$('#security-warning-state-failure').removeClass('hidden');
-				} else {
-					$('#security-warning-state-warning').removeClass('hidden');
-				}
-			} else {
-				var securityWarning = $('#security-warning');
-				if (securityWarning.children('ul').children().length === 0) {
-					$('#security-warning-state-ok').removeClass('hidden');
-				} else {
-					$('#security-warning-state-failure').removeClass('hidden');
-				}
-			}
-		});
-	};
-
-	if (document.getElementById('security-warning') !== null) {
-		setupChecks();
-	}
-});
diff --git a/apps/settings/js/apps.js b/apps/settings/js/apps.js
deleted file mode 100644
index a3c1650e445..00000000000
--- a/apps/settings/js/apps.js
+++ /dev/null
@@ -1,113 +0,0 @@
-/* global Handlebars */
-OC.Settings = OC.Settings || {};
-OC.Settings.Apps = OC.Settings.Apps || {
-	rebuildNavigation: function() {
-		$.getJSON(OC.linkToOCS('core/navigation', 2) + 'apps?format=json').done(function(response){
-			if(response.ocs.meta.status === 'ok') {
-				var addedApps = {};
-				var navEntries = response.ocs.data;
-				var container = $('#navigation #apps ul');
-
-				// remove disabled apps
-				for (var i = 0; i < navEntries.length; i++) {
-					var entry = navEntries[i];
-					if(container.children('li[data-id="' + entry.id + '"]').length === 0) {
-						addedApps[entry.id] = true;
-					}
-				}
-				container.children('li[data-id]').each(function (index, el) {
-					var id = $(el).data('id');
-					// remove all apps that are not in the correct order
-					if (!navEntries[index] || (navEntries[index] && navEntries[index].id !== $(el).data('id'))) {
-						$(el).remove();
-						$('#appmenu li[data-id='+id+']').remove();
-					}
-				});
-
-				var previousEntry = {};
-				// add enabled apps to #navigation and #appmenu
-				for (var i = 0; i < navEntries.length; i++) {
-					var entry = navEntries[i];
-					if (container.children('li[data-id="' + entry.id + '"]').length === 0) {
-						var li = $('<li></li>');
-						li.attr('data-id', entry.id);
-						var img = '<svg width="20" height="20" viewBox="0 0 20 20" alt="">';
-						if (OCA.Theming && OCA.Theming.inverted) {
-							img += '<defs><filter id="invert"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" /></filter></defs>';
-							img += '<image x="0" y="0" width="20" height="20" preserveAspectRatio="xMinYMin meet" filter="url(#invert)" xlink:href="' + entry.icon + '"  class="app-icon" />';
-						} else {
-							img += '<image x="0" y="0" width="20" height="20" preserveAspectRatio="xMinYMin meet" xlink:href="' + entry.icon + '"  class="app-icon" />';
-						}
-						img += '</svg>';
-						var a = $('<a></a>').attr('href', entry.href);
-						var filename = $('<span></span>');
-						var loading = $('<div class="icon-loading-dark"></div>').css('display', 'none');
-						filename.text(entry.name);
-						a.prepend(loading);
-						a.prepend(filename);
-						a.prepend(img);
-						li.append(a);
-
-						// add app icon to the navigation
-						var previousElement = $('#navigation li[data-id=' + previousEntry.id + ']');
-						if (previousElement.length > 0) {
-							previousElement.after(li);
-						} else {
-							$('#navigation #apps').prepend(li);
-						}
-
-						// draw attention to the newly added app entry
-						// by flashing twice the more apps menu
-						if(addedApps[entry.id]) {
-							$('#header #more-apps')
-								.animate({opacity: 0.5})
-								.animate({opacity: 1})
-								.animate({opacity: 0.5})
-								.animate({opacity: 1});
-						}
-					}
-
-					if ($('#appmenu').children('li[data-id="' + entry.id + '"]').length === 0) {
-						var li = $('<li></li>');
-						li.attr('data-id', entry.id);
-						// Generating svg embedded image (see layout.user.php)
-						var img = '<svg width="20" height="20" viewBox="0 0 20 20" alt="">';
-						if (OCA.Theming && OCA.Theming.inverted) {
-							img += '<defs><filter id="invert"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" /></filter></defs>';
-							img += '<image x="0" y="0" width="20" height="20" preserveAspectRatio="xMinYMin meet" filter="url(#invert)" xlink:href="' + entry.icon + '"  class="app-icon" />';
-						} else {
-							img += '<image x="0" y="0" width="20" height="20" preserveAspectRatio="xMinYMin meet" xlink:href="' + entry.icon + '"  class="app-icon" />';
-						}
-						img += '</svg>';
-						var a = $('<a></a>').attr('href', entry.href);
-						var filename = $('<span></span>');
-						var loading = $('<div class="icon-loading-dark"></div>').css('display', 'none');
-						filename.text(entry.name);
-						a.prepend(loading);
-						a.prepend(filename);
-						a.prepend(img);
-						li.append(a);
-
-						// add app icon to the navigation
-						var previousElement = $('#appmenu li[data-id=' + previousEntry.id + ']');
-						if (previousElement.length > 0) {
-							previousElement.after(li);
-						} else {
-							$('#appmenu').prepend(li);
-						}
-
-						if(addedApps[entry.id]) {
-							li.animate({opacity: 0.5})
-								.animate({opacity: 1})
-								.animate({opacity: 0.5})
-								.animate({opacity: 1});
-						}
-					}
-					previousEntry = entry;
-				}
-
-				$(window).trigger('resize');
-			}
-		});
-	}
-};
diff --git a/apps/settings/js/log.js b/apps/settings/js/log.js
deleted file mode 100644
index 45cc9321c24..00000000000
--- a/apps/settings/js/log.js
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * Copyright (c) 2012, Robin Appelman <icewind1991@gmail.com>
- * Copyright (c) 2013, Morris Jobke <morris.jobke@gmail.com>
- * This file is licensed under the Affero General Public License version 3 or later.
- * See the COPYING-README file.
- */
-
-/* global formatDate */
-
-OC.Log = {
-	reload: function (count) {
-		if (!count) {
-			count = OC.Log.loaded;
-		}
-		OC.Log.loaded = 0;
-		$('#log tbody').empty();
-		OC.Log.getMore(count);
-	},
-	levels: ['Debug', 'Info', 'Warning', 'Error', 'Fatal'],
-	loaded: 3,//are initially loaded
-	getMore: function (count) {
-		count = count || 10;
-		$.get(OC.generateUrl('/settings/admin/log/entries'), {offset: OC.Log.loaded, count: count}, function (result) {
-			OC.Log.addEntries(result.data);
-			if (!result.remain) {
-				$('#moreLog').hide();
-			}
-			$('#lessLog').show();
-		});
-	},
-	showLess: function (count) {
-		count = count || 10;
-		//calculate remaining items - at least 3
-		OC.Log.loaded = Math.max(3, OC.Log.loaded - count);
-		$('#moreLog').show();
-		// remove all non-remaining items
-		$('#log tr').slice(OC.Log.loaded).remove();
-		if (OC.Log.loaded <= 3) {
-			$('#lessLog').hide();
-		}
-	},
-	addEntries: function (entries) {
-		for (var i = 0; i < entries.length; i++) {
-			var entry = entries[i];
-			var row = $('<tr/>');
-			var levelTd = $('<td/>');
-			levelTd.text(OC.Log.levels[entry.level]);
-			row.append(levelTd);
-
-			var appTd = $('<td/>');
-			appTd.text(entry.app);
-			row.append(appTd);
-
-			var messageTd = $('<td/>');
-			messageTd.addClass('log-message');
-			messageTd.text(entry.message);
-			row.append(messageTd);
-
-			var timeTd = $('<td/>');
-			timeTd.addClass('date');
-			if (isNaN(entry.time)) {
-				timeTd.text(entry.time);
-			} else {
-				timeTd.text(formatDate(entry.time * 1000));
-			}
-			row.append(timeTd);
-
-			var userTd = $('<td/>');
-			userTd.text(entry.user);
-			row.append(userTd);
-
-			$('#log').append(row);
-		}
-		OC.Log.loaded += entries.length;
-	}
-};
-
-window.addEventListener('DOMContentLoaded', function () {
-	$('#moreLog').click(function () {
-		OC.Log.getMore();
-	});
-	$('#lessLog').click(function () {
-		OC.Log.showLess();
-	});
-});
diff --git a/apps/settings/lib/Controller/AppSettingsController.php b/apps/settings/lib/Controller/AppSettingsController.php
index 8dbe9fb2f07..77f807943cd 100644
--- a/apps/settings/lib/Controller/AppSettingsController.php
+++ b/apps/settings/lib/Controller/AppSettingsController.php
@@ -129,7 +129,6 @@ class AppSettingsController extends Controller {
 	 * @return TemplateResponse
 	 */
 	public function viewApps(): TemplateResponse {
-		\OC_Util::addScript('settings', 'apps');
 		$params = [];
 		$params['appstoreEnabled'] = $this->config->getSystemValueBool('appstoreenabled', true);
 		$params['updateCount'] = count($this->getAppsWithUpdates());
diff --git a/apps/settings/src/admin.js b/apps/settings/src/admin.js
new file mode 100644
index 00000000000..24f95ccb2a6
--- /dev/null
+++ b/apps/settings/src/admin.js
@@ -0,0 +1,335 @@
+import $ from 'jquery'
+import 'jquery-ui-dist/jquery-ui'
+
+window.addEventListener('DOMContentLoaded', () => {
+	$('#excludedGroups,#linksExcludedGroups').each((index, element) => {
+		OC.Settings.setupGroupsSelect($(element))
+		$(element).change((ev) => {
+			let groups = ev.val || []
+			groups = JSON.stringify(groups)
+			OCP.AppConfig.setValue('core', $(this).attr('name'), groups)
+		})
+	})
+
+	$('#loglevel').change(() => {
+		$.post(OC.generateUrl('/settings/admin/log/level'), { level: $(this).val() }, () => {
+			OC.Log.reload()
+		})
+	})
+
+	$('#backgroundjobs span.crondate').tooltip({ placement: 'top' })
+
+	$('#backgroundjobs input').change(() => {
+		if ($(this).is(':checked')) {
+			const mode = $(this).val()
+			if (mode === 'ajax' || mode === 'webcron' || mode === 'cron') {
+				OCP.AppConfig.setValue('core', 'backgroundjobs_mode', mode, {
+					success: () => {
+						// clear cron errors on background job mode change
+						OCP.AppConfig.deleteKey('core', 'cronErrors')
+					}
+				})
+			}
+		}
+	})
+
+	$('#shareAPIEnabled').change(() => {
+		$('#shareAPI p:not(#enable)').toggleClass('hidden', !this.checked)
+	})
+
+	$('#enableEncryption').change(() => {
+		$('#encryptionAPI div#EncryptionWarning').toggleClass('hidden')
+	})
+
+	$('#reallyEnableEncryption').click(() => {
+		$('#encryptionAPI div#EncryptionWarning').toggleClass('hidden')
+		$('#encryptionAPI div#EncryptionSettingsArea').toggleClass('hidden')
+		OCP.AppConfig.setValue('core', 'encryption_enabled', 'yes')
+		$('#enableEncryption').attr('disabled', 'disabled')
+	})
+
+	$('#startmigration').click((event) => {
+		$(window).on('beforeunload.encryption', (e) => {
+			return t('settings', 'Migration in progress. Please wait until the migration is finished')
+		})
+		event.preventDefault()
+		$('#startmigration').prop('disabled', true)
+		OC.msg.startAction('#startmigration_msg', t('settings', 'Migration started …'))
+		$.post(OC.generateUrl('/settings/admin/startmigration'), '', function(data) {
+			OC.msg.finishedAction('#startmigration_msg', data)
+			if (data.status === 'success') {
+				$('#encryptionAPI div#selectEncryptionModules').toggleClass('hidden')
+				$('#encryptionAPI div#migrationWarning').toggleClass('hidden')
+			} else {
+				$('#startmigration').prop('disabled', false)
+			}
+			$(window).off('beforeunload.encryption')
+
+		})
+	})
+
+	$('#shareapiExpireAfterNDays').on('input', function() {
+		this.value = this.value.replace(/\D/g, '')
+	})
+
+	$('#shareAPI input:not(.noJSAutoUpdate)').change(function() {
+		let value = $(this).val()
+		if ($(this).attr('type') === 'checkbox') {
+			if (this.checked) {
+				value = 'yes'
+			} else {
+				value = 'no'
+			}
+		}
+		OCP.AppConfig.setValue('core', $(this).attr('name'), value)
+	})
+
+	$('#shareapiDefaultExpireDate').change(function() {
+		$('setDefaultExpireDate').toggleClass('hidden', !this.checked)
+	})
+
+	$('#shareapiDefaultInternalExpireDate').change(function() {
+		$('#setDefaultInternalExpireDate').toggleClass('hidden', !this.checked)
+	})
+
+	$('#shareapiDefaultRemoteExpireDate').change(function() {
+		$('#setDefaultRemoteExpireDate').toggleClass('hidden', !this.checked)
+	})
+
+	$('#publicShareDisclaimer').change(function() {
+		$('#publicShareDisclaimerText').toggleClass('hidden', !this.checked)
+		if (!this.checked) {
+			savePublicShareDisclaimerText('')
+		}
+	})
+
+	$('#shareApiDefaultPermissionsSection input').change(function(ev) {
+		const $el = $('#shareApiDefaultPermissions')
+		const $target = $(ev.target)
+
+		let value = $el.val()
+		if ($target.is(':checked')) {
+			value = value | $target.val()
+		} else {
+			value = value & ~$target.val()
+		}
+
+		// always set read permission
+		value |= OC.PERMISSION_READ
+
+		// this will trigger the field's change event and will save it
+		$el.val(value).change()
+
+		ev.preventDefault()
+
+		return false
+	})
+
+	const savePublicShareDisclaimerText = _.debounce(function(value) {
+		const options = {
+			success: () => {
+				OC.msg.finishedSuccess('#publicShareDisclaimerStatus', t('settings', 'Saved'))
+			},
+			error: () => {
+				OC.msg.finishedError('#publicShareDisclaimerStatus', t('settings', 'Not saved'))
+			}
+		}
+
+		OC.msg.startSaving('#publicShareDisclaimerStatus')
+		if (_.isString(value) && value !== '') {
+			OCP.AppConfig.setValue('core', 'shareapi_public_link_disclaimertext', value, options)
+		} else {
+			$('#publicShareDisclaimerText').val('')
+			OCP.AppConfig.deleteKey('core', 'shareapi_public_link_disclaimertext', options)
+		}
+	}, 500)
+
+	$('#publicShareDisclaimerText').on('change, keyup', function() {
+		savePublicShareDisclaimerText(this.value)
+	})
+
+	$('#shareapi_allow_share_dialog_user_enumeration').on('change', function() {
+		$('#shareapi_restrict_user_enumeration_to_group_setting').toggleClass('hidden', !this.checked)
+		$('#shareapi_restrict_user_enumeration_to_phone_setting').toggleClass('hidden', !this.checked)
+		$('#shareapi_restrict_user_enumeration_combinewarning_setting').toggleClass('hidden', !this.checked)
+	})
+
+	$('#allowLinks').change(function() {
+		$('#publicLinkSettings').toggleClass('hidden', !this.checked)
+		$('#setDefaultExpireDate').toggleClass('hidden', !(this.checked && $('#shareapiDefaultExpireDate')[0].checked))
+	})
+
+	$('#mail_smtpauth').change(function() {
+		if (!this.checked) {
+			$('#mail_credentials').addClass('hidden')
+		} else {
+			$('#mail_credentials').removeClass('hidden')
+		}
+	})
+
+	$('#mail_smtpmode').change(function() {
+		if ($(this).val() !== 'smtp') {
+			$('#setting_smtpauth').addClass('hidden')
+			$('#setting_smtphost').addClass('hidden')
+			$('#mail_smtpsecure_label').addClass('hidden')
+			$('#mail_smtpsecure').addClass('hidden')
+			$('#mail_credentials').addClass('hidden')
+			$('#mail_sendmailmode_label, #mail_sendmailmode').removeClass('hidden')
+		} else {
+			$('#setting_smtpauth').removeClass('hidden')
+			$('#setting_smtphost').removeClass('hidden')
+			$('#mail_smtpsecure_label').removeClass('hidden')
+			$('#mail_smtpsecure').removeClass('hidden')
+			if ($('#mail_smtpauth').is(':checked')) {
+				$('#mail_credentials').removeClass('hidden')
+			}
+			$('#mail_sendmailmode_label, #mail_sendmailmode').addClass('hidden')
+		}
+	})
+
+	const changeEmailSettings = function() {
+		if (OC.PasswordConfirmation.requiresPasswordConfirmation()) {
+			OC.PasswordConfirmation.requirePasswordConfirmation(changeEmailSettings)
+			return
+		}
+
+		OC.msg.startSaving('#mail_settings_msg')
+		$.ajax({
+			url: OC.generateUrl('/settings/admin/mailsettings'),
+			type: 'POST',
+			data: $('#mail_general_settings_form').serialize(),
+			success: () => {
+				OC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'))
+			},
+			error: (xhr) => {
+				OC.msg.finishedError('#mail_settings_msg', xhr.responseJSON)
+			}
+		})
+	}
+
+	const toggleEmailCredentials = function() {
+		if (OC.PasswordConfirmation.requiresPasswordConfirmation()) {
+			OC.PasswordConfirmation.requirePasswordConfirmation(toggleEmailCredentials)
+			return
+		}
+
+		OC.msg.startSaving('#mail_settings_msg')
+		$.ajax({
+			url: OC.generateUrl('/settings/admin/mailsettings/credentials'),
+			type: 'POST',
+			data: $('#mail_credentials_settings').serialize(),
+			success: () => {
+				OC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'))
+			},
+			error: (xhr) => {
+				OC.msg.finishedError('#mail_settings_msg', xhr.responseJSON)
+			}
+		})
+	}
+
+	$('#mail_general_settings_form').change(changeEmailSettings)
+	$('#mail_credentials_settings_submit').click(toggleEmailCredentials)
+	$('#mail_smtppassword').click(() => {
+		if (this.type === 'text' && this.value === '********') {
+			this.type = 'password'
+			this.value = ''
+		}
+	})
+
+	$('#sendtestemail').click((event) => {
+		event.preventDefault()
+		OC.msg.startAction('#sendtestmail_msg', t('settings', 'Sending…'))
+
+		$.ajax({
+			url: OC.generateUrl('/settings/admin/mailtest'),
+			type: 'POST',
+			success: () => {
+				OC.msg.finishedSuccess('#sendtestmail_msg', t('settings', 'Email sent'))
+			},
+			error: (xhr) => {
+				OC.msg.finishedError('#sendtestmail_msg', xhr.responseJSON)
+			}
+		})
+	})
+
+	$('#allowGroupSharing').change(() => {
+		$('#allowGroupSharing').toggleClass('hidden', !this.checked)
+	})
+
+	$('#shareapiExcludeGroups').change(() => {
+		$('#selectExcludedGroups').toggleClass('hidden', !this.checked)
+	})
+
+	const setupChecks = () => {
+		// run setup checks then gather error messages
+		$.when(
+			OC.SetupChecks.checkWebDAV(),
+			OC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/webfinger', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),
+			OC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/nodeinfo', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),
+			OC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/caldav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
+			OC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/carddav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
+			OC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocm-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
+			OC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocs-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
+			OC.SetupChecks.checkSetup(),
+			OC.SetupChecks.checkGeneric(),
+			OC.SetupChecks.checkWOFF2Loading(OC.filePath('core', '', 'fonts/NotoSans-Regular-latin.woff2'), OC.theme.docPlaceholderUrl),
+			OC.SetupChecks.checkDataProtected()
+		).then((check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11) => {
+			const messages = [].concat(check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11)
+			const $el = $('#postsetupchecks')
+			$('#security-warning-state-loading').addClass('hidden')
+
+			let hasMessages = false
+			const $errorsEl = $el.find('.errors')
+			const $warningsEl = $el.find('.warnings')
+			const $infoEl = $el.find('.info')
+
+			for (let i = 0; i < messages.length; i++) {
+				switch (messages[i].type) {
+				case OC.SetupChecks.MESSAGE_TYPE_INFO:
+					$infoEl.append('<li>' + messages[i].msg + '</li>')
+					break
+				case OC.SetupChecks.MESSAGE_TYPE_WARNING:
+					$warningsEl.append('<li>' + messages[i].msg + '</li>')
+					break
+				case OC.SetupChecks.MESSAGE_TYPE_ERROR:
+				default:
+					$errorsEl.append('<li>' + messages[i].msg + '</li>')
+				}
+			}
+
+			if ($errorsEl.find('li').length > 0) {
+				$errorsEl.removeClass('hidden')
+				hasMessages = true
+			}
+			if ($warningsEl.find('li').length > 0) {
+				$warningsEl.removeClass('hidden')
+				hasMessages = true
+			}
+			if ($infoEl.find('li').length > 0) {
+				$infoEl.removeClass('hidden')
+				hasMessages = true
+			}
+
+			if (hasMessages) {
+				$('#postsetupchecks-hint').removeClass('hidden')
+				if ($errorsEl.find('li').length > 0) {
+					$('#security-warning-state-failure').removeClass('hidden')
+				} else {
+					$('#security-warning-state-warning').removeClass('hidden')
+				}
+			} else {
+				const securityWarning = $('#security-warning')
+				if (securityWarning.children('ul').children().length === 0) {
+					$('#security-warning-state-ok').removeClass('hidden')
+				} else {
+					$('#security-warning-state-failure').removeClass('hidden')
+				}
+			}
+		})
+	}
+
+	if (document.getElementById('security-warning') !== null) {
+		setupChecks()
+	}
+})
diff --git a/apps/settings/src/mixins/AppManagement.js b/apps/settings/src/mixins/AppManagement.js
index 96f2c1dad4a..cf44a37a53f 100644
--- a/apps/settings/src/mixins/AppManagement.js
+++ b/apps/settings/src/mixins/AppManagement.js
@@ -20,6 +20,9 @@
  *
  */
 
+import { showError } from '@nextcloud/dialogs'
+import rebuildNavigation from '../service/rebuild-navigation.js'
+
 export default {
 	computed: {
 		appGroups() {
@@ -109,33 +112,33 @@ export default {
 		},
 		forceEnable(appId) {
 			this.$store.dispatch('forceEnableApp', { appId, groups: [] })
-				.then((response) => { OC.Settings.Apps.rebuildNavigation() })
-				.catch((error) => { OC.Notification.show(error) })
+				.then((response) => { rebuildNavigation() })
+				.catch((error) => { showError(error) })
 		},
 		enable(appId) {
 			this.$store.dispatch('enableApp', { appId, groups: [] })
-				.then((response) => { OC.Settings.Apps.rebuildNavigation() })
-				.catch((error) => { OC.Notification.show(error) })
+				.then((response) => { rebuildNavigation() })
+				.catch((error) => { showError(error) })
 		},
 		disable(appId) {
 			this.$store.dispatch('disableApp', { appId })
-				.then((response) => { OC.Settings.Apps.rebuildNavigation() })
-				.catch((error) => { OC.Notification.show(error) })
+				.then((response) => { rebuildNavigation() })
+				.catch((error) => { showError(error) })
 		},
 		remove(appId) {
 			this.$store.dispatch('uninstallApp', { appId })
-				.then((response) => { OC.Settings.Apps.rebuildNavigation() })
-				.catch((error) => { OC.Notification.show(error) })
+				.then((response) => { rebuildNavigation() })
+				.catch((error) => { showError(error) })
 		},
 		install(appId) {
 			this.$store.dispatch('enableApp', { appId })
-				.then((response) => { OC.Settings.Apps.rebuildNavigation() })
-				.catch((error) => { OC.Notification.show(error) })
+				.then((response) => { rebuildNavigation() })
+				.catch((error) => { showError(error) })
 		},
 		update(appId) {
 			this.$store.dispatch('updateApp', { appId })
-				.then((response) => { OC.Settings.Apps.rebuildNavigation() })
-				.catch((error) => { OC.Notification.show(error) })
+				.then((response) => { rebuildNavigation() })
+				.catch((error) => { showError(error) })
 		},
 	},
 }
diff --git a/apps/settings/src/service/rebuild-navigation.js b/apps/settings/src/service/rebuild-navigation.js
new file mode 100644
index 00000000000..57cb1e439bd
--- /dev/null
+++ b/apps/settings/src/service/rebuild-navigation.js
@@ -0,0 +1,130 @@
+import axios from '@nextcloud/axios'
+import { generateOcsUrl } from '@nextcloud/router'
+
+export default () => {
+	return axios.get(generateOcsUrl('core/navigation', 2) + '/apps?format=json')
+		.then(({ data }) => {
+			if (data.ocs.meta.statuscode !== 200) {
+				return
+			}
+
+			const addedApps = {}
+			const navEntries = data.ocs.data
+			const container = document.querySelector('#navigation #apps ul')
+
+			// remove disabled apps
+			navEntries.forEach((entry) => {
+				if (!container.querySelector('li[data-id="' + entry.id + '"]')) {
+					addedApps[entry.id] = true
+				}
+			})
+
+			container.querySelectorAll('li[data-id]').forEach((el, index) => {
+				const id = el.dataset.id
+				// remove all apps that are not in the correct order
+				if (!navEntries[index] || (navEntries[index] && navEntries[index].id !== id)) {
+					el.remove()
+					document.querySelector(`#appmenu li[data-id=${id}]`).remove()
+				}
+			})
+
+			let previousEntry = {}
+			// add enabled apps to #navigation and #appmenu
+			navEntries.forEach((entry) => {
+				if (container.querySelector(`li[data-id="${entry.id}"]`) === null) {
+					const li = document.createElement('li')
+					li.dataset.id = entry.id
+					const img = `<svg width="20" height="20" viewBox="0 0 20 20" alt="">
+					  <defs>
+					    <filter id="invertMenuMore-${entry.id}"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"></feColorMatrix></filter>
+					      <mask id="hole">
+					        <rect width="100%" height="100%" fill="white"></rect>
+						<circle r="4.5" cx="17" cy="3" fill="black"></circle>
+					      </mask>
+					  </defs>
+					  <image x="0" y="0" width="16" height="16" filter="url(#invertMenuMore-${entry.id})" preserveAspectRatio="xMinYMin meet" xlink:href="${entry.icon}"  class="app-icon" />
+					</svg>`
+
+					const imgElement = document.createElement('template')
+					imgElement.innerHTML = img
+
+					const a = document.createElement('a')
+					a.setAttribute('href', entry.href)
+
+					const filename = document.createElement('span')
+					filename.appendChild(document.createTextNode(entry.name))
+
+					const loading = document.createElement('div')
+					loading.setAttribute('class', 'unread-counter')
+					loading.style.display = 'none'
+
+					// draw attention to the newly added app entry
+					// by flashing twice the more apps menu
+					if (addedApps[entry.id]) {
+						a.classList.add('animated')
+					}
+
+					a.prepend(imgElement.content.firstChild, loading, filename)
+					li.append(a)
+
+					// add app icon to the navigation
+					const previousElement = document.querySelector(`#navigation li[data-id=${previousEntry.id}]`)
+					if (previousElement) {
+						previousElement.insertAdjacentElement('afterend', li)
+					} else {
+						document.querySelector('#navigation #apps ul').prepend(li)
+					}
+				}
+
+				if (document.getElementById('appmenu').querySelector(`li[data-id="${entry.id}"]`) === null) {
+					const li = document.createElement('li')
+					li.dataset.id = entry.id
+					// Generating svg embedded image (see layout.user.php)
+					let img
+					if (OCA.Theming && OCA.Theming.inverted) {
+						img = `<svg width="20" height="20" viewBox="0 0 20 20" alt="">
+						  <defs>
+						    <filter id="invert"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" /></filter>
+						  </defs>
+						  <image x="0" y="0" width="20" height="20" preserveAspectRatio="xMinYMin meet" filter="url(#invert)" xlink:href="${entry.icon}"  class="app-icon" />
+						</svg>`
+					} else {
+						img = `<svg width="20" height="20" viewBox="0 0 20 20" alt="">
+						  <image x="0" y="0" width="20" height="20" preserveAspectRatio="xMinYMin meet" xlink:href="${entry.icon}"  class="app-icon" />
+						</svg>`
+					}
+					const imgElement = document.createElement('template')
+					imgElement.innerHTML = img
+
+					const a = document.createElement('a')
+					a.setAttribute('href', entry.href)
+
+					const filename = document.createElement('span')
+					filename.appendChild(document.createTextNode(entry.name))
+
+					const loading = document.createElement('div')
+					loading.setAttribute('class', 'icon-loading-dark')
+					loading.style.display = 'none'
+
+					// draw attention to the newly added app entry
+					// by flashing twice the more apps menu
+					if (addedApps[entry.id]) {
+						a.classList.add('animated')
+					}
+
+					a.prepend(loading, filename, imgElement.content.firstChild)
+					li.append(a)
+
+					// add app icon to the navigation
+					const previousElement = document.querySelector('#appmenu li[data-id=' + previousEntry.id + ']')
+					if (previousElement) {
+						previousElement.insertAdjacentElement('afterend', li)
+					} else {
+						document.queryElementById('appmenu').prepend(li)
+					}
+				}
+				previousEntry = entry
+			})
+			window.dispatchEvent(new Event('resize'))
+		})
+}
diff --git a/apps/settings/src/store/apps.js b/apps/settings/src/store/apps.js
index 038b42e64c9..1efed274b32 100644
--- a/apps/settings/src/store/apps.js
+++ b/apps/settings/src/store/apps.js
@@ -25,6 +25,8 @@
 import api from './api'
 import Vue from 'vue'
 import { generateUrl } from '@nextcloud/router'
+import { showError, showInfo } from '@nextcloud/dialogs'
+import '@nextcloud/dialogs/styles/toast.scss'
 
 const state = {
 	apps: [],
@@ -37,7 +39,7 @@ const state = {
 const mutations = {
 
 	APPS_API_FAILURE(state, error) {
-		OC.Notification.showHtml(t('settings', 'An error occured during the request. Unable to proceed.') + '<br>' + error.error.response.data.data.message, { timeout: 7 })
+		showError(t('settings', 'An error occured during the request. Unable to proceed.') + '<br>' + error.error.response.data.data.message, { timeout: 7, isHTML: true })
 		console.error(state, error)
 	},
 
@@ -180,16 +182,16 @@ const actions = {
 					return api.get(generateUrl('apps/files'))
 						.then(() => {
 							if (response.data.update_required) {
-								OC.dialogs.info(
+								showInfo(
 									t(
 										'settings',
 										'The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds.'
 									),
-									t('settings', 'App update'),
-									function() {
-										window.location.reload()
-									},
-									true
+									{
+										onClick: () => window.location.reload(),
+										close: false,
+
+									}
 								)
 								setTimeout(function() {
 									location.reload()
diff --git a/apps/settings/templates/settings/frame.php b/apps/settings/templates/settings/frame.php
index 53987bf6074..6d017f07671 100644
--- a/apps/settings/templates/settings/frame.php
+++ b/apps/settings/templates/settings/frame.php
@@ -22,7 +22,8 @@
  */
 
 style('settings', 'settings');
-script('settings', [ 'settings', 'admin', 'log']);
+script('settings', 'settings');
+\OCP\Util::addScript('settings', 'legacy-admin');
 script('core', 'setupchecks');
 script('files', 'jquery.fileupload');
 
diff --git a/dist/settings-apps-647.js b/dist/settings-apps-647.js
index 4170f53cf9ee7e7f84c7612baeec55075f66dd1b..a59a10a663b949361c58b2d4740a65083b8cc90e 100644
GIT binary patch
delta 4483
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
Xl8w_0j8jY!jm!+qEes5dl9G)9cXrrz

delta 1638
zcmey^&3x%I(*|KDRudyj1Ix+cPL_-rlLMX7bkl7U_3|`IHFYv<6E)1u42?8(9Kk{v
znmT2+i5g}WW=5JiX<(tU%}<<WGHzZP_>5i2-&rp>wWK67FTGgLv7n$>uP8OCG&3i~
zFR?5$J+UM+KX0;Nl;mWs2ARoQBcn-C-doQ;*)ht86fN7MLP$|=8XZKua;3@JqrHh&
zF3nO~tK+m;KSqp^(Q~p}Y%!zH<Xy3b+`&2;20AW!QJNY~lh>DMZkCTLXJPc5JUvO7
z(R1?dB>#FpTOS=)+e8gZV`FnmO&xb|h`Va)sDR?d+|pE2CloBCqN(ExQf6RkW~r&;
z4;J&))Csap)G#(RGu6}y0}BOd>O|QlY8YA?8JcP8RDs2!G<Do;6E#dsOf4)mbppU*
zZkjrgAa(UdX2zzPI)%2?wbq4t#U+(FsUeB!Aw`LK#cBCPxwZisnmUDg#i=EZB_&0f
zNu?#J#kOH!vCO>U)S?nwe+^B&q|Ce&jl9yF937>M)Wj4ekd~DET*m-U+fXF6!64IJ
zb5e6t^Ga;1G&FVGH8f2%BK4wl3N>{i^`g|&BK4y5a`KZCbBdAK)@6xB3Ldtwfb`SR
zn7pt|a`OFt{>f*j=xv^ya-N?taB^}<8BZ1{<r<rs8EEQ+PkvgW%HvV1lbczQnOAHT
z9k^MnG?be$YjRG*EM70TY2hfQDQ=E!tmZQJ1_i!_p`oTu1UR(3HFZi#Y!fvs%uP%T
zHFfepY$J0EQ!`DS)Dp0Yyb?{F#K}TE>5L_tt9nWpg;Gm2H1&!T^D;{^t5P*I40K8s
z^)U)%f^?dhnp<e<6qkU)ym<1*$s+ZjP%bXP63oRVdU(URxI_;rpy8^qg|tRyiC&aW
zafzl5h@qwiBB6n;h{6L0cTovEgc3{OL9~!De{$mlU6}|CO&#CFqU@CX@;s}e5=0;e
z>jZ8-JwcdRxB%o)Q!`6r6HT2QuupT~KFz`A(;Nam%|Y=gTs2mo7Jz)3Q=+K@VyLNs
zNQ6(3cwnC<BYc{V@G1Z1vs2EBFs4kNz0#B?xkSgYpui`yxWvk9^4*mh;^`WiAQ42N
z=UI}PYvnjuW>pL?N^op$T_wyZTnY*dLlZ+w6HT3TaA2gv10x+<V5AcWjC7R1fUCwD
z7^R@VNH5XU0Ws9nKqMkCka*z0$Up=}3Q}N9K08Hv^P(-*f+FUI7O9pdW)>DEDF(*I
KiOET+MrHupejo_|

diff --git a/dist/settings-apps-647.js.map b/dist/settings-apps-647.js.map
index 92dfbf123f587107cb0e322668c7205685015b89..c7baa1a1a1df3f412c60a911746556d57c631e7f 100644
GIT binary patch
delta 20559
zcmezRgZ=XkjtM#<CdtNW2F58SiAH9I<`xD9MoG!W8yz~B7;`6|WcppNQ|RQHmf@_E
z=;-XM<L~I`@2unM=;-LE69^`~9UVhqA`tO(Cr8IroopvZ$6O~JcSlEWokAx^=MooZ
z9bXV9($O(l$J5a<0<0?>WLSiwj<=(85J+(*Se3bxBS_raS;w>9(b3ac$J^1-+gT^v
z(J{wK$Jx=-5oCZb*nmhKcSq+aFf-8yrpeLK(*<N?iIXo#DAHLc*wHcAStl7}ce#_J
zdzG^XNFv-5BoPQAoSi`irFemaLtP;%Qym>M>z!OdLcV2CzXUouSGZ(4fy6?=hJ$3h
z9UXmjd>uV2oN^&D-a461j*gj5I;oD1scs<iA(ps<^m&4<DscgO!Vs*%yAn*fyMjVB
z(AY`G+tD@4DcecMwcgP&JP@QZJP4#0!VZP8-5nkM4MD0M{lQ^a;R-d#T_@Pl*&_&K
zGsNE^Iu=fjjuy^EV2dol!CdHK;-r)4=vfAKiYGV_(?R}pEpUne+vcfLAMEG|aXZ-6
zc_3*=GZ#=wsB%FHtuUQpCr8IpXXMZ_2PYV97aeCu=Nwm%Cwwiy)_aG69TpA=W?x6=
z9A_7heeNDG|AW#^DM)R-BPf8~9i2;@zy_p)UFoY+>EY<;q2ur9TJ97A(h5=KX6dA3
zkmMMc=?c~i)f-gis$=2e7^v+56%Ez#b_^==)G={(4EF#Vn3#g>qDV()LuYVYh1Wal
zggQD#f|84C8N>;mAp1NsoRD>RJ341MdxIogL0QEy5fngyDIfvgR2^SOS96G7uw~(S
zD0)Fj$~h3EG}u`u($O)p03uxoN<Q_DsX3r<aP-Y}0(mzN99NLEA6f=c2n|PnN9Qu<
zNRT;!emaScj)|ba3<l*yXG=&%2n0vFuQNy@RL9@Zv%tv|Y&ddKcFuFk2RqX>R43H2
z9+bU39UVP&A|2hcAj!ft5@Z0xcj2jEHaK%e27oLN_5$Uk92ao3xEF$4?dYGT<L>Al
z28ltijoD5aNVzgZC)3%{G1CPc3d!c+M5gbe<Ll^LU*MDvN*m4|;36U2$r+r`ik(2E
zK_oa=y5_h*(i0+sJC-{cIe{IP12W6A$^}%o6uW_9CC3e-I@=kXJ3;1zXMwfmLCj8f
zMM}i=jwP-jUFB||RBY^~<LT(`2~LC_u5KXjl8~06$<edO32cCidnq_kc!C2W92~Kp
z;J66{i8xm{>6k>+Lz1~?rbiAqQhY&a*Q?A!$HLjs-(4r)8zS#)<Q4{U4OrSG%N-=`
z=>-mNur{3On^5wuhvZS3rEfyXyWY_;7=QW()h^_xZ`{cnT$=>fL&`WX2cFg=9i1~=
z3c%@@$ON9OQ|jdCSm}hEz`a3LRGAz8<Q?Mf2v6U|&ai4F+|e;S43WOw^&#bFx|1KI
z=Ew(^y#C-+4X$lHAvs?s-O0JcJ!kT9W<^eOP!;LuZQ(NcJ+oSUo+~Jac;<qWzJC?C
zPVub-WnR}TS5WTu3f2jC^bP{$1^*mZaE+V`&KdrYBx?-GZ#t2Vt_98}PCB8E0U#ZL
z5FJGj9Ts3a{Vl<iH<Eq_M^LR7=;#<&1*z>VAlV@Uq|dd=rQ8+d^)Qf$;b0RzOF%Lp
z=YtZtXYl0XELQwgXkz@VTKtA+V(zT&{1s?ob67Q`vOr=b&dECAj-}2?ptg!XD98I{
zyH38tD&=Ddk_KDn?dS;e0MwD-00`BGcnU5CYAdCK0?;v7$J5c-*hL>=gqiDPTQ)uZ
z95>`JOrKoEW}jFEDy*Edz@@q;G?38E3wCr2g_{IQRo(^8pbQcgs1xoO?p6UY*31=D
zOge{{L+pfxbo%5t4zc<wh!Uv58IXw21jl8dj<2J8j;oOqD74c+^?quwDcDgN;OO-R
z7s8%q5O0}-a{!3v>*(kUDzhAeby6LjGn_54$s{^D=Q&wA*?`I^G)=iq5IHPTkti~g
zpRp@MLtK;tE<Am~g>W#oz}E)5(jS~Y9Kq>U$Jx=*8RBZ+JW$9uSGa&EM_5uM7(kAo
zW|nJ}OFFo!Fn0n4k(pDnB{+<VATH7ddp_MM!yO#M&~S$2NQ9f5%bZKVnJus!OeKR;
zQDBC%j-#uiBglE4j?N{{1|X9igF#hl6jUKNru+@Ty8LzAL2Zi)aDFA)7lE0eOy-*9
z>aG*%SmX@yM4_{17|4<cXzGBa7;st)1|<i_Y*5?V(G}Fv1-1WOA#G28Q2Wpu)W9zS
zRoIT+pk|S?fg7k{?wAVlwR4dZh;sA=%Q%DLBNALGIf7G@Be*pm3TjfiW;la9X9#wY
zfwM~n$n(yAXil1}!6j2~2#(x9P!XEtf@(9UAS2ykcbz~-eXzya&W>4Niv!RshK5C=
zqhs>qt6V}E`mUg20_I`ztThLDxWEMz1^F&6+Msp{ribIX<<hBPnWs*mV-?u0N*7R9
z%H7c!-H(&Icx0(!m$#0;qb1lb3l|q~w*k{%T|Ba`6#6UJ+0?VrYx7^84UCMwlh^TW
zX0mjjY~|rG`G6wl<OT_L?@&j_Pz!fZMEQcUzbm+y3M~RP=p8+aJwOfaL{Qhp(H$fW
zt|kM^AhP8i;B=n}PWR4v9+L|t#PW@t9373EGCe@iO+br#1;m_64^SgBu?oV|hSY3E
zE})J@vLQqeRf!SA;#{W^u$_|^2=K^NdVthNVi*$W=onn&F*!j;dh!#22tE_AUEyHA
zlzB|<4^f(&BdE@226Zo}BVFM!d7)rhy#?67P;gJd65<Mk(?Hz^sMEAPz{Qw8L<!6w
zUq?rObBGXDmu0$wLN+-A(piFfDBGz7tOXPulQVRLT|FHgeZiduPpH+IuAra_2SryP
z$iJab1GGVXJx6~uM?ig3C?Piaf;dY(QIX;djTD$iKqCWCk7Rm+BQ*=+W~hrwoIsB8
z1v{n+Tx@y5w1Qd!P_307I>Dljj@j<8_yGr+shc4r0{sj*!~GzY8#E#aS)1z$DlLOS
z*5*3pKwN}muP?;jNS)xxxe`*7{R}xK%Zjk`LEIb;Y8kp3x=c0@5e<ZDf~fbz>cxC;
zTqWi~Y=M~JS?CH*8Q|;!s(u_p!KP+-f=taJ!c+_c+}%J)A`)f|N{nJpWJvLA7bunu
zby+F6*iD5*lRKhf&-R3*9Z)3?PXCsWh7KqUL$%#N&JToUXmB?7uY!2E5?qsl6JDfF
zwyUFKu50GxeSu0$MV^z-iHg@l{R%c5YcQf102%nH0-NcH(_7`>RF&fdH4mT9{2d*g
zsp2(l4@bvz&&<ikf|TluK>c~gNF7LN1`aLM^a<)=KplsgW>7o}8tY4UBIH?UV)Zlu
zTbgX@sl)5)=;#T`Gmeg-1s;<V#8u6pL0|z%_vVnO(e{93K6gh)cYJxDADZ%mLCQfX
zA5tW6OrD_59!@a+pjKCcTPgnFL|OqJ{lOi7zUCg2(<F5DaYiuA&k(aggDs9AcP$hY
zo7`uv##HG#`JaTC9kicj4z&$ZGgv_LT(F~KI8-JVoI{iIAgQVtoL0j#CkILzM(RUC
z$_$bbpz0yEdS*bz6CtG*kxoqq4GF^C`c_iK7$wF*)hVcC3Wr8IZkI(sU1kJssreg&
zTg9+)o*b9K12NIk3fWQN;G9XEqv~Of0yXy>1C3Dvo;XLrsy%2JXM%@!!!y9+1TgPq
zyMYSN<SZ1yTsNJ>dPm31s2mjGOz^0bQ6$U+aLrK`38{S{&IIRAGRpuHC!I<sM@Lr!
zaOpTXUPcyFuGPtCX&Zq1h>peJW^Fj6KLHv50FBUNNojJ>pvwn!8XO}F(1LEVf~>eB
znQkm~(#eOoadL&MBFKG(mfH5<E<b1x9W(%221)wRK+gtOC9v?tod#iUHh|;~Lo_#U
z4wU0%X7rpKuei_ysg3BY4H~|1jLd_?Q@$5ypfJ;^0KzTw0+kTSkSe4EB39}JtynU=
zCVMDF2f&IPP%{c^DOwKJ2hPWl;IYqaXPsPUN5_2U3b2f4r5Cu`0*$_<R(VbStYqt#
z4sAMs>o;FVM_4n}0PLVha3V2;=!V%3nts4)f2Hf>I%P3`XeLH&UEwS!U@70o3*@Xy
zPh*H>5cQTG(6-J6ad5Hg4|4;~FhD6+%$yt@&745ymcr^2m;umMfUT-+J*2H@0vcg<
z^fU!q4;r#?gj5>f-jgG!<KgIU2pTkYbcX~YD8$OaqoJOb;PC=b$q1@bz?#AR0&us~
zw;ZesJS!Bg4`Ew?V;?ezrfdne5`VQ|s2bvl;=*uH(FAoN*yUhbL8D8K&XD*5wTB%c
z&VV`-oZ9^}yeFSiHS<Lc2v9Q;GO_@Uaq!3_tVxO**O18;{}N~=3JS*p=g9$T`V#4|
z2`aE3{WCyAk&fQw9+L~K74$73HA<#8s0>R4hZjf%sN{##B&hBI^@=9{QR6}HV}Pn)
z9d#~j!co|Tp(zL6-~wfcTxY1CkS&D@p@gz$wl}yQ0CzAz?ge=l6!O98;1MqT$pRMM
zpbkL2cRH9$S|R}zVA-Hy14nlvQVA#$bDeZR?I&08C<s!LsdohpsrWk5I8}psAfOlq
zPv(Rp-0Uk0n#}~|4%{s+8_fWXLU4;Z)2RrYLOgRJ!Jh}N&4NMxgY=G#Cl{(KOunKi
zh@KEWYudwN8XBK?8k&{Pj*gYi(Bg_vQb-0B(9jGA8c@MmB-E2%CLlr&)J#JPJy76*
zk{)K@6@mxp(x9FN1z(J#V>T@O48X0vLU1``=wt}VX^21#1l0|op|b*~3`l_ILo#gv
zIKT^oprVk%*f<bc7|+#?Nk<MYNavTh;sesb@<b`7%fZuhSmL1qGz8(wSh;zbP7EVc
zx%=c<?h__IH{fN;^O$VqAv1Zup1Fp$7dStHi!D&W99aaOF-7Z?7JE;Y(|2Ud+?=34
zg%P41KAJPx&(Kg0+6Kr3r@v5Wv&qN}S_2zHLPr}s8t-f90xq5o7)tx%Y@2{)9bnx<
zNFfIr+<<fr%bh^07htWYaBx$q(y736vWAgTeJP|&0q5dOr!t6VpsvdR&v$!*hE5<o
ziem6MVKBt=pxPVid4zgUmIHNCLo2;O-5AI;ZD19|SPNKV%@R^J8F=g1f;1Syr3;-L
z9SfbH(g;&QX%U<o!6~ZT2{bR@=w9kE$yi6o7)`T<+hjXqU)2mqoq{j}WKlLmFbhH%
zcu!tutWgi;S-65jsnE#`68NT|K}|<U4VMY-ghzsh*t|gr*b|2)f3T-PPIZN3+8l7o
z_BVle7$Oa>uRKACCp^nX#}d?ygj=5O4l2EUEg_z&bOX(NJ7zmoLEMCz3nmAsN!KGr
zp9sVxXnF%2ao{k-UfE*HEuc9+9L*UWSI5aq1cfJCnyP?0gYl-4#+bPZ)`={K`K1El
z7ewM-X=-GW4h?NzN5{YnNMKoj2Ny%ZDKj11@q%<9Eg|7o={lL)%r(ve94U}u8Z?X&
z3?28haMQ_!EZ^~WbPR^Jn9|+BDW@1xX@O@qK%t)v%Xi@LF$Y@@X>3nk7$#Z|Dv2Xa
zASD%;4OW&1Nkq^nffk5(N`Fw@nh$FhVi^;F6nfs6MJ}^<1!Ms3fFYNtD`bQNlC0sK
zNobEe45gR@uVn!b`??yqfbwK8Y}5+5iyjIp&IoqVrQ-uZf$I-#Rt>t2x^x_h`vy~Y
zUAi9CX^`G99Xsvyj-H@iyQ5=zBu1w_(9tm*TKPbdlxMaZs0CUa0qgdId-9gy6!hf9
zot#0XB6Oq@(UqSZEd%Z*lirO-3sM}Nc~Fu!EQ2f>f&@A^-{P!7LDeR#3WW@SBD)*W
zz1InMoLns{2kPNpkkF+<4`132C57PV=YvX~@<f!v8&ola3Wt|A>h+N5Gjq~001ZOG
zdXC_V6V!7=DXc&-98S2zGIMiuGy@M(L_&*ooMn`6J=C~?az>gXxIGB#-9wxKP0SWy
zD2cfw43?Nl51q;Rc4ABgu9MsCl<HA?ZV($wp-nANp&DEW?#6*e7(h!L!R04(y$v|x
zz^M`1RW1O}+CUl`Rp7b~RzZV?ZBn6u3$0yp!A*<F>h^r11*q`~@=%4x<O%j-lN0O(
z6(DW`O%Mh<I%fM6K@>wG(bU@zq|ku9*awudA}2RGNUN4WRN$}ECLeSV)yjm`WKgvr
zAHiyRh_&zuoC)>@oDd<;a*xS14hpJeL|P+eMljt$Lk40#XeJ#z>WgG$rN?AFCx!Y7
zVypzW+d!Ek650+26(ND7xxv%G0~BSMPE`;aAubaD34>Pdg4QfJ`WE?2MslKo$7BsB
zwR%H{255jnJqC?(+zm78I}toH<zE7Jq6ozKFxP{ne8EY@m>Abij&l|Zp+@+@8~`2*
z3oiq^4VI`3JSP8hR*N$w#z9CiY~tkTXaZgkgcQS|^-h>AFi;uW<YEM~(86Q#9+x=A
z@XgY${LBJ5&LQBz`$TZR0NhgyRMtj}hPi^<q4`b)kkSCs?Dej2nY_kB$KS#SG<uN?
zR+0;8tASEax|1cuHwK_pYmSg%(IRl!?+$AZgGzM+NZ!?lC{FjCtmbLRWa=|n!CPr^
zwWk16w)5m3PgQ;BlrKu_5HxB7pY?*KIZ!4B`BlN&NFW=MQo*)mI#qg2PV|<UY~#hP
z4;>~zF$}a&J{wDk05MEy@(eElOalXaWqd)S`jy~m#6WE3qO_Tj90@CFa(zK%S28G8
z-7P`h#_Dc$PPo~VCwhy3%J1dgYW1)dJ!qB?To$9Y=t1#-R`5b|VXiMI(h^~11gK+~
z2VO>xdrZ|EHf90w5y-m92HrxG<9x6LOs$V*Cfvm!zd?uC@q{u+l{;u5onxsJBr#wK
zt$gs}rE*B;#}(uTXMIqh;fx>kdTh>scmbNLk*x8C7Fj6uBGNEcp)aUw3mI<60Ed@5
zc*Z0jobH{WH6b`ubDhe;iJcR=<Wt{g@_%134GW0Zz|AtKVa|@udFC$WUZAAw3reic
zewAL6ZT*at%fMFPjS_G^+2SW_iISK>)5&Jw$&*mXoPsZ?>JF`dn1}4)3XjQL{xa%F
zvo5ZnRFe+N>lQwsxqwt~NLTqx_Vrh-w}1{Gfx7L`z=amEAWJ|?06`tnO0ZWP!TT5-
z-K#KchNXXSM-H-%9y)914Qu&<W-K7VWdIH;NDo=2#0}IIhYZt0Cu^VulacRa&Hx!B
zX!qF+=7JPZ4vU1BFrX*|8|4m(LQf;#$>9N(phBlmLX4x>)zPuoHQRUch5!qvEQq_I
z{woFd@N>bDm*Z3d8J|ay%Y=!VKn6$3Ji+5$gJ9JJo+&6$&V%MpNT&gsF(9ohEZzA*
zziNUw&!W^HI6VtZsEMG#E?4lF*5veHMPF#NLs!=rz$Qs8p$P^$*8?h8p_MUC3qUmt
zXp+XyP+;<}V15;7_JkHisI4cct@)F6LX;h#+1UtOgM@>UHKg@z3~>Y098j?WE7y>P
zDnP5!Y(axw=R)K_70SC1)f8>;C`%y7EO+R{8<HMqP(br3XlYWiqhq>L0ZK+FhK%@w
zjWB>MUIK*!c#A{0sV{gj+|*F%dXypyl-WV~8obHM6Pf~1%3-Lrk>H2`_fB%b(|Ez4
zV#nVc>}f=s1y&drf`{4y^&v|z%)tu{BXvO2oRjs!WPPB%Lk;Xq@bDf;4`>?@bjS&+
z5)_=UaLDunxg``ld>3l&J2^pIdh#1*t^l~WucKpR4s^H+nj*lP??AzUNEYB>O)Ns*
zj?ShPZaSXXn|Z?jF-sMv7L{ctr|K7_CY5I9r0C`)mSv_VmSpDVO_qz+-OLsJxorCS
zaz=Ku#EQ)PVuiG#{9FZfhrHB^lH{EH(iDBLuzE~hW^O@#QHeseLV9XmYEfcIs(*5E
zXi?7OcW3qLH8d4$?G&nG@?uJgQcFsU@)W?j^wLvHG*Fdms3+$arRpObp{}D~q^Y2-
zpst@-P*7~2mS2>cSYn%1oS&zz2{JFHM6V<xHBUpMS|KH|BvGLjVO2~?Oi5;%f<}sb
zVo9Q2esZy1ZfZ%QUU5lcNojF%eoCr>qOGlhk%7VVhm#qFr%N$0@=VXU!^l^kl9HO@
zSWr-`V5?AF3$Y}oBso8?xI`f@vCK8Eq$o2LBnh$*Y%Yj_sxCP{uOu-uFSSU)Rv{%n
zximL5uSBn~G_|NQI5j6Vxg@_xLtPo+O9f?+?-WXNK%T0H8KtkUP?VaRUzVznl3ARX
zl#`mG08$2%Mz}>UEx*V$F*!p+BQ>w2s1h{@Ac3F=cM-ZXax$Yq?$^ysv5iquSI}0d
z2OFZ7nF0#-7^PTsO-)GLfdUkS6JY@q4O1DbV5?A4RGJENT1*K%+-gD5ln2rV4ns(&
zpt`{^Cr3ja;f(rNbxkB6<>)A6=B1=op!*6EA(<%(whE~^dLS<pr<UktrXbva2*1Rf
z9B|Mnlw>59C?po8D&*ytC}id-lw_nTB<B|ur6!js<QJu+7RBVn)R#b93rahRh(L}8
zyCPPhrba;nQ&de2DQ!TNf`Sl~#4=ORLohW*4-&H)pwNNZ7gGXBDfJjhB>|K?a#Qn4
z6%e6ht5ThrQX89~iNz$WfuECFqEJwjT9%n#S`13Vl_<$uUtb|HB}E}MFEObeme3SR
z@)eL1X<}XqIH7`E0t;nCNFYTSu0)6{4JIIYD@Lhar5cv5YGagQ6EqcUZEY3uN^^41
z(jg=T<YXe}vE-uE#FA9koK#Sb1EnfZj)KG|h|I}EN-3a}19B=#qKPS~hnSn0o33E1
zkYH0>mab5qnNpHr8>3`o5Tm4!k(!yFQ3B(YWu}%p<yY9oC>baiC>ViIjFLiP4oE?a
zk{v9ZK$a^g*rcSU6{CqMDA=TB=9HusDS&feW}ZY@YEg-AYF?>teo?9}QeaFzH%Dx;
z^~bP!I~)D9ROkGh{374PlA_EC5Fcy=hS3TNHo1w#*$|^M@^ex#oTLB-HsBlp^QNJJ
zfhw{`q5QPWoE+O2rSkfW%o316Hu@l4D0aq_*d%8bCFi6n6xqfondq6uC@Ca^0>{uC
z#HzH7Q8JEEQh=J2l#`g89iwDtqYu%9Viee23O4#6_oGVGE7<5`2}qmF+{E-$1(0o^
zXad;<qT!x0L-7)b2MKrE7^Tvp91Z2nJX`^<8KVTsI-sgD)v>r>viK*ddWDLd%)D%?
zjH1*u+ZZKyEG6gX)y60(C?w}378l#bC?ysY=w>G8=fx-~=%e_;M!&c$-7X;}4>^Uv
zQyw${<4)Q2>LsbU1v!Z&si+A&GdCToS1&U!FSW=c#Mei`Rv|Mt9h*&wxGhjmL^U{3
zuQ;{Dv81FZGpV#BRij=V<a2c$1xQu}aX>{Gw4ev2c8FinGILV%5_41WSX5k)2(QdR
z8e>Xen)DJ23R3e@oHH_WQZyiiV_u0KIE&Y(hNM=M_~oahLh3v{kR_T}osg5Cn39<X
z%FL)nAWDgp%raEZLbafJSsfgw>N*PQrFlj5sfj7N$@!&uC8<R?^p;fSr0S()78m3s
zg34O;y!^aWb<|kU*H=g>N-S4MEGbFN1GTw8MJ}jL%1bTJsRWhCkUAd{%E&3DUSD4!
zsZt>=C$TsK<hhda%;Z#Xb(Wi7lnSZrkjrUMz=A3?EOj?psTxy~s0a3`PiAq6USdj$
zhI(RNW^Q6hY6_A^r>7+|3e<zt78Ioxq~@h)Af-G|IS*>^q-7Qrmw;nWM*$k7I-tA{
zP7$EEg4cXGnb5e_NCb%^B_n9Xlvq%p0Ln-300K2r>%r|*<Y0j$I(Rh)sRoeK9%>sb
z0l9iZs)SUk;YL6!2vALnY!N6d3+iFjDa0O(fP@<Yk=M)2D^4vcaZJfdOis-!f#y>U
z^~AK2)S}e96m=bioJ^4S;lWa?keXARirV^uH52km^z2Z5qmJwwP?Mn;+@jQj#SpsT
z(?2FLO4q|PMS3dCNlulXpja;`0Hq*xP1M$!25M~$FZoi)tE}rOtgZF+72F{`4p24#
zRo1DwNvWU~ssf}w&?rt#Rme%K%r7m`D=khf(ksX)Knmpgm=aLS2vR`810EE;{?3ki
zAsMN;Aam8!6p*-jkg6gz1tZ2uZ#4K5YBj`^U~4ykL@`<pp!y5iNJxrAPOTu-Sn5o$
zFeH?4)tXpZJd=4osn&zCaY-tul1HjLLG>hs)nZHuqGE){24*&>2bX75Z=n$#AiOAT
zKuCzt#OKJd2r1kU<t%c!mRyh8@TGg}pdO`pK>yZ3J*<}vZXVFTbx@CJ9)Rj8U1)u$
zo03?RjZ|-z#FRi~^opt4K&S^*RLH4?&J6@^q!z;T#AHTMl*R$n&xqPz2h=2m)_{7L
z?FFO)I;LcR8VBm2Dil-$BKNvM10?Wj9TeoCPQJE+dMs)jXQnCCYrxe(s(*~i0!^OE
z&4YUAfD<&3(d%?vjRHgxf{!A^l)zmI@-eL23{wdn;Q^P`<(YXY`Q_j?Z(@mNa)xVJ
zYF>#(UTV1lgr#1TTAW#xst#_am&BBSbk@e?ZT@vJnz<f6fLNT7U+!8|lwYJ!i#gnw
zl9`y3pI(d@aD<Lq`hnVm;N~DykDi`BsK17NXj3l>WI{|{Y6W=EG9@)FadX1eDDKIP
zk4!k>_D^2$SYq<O>ui&S9;r`%=gBBMx%+`W7A4$|Qn83We3XVET7w}XG2QMKBirQ3
zPhv5o#G2!uZjXP;C?HS|9xheVQ9>OoRnk!cjeRQVD1k=5lysExlZ%yflt81LN;*o2
zaZV*2C3v%6Nk<7WWTT{`1j>5gfl81m&>~bxM+v22sZ_6{1RY^i(oq6;_|TO&=H!5+
zKm>T03}jkjNn&woiIR>IWT;C?M+qevDd{NXWP)6PTyZJsC}rlRgUICkJP-x$&enql
zb3i;;j~3)3kQb49q)IwUpiZcgjuNc*2vUUTKf-N-^&7z<k(&x~2Bd=sG7wZGgWL}3
zwSn}2`tkLkt`Nw$loW_BKph^CWPTo~-v+i5*3$tg1KSEw2^nsK6aZi!VCeyXBNn;s
zt)!#m@9e0gqXcb!+Jkk1T6d`+2Y@37DO)S)C_!=_)a8jK(5$DVqXf=)({sKunonQ#
zl~G~(m9LD=(>K&IicBy1#`t@B>32pMj-u4!g8aPV)al#5GpZw!|MZXF8O62>{9sIF
F0RS~o5Ptvw

delta 12611
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
B)Vlxx

diff --git a/dist/settings-legacy-admin.js b/dist/settings-legacy-admin.js
new file mode 100644
index 0000000000000000000000000000000000000000..dd28854bcdeeecdd8a055b3f55643c44a6a96dc0
GIT binary patch
literal 11107
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
C#_mr5

literal 0
HcmV?d00001

diff --git a/dist/settings-legacy-admin.js.map b/dist/settings-legacy-admin.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..2b2d28c804caef66721e04d898bc7d6df549047d
GIT binary patch
literal 30303
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
M2r4_2tdx{$0V!Y9od5s;

literal 0
HcmV?d00001

diff --git a/dist/settings-vue-settings-apps-users-management.js b/dist/settings-vue-settings-apps-users-management.js
index fb2b8e67c7a27a5a1d3b57c702fa66061f80fcfa..9f17e7dc3cdc76a2991288499a63e3c3fba9d096 100644
GIT binary patch
delta 390
zcmdnGiE;ZT#tqAuSS(CUjW@4m+Ql?^KCAd-c~-8;ZLE@v{+k!DMl&(`PgdX-n=Hh!
z3(OLo{D|WLgthqwr#mB~|7HblHb$_B*k)Uv*+Pr~lRv7<POg&G+pHoVz{D6Zd83xj
zWG@Am%}*7*pxn(dD$Ee3_T&#bT$3yGL?)k;<C;8Mo@?`7H6IS?d<`QrOJgHVoori;
zd<}DBV?%RIoodH`fZ+JahVD`v8U{LUdKE^RlO6SIxpXp%JwkkatP~A4@6)ejW7gCO
z-fU@hjS-^CD^PQ?oJF;Cb$*_6PG)kpRa$9Ya!F=>o`z<1QEEwPQJ%u&0~V58I>|Zt
z#i>?`hP9jTS}f*fteD*B62zE2`HIUm#^BAXU7HyhT{i2xdonU+O|JA%WUQDx+hYf#
z%j6JGQ^u^xU7nX2vo^<h#j}W*Bpat07^j#d8krfITNoG^B_$hgzUUXgC6Z)rX=-6$
Snq+2{XkcKJnrLohX$}CQx_J5k

delta 360
zcmdnKiE-;D#tqAuSWS#94J<dWV%o*T<ZnA!kWF;*2Ntf$t*nxhQ&`0}Z)J65Vhorp
z&n-4tkYg8^B|7;b#{&p!^L0*lM#g~6^4x5UU=gv+HaxS182u-IP?w!tDXX_xSw4V?
z(SPy=EuGB^6#HPzXccA%Q+x7z9j?jcdLolIm~l;>CC{~akD3q1WLbTM$#w1-lc(zI
zZa$-5$;PCUz1hR;8Y92IvtCMOVorW~v0i3gTK;4;i)!@}4W;7Ll9J54^kO9)CC7pS
zh0=nQ#FA7cO&yK2(!Au7%=|nJ&FaZ}EF@VpbrcOY-?v!I%@{nn*(He4ZSpmjYmC{O
z*Sa<{GFEIhboXRrbeUZ3p~x6Kd9KF}#)`>do~Dd0lY2ZbGrDX}@QP;<F*meGwKOra
rurNt6Fg8w1PD(X0+kDwCfJ?+8%{V2^D8<aw&@d&@%*fctB*_c_IM{Qk

diff --git a/dist/settings-vue-settings-apps-users-management.js.map b/dist/settings-vue-settings-apps-users-management.js.map
index a1f7d9bdfdc9c4387ff31e8f9f86dac92d6cd9c6..a0cd114180da95b0500d6401d52d193c1f72b3fa 100644
GIT binary patch
delta 3129
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

delta 2999
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
KzTS_~ofQCxU2*gP

diff --git a/webpack.modules.js b/webpack.modules.js
index 82d3998e881..81486df86eb 100644
--- a/webpack.modules.js
+++ b/webpack.modules.js
@@ -80,6 +80,7 @@ module.exports = {
 		'vue-settings-personal-info': path.join(__dirname, 'apps/settings/src', 'main-personal-info.js'),
 		'vue-settings-personal-security': path.join(__dirname, 'apps/settings/src', 'main-personal-security.js'),
 		'vue-settings-personal-webauthn': path.join(__dirname, 'apps/settings/src', 'main-personal-webauth.js'),
+		'legacy-admin': path.join(__dirname, 'apps/settings/src', 'admin.js'),
 	},
 	systemtags: {
 		systemtags: path.join(__dirname, 'apps/systemtags/src', 'systemtags.js'),
-- 
GitLab