summaryrefslogtreecommitdiffstats
path: root/settings
diff options
context:
space:
mode:
authorMichael Weimann <mail@michael-weimann.eu>2018-12-19 23:13:35 +0100
committerMichael Weimann <mail@michael-weimann.eu>2019-01-14 00:08:24 +0100
commit813ff430f159fdc8aade236048f4a8ff18ac3b2e (patch)
treebb8fe0773a03ed43dba3c9cdecbb3343251fdb1a /settings
parent6993faaf67b6e822f7b03bd972fe42c9b4dd1d5d (diff)
downloadnextcloud-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.php67
-rw-r--r--settings/css/_server-info.scss4
-rw-r--r--settings/css/_where-is-your-data.scss4
-rw-r--r--settings/js/admin.js103
-rw-r--r--settings/routes.php1
-rw-r--r--settings/templates/settings/admin/server-info.php70
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>