diff --git a/actions/class.UserSettings.php b/actions/class.UserSettings.php index ce4cf7df03..edbb48e401 100644 --- a/actions/class.UserSettings.php +++ b/actions/class.UserSettings.php @@ -30,8 +30,11 @@ use oat\generis\model\GenerisRdf; use oat\generis\model\OntologyAwareTrait; use oat\oatbox\user\UserLanguageServiceInterface; +use oat\tao\model\featureFlag\FeatureFlagChecker; +use oat\tao\model\featureFlag\FeatureFlagCheckerInterface; use oat\tao\model\service\ApplicationService; use oat\tao\model\user\UserSettingsFormFactory; +use oat\tao\model\user\UserSettingsInterface; use oat\tao\model\user\UserSettingsServiceInterface; use oat\tao\model\user\implementation\UserSettingsService; use tao_helpers_form_FormContainer as FormContainer; @@ -110,6 +113,15 @@ public function properties() $userSettingsData[GenerisRdf::PROPERTY_USER_DEFLG] = $dataLang->getUri(); } + if ( + $this->getFeatureFlagChecker()->isEnabled( + FeatureFlagCheckerInterface::FEATURE_FLAG_SOLAR_DESIGN_ENABLED + ) + ) { + $interfaceMode = $this->getResource($settingsForm->getValue(UserSettingsInterface::INTERFACE_MODE)); + $userSettingsData[GenerisRdf::PROPERTY_USER_INTERFACE_MODE] = $interfaceMode->getUri(); + } + $binder = new tao_models_classes_dataBinding_GenerisFormDataBinder($userResource); if ($binder->bind($userSettingsData)) { @@ -164,6 +176,13 @@ private function getLanguageService(): tao_models_classes_LanguageService return tao_models_classes_LanguageService::singleton(); } + private function getFeatureFlagChecker(): FeatureFlagCheckerInterface + { + return $this + ->getPsrContainer() + ->get(FeatureFlagChecker::class); + } + private function isDemoMode(): bool { return $this->getPsrContainer()->get(ApplicationService::SERVICE_ID)->isDemo(); diff --git a/actions/form/class.UserSettings.php b/actions/form/class.UserSettings.php index 8621e1dc33..3deb1837c0 100644 --- a/actions/form/class.UserSettings.php +++ b/actions/form/class.UserSettings.php @@ -22,9 +22,13 @@ * */ +use oat\generis\model\GenerisRdf; use oat\oatbox\service\ServiceManager; use oat\oatbox\user\UserLanguageServiceInterface; use oat\oatbox\user\UserTimezoneServiceInterface; +use oat\tao\model\featureFlag\FeatureFlagChecker; +use oat\tao\model\featureFlag\FeatureFlagCheckerInterface; +use oat\tao\model\user\UserSettingsInterface; use Psr\Container\ContainerInterface; /** @@ -142,6 +146,22 @@ protected function initElements() } $this->addTimezoneEl($this->form); + + if ( + $this->getFeatureFlagChecker()->isEnabled( + FeatureFlagCheckerInterface::FEATURE_FLAG_SOLAR_DESIGN_ENABLED + ) + ) { + $this->addInterfaceModeElement($this->form); + } + } + + private function addInterfaceModeElement($form): void + { + $interfaceModeElement = tao_helpers_form_FormFactory::getElement(UserSettingsInterface::INTERFACE_MODE, 'Radiobox'); + $interfaceModeElement->setDescription(__('Interface Mode')); + $interfaceModeElement->setOptions($this->getInterfaceModeOptions()); + $form->addElement($interfaceModeElement); } private function addTimezoneEl($form): void @@ -180,6 +200,13 @@ private function getLanguageService(): tao_models_classes_LanguageService return $this->languageService; } + private function getFeatureFlagChecker(): FeatureFlagChecker + { + return $this + ->getContainer() + ->get(FeatureFlagChecker::class); + } + private function getContainer(): ContainerInterface { if (!$this->container) { @@ -188,4 +215,16 @@ private function getContainer(): ContainerInterface return $this->container; } + + private function getInterfaceModeOptions(): array + { + $options = []; + $property = new core_kernel_classes_Property(GenerisRdf::PROPERTY_USER_INTERFACE_MODE); + + foreach ($property->getRange()->getInstances(true) as $rangeInstance) { + $options[tao_helpers_Uri::encode($rangeInstance->getUri())] = $rangeInstance->getLabel(); + } + + return $options; + } } diff --git a/composer.json b/composer.json index 9d4ace48d4..1ff4c20dc0 100644 --- a/composer.json +++ b/composer.json @@ -67,7 +67,7 @@ "oat-sa/jig": "~0.2", "oat-sa/composer-npm-bridge": "~0.4.2||dev-master", "oat-sa/oatbox-extension-installer": "~1.1||dev-master", - "oat-sa/generis": ">=15.34", + "oat-sa/generis": "dev-feat/AUT-3625/content-creation-mode-switch", "composer/package-versions-deprecated": "^1.11", "paragonie/random_compat": "^2.0", "phpdocumentor/reflection-docblock": "^5.2", diff --git a/migrations/Version202406121231482235_tao.php b/migrations/Version202406121231482235_tao.php new file mode 100644 index 0000000000..7b66c52b00 --- /dev/null +++ b/migrations/Version202406121231482235_tao.php @@ -0,0 +1,31 @@ +isDisabledByDefault($action) && !$this->isEnabledByFeatureFlag($action)) + return $this->isDisabledByInterfaceMode($action) || ($this->isDisabledByDefault($action) && !$this->isEnabledByFeatureFlag($action)) || $this->isDisabledByFeatureFlag($action); } @@ -64,4 +71,29 @@ private function getFeatureFlagChecker(): FeatureFlagChecker { return $this->getServiceLocator()->get(FeatureFlagChecker::class); } + + private function getUserSettingsService(): UserSettingsService + { + return $this->getServiceManager()->getContainer()->get(UserSettingsService::class); + + } + + private function isDisabledByInterfaceMode(string $action): bool + { + if (!in_array($action, self::SIMPLE_INTERFACE_MODE_DISABLED_ACTION)) { + return false; + } + + $userSettings = $this->getUserSettingsService()->getCurrentUserSettings(); + + if ( + $userSettings->getSetting( + UserSettingsInterface::INTERFACE_MODE + ) === GenerisRdf::PROPERTY_USER_INTERFACE_MODE_SIMPLE + ) { + return true; + } + + return false; + } } diff --git a/models/classes/menu/SectionVisibilityFilter.php b/models/classes/menu/SectionVisibilityFilter.php index 46c3428a4d..f4b3237285 100644 --- a/models/classes/menu/SectionVisibilityFilter.php +++ b/models/classes/menu/SectionVisibilityFilter.php @@ -23,9 +23,12 @@ namespace oat\tao\model\menu; use LogicException; +use oat\generis\model\GenerisRdf; use oat\oatbox\service\ConfigurableService; use oat\tao\model\featureFlag\FeatureFlagChecker; use oat\tao\model\featureFlag\FeatureFlagCheckerInterface; +use oat\tao\model\user\implementation\UserSettingsService; +use oat\tao\model\user\UserSettingsInterface; class SectionVisibilityFilter extends ConfigurableService implements SectionVisibilityFilterInterface { @@ -33,6 +36,9 @@ class SectionVisibilityFilter extends ConfigurableService implements SectionVisi public const OPTION_FEATURE_FLAG_SECTIONS = 'featureFlagSections'; public const OPTION_FEATURE_FLAG_SECTIONS_TO_HIDE = 'featureFlagSectionsToHide'; + //TODO:: Add sections hidden for simple mode + public const SIMPLE_MODE_HIDDEN_SECTIONS = []; + /** * @throws LogicException */ @@ -53,10 +59,27 @@ public function isVisible(string $section): bool } } + $userSettings = $this->getUserSettingsService()->getCurrentUserSettings(); + + if ( + $userSettings->getSetting( + UserSettingsInterface::INTERFACE_MODE + ) === GenerisRdf::PROPERTY_USER_INTERFACE_MODE_SIMPLE + && in_array($section, self::SIMPLE_MODE_HIDDEN_SECTIONS) + ) { + return false; + } + return true; } + private function getFeatureFlagChecker(): FeatureFlagCheckerInterface { - return $this->getServiceLocator()->get(FeatureFlagChecker::class); + return $this->getServiceManager()->getContainer()->get(FeatureFlagChecker::class); + } + + private function getUserSettingsService(): UserSettingsService + { + return $this->getServiceManager()->getContainer()->get(UserSettingsService::class); } } diff --git a/models/classes/password/PasswordConstraintsServiceProvider.php b/models/classes/password/PasswordConstraintsServiceProvider.php index 3f898ce50e..6d8dcbfd9c 100644 --- a/models/classes/password/PasswordConstraintsServiceProvider.php +++ b/models/classes/password/PasswordConstraintsServiceProvider.php @@ -28,6 +28,7 @@ use oat\tao\model\user\implementation\UserSettingsService; use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use tao_models_classes_LanguageService; +use tao_models_classes_UserService; use function Symfony\Component\DependencyInjection\Loader\Configurator\service; @@ -44,6 +45,7 @@ public function __invoke(ContainerConfigurator $configurator): void [ service(UserTimezoneServiceInterface::SERVICE_ID), service(Ontology::SERVICE_ID), + service(tao_models_classes_UserService::SERVICE_ID), ] ); diff --git a/models/classes/user/UserSettingsFormFactory.php b/models/classes/user/UserSettingsFormFactory.php index f62f7feb34..345a710b6d 100644 --- a/models/classes/user/UserSettingsFormFactory.php +++ b/models/classes/user/UserSettingsFormFactory.php @@ -73,6 +73,10 @@ public function createFormFields( $fields['data_lang'] = $userSettings->getDataLanguageCode(); } + if ($userSettings->getSetting(UserSettingsInterface::INTERFACE_MODE)) { + $fields[UserSettingsInterface::INTERFACE_MODE] = $userSettings->getSetting(UserSettingsInterface::INTERFACE_MODE); + } + return $fields; } diff --git a/models/classes/user/UserSettingsInterface.php b/models/classes/user/UserSettingsInterface.php index f6506fb8b1..d2d3c17d1f 100644 --- a/models/classes/user/UserSettingsInterface.php +++ b/models/classes/user/UserSettingsInterface.php @@ -24,9 +24,25 @@ interface UserSettingsInterface { + public const INTERFACE_MODE = 'interfaceMode'; + public const UI_LANGUAGE_CODE = 'uiLanguageCode'; + public const DATA_LANGUAGE_CODE = 'dataLanguageCode'; + public const TIMEZONE = 'timezone'; + + /** + * @deprecated use getSetting instead + */ public function getUILanguageCode(): ?string; + /** + * @deprecated use getSetting instead + */ public function getDataLanguageCode(): ?string; + /** + * @deprecated use getSetting instead + */ public function getTimezone(): string; + + public function getSetting(string $setting); } diff --git a/models/classes/user/UserSettingsServiceProvider.php b/models/classes/user/UserSettingsServiceProvider.php index 87aae5eb13..4a01ac8cf0 100644 --- a/models/classes/user/UserSettingsServiceProvider.php +++ b/models/classes/user/UserSettingsServiceProvider.php @@ -25,9 +25,11 @@ use oat\generis\model\data\Ontology; use oat\generis\model\DependencyInjection\ContainerServiceProviderInterface; use oat\oatbox\user\UserTimezoneServiceInterface; +use oat\tao\model\featureFlag\FeatureFlagChecker; use oat\tao\model\user\implementation\UserSettingsService; use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use tao_models_classes_LanguageService; +use tao_models_classes_UserService; use function Symfony\Component\DependencyInjection\Loader\Configurator\service; @@ -44,6 +46,8 @@ public function __invoke(ContainerConfigurator $configurator): void [ service(UserTimezoneServiceInterface::SERVICE_ID), service(Ontology::SERVICE_ID), + service(tao_models_classes_UserService::SERVICE_ID), + service(FeatureFlagChecker::class), ] ); diff --git a/models/classes/user/implementation/UserSettings.php b/models/classes/user/implementation/UserSettings.php index e47ffca3e2..8cb7e2ed38 100644 --- a/models/classes/user/implementation/UserSettings.php +++ b/models/classes/user/implementation/UserSettings.php @@ -26,34 +26,40 @@ class UserSettings implements UserSettingsInterface { - /** @var string|null */ - private $dataLanguageCode; - - /** @var string|null */ - private $uiLanguageCode; - - /** @var string */ - private $timezone; + /** @var array */ + private $settings = []; public function __construct(string $timezone, string $uiLanguageCode = null, string $dataLanguageCode = null) { - $this->timezone = $timezone; - $this->uiLanguageCode = $uiLanguageCode; - $this->dataLanguageCode = $dataLanguageCode; + $this->setSetting(self::TIMEZONE, $timezone); + $this->setSetting(self::UI_LANGUAGE_CODE, $uiLanguageCode); + $this->setSetting(self::DATA_LANGUAGE_CODE, $dataLanguageCode); } public function getUILanguageCode(): ?string { - return $this->uiLanguageCode; + return $this->getSetting(self::UI_LANGUAGE_CODE); } public function getDataLanguageCode(): ?string { - return $this->dataLanguageCode; + return $this->getSetting(self::DATA_LANGUAGE_CODE); } public function getTimezone(): string { - return $this->timezone; + return $this->getSetting(self::TIMEZONE); + } + + public function setSetting(string $setting, $value): UserSettingsInterface + { + $this->settings[$setting] = $value; + + return $this; + } + + public function getSetting(string $setting) + { + return $this->settings[$setting] ?? null; } } diff --git a/models/classes/user/implementation/UserSettingsService.php b/models/classes/user/implementation/UserSettingsService.php index 2424a8ece7..3fcfbfd1c3 100644 --- a/models/classes/user/implementation/UserSettingsService.php +++ b/models/classes/user/implementation/UserSettingsService.php @@ -25,9 +25,11 @@ use oat\generis\model\data\Ontology; use oat\generis\model\GenerisRdf; use oat\oatbox\user\UserTimezoneServiceInterface; +use oat\tao\model\featureFlag\FeatureFlagCheckerInterface; use oat\tao\model\user\UserSettingsInterface; use oat\tao\model\user\UserSettingsServiceInterface; use core_kernel_classes_Resource; +use tao_models_classes_UserService; class UserSettingsService implements UserSettingsServiceInterface { @@ -37,10 +39,22 @@ class UserSettingsService implements UserSettingsServiceInterface /** @var string */ private $defaultTimeZone; - public function __construct(UserTimezoneServiceInterface $userTimezoneService, Ontology $ontology) - { + /** @var tao_models_classes_UserService */ + private $userService; + + /** @var FeatureFlagCheckerInterface */ + private $featureFlagChecker; + + public function __construct( + UserTimezoneServiceInterface $userTimezoneService, + Ontology $ontology, + tao_models_classes_UserService $userService, + FeatureFlagCheckerInterface $featureFlagChecker + ) { $this->defaultTimeZone = $userTimezoneService->getDefaultTimezone(); $this->ontology = $ontology; + $this->userService = $userService; + $this->featureFlagChecker = $featureFlagChecker; } public function get(core_kernel_classes_Resource $user): UserSettingsInterface @@ -49,7 +63,8 @@ public function get(core_kernel_classes_Resource $user): UserSettingsInterface [ $this->ontology->getProperty(GenerisRdf::PROPERTY_USER_UILG), $this->ontology->getProperty(GenerisRdf::PROPERTY_USER_DEFLG), - $this->ontology->getProperty(GenerisRdf::PROPERTY_USER_TIMEZONE) + $this->ontology->getProperty(GenerisRdf::PROPERTY_USER_TIMEZONE), + $this->ontology->getProperty(GenerisRdf::PROPERTY_USER_INTERFACE_MODE) ] ); @@ -65,10 +80,33 @@ public function get(core_kernel_classes_Resource $user): UserSettingsInterface $timezone = (string) current($props[GenerisRdf::PROPERTY_USER_TIMEZONE]); } - return new UserSettings( + $userSettings = new UserSettings( $timezone ?? $this->defaultTimeZone, $uiLanguageCode ?? null, $dataLanguageCode ?? null ); + + if ( + $this->featureFlagChecker->isEnabled(FeatureFlagCheckerInterface::FEATURE_FLAG_SOLAR_DESIGN_ENABLED) + && !empty($props[GenerisRdf::PROPERTY_USER_INTERFACE_MODE]) + ) { + $userSettings->setSetting( + UserSettingsInterface::INTERFACE_MODE, + current($props[GenerisRdf::PROPERTY_USER_INTERFACE_MODE])->getUri() + ); + } + + return $userSettings; + } + + public function getCurrentUserSettings(): UserSettingsInterface + { + $currentUser = $this->userService->getCurrentUser(); + + if ($currentUser) { + return $this->get($currentUser); + } + + return new UserSettings($this->defaultTimeZone); } } diff --git a/test/unit/models/classes/menu/SectionVisibilityFilterTest.php b/test/unit/models/classes/menu/SectionVisibilityFilterTest.php index 84acad2acf..aaa2498097 100644 --- a/test/unit/models/classes/menu/SectionVisibilityFilterTest.php +++ b/test/unit/models/classes/menu/SectionVisibilityFilterTest.php @@ -25,6 +25,7 @@ use oat\generis\test\TestCase; use oat\tao\model\featureFlag\FeatureFlagChecker; use oat\tao\model\menu\SectionVisibilityFilter; +use oat\tao\model\user\implementation\UserSettingsService; use PHPUnit\Framework\MockObject\MockObject; class SectionVisibilityFilterTest extends TestCase @@ -37,9 +38,13 @@ class SectionVisibilityFilterTest extends TestCase /** @var FeatureFlagChecker|MockObject */ private $featureFlagChecker; + /** @var UserSettingsService|MockObject */ + private $userSettingsService; + public function setUp(): void { $this->featureFlagChecker = $this->createMock(FeatureFlagChecker::class); + $this->userSettingsService = $this->createMock(UserSettingsService::class); $this->subject = new SectionVisibilityFilter( [ @@ -59,6 +64,7 @@ public function setUp(): void $this->subject->setServiceLocator( $this->getServiceLocatorMock([ FeatureFlagChecker::class => $this->featureFlagChecker, + UserSettingsService::class => $this->userSettingsService, ]) ); } @@ -75,7 +81,6 @@ public function testIsHidden(): void public function testIsHiddenLtiDisabled(): void { $this->featureFlagChecker - ->expects(self::once()) ->method('isEnabled') ->willReturn(false); @@ -93,7 +98,6 @@ public function testIsVisibleWithNoSections(): void public function testWhiteList($isEnabled, $result): void { $this->featureFlagChecker - ->expects(self::once()) ->method('isEnabled') ->willReturn($isEnabled); diff --git a/test/unit/user/implementation/UserSettingsServiceTest.php b/test/unit/user/implementation/UserSettingsServiceTest.php index cd91536ba2..50fa485890 100644 --- a/test/unit/user/implementation/UserSettingsServiceTest.php +++ b/test/unit/user/implementation/UserSettingsServiceTest.php @@ -27,11 +27,14 @@ use oat\generis\test\OntologyMockTrait; use oat\generis\test\TestCase; use oat\oatbox\user\UserTimezoneServiceInterface; +use oat\tao\model\featureFlag\FeatureFlagCheckerInterface; use oat\tao\model\user\implementation\UserSettings; use oat\tao\model\user\implementation\UserSettingsService; use core_kernel_classes_Resource; use core_kernel_persistence_smoothsql_SmoothModel; +use oat\tao\model\user\UserSettingsInterface; use PHPUnit\Framework\MockObject\MockObject; +use tao_models_classes_UserService; class UserSettingsServiceTest extends TestCase { @@ -49,14 +52,24 @@ class UserSettingsServiceTest extends TestCase /** @var UserSettings|MockObject */ private $userSettings; + /** @var tao_models_classes_UserService|MockObject */ + private $userService; + + /** @var FeatureFlagCheckerInterface|MockObject */ + private $featureFlagChecker; + public function setUp(): void { $this->userTimezoneService = $this->getUserTimezoneServiceMock(); $this->userSettings = $this->createMock(UserSettings::class); + $this->userService = $this->createMock(tao_models_classes_UserService::class); + $this->featureFlagChecker = $this->createMock(FeatureFlagCheckerInterface::class); $this->sut = new UserSettingsService( $this->userTimezoneService, - $this->getOntologyMock() + $this->getOntologyMock(), + $this->userService, + $this->featureFlagChecker ); } @@ -74,36 +87,126 @@ public function testGet( $this->assertEquals($expected->getUILanguageCode(), $settings->getUILanguageCode()); } + /** + * @dataProvider getDataProvider + */ + public function testGetCurrentUserSettings( + UserSettings $expected, + core_kernel_classes_Resource $user, + bool $isSolarDesignEnabled + ): void { + $this->userService->method('getCurrentUser')->willReturn($user); + + $this->featureFlagChecker + ->method('isEnabled') + ->with(FeatureFlagCheckerInterface::FEATURE_FLAG_SOLAR_DESIGN_ENABLED) + ->willReturn($isSolarDesignEnabled); + + $result = $this->sut->getCurrentUserSettings(); + + $this->assertEquals($expected->getTimezone(), $result->getTimezone()); + $this->assertEquals($expected->getDataLanguageCode(), $result->getDataLanguageCode()); + $this->assertEquals($expected->getUILanguageCode(), $result->getUILanguageCode()); + + $this->assertEquals( + $expected->getSetting(UserSettingsInterface::TIMEZONE), + $result->getSetting(UserSettingsInterface::TIMEZONE) + ); + $this->assertEquals( + $expected->getSetting(UserSettingsInterface::UI_LANGUAGE_CODE), + $result->getSetting(UserSettingsInterface::UI_LANGUAGE_CODE) + ); + $this->assertEquals( + $expected->getSetting(UserSettingsInterface::DATA_LANGUAGE_CODE), + $result->getSetting(UserSettingsInterface::DATA_LANGUAGE_CODE) + ); + $this->assertEquals( + $expected->getSetting(UserSettingsInterface::INTERFACE_MODE), + $result->getSetting(UserSettingsInterface::INTERFACE_MODE) + ); + } + public function getDataProvider(): array { return [ 'Settings for a user with no timezone' => [ - 'expected' => new UserSettings('Europe/Luxembourg', null, null), - 'user' => $this->getUserMock('', '', null), + 'expected' => $this->createUserSetting( null, null, 'Europe/Luxembourg'), + 'user' => $this->getUserMock(), + 'isSolarDesignEnabled' => true, ], 'Settings for a user with timezone set' => [ - 'expected' => new UserSettings('Europe/Madrid', null, null), - 'user' => $this->getUserMock('', '', 'Europe/Madrid'), + 'expected' => $this->createUserSetting( null, null, 'Europe/Madrid'), + 'user' => $this->getUserMock(null, null, 'Europe/Madrid'), + 'isSolarDesignEnabled' => true, ], 'Settings for a user with UI language set' => [ - 'expected' => new UserSettings('Europe/Madrid', 'uiLang', null), - 'user' => $this->getUserMock('uiLang', '', 'Europe/Madrid'), + 'expected' => $this->createUserSetting( 'uiLang', null, 'Europe/Madrid'), + 'user' => $this->getUserMock('uiLang', null, 'Europe/Madrid'), + 'isSolarDesignEnabled' => true, ], 'Settings for a user with data language set' => [ - 'expected' => new UserSettings('Europe/Madrid', null, 'defLang'), - 'user' => $this->getUserMock('', 'defLang', 'Europe/Madrid'), + 'expected' => $this->createUserSetting( null, 'defLang', 'Europe/Madrid'), + 'user' => $this->getUserMock(null, 'defLang', 'Europe/Madrid'), + 'isSolarDesignEnabled' => true, ], 'Settings for a user with UI and data language set' => [ - 'expected' => new UserSettings('Europe/Madrid', 'uiLang', 'defLang'), + 'expected' => $this->createUserSetting( 'uiLang', 'defLang', 'Europe/Madrid'), 'user' => $this->getUserMock('uiLang', 'defLang', 'Europe/Madrid'), + 'isSolarDesignEnabled' => true, + ], + 'Settings for a user with interface mode' => [ + 'expected' => $this->createUserSetting( + null, + null, + 'Europe/Madrid', + GenerisRdf::PROPERTY_USER_INTERFACE_MODE_ADVANCED + ), + 'user' => $this->getUserMock( + null, + null, + 'Europe/Madrid', + GenerisRdf::PROPERTY_USER_INTERFACE_MODE_ADVANCED + ), + 'isSolarDesignEnabled' => true, + ], + 'Settings for a user with interface mode when solar design disabled' => [ + 'expected' => $this->createUserSetting( + null, + null, + 'Europe/Madrid' + ), + 'user' => $this->getUserMock( + null, + null, + 'Europe/Madrid', + GenerisRdf::PROPERTY_USER_INTERFACE_MODE_ADVANCED + ), + 'isSolarDesignEnabled' => false, ], ]; } + private function createUserSetting( + string $uiLanguageUri = null, + string $defLangUri = null, + string $userTimezone = null, + string $userInterfaceMode = null + ): UserSettingsInterface { + $userSettings = new UserSettings($userTimezone); + + $userSettings->setSetting(UserSettingsInterface::INTERFACE_MODE, $userInterfaceMode); + $userSettings->setSetting(UserSettingsInterface::UI_LANGUAGE_CODE, $uiLanguageUri); + $userSettings->setSetting(UserSettingsInterface::DATA_LANGUAGE_CODE, $defLangUri); + $userSettings->setSetting(UserSettingsInterface::TIMEZONE, $userTimezone); + + return $userSettings; + } + private function getUserMock( - string $uiLanguageUri, - string $defLangUri, - ?string $userTimezone + string $uiLanguageUri = null, + string $defLangUri = null, + string $userTimezone = null, + string $userInterfaceMode = null ): core_kernel_classes_Resource { $props = []; if (!empty($uiLanguageUri)) { @@ -121,6 +224,11 @@ private function getUserMock( new \core_kernel_classes_Literal($userTimezone), ]; } + if (!empty($userInterfaceMode)) { + $props[GenerisRdf::PROPERTY_USER_INTERFACE_MODE] = [ + $this->getOntologyMock()->getResource($userInterfaceMode) + ]; + } $user = $this->createMock(core_kernel_classes_Resource::class); $user @@ -134,7 +242,8 @@ private function getUserMock( ->with([ $this->getOntologyMock()->getProperty(GenerisRdf::PROPERTY_USER_UILG), $this->getOntologyMock()->getProperty(GenerisRdf::PROPERTY_USER_DEFLG), - $this->getOntologyMock()->getProperty(GenerisRdf::PROPERTY_USER_TIMEZONE) + $this->getOntologyMock()->getProperty(GenerisRdf::PROPERTY_USER_TIMEZONE), + $this->getOntologyMock()->getProperty(GenerisRdf::PROPERTY_USER_INTERFACE_MODE) ]) ->willReturn($props); diff --git a/views/templates/blocks/header-main-navi.tpl b/views/templates/blocks/header-main-navi.tpl index a0c9b064da..b624f34ba5 100644 --- a/views/templates/blocks/header-main-navi.tpl +++ b/views/templates/blocks/header-main-navi.tpl @@ -84,9 +84,11 @@ $taoAsATool = get_data('taoAsATool'); getId() === 'user_settings'): ?> -
+ get_data('logout')])) : ?> + +