From da01494a372c5b780ee76807325001afd1190b11 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Wed, 14 Sep 2022 11:24:11 +0200 Subject: [PATCH] Add accessibility entry in user menu Signed-off-by: Vincent Petry --- .../lib/Controller/CommonSettingsTrait.php | 6 ++- apps/theming/img/accessibility-dark.svg | 43 +++++++++++++++++++ lib/private/NavigationManager.php | 21 ++++++--- tests/acceptance/features/header.feature | 6 ++- tests/lib/NavigationManagerTest.php | 36 +++++++++++++--- 5 files changed, 99 insertions(+), 13 deletions(-) create mode 100644 apps/theming/img/accessibility-dark.svg diff --git a/apps/settings/lib/Controller/CommonSettingsTrait.php b/apps/settings/lib/Controller/CommonSettingsTrait.php index 942d07154c4..d5d004d8722 100644 --- a/apps/settings/lib/Controller/CommonSettingsTrait.php +++ b/apps/settings/lib/Controller/CommonSettingsTrait.php @@ -135,7 +135,11 @@ trait CommonSettingsTrait { private function getIndexResponse(string $type, string $section): TemplateResponse { if ($type === 'personal') { - $this->navigationManager->setActiveEntry('settings'); + if ($section === 'theming') { + $this->navigationManager->setActiveEntry('accessibility_settings'); + } else { + $this->navigationManager->setActiveEntry('settings'); + } } elseif ($type === 'admin') { $this->navigationManager->setActiveEntry('admin_settings'); } diff --git a/apps/theming/img/accessibility-dark.svg b/apps/theming/img/accessibility-dark.svg new file mode 100644 index 00000000000..eb21e0dcd11 --- /dev/null +++ b/apps/theming/img/accessibility-dark.svg @@ -0,0 +1,43 @@ + + + + + + + diff --git a/lib/private/NavigationManager.php b/lib/private/NavigationManager.php index 7fd76850816..7e162e65a5d 100644 --- a/lib/private/NavigationManager.php +++ b/lib/private/NavigationManager.php @@ -201,12 +201,23 @@ class NavigationManager implements INavigationManager { } if ($this->userSession->isLoggedIn()) { + // Accessibility settings + if ($this->appManager->isEnabledForUser('theming', $this->userSession->getUser())) { + $this->add([ + 'type' => 'settings', + 'id' => 'accessibility_settings', + 'order' => 2, + 'href' => $this->urlGenerator->linkToRoute('settings.PersonalSettings.index', ['section' => 'theming']), + 'name' => $l->t('Appearance and accessibility'), + 'icon' => $this->urlGenerator->imagePath('theming', 'accessibility-dark.svg'), + ]); + } if ($this->isAdmin()) { // App management $this->add([ 'type' => 'settings', 'id' => 'core_apps', - 'order' => 4, + 'order' => 5, 'href' => $this->urlGenerator->linkToRoute('settings.AppSettings.viewApps'), 'icon' => $this->urlGenerator->imagePath('settings', 'apps.svg'), 'name' => $l->t('Apps'), @@ -216,7 +227,7 @@ class NavigationManager implements INavigationManager { $this->add([ 'type' => 'settings', 'id' => 'settings', - 'order' => 2, + 'order' => 3, 'href' => $this->urlGenerator->linkToRoute('settings.PersonalSettings.index'), 'name' => $l->t('Personal settings'), 'icon' => $this->urlGenerator->imagePath('settings', 'personal.svg'), @@ -226,7 +237,7 @@ class NavigationManager implements INavigationManager { $this->add([ 'type' => 'settings', 'id' => 'admin_settings', - 'order' => 3, + 'order' => 4, 'href' => $this->urlGenerator->linkToRoute('settings.AdminSettings.index', ['section' => 'overview']), 'name' => $l->t('Administration settings'), 'icon' => $this->urlGenerator->imagePath('settings', 'admin.svg'), @@ -236,7 +247,7 @@ class NavigationManager implements INavigationManager { $this->add([ 'type' => 'settings', 'id' => 'settings', - 'order' => 2, + 'order' => 3, 'href' => $this->urlGenerator->linkToRoute('settings.PersonalSettings.index'), 'name' => $l->t('Settings'), 'icon' => $this->urlGenerator->imagePath('settings', 'admin.svg'), @@ -261,7 +272,7 @@ class NavigationManager implements INavigationManager { $this->add([ 'type' => 'settings', 'id' => 'core_users', - 'order' => 5, + 'order' => 6, 'href' => $this->urlGenerator->linkToRoute('settings.Users.usersList'), 'name' => $l->t('Users'), 'icon' => $this->urlGenerator->imagePath('settings', 'users.svg'), diff --git a/tests/acceptance/features/header.feature b/tests/acceptance/features/header.feature index 21f9147c9ac..ac5da75425c 100644 --- a/tests/acceptance/features/header.feature +++ b/tests/acceptance/features/header.feature @@ -5,8 +5,9 @@ Feature: header Given I am logged in as the admin When I open the Settings menu Then I see that the Settings menu is shown - And I see that the Settings menu has only 8 items + And I see that the Settings menu has only 9 items And I see that the "Set status" item in the Settings menu is shown + And I see that the "Appearance and accessibility" item in the Settings menu is shown And I see that the "Personal settings" item in the Settings menu is shown And I see that the "Administration settings" item in the Settings menu is shown And I see that the "Apps" item in the Settings menu is shown @@ -18,8 +19,9 @@ Feature: header Given I am logged in When I open the Settings menu Then I see that the Settings menu is shown - And I see that the Settings menu has only 5 items + And I see that the Settings menu has only 6 items And I see that the "Set status" item in the Settings menu is shown + And I see that the "Appearance and accessibility" item in the Settings menu is shown And I see that the "Settings" item in the Settings menu is shown And I see that the "Help" item in the Settings menu is shown And I see that the "Log out" item in the Settings menu is shown diff --git a/tests/lib/NavigationManagerTest.php b/tests/lib/NavigationManagerTest.php index 8d70b1b25ae..d5c827fe1cb 100644 --- a/tests/lib/NavigationManagerTest.php +++ b/tests/lib/NavigationManagerTest.php @@ -215,7 +215,19 @@ class NavigationManagerTest extends TestCase { return vsprintf($text, $parameters); }); + $this->appManager->expects($this->any()) + ->method('isEnabledForUser') + ->with('theming') + ->willReturn(true); $this->appManager->expects($this->once())->method('getAppInfo')->with('test')->willReturn($navigation); + /* + $this->appManager->expects($this->any()) + ->method('getAppInfo') + ->will($this->returnValueMap([ + ['test', null, null, $navigation], + ['theming', null, null, null], + ])); + */ $this->l10nFac->expects($this->any())->method('get')->willReturn($l); $this->urlGenerator->expects($this->any())->method('imagePath')->willReturnCallback(function ($appName, $file) { return "/apps/$appName/img/$file"; @@ -230,7 +242,7 @@ class NavigationManagerTest extends TestCase { $user->expects($this->any())->method('getUID')->willReturn('user001'); $this->userSession->expects($this->any())->method('getUser')->willReturn($user); $this->userSession->expects($this->any())->method('isLoggedIn')->willReturn(true); - $this->appManager->expects($this->once()) + $this->appManager->expects($this->any()) ->method('getEnabledAppsForUser') ->with($user) ->willReturn(['test']); @@ -248,7 +260,7 @@ class NavigationManagerTest extends TestCase { $apps = [ 'core_apps' => [ 'id' => 'core_apps', - 'order' => 4, + 'order' => 5, 'href' => '/apps/test/', 'icon' => '/apps/settings/img/apps.svg', 'name' => 'Apps', @@ -259,9 +271,20 @@ class NavigationManagerTest extends TestCase { ] ]; $defaults = [ + 'accessibility_settings' => [ + 'type' => 'settings', + 'id' => 'accessibility_settings', + 'order' => 2, + 'href' => '/apps/test/', + 'name' => 'Appearance and accessibility', + 'icon' => '/apps/theming/img/accessibility-dark.svg', + 'active' => false, + 'classes' => '', + 'unread' => 0, + ], 'settings' => [ 'id' => 'settings', - 'order' => 2, + 'order' => 3, 'href' => '/apps/test/', 'icon' => '/apps/settings/img/admin.svg', 'name' => 'Settings', @@ -283,9 +306,10 @@ class NavigationManagerTest extends TestCase { ] ]; $adminSettings = [ + 'accessibility_settings' => $defaults['accessibility_settings'], 'settings' => [ 'id' => 'settings', - 'order' => 2, + 'order' => 3, 'href' => '/apps/test/', 'icon' => '/apps/settings/img/personal.svg', 'name' => 'Personal settings', @@ -296,7 +320,7 @@ class NavigationManagerTest extends TestCase { ], 'admin_settings' => [ 'id' => 'admin_settings', - 'order' => 3, + 'order' => 4, 'href' => '/apps/test/', 'icon' => '/apps/settings/img/admin.svg', 'name' => 'Administration settings', @@ -310,6 +334,7 @@ class NavigationManagerTest extends TestCase { return [ 'minimalistic' => [ array_merge( + ['accessibility_settings' => $defaults['accessibility_settings']], ['settings' => $defaults['settings']], ['test' => [ 'id' => 'test', @@ -332,6 +357,7 @@ class NavigationManagerTest extends TestCase { ], 'minimalistic-settings' => [ array_merge( + ['accessibility_settings' => $defaults['accessibility_settings']], ['settings' => $defaults['settings']], ['test' => [ 'id' => 'test', -- 2.39.5