From d8e9cefcfeaf8a98d1af41a118915d0bab34e809 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Mon, 27 Jan 2020 20:47:41 +0100 Subject: [PATCH] Move the Personal sections to the settings app There is no need to have weird magic in the manager. This should be properly registered in the right way. The settings code is messy anyways. This is a start to make it a tad more clean. Signed-off-by: Roeland Jago Douma --- apps/settings/appinfo/info.xml | 6 ++ .../composer/composer/autoload_classmap.php | 3 + .../composer/composer/autoload_static.php | 3 + .../lib/Sections/Personal/PersonalInfo.php | 59 +++++++++++++++++++ .../lib/Sections/Personal/Security.php | 59 +++++++++++++++++++ .../lib/Sections/Personal/SyncClients.php | 59 +++++++++++++++++++ lib/private/Settings/Manager.php | 6 +- tests/lib/Settings/ManagerTest.php | 30 +--------- 8 files changed, 192 insertions(+), 33 deletions(-) create mode 100644 apps/settings/lib/Sections/Personal/PersonalInfo.php create mode 100644 apps/settings/lib/Sections/Personal/Security.php create mode 100644 apps/settings/lib/Sections/Personal/SyncClients.php diff --git a/apps/settings/appinfo/info.xml b/apps/settings/appinfo/info.xml index f636198edd..d774988f4a 100644 --- a/apps/settings/appinfo/info.xml +++ b/apps/settings/appinfo/info.xml @@ -16,4 +16,10 @@ + + + OCA\Settings\Sections\Personal\PersonalInfo + OCA\Settings\Sections\Personal\Security + OCA\Settings\Sections\Personal\SyncClients + diff --git a/apps/settings/composer/composer/autoload_classmap.php b/apps/settings/composer/composer/autoload_classmap.php index a59c31701e..ac7bd9577e 100644 --- a/apps/settings/composer/composer/autoload_classmap.php +++ b/apps/settings/composer/composer/autoload_classmap.php @@ -41,4 +41,7 @@ return array( 'OCA\\Settings\\Personal\\Security' => $baseDir . '/../lib/Settings/Personal/Security.php', 'OCA\\Settings\\Personal\\Security\\Authtokens' => $baseDir . '/../lib/Settings/Personal/Security/Authtokens.php', 'OCA\\Settings\\Personal\\ServerDevNotice' => $baseDir . '/../lib/Settings/Personal/ServerDevNotice.php', + 'OCA\\Settings\\Sections\\Personal\\PersonalInfo' => $baseDir . '/../lib/Sections/Personal/PersonalInfo.php', + 'OCA\\Settings\\Sections\\Personal\\Security' => $baseDir . '/../lib/Sections/Personal/Security.php', + 'OCA\\Settings\\Sections\\Personal\\SyncClients' => $baseDir . '/../lib/Sections/Personal/SyncClients.php', ); diff --git a/apps/settings/composer/composer/autoload_static.php b/apps/settings/composer/composer/autoload_static.php index 2545c97d22..36ae0f3a5d 100644 --- a/apps/settings/composer/composer/autoload_static.php +++ b/apps/settings/composer/composer/autoload_static.php @@ -56,6 +56,9 @@ class ComposerStaticInitSettings 'OCA\\Settings\\Personal\\Security' => __DIR__ . '/..' . '/../lib/Settings/Personal/Security.php', 'OCA\\Settings\\Personal\\Security\\Authtokens' => __DIR__ . '/..' . '/../lib/Settings/Personal/Security/Authtokens.php', 'OCA\\Settings\\Personal\\ServerDevNotice' => __DIR__ . '/..' . '/../lib/Settings/Personal/ServerDevNotice.php', + 'OCA\\Settings\\Sections\\Personal\\PersonalInfo' => __DIR__ . '/..' . '/../lib/Sections/Personal/PersonalInfo.php', + 'OCA\\Settings\\Sections\\Personal\\Security' => __DIR__ . '/..' . '/../lib/Sections/Personal/Security.php', + 'OCA\\Settings\\Sections\\Personal\\SyncClients' => __DIR__ . '/..' . '/../lib/Sections/Personal/SyncClients.php', ); public static function getInitializer(ClassLoader $loader) diff --git a/apps/settings/lib/Sections/Personal/PersonalInfo.php b/apps/settings/lib/Sections/Personal/PersonalInfo.php new file mode 100644 index 0000000000..9457da5ff0 --- /dev/null +++ b/apps/settings/lib/Sections/Personal/PersonalInfo.php @@ -0,0 +1,59 @@ + + * + * @author Roeland Jago Douma + * + * @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 . + * + */ + +namespace OCA\Settings\Sections\Personal; + +use OCP\IL10N; +use OCP\IURLGenerator; +use OCP\Settings\IIconSection; + +class PersonalInfo implements IIconSection { + + /** @var IL10N */ + private $l; + + /** @var IURLGenerator */ + private $urlGenerator; + + public function __construct(IL10N $l, IURLGenerator $urlGenerator) { + $this->l = $l; + $this->urlGenerator = $urlGenerator; + } + + public function getIcon() { + return $this->urlGenerator->imagePath('core', 'actions/user.svg'); + } + + public function getID(): string { + return 'personal-info'; + } + + public function getName(): string { + return $this->l->t('Personal info'); + } + + public function getPriority(): int { + return 0; + } +} diff --git a/apps/settings/lib/Sections/Personal/Security.php b/apps/settings/lib/Sections/Personal/Security.php new file mode 100644 index 0000000000..31a1bb2e09 --- /dev/null +++ b/apps/settings/lib/Sections/Personal/Security.php @@ -0,0 +1,59 @@ + + * + * @author Roeland Jago Douma + * + * @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 . + * + */ + +namespace OCA\Settings\Sections\Personal; + +use OCP\IL10N; +use OCP\IURLGenerator; +use OCP\Settings\IIconSection; + +class Security implements IIconSection { + + /** @var IL10N */ + private $l; + + /** @var IURLGenerator */ + private $urlGenerator; + + public function __construct(IL10N $l, IURLGenerator $urlGenerator) { + $this->l = $l; + $this->urlGenerator = $urlGenerator; + } + + public function getIcon() { + return $this->urlGenerator->imagePath('settings', 'password.svg'); + } + + public function getID(): string { + return 'security'; + } + + public function getName(): string { + return $this->l->t('Security'); + } + + public function getPriority(): int { + return 5; + } +} diff --git a/apps/settings/lib/Sections/Personal/SyncClients.php b/apps/settings/lib/Sections/Personal/SyncClients.php new file mode 100644 index 0000000000..7670d387d3 --- /dev/null +++ b/apps/settings/lib/Sections/Personal/SyncClients.php @@ -0,0 +1,59 @@ + + * + * @author Roeland Jago Douma + * + * @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 . + * + */ + +namespace OCA\Settings\Sections\Personal; + +use OCP\IL10N; +use OCP\IURLGenerator; +use OCP\Settings\IIconSection; + +class SyncClients implements IIconSection { + + /** @var IL10N */ + private $l; + + /** @var IURLGenerator */ + private $urlGenerator; + + public function __construct(IL10N $l, IURLGenerator $urlGenerator) { + $this->l = $l; + $this->urlGenerator = $urlGenerator; + } + + public function getIcon() { + return $this->urlGenerator->imagePath('core', 'clients/phone.svg'); + } + + public function getID(): string { + return 'sync-clients'; + } + + public function getName(): string { + return $this->l->t('Mobile & desktop'); + } + + public function getPriority(): int { + return 15; + } +} diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php index 5b6bea63c6..46a047e53c 100644 --- a/lib/private/Settings/Manager.php +++ b/lib/private/Settings/Manager.php @@ -350,11 +350,7 @@ class Manager implements IManager { $this->l = $this->l10nFactory->get('lib'); } - $sections = [ - 0 => [new Section('personal-info', $this->l->t('Personal info'), 0, $this->url->imagePath('core', 'actions/user.svg'))], - 5 => [new Section('security', $this->l->t('Security'), 0, $this->url->imagePath('settings', 'password.svg'))], - 15 => [new Section('sync-clients', $this->l->t('Mobile & desktop'), 0, $this->url->imagePath('core', 'clients/phone.svg'))], - ]; + $sections = []; $legacyForms = \OC_App::getForms('personal'); if (!empty($legacyForms) && $this->hasLegacyPersonalSettingsToRender($legacyForms)) { diff --git a/tests/lib/Settings/ManagerTest.php b/tests/lib/Settings/ManagerTest.php index 761f5f9a5c..2ba3b2e7b5 100644 --- a/tests/lib/Settings/ManagerTest.php +++ b/tests/lib/Settings/ManagerTest.php @@ -116,18 +116,7 @@ class ManagerTest extends TestCase { $this->manager->registerSection('personal', \OCA\WorkflowEngine\Settings\Section::class); - $this->url->expects($this->exactly(3)) - ->method('imagePath') - ->willReturnMap([ - ['core', 'actions/user.svg', '1'], - ['settings', 'password.svg', '2'], - ['core', 'clients/phone.svg', '3'], - ]); - $this->assertEquals([ - 0 => [new Section('personal-info', 'Personal info', 0, '1')], - 5 => [new Section('security', 'Security', 0, '2')], - 15 => [new Section('sync-clients', 'Mobile & desktop', 0, '3')], 55 => [\OC::$server->query(\OCA\WorkflowEngine\Settings\Section::class)], ], $this->manager->getPersonalSections()); } @@ -175,19 +164,7 @@ class ManagerTest extends TestCase { ->method('t') ->will($this->returnArgument(0)); - $this->url->expects($this->exactly(3)) - ->method('imagePath') - ->willReturnMap([ - ['core', 'actions/user.svg', '1'], - ['settings', 'password.svg', '2'], - ['core', 'clients/phone.svg', '3'], - ]); - - $this->assertArraySubset([ - 0 => [new Section('personal-info', 'Personal info', 0, '1')], - 5 => [new Section('security', 'Security', 0, '2')], - 15 => [new Section('sync-clients', 'Mobile & desktop', 0, '3')], - ], $this->manager->getPersonalSections()); + $this->assertEquals([], $this->manager->getPersonalSections()); } public function testGetAdminSettings() { @@ -276,7 +253,7 @@ class ManagerTest extends TestCase { $this->manager->registerSection('personal', \OCA\WorkflowEngine\Settings\Section::class); $this->manager->registerSection('admin', \OCA\WorkflowEngine\Settings\Section::class); - $this->url->expects($this->exactly(9)) + $this->url->expects($this->exactly(6)) ->method('imagePath') ->willReturnMap([ ['core', 'actions/user.svg', '1'], @@ -291,9 +268,6 @@ class ManagerTest extends TestCase { ]); $this->assertEquals([ - 0 => [new Section('personal-info', 'Personal info', 0, '1')], - 5 => [new Section('security', 'Security', 0, '2')], - 15 => [new Section('sync-clients', 'Mobile & desktop', 0, '3')], 55 => [\OC::$server->query(\OCA\WorkflowEngine\Settings\Section::class)], ], $this->manager->getPersonalSections());