diff options
author | Michael Weimann <mail@michael-weimann.eu> | 2018-12-19 23:13:35 +0100 |
---|---|---|
committer | Michael Weimann <mail@michael-weimann.eu> | 2019-01-14 00:08:24 +0100 |
commit | 813ff430f159fdc8aade236048f4a8ff18ac3b2e (patch) | |
tree | bb8fe0773a03ed43dba3c9cdecbb3343251fdb1a /settings | |
parent | 6993faaf67b6e822f7b03bd972fe42c9b4dd1d5d (diff) | |
download | nextcloud-server-813ff430f159fdc8aade236048f4a8ff18ac3b2e.tar.gz nextcloud-server-813ff430f159fdc8aade236048f4a8ff18ac3b2e.zip |
Implement storing and loading the server info
Signed-off-by: Michael Weimann <mail@michael-weimann.eu>
Diffstat (limited to 'settings')
-rw-r--r-- | settings/Controller/ServerInfoSettingsController.php | 67 | ||||
-rw-r--r-- | settings/css/_server-info.scss | 4 | ||||
-rw-r--r-- | settings/css/_where-is-your-data.scss | 4 | ||||
-rw-r--r-- | settings/js/admin.js | 103 | ||||
-rw-r--r-- | settings/routes.php | 1 | ||||
-rw-r--r-- | settings/templates/settings/admin/server-info.php | 70 |
6 files changed, 226 insertions, 23 deletions
diff --git a/settings/Controller/ServerInfoSettingsController.php b/settings/Controller/ServerInfoSettingsController.php new file mode 100644 index 00000000000..d1f411592d4 --- /dev/null +++ b/settings/Controller/ServerInfoSettingsController.php @@ -0,0 +1,67 @@ +<?php +/** + * @copyright Copyright (c) 2018 Michael Weimann <mail@michael-weimann.eu> + * + * @author Michael Weimann <mail@michael-weimann.eu> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +namespace OC\Settings\Controller; + +use OC\Settings\Admin\ServerInfo; +use OCP\AppFramework\Controller; +use OCP\IConfig; +use OCP\IRequest; + +/** + * This controller handles server info settings requests. + */ +class ServerInfoSettingsController extends Controller { + + /** + * @var IConfig + */ + private $config; + + /** + * ServerInfoSettingsController constructor. + * + * @param IConfig $config + */ + public function __construct($appName, IRequest $request, IConfig $config) { + parent::__construct($appName, $request); + $this->config = $config; + } + + public function storeServerInfo( + string $location, + string $provider, + string $providerWebsite, + string $providerPrivacyLink, + string $adminContact + ) { + $configs = [ + ServerInfo::SETTING_LOCATION => $location, + ServerInfo::SETTING_PROVIDER => $provider, + ServerInfo::SETTING_PROVIDER_WEBSITE => $providerWebsite, + ServerInfo::SETTING_PROVIDER_PRIVACY_LINK => $providerPrivacyLink, + ServerInfo::SETTING_PROVIDER_ADMIN_CONTACT => $adminContact + ]; + $this->config->setSystemValues($configs); + } + +} diff --git a/settings/css/_server-info.scss b/settings/css/_server-info.scss index c9f89bd566a..1073cab2954 100644 --- a/settings/css/_server-info.scss +++ b/settings/css/_server-info.scss @@ -1,3 +1,7 @@ +/* Copyright (c) 2018 Michael Weimann <mail@michael-weimann.eu + This file is licensed under the Affero General Public License version 3 or later. + See the COPYING-README file. */ + .server-info-settings { .label { display: block; diff --git a/settings/css/_where-is-your-data.scss b/settings/css/_where-is-your-data.scss index 7414f6d36d6..fc71bb0a023 100644 --- a/settings/css/_where-is-your-data.scss +++ b/settings/css/_where-is-your-data.scss @@ -1,3 +1,7 @@ +/* Copyright (c) 2018 Michael Weimann <mail@michael-weimann.eu + This file is licensed under the Affero General Public License version 3 or later. + See the COPYING-README file. */ + .where-is-your-data { // @todo replace by common link style as soon as available a:not(.icon-info) { diff --git a/settings/js/admin.js b/settings/js/admin.js index b93c55a8a9c..1c9b5460eab 100644 --- a/settings/js/admin.js +++ b/settings/js/admin.js @@ -313,4 +313,107 @@ $(document).ready(function(){ if (document.getElementById('security-warning') !== null) { setupChecks(); } + + // server info + + var serverInfoForm = $('#server-info-form'); + var serverInfoWorkingTimeoutHandle; + var serverInfoSubmitButton = $('#server-info-submit-button'); + + /** + * Sets the server info submit button state to default. + */ + function setServerInfoButtonDefault() { + serverInfoSubmitButton.removeClass('button-success'); + serverInfoSubmitButton.removeClass('button-error'); + serverInfoSubmitButton.removeClass('button-working'); + } + + /** + * Sets the server info submit button state to working. + */ + function setServerInfoButtonWorking() { + serverInfoSubmitButton.removeClass('button-success'); + serverInfoSubmitButton.removeClass('button-error'); + serverInfoSubmitButton.addClass('button-working'); + } + + /** + * Sets the server info submit button state to success. + */ + function setServerInfoButtonSuccess() { + serverInfoSubmitButton.removeClass('button-error'); + serverInfoSubmitButton.removeClass('button-working'); + serverInfoSubmitButton.addClass('button-success'); + } + + /** + * Sets the server info submit button state to error. + */ + function setServerInfoButtonError() { + serverInfoSubmitButton.removeClass('button-success'); + serverInfoSubmitButton.removeClass('button-working'); + serverInfoSubmitButton.addClass('button-error'); + } + + /** + * Clears the server info working timeout, if present. + */ + function clearServerInfoWorkingTimeout() { + if (serverInfoWorkingTimeoutHandle) { + clearTimeout(serverInfoWorkingTimeoutHandle); + serverInfoWorkingTimeoutHandle = undefined; + } + } + + /** + * Unlocks the server info form, e.g. removing readonly from inputs. + */ + function unlockForm() { + serverInfoForm.find('input, select').prop('readonly', false); + serverInfoSubmitButton.prop('disabled', false); + } + + /** + * Resets the submit button state one of the form elements is changed. + */ + serverInfoForm.find('input, select').on('keyup change', function() { + setServerInfoButtonDefault(); + }); + + /** + * Handles the server info form submit. + */ + serverInfoForm.on('submit', function(event) { + event.stopImmediatePropagation(); + event.preventDefault(); + + serverInfoForm.find('input, select').prop('readonly', true); + serverInfoSubmitButton.prop('disabled', true); + + clearServerInfoWorkingTimeout(); + + // start show spinner only if request takes longer than one second + serverInfoWorkingTimeoutHandle = setTimeout(function() { + setServerInfoButtonWorking(); + }, 1000); + + $.ajax({ + url: OC.generateUrl('/settings/serverinfo'), + type: 'POST', + data: serverInfoForm.serialize(), + success: function() { + clearServerInfoWorkingTimeout(); + setServerInfoButtonSuccess(); + unlockForm(); + serverInfoSubmitButton.blur(); + }, + error: function() { + clearServerInfoWorkingTimeout(); + setServerInfoButtonError(); + unlockForm(); + serverInfoSubmitButton.blur(); + } + }); + }); }); diff --git a/settings/routes.php b/settings/routes.php index 7c8120f9be4..277bcca484f 100644 --- a/settings/routes.php +++ b/settings/routes.php @@ -83,6 +83,7 @@ $application->registerRoutes($this, [ ['name' => 'ChangePassword#changeUserPassword', 'url' => '/settings/users/changepassword', 'verb' => 'POST'], ['name' => 'TwoFactorSettings#index', 'url' => '/settings/api/admin/twofactorauth', 'verb' => 'GET'], ['name' => 'TwoFactorSettings#update', 'url' => '/settings/api/admin/twofactorauth', 'verb' => 'PUT'], + ['name' => 'ServerInfoSettings#storeServerInfo', 'url' => '/settings/serverinfo', 'verb' => 'POST'], ] ]); diff --git a/settings/templates/settings/admin/server-info.php b/settings/templates/settings/admin/server-info.php index 9c2b3fe4318..3690da6d3b4 100644 --- a/settings/templates/settings/admin/server-info.php +++ b/settings/templates/settings/admin/server-info.php @@ -1,11 +1,39 @@ -<?php ?> +<?php +/** + * @copyright Copyright (c) 2018 Michael Weimann <mail@michael-weimann.eu> + * + * @author Michael Weimann <mail@michael-weimann.eu> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/** + * This file contains the server info settings template. + */ + +/** @var array $_ */ + +?> <div class="section server-info-settings"> <h2><?php p($l->t('Server info')); ?></h2> <p class="settings-hint"> <?php p($l->t('Enter common info about your Nextcloud instance here. These info are visible to all users.')) ?> </p> - <form> + <form id="server-info-form" name="server-info-form"> <div class="margin-bottom"> <label class="label" for="location"><?php p($l->t('Server location')); ?></label> <input @@ -14,6 +42,7 @@ name="location" type="text" maxlength="100" + value="<?php p($_['location']); ?>" placeholder="<?php p($l->t('country')); ?>"> </div> <div> @@ -24,6 +53,7 @@ name="provider" type="text" maxlength="100" + value="<?php p($_['provider']); ?>" placeholder="<?php p($l->t('company or person')); ?>"> </div> <div> @@ -34,6 +64,7 @@ name="providerWebsite" type="url" maxlength="200" + value="<?php p($_['providerWebsite']); ?>" placeholder="<?php p($l->t('link to website')); ?>"> </div> <div class="margin-bottom"> @@ -44,24 +75,30 @@ name="providerPrivacyLink" type="url" maxlength="200" + value="<?php p($_['providerPrivacyLink']); ?>" placeholder="<?php p($l->t('link to privacy policy')); ?>"> </div> <div class="margin-bottom"> - <label class="label" for="admin"><?php p($l->t('Admin contact')); ?></label> - <select class="form-input" name="admin"> - <option>Michael Weimann</option> - <option>Max Mustermann</option> - <option>Peter Petrowski</option> + <label class="label" for="adminContact"><?php p($l->t('Admin contact')); ?></label> + <select class="form-input" name="adminContact" id="adminContact"> + <option value=""><?php p($l->t('choose admin contact')); ?></option> + <?php foreach($_['adminUsers'] as $adminUser): ?> + <option + value="<?php p($adminUser['id']); ?>" + <?php if ($adminUser['id'] === $_['adminContact']): ?>selected="selected"<?php endif; ?>> + <?php p($adminUser['displayName']); ?> + </option> + <?php endforeach; ?> </select> </div> <div class="form-actions"> - <button id="test123" class="button"> + <button id="server-info-submit-button" class="button"> <span class="default-label"> - <?php p($l->t('Save')); ?> + <?php p($l->t('save')); ?> </span> <span class="working-label"> <span class="icon-loading-small-dark"></span> - <?php p($l->t('saving…')); ?> + <?php p($l->t('saving')); ?> </span> <span class="success-label"> <span class="icon-checkmark-white"></span> @@ -72,19 +109,6 @@ <?php p($l->t('error saving settings')); ?> </span> </button> - <script> - const button = $('#test123'); - button.on('click', (event) => { - event.stopImmediatePropagation(); - event.preventDefault(); - button.prop('disabled', true); - button.addClass('button-working'); - setTimeout(() => { - button.removeClass('button-working'); - button.addClass('button-success'); - }, 1500); - }); - </script> </div> </form> </div> |