aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2019-02-11 11:13:55 +0100
committerGitHub <noreply@github.com>2019-02-11 11:13:55 +0100
commit34dc165132a06211e2ba10dcb9826cf6ed5096f6 (patch)
tree51bd0513064597ba6ea9af402381d91bce85db50 /lib
parent2e7eb344c8a65ab02a8704405d929fd60356a0ea (diff)
parent587a140c8a75e9a3a0a98ccd37675f785d37f5ab (diff)
downloadnextcloud-server-34dc165132a06211e2ba10dcb9826cf6ed5096f6.tar.gz
nextcloud-server-34dc165132a06211e2ba10dcb9826cf6ed5096f6.zip
Merge pull request #13097 from nextcloud/feature/11319/where-is-your-data
Where is your data?
Diffstat (limited to 'lib')
-rw-r--r--lib/private/Settings/Manager.php5
-rw-r--r--lib/private/Settings/Personal/PersonalInfo.php44
-rw-r--r--lib/private/Settings/Theming/ServerInfo.php121
3 files changed, 166 insertions, 4 deletions
diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php
index 42ec16e223b..3f72557d8ec 100644
--- a/lib/private/Settings/Manager.php
+++ b/lib/private/Settings/Manager.php
@@ -192,6 +192,7 @@ class Manager implements IManager {
1 => [new Section('server', $this->l->t('Basic settings'), 0, $this->url->imagePath('core', 'actions/settings-dark.svg'))],
5 => [new Section('sharing', $this->l->t('Sharing'), 0, $this->url->imagePath('core', 'actions/share.svg'))],
10 => [new Section('security', $this->l->t('Security'), 0, $this->url->imagePath('core', 'actions/password.svg'))],
+ 30 => [new Section('theming', $this->l->t('Theming'), 0, $this->url->imagePath('settings', 'theming-dark.svg'))],
50 => [new Section('groupware', $this->l->t('Groupware'), 0, $this->url->imagePath('core', 'places/contacts.svg'))],
98 => [new Section('additional', $this->l->t('Additional settings'), 0, $this->url->imagePath('core', 'actions/settings-dark.svg'))],
];
@@ -237,6 +238,10 @@ class Manager implements IManager {
$form = $this->container->query(Admin\Security::class);
$forms[$form->getPriority()] = [$form];
}
+ if ($section === 'theming') {
+ $form = $this->container->query(Theming\ServerInfo::class);
+ $forms[$form->getPriority()] = [$form];
+ }
if ($section === 'sharing') {
/** @var ISettings $form */
$form = $this->container->query(Admin\Sharing::class);
diff --git a/lib/private/Settings/Personal/PersonalInfo.php b/lib/private/Settings/Personal/PersonalInfo.php
index 98991ce6d40..74969806540 100644
--- a/lib/private/Settings/Personal/PersonalInfo.php
+++ b/lib/private/Settings/Personal/PersonalInfo.php
@@ -26,6 +26,7 @@
namespace OC\Settings\Personal;
use OC\Accounts\AccountManager;
+use OC\Settings\Theming\ServerInfo;
use OCA\FederatedFileSharing\AppInfo\Application;
use OCP\App\IAppManager;
use OCP\AppFramework\Http\TemplateResponse;
@@ -38,6 +39,7 @@ use OCP\IUser;
use OCP\IUserManager;
use OCP\L10N\IFactory;
use OCP\Settings\ISettings;
+use OCP\Encryption\IManager as EncryptionManager;
class PersonalInfo implements ISettings {
@@ -55,14 +57,18 @@ class PersonalInfo implements ISettings {
private $l10nFactory;
/** @var IL10N */
private $l;
+ /** @var EncryptionManager */
+ private $encryptionManager;
/**
* @param IConfig $config
* @param IUserManager $userManager
* @param IGroupManager $groupManager
* @param AccountManager $accountManager
+ * @param IAppManager $appManager
* @param IFactory $l10nFactory
* @param IL10N $l
+ * @param EncryptionManager $encryptionManager
*/
public function __construct(
IConfig $config,
@@ -71,7 +77,8 @@ class PersonalInfo implements ISettings {
AccountManager $accountManager,
IAppManager $appManager,
IFactory $l10nFactory,
- IL10N $l
+ IL10N $l,
+ EncryptionManager $encryptionManager
) {
$this->config = $config;
$this->userManager = $userManager;
@@ -80,6 +87,7 @@ class PersonalInfo implements ISettings {
$this->appManager = $appManager;
$this->l10nFactory = $l10nFactory;
$this->l = $l;
+ $this->encryptionManager = $encryptionManager;
}
/**
@@ -135,13 +143,41 @@ class PersonalInfo implements ISettings {
'twitterScope' => $userData[AccountManager::PROPERTY_TWITTER]['scope'],
'twitterVerification' => $userData[AccountManager::PROPERTY_TWITTER]['verified'],
'groups' => $this->getGroups($user),
- ] + $messageParameters + $languageParameters + $localeParameters;
-
+ ] + $this->getWhereIsYourDataParams() + $messageParameters + $languageParameters + $localeParameters;
return new TemplateResponse('settings', 'settings/personal/personal.info', $parameters, '');
}
/**
+ * Returns the "where is your data" template params.
+ *
+ * @return array
+ */
+ private function getWhereIsYourDataParams(): array {
+
+ $adminContactConfigId = $this->config->getSystemValue(ServerInfo::SETTING_PROVIDER_ADMIN_CONTACT);
+ $adminContact = $this->userManager->get($adminContactConfigId);
+
+ $params = [
+ 'dataLocation' => $this->config->getSystemValue(ServerInfo::SETTING_LOCATION),
+ 'provider' => $this->config->getSystemValue(ServerInfo::SETTING_PROVIDER),
+ 'providerLink' => $this->config->getSystemValue(ServerInfo::SETTING_PROVIDER_WEBSITE),
+ 'providerPrivacyLink' => $this->config->getSystemValue(ServerInfo::SETTING_PROVIDER_PRIVACY_LINK),
+ 'encryptionEnabled' => $this->encryptionManager->isEnabled(),
+ 'adminName' => $adminContact !== null ? $adminContact->getDisplayName() : '',
+ 'adminMail' => $adminContact !== null ? $adminContact->getEMailAddress() : ''
+ ];
+
+ $params['show_where_is_your_data_section'] = empty($params['dataLocation']) === false
+ || empty($params['provider']) === false
+ || $params['encryptionEnabled'] === true
+ || empty($params['adminName']) === false;
+
+ return $params;
+
+ }
+
+ /**
* @return string the section ID, e.g. 'sharing'
* @since 9.1
*/
@@ -202,7 +238,7 @@ class PersonalInfo implements ISettings {
$userLang = $languages['commonlanguages'][$userLangIndex];
// search in the other languages
if ($userLangIndex === false) {
- $userLangIndex = array_search($userConfLang, array_column($languages['languages'], 'code'));
+ $userLangIndex = array_search($userConfLang, array_column($languages['languages'], 'code'));
$userLang = $languages['languages'][$userLangIndex];
}
// if user language is not available but set somehow: show the actual code as name
diff --git a/lib/private/Settings/Theming/ServerInfo.php b/lib/private/Settings/Theming/ServerInfo.php
new file mode 100644
index 00000000000..ecd2fc418fc
--- /dev/null
+++ b/lib/private/Settings/Theming/ServerInfo.php
@@ -0,0 +1,121 @@
+<?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\Theming;
+
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\IConfig;
+use OCP\IGroupManager;
+use OCP\IUser;
+use OCP\Settings\ISettings;
+
+/**
+ * This class describes the server info settings.
+ */
+class ServerInfo implements ISettings {
+
+ const SETTING_LOCATION = 'serverinfo.location';
+ const SETTING_PROVIDER = 'serverinfo.provider';
+ const SETTING_PROVIDER_WEBSITE = 'serverinfo.provider.website';
+ const SETTING_PROVIDER_PRIVACY_LINK = 'serverinfo.provider.privacylink';
+ const SETTING_PROVIDER_ADMIN_CONTACT = 'serverinfo.admincontact';
+
+ /**
+ * @var IConfig
+ */
+ private $config;
+
+ /**
+ * @var IGroupManager
+ */
+ private $groupManager;
+
+ /**
+ * ServerInfo constructor.
+ *
+ * @param IConfig $config
+ * @param IGroupManager $groupManager
+ */
+ public function __construct(IConfig $config, IGroupManager $groupManager) {
+ $this->config = $config;
+ $this->groupManager = $groupManager;
+ }
+
+ /**
+ * @return TemplateResponse
+ */
+ public function getForm(): TemplateResponse {
+ $parameters = [
+ 'location' => $this->config->getSystemValue(self::SETTING_LOCATION),
+ 'provider' => $this->config->getSystemValue(self::SETTING_PROVIDER),
+ 'providerWebsite' => $this->config->getSystemValue(self::SETTING_PROVIDER_WEBSITE),
+ 'providerPrivacyLink' => $this->config->getSystemValue(self::SETTING_PROVIDER_PRIVACY_LINK),
+ 'adminUsers' => $this->getAdminListValues(),
+ 'adminContact' => $this->config->getSystemValue(self::SETTING_PROVIDER_ADMIN_CONTACT),
+ ];
+ return new TemplateResponse('settings', 'settings/admin/server-info', $parameters, '');
+ }
+
+ /**
+ * Returns the admin list values.
+ *
+ * @return array[] An array or arrays with the keys 'id' and 'displayName'
+ */
+ private function getAdminListValues(): array {
+ $adminGroup = $this->groupManager->get('admin');
+ $users = $adminGroup->getUsers();
+
+ $users = array_map(function(IUser $user) {
+ return [
+ 'id' => $user->getUID(),
+ 'displayName' => $user->getDisplayName()
+ ];
+ }, $users);
+
+ usort($your_data, function(array $a, array $b) {
+ return strcmp($a['displayName'], $b['displayName']);
+ });
+
+ return $users;
+ }
+
+ /**
+ * Returns the server info section id.
+ *
+ * @return string
+ */
+ public function getSection(): string {
+ return 'theming';
+ }
+
+ /**
+ * Returns the server info settings priority.
+ *
+ * @return int whether the form should be rather on the top or bottom of
+ * the admin section. The forms are arranged in ascending order of the
+ * priority values. It is required to return a value between 0 and 100.
+ */
+ public function getPriority(): int {
+ return 10;
+ }
+
+}