From 0d1789fa8648445305be68bc7650f250d186d332 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20S=C5=82omka?= Date: Mon, 20 Nov 2023 15:38:26 +0100 Subject: [PATCH 01/13] Added user mode settings --- .../Resources/config/default_parameters.yaml | 2 + .../config/services/user_settings.yaml | 9 ++ .../translations/ibexa_user_settings.en.xliff | 55 +++++++++ .../Resources/translations/messages.en.xliff | 5 + .../views/themes/admin/ui/menu/user.html.twig | 3 + src/lib/Form/Type/User/UserModeChoiceType.php | 46 +++++++ src/lib/UserSetting/Group/UserModeGroup.php | 49 ++++++++ src/lib/UserSetting/UserMode.php | 114 ++++++++++++++++++ 8 files changed, 283 insertions(+) create mode 100644 src/lib/Form/Type/User/UserModeChoiceType.php create mode 100644 src/lib/UserSetting/Group/UserModeGroup.php create mode 100644 src/lib/UserSetting/UserMode.php diff --git a/src/bundle/Resources/config/default_parameters.yaml b/src/bundle/Resources/config/default_parameters.yaml index d96d7a7a44..ddf27c4835 100644 --- a/src/bundle/Resources/config/default_parameters.yaml +++ b/src/bundle/Resources/config/default_parameters.yaml @@ -76,3 +76,5 @@ parameters: ibexa.io.multifile_upload.max_file_size: 5242880 ibexa.admin_ui.content_tree.node_factory.max_location_ids_in_single_aggregation: 100 + + ibexa.admin_ui.config.default.user_mode: 'smart' diff --git a/src/bundle/Resources/config/services/user_settings.yaml b/src/bundle/Resources/config/services/user_settings.yaml index 8a9fbf0897..84e4139290 100644 --- a/src/bundle/Resources/config/services/user_settings.yaml +++ b/src/bundle/Resources/config/services/user_settings.yaml @@ -25,3 +25,12 @@ services: tags: - { name: ibexa.user.setting.value, identifier: in_context_translation, group: location, priority: 60 } - { name: ibexa.user.setting.mapper.form, identifier: in_context_translation } + + Ibexa\AdminUi\UserSetting\Group\UserModeGroup: + tags: + - { name: ibexa.user.setting.group, identifier: mode, priority: -10 } + + Ibexa\AdminUi\UserSetting\UserMode: + tags: + - { name: ibexa.user.setting.value, identifier: user_mode, group: mode, priority: 10 } + - { name: ibexa.user.setting.mapper.form, identifier: user_mode } diff --git a/src/bundle/Resources/translations/ibexa_user_settings.en.xliff b/src/bundle/Resources/translations/ibexa_user_settings.en.xliff index 7a0ce0b32c..a43cfe2036 100644 --- a/src/bundle/Resources/translations/ibexa_user_settings.en.xliff +++ b/src/bundle/Resources/translations/ibexa_user_settings.en.xliff @@ -56,6 +56,16 @@ Date and Time will be displayed in this format: key: settings.datetime_format.preview_label + + settings.group.mode.description + + key: settings.group.mode.description + + + Mode + Mode + key: settings.group.mode.name + Toggle In-Context translation feature Toggle In-Context translation feature @@ -76,6 +86,51 @@ In-Context translation key: settings.in_context_translation.value.title + + Mode + Mode + key: user.setting.mode.description + + + Expert + Expert + key: user.setting.mode.expert + + + Smart mode – A clean and intuitive interface with a simplified content structure, designed for new and non-advanced users. Features include:

+ +

Expert mode – Tailored for experienced users familiar with Ibexa DXP. Provides comprehensive insights into the technical aspects of Content structure, including:

+ ]]> + Smart mode – A clean and intuitive interface with a simplified content structure, designed for new and non-advanced users. Features include:

+
    +
  • Quick preview
  • +
  • Hidden Technical Details tab
  • +
  • Hidden Locations and Versions tabs in Content items
  • +
+

Expert mode – Tailored for experienced users familiar with Ibexa DXP. Provides comprehensive insights into the technical aspects of Content structure, including:

+
    +
  • Technical Details tab
  • +
  • Location: Archived versions
  • +
]]>
+ key: user.setting.mode.help +
+ + Mode + Mode + key: user.setting.mode.name + + + Smart + Smart + key: user.setting.mode.smart + diff --git a/src/bundle/Resources/translations/messages.en.xliff b/src/bundle/Resources/translations/messages.en.xliff index 71c6d86ea9..38b4812ddf 100644 --- a/src/bundle/Resources/translations/messages.en.xliff +++ b/src/bundle/Resources/translations/messages.en.xliff @@ -788,6 +788,11 @@ Are you sure you want to delete selected URL wildcard(s)? key: url_wildcard.modal.message + + user.setting.mode.name + user.setting.mode.name + key: user.setting.mode.name + Logged as %userName% Logged as %userName% diff --git a/src/bundle/Resources/views/themes/admin/ui/menu/user.html.twig b/src/bundle/Resources/views/themes/admin/ui/menu/user.html.twig index 9949032b17..a41fe15233 100644 --- a/src/bundle/Resources/views/themes/admin/ui/menu/user.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/menu/user.html.twig @@ -45,6 +45,9 @@ {% if item.getExtra('template') is not null %} {% include item.getExtra('template') ignore missing with options only %} + + + // @TODO xxxxxxxx {% endif %} {{ parent() }} diff --git a/src/lib/Form/Type/User/UserModeChoiceType.php b/src/lib/Form/Type/User/UserModeChoiceType.php new file mode 100644 index 0000000000..15d25bea89 --- /dev/null +++ b/src/lib/Form/Type/User/UserModeChoiceType.php @@ -0,0 +1,46 @@ +setDefaults([ + 'choice_loader' => ChoiceList::lazy($this, $this->getChoiceLoader()), + 'translation_domain' => self::TRANSLATION_DOMAIN, + ]); + } + + public function getParent(): string + { + return ChoiceType::class; + } + + /** + * @phpstan-return callable(): array + */ + private function getChoiceLoader(): callable + { + return static function (): array { + return [ + 'user.setting.mode.expert' => UserMode::EXPERT, + 'user.setting.mode.smart' => UserMode::SMART, + ]; + }; + } +} diff --git a/src/lib/UserSetting/Group/UserModeGroup.php b/src/lib/UserSetting/Group/UserModeGroup.php new file mode 100644 index 0000000000..e6ed44649f --- /dev/null +++ b/src/lib/UserSetting/Group/UserModeGroup.php @@ -0,0 +1,49 @@ + $values + */ + public function __construct( + TranslatorInterface $translator, + array $values = [] + ) { + $this->translator = $translator; + parent::__construct($values); + } + + public function getName(): string + { + return $this->translator->trans( + /** @Desc("Mode") */ + 'settings.group.mode.name', + [], + 'ibexa_user_settings' + ); + } + + public function getDescription(): string + { + return $this->translator->trans( + /** @Desc("") */ + 'settings.group.mode.description', + [], + 'ibexa_user_settings' + ); + } +} diff --git a/src/lib/UserSetting/UserMode.php b/src/lib/UserSetting/UserMode.php new file mode 100644 index 0000000000..63899164f0 --- /dev/null +++ b/src/lib/UserSetting/UserMode.php @@ -0,0 +1,114 @@ +configResolver = $configResolver; + $this->translator = $translator; + } + + public function getName(): string + { + return $this->translator->trans( + 'user.setting.mode.name', + [], + self::TRANSLATION_DOMAIN + ); + } + + public function getDescription(): string + { + return $this->translator->trans( + 'user.setting.mode.description', + [], + self::TRANSLATION_DOMAIN + ); + } + + public function getDisplayValue(string $storageValue): string + { + switch (true) { + case $storageValue === self::EXPERT: + return $this->translator->trans('user.setting.mode.expert', [], self::TRANSLATION_DOMAIN); + case $storageValue === self::SMART: + return $this->translator->trans('user.setting.mode.smart', [], self::TRANSLATION_DOMAIN); + } + + return $storageValue; + } + + public function getDefaultValue(): string + { + return $this->configResolver->getParameter('default.user_mode'); + } + + public function mapFieldForm( + FormBuilderInterface $formBuilder, + ValueDefinitionInterface $value + ): FormBuilderInterface { + return $formBuilder->create( + 'value', + UserModeChoiceType::class, + [ + 'label' => 'user.setting.mode.name', + 'expanded' => true, + 'multiple' => false, + 'translation_domain' => self::TRANSLATION_DOMAIN, + 'help' => $this->translator->trans('user.setting.mode.help', [], self::TRANSLATION_DOMAIN), + 'help_html' => true, + ] + ); + } + + public static function getTranslationMessages(): array + { + return [ + (new Message('user.setting.mode.help', self::TRANSLATION_DOMAIN)) + ->setDesc( + '

Smart mode – A clean and intuitive interface with a simplified content structure, designed for new and non-advanced users. Features include:

+
    +
  • Quick preview
  • +
  • Hidden Technical Details tab
  • +
  • Hidden Locations and Versions tabs in Content items
  • +
+

Expert mode – Tailored for experienced users familiar with Ibexa DXP. Provides comprehensive insights into the technical aspects of Content structure, including:

+
    +
  • Technical Details tab
  • +
  • Location: Archived versions
  • +
' + ), + (new Message('user.setting.mode.expert', self::TRANSLATION_DOMAIN))->setDesc('Expert'), + (new Message('user.setting.mode.smart', self::TRANSLATION_DOMAIN))->setDesc('Smart'), + (new Message('user.setting.mode.name', self::TRANSLATION_DOMAIN))->setDesc('Mode'), + (new Message('user.setting.mode.description', self::TRANSLATION_DOMAIN))->setDesc('Mode'), + ]; + } +} From 412681f5ddf60f1ec9d94530440c826c7da4bea6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20S=C5=82omka?= Date: Tue, 21 Nov 2023 12:00:45 +0100 Subject: [PATCH 02/13] Apply suggestions from code review Co-authored-by: Maciej Kobus --- src/lib/UserSetting/Group/UserModeGroup.php | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/lib/UserSetting/Group/UserModeGroup.php b/src/lib/UserSetting/Group/UserModeGroup.php index e6ed44649f..3885023027 100644 --- a/src/lib/UserSetting/Group/UserModeGroup.php +++ b/src/lib/UserSetting/Group/UserModeGroup.php @@ -39,11 +39,6 @@ public function getName(): string public function getDescription(): string { - return $this->translator->trans( - /** @Desc("") */ - 'settings.group.mode.description', - [], - 'ibexa_user_settings' - ); + return ''; } } From 5f4bbea8929e099824c3b87eb12a12aebc213888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20S=C5=82omka?= Date: Tue, 21 Nov 2023 14:49:21 +0100 Subject: [PATCH 03/13] Improvements --- .../Configuration/Parser/UserModeParser.php | 72 +++++++++++++++++++ src/bundle/IbexaAdminUiBundle.php | 1 + .../Resources/config/default_parameters.yaml | 2 - .../Resources/config/default_settings.yaml | 2 + .../views/themes/admin/ui/menu/user.html.twig | 3 - src/lib/UserSetting/UserMode.php | 8 ++- 6 files changed, 82 insertions(+), 6 deletions(-) create mode 100644 src/bundle/DependencyInjection/Configuration/Parser/UserModeParser.php create mode 100644 src/bundle/Resources/config/default_settings.yaml diff --git a/src/bundle/DependencyInjection/Configuration/Parser/UserModeParser.php b/src/bundle/DependencyInjection/Configuration/Parser/UserModeParser.php new file mode 100644 index 0000000000..4c27ba4944 --- /dev/null +++ b/src/bundle/DependencyInjection/Configuration/Parser/UserModeParser.php @@ -0,0 +1,72 @@ + $scopeSettings + */ + public function mapConfig( + array &$scopeSettings, + $currentScope, + ContextualizerInterface $contextualizer + ): void { + if (empty($scopeSettings['admin_ui'])) { + return; + } + + $settings = $scopeSettings['admin_ui']; + + $this->addSuggestionParameters($settings, $currentScope, $contextualizer); + } + + public function addSemanticConfig(NodeBuilder $nodeBuilder): void + { + $rootProductCatalogNode = $nodeBuilder->arrayNode('admin_ui'); + $rootProductCatalogNode->children() + ->enumNode('default_user_mode') + ->info('Default user mode setting') + ->values(['smart', 'expert']) + ->end() + ->end(); + } + + /** + * @param array $settings + */ + private function addSuggestionParameters( + array $settings, + string $currentScope, + ContextualizerInterface $contextualizer + ): void { + $contextualizer->setContextualParameter( + 'admin_ui.default_user_mode', + $currentScope, + $settings['default_user_mode'] + ); + } +} diff --git a/src/bundle/IbexaAdminUiBundle.php b/src/bundle/IbexaAdminUiBundle.php index b168dd5996..0775c23ad1 100644 --- a/src/bundle/IbexaAdminUiBundle.php +++ b/src/bundle/IbexaAdminUiBundle.php @@ -72,6 +72,7 @@ private function getConfigParsers(): array new Parser\SubtreePath(), new Parser\LimitationValueTemplates(), new Parser\Assets(), + new Parser\UserModeParser(), ]; } } diff --git a/src/bundle/Resources/config/default_parameters.yaml b/src/bundle/Resources/config/default_parameters.yaml index ddf27c4835..d96d7a7a44 100644 --- a/src/bundle/Resources/config/default_parameters.yaml +++ b/src/bundle/Resources/config/default_parameters.yaml @@ -76,5 +76,3 @@ parameters: ibexa.io.multifile_upload.max_file_size: 5242880 ibexa.admin_ui.content_tree.node_factory.max_location_ids_in_single_aggregation: 100 - - ibexa.admin_ui.config.default.user_mode: 'smart' diff --git a/src/bundle/Resources/config/default_settings.yaml b/src/bundle/Resources/config/default_settings.yaml new file mode 100644 index 0000000000..67b375b1f6 --- /dev/null +++ b/src/bundle/Resources/config/default_settings.yaml @@ -0,0 +1,2 @@ +parameters: + ibexa.site_access.config.default.admin_ui.default_user_mode: 'smart' diff --git a/src/bundle/Resources/views/themes/admin/ui/menu/user.html.twig b/src/bundle/Resources/views/themes/admin/ui/menu/user.html.twig index a41fe15233..9949032b17 100644 --- a/src/bundle/Resources/views/themes/admin/ui/menu/user.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/menu/user.html.twig @@ -45,9 +45,6 @@ {% if item.getExtra('template') is not null %} {% include item.getExtra('template') ignore missing with options only %} - - - // @TODO xxxxxxxx {% endif %} {{ parent() }} diff --git a/src/lib/UserSetting/UserMode.php b/src/lib/UserSetting/UserMode.php index 63899164f0..c09c30262c 100644 --- a/src/lib/UserSetting/UserMode.php +++ b/src/lib/UserSetting/UserMode.php @@ -21,6 +21,12 @@ final class UserMode implements ValueDefinitionInterface, FormMapperInterface, T { public const EXPERT = '0'; public const SMART = '1'; + + private const MODES = [ + 'expert' => self::EXPERT, + 'smart' => self::SMART, + ]; + private const TRANSLATION_DOMAIN = 'ibexa_user_settings'; private TranslatorInterface $translator; @@ -67,7 +73,7 @@ public function getDisplayValue(string $storageValue): string public function getDefaultValue(): string { - return $this->configResolver->getParameter('default.user_mode'); + return self::MODES[$this->configResolver->getParameter('default.admin_ui.default_user_mode')]; } public function mapFieldForm( From 890bcc7f72a73219b761f06c6794916a55f7576c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20S=C5=82omka?= Date: Tue, 21 Nov 2023 16:16:34 +0100 Subject: [PATCH 04/13] Improvements --- .../Configuration/Parser/UserModeParser.php | 14 +++++++++++++- src/bundle/Resources/config/default_settings.yaml | 2 -- src/lib/UserSetting/UserMode.php | 7 +------ 3 files changed, 14 insertions(+), 9 deletions(-) delete mode 100644 src/bundle/Resources/config/default_settings.yaml diff --git a/src/bundle/DependencyInjection/Configuration/Parser/UserModeParser.php b/src/bundle/DependencyInjection/Configuration/Parser/UserModeParser.php index 4c27ba4944..4ee75cef07 100644 --- a/src/bundle/DependencyInjection/Configuration/Parser/UserModeParser.php +++ b/src/bundle/DependencyInjection/Configuration/Parser/UserModeParser.php @@ -8,6 +8,7 @@ namespace Ibexa\Bundle\AdminUi\DependencyInjection\Configuration\Parser; +use Ibexa\AdminUi\UserSetting\UserMode; use Ibexa\Bundle\Core\DependencyInjection\Configuration\AbstractParser; use Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\ContextualizerInterface; use Symfony\Component\Config\Definition\Builder\NodeBuilder; @@ -27,6 +28,11 @@ */ final class UserModeParser extends AbstractParser { + private const MODES = [ + 'expert' => UserMode::EXPERT, + 'smart' => UserMode::SMART, + ]; + /** * @param array $scopeSettings */ @@ -63,10 +69,16 @@ private function addSuggestionParameters( string $currentScope, ContextualizerInterface $contextualizer ): void { + $userMode = $settings['default_user_mode']; + + if (false === array_key_exists($userMode, self::MODES)) { + return; + } + $contextualizer->setContextualParameter( 'admin_ui.default_user_mode', $currentScope, - $settings['default_user_mode'] + self::MODES[$userMode] ); } } diff --git a/src/bundle/Resources/config/default_settings.yaml b/src/bundle/Resources/config/default_settings.yaml deleted file mode 100644 index 67b375b1f6..0000000000 --- a/src/bundle/Resources/config/default_settings.yaml +++ /dev/null @@ -1,2 +0,0 @@ -parameters: - ibexa.site_access.config.default.admin_ui.default_user_mode: 'smart' diff --git a/src/lib/UserSetting/UserMode.php b/src/lib/UserSetting/UserMode.php index c09c30262c..939bed27d6 100644 --- a/src/lib/UserSetting/UserMode.php +++ b/src/lib/UserSetting/UserMode.php @@ -22,11 +22,6 @@ final class UserMode implements ValueDefinitionInterface, FormMapperInterface, T public const EXPERT = '0'; public const SMART = '1'; - private const MODES = [ - 'expert' => self::EXPERT, - 'smart' => self::SMART, - ]; - private const TRANSLATION_DOMAIN = 'ibexa_user_settings'; private TranslatorInterface $translator; @@ -73,7 +68,7 @@ public function getDisplayValue(string $storageValue): string public function getDefaultValue(): string { - return self::MODES[$this->configResolver->getParameter('default.admin_ui.default_user_mode')]; + return $this->configResolver->getParameter('admin_ui.default_user_mode'); } public function mapFieldForm( From 79d45c012b8c3161d78d3e3dca03c27337735991 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20S=C5=82omka?= Date: Wed, 22 Nov 2023 10:32:41 +0100 Subject: [PATCH 05/13] Code review improvements --- .../{UserModeParser.php => AdminUIParser.php} | 18 ++++----- src/bundle/IbexaAdminUiBundle.php | 2 +- .../translations/ibexa_user_settings.en.xliff | 5 --- .../Resources/translations/messages.en.xliff | 5 --- src/lib/UserSetting/UserMode.php | 38 +++++++++---------- 5 files changed, 27 insertions(+), 41 deletions(-) rename src/bundle/DependencyInjection/Configuration/Parser/{UserModeParser.php => AdminUIParser.php} (83%) diff --git a/src/bundle/DependencyInjection/Configuration/Parser/UserModeParser.php b/src/bundle/DependencyInjection/Configuration/Parser/AdminUIParser.php similarity index 83% rename from src/bundle/DependencyInjection/Configuration/Parser/UserModeParser.php rename to src/bundle/DependencyInjection/Configuration/Parser/AdminUIParser.php index 4ee75cef07..2216a2719d 100644 --- a/src/bundle/DependencyInjection/Configuration/Parser/UserModeParser.php +++ b/src/bundle/DependencyInjection/Configuration/Parser/AdminUIParser.php @@ -16,8 +16,6 @@ /** * Configuration parser for user modes. * - * @Example configuration: - * * ```yaml * ibexa: * system: @@ -26,7 +24,7 @@ * default_user_mode: smart * ``` */ -final class UserModeParser extends AbstractParser +final class AdminUIParser extends AbstractParser { private const MODES = [ 'expert' => UserMode::EXPERT, @@ -52,13 +50,13 @@ public function mapConfig( public function addSemanticConfig(NodeBuilder $nodeBuilder): void { - $rootProductCatalogNode = $nodeBuilder->arrayNode('admin_ui'); - $rootProductCatalogNode->children() - ->enumNode('default_user_mode') - ->info('Default user mode setting') - ->values(['smart', 'expert']) - ->end() - ->end(); + $root = $nodeBuilder->arrayNode('admin_ui'); + $root->children() + ->enumNode('default_user_mode') + ->info('Default user mode setting') + ->values(['smart', 'expert']) + ->end() + ->end(); } /** diff --git a/src/bundle/IbexaAdminUiBundle.php b/src/bundle/IbexaAdminUiBundle.php index 0775c23ad1..94beef0071 100644 --- a/src/bundle/IbexaAdminUiBundle.php +++ b/src/bundle/IbexaAdminUiBundle.php @@ -72,7 +72,7 @@ private function getConfigParsers(): array new Parser\SubtreePath(), new Parser\LimitationValueTemplates(), new Parser\Assets(), - new Parser\UserModeParser(), + new Parser\AdminUIParser(), ]; } } diff --git a/src/bundle/Resources/translations/ibexa_user_settings.en.xliff b/src/bundle/Resources/translations/ibexa_user_settings.en.xliff index a43cfe2036..f05504af18 100644 --- a/src/bundle/Resources/translations/ibexa_user_settings.en.xliff +++ b/src/bundle/Resources/translations/ibexa_user_settings.en.xliff @@ -56,11 +56,6 @@ Date and Time will be displayed in this format: key: settings.datetime_format.preview_label
- - settings.group.mode.description - - key: settings.group.mode.description - Mode Mode diff --git a/src/bundle/Resources/translations/messages.en.xliff b/src/bundle/Resources/translations/messages.en.xliff index 38b4812ddf..71c6d86ea9 100644 --- a/src/bundle/Resources/translations/messages.en.xliff +++ b/src/bundle/Resources/translations/messages.en.xliff @@ -788,11 +788,6 @@ Are you sure you want to delete selected URL wildcard(s)? key: url_wildcard.modal.message - - user.setting.mode.name - user.setting.mode.name - key: user.setting.mode.name - Logged as %userName% Logged as %userName% diff --git a/src/lib/UserSetting/UserMode.php b/src/lib/UserSetting/UserMode.php index 939bed27d6..d117f80b7e 100644 --- a/src/lib/UserSetting/UserMode.php +++ b/src/lib/UserSetting/UserMode.php @@ -22,8 +22,6 @@ final class UserMode implements ValueDefinitionInterface, FormMapperInterface, T public const EXPERT = '0'; public const SMART = '1'; - private const TRANSLATION_DOMAIN = 'ibexa_user_settings'; - private TranslatorInterface $translator; private ConfigResolverInterface $configResolver; @@ -41,7 +39,7 @@ public function getName(): string return $this->translator->trans( 'user.setting.mode.name', [], - self::TRANSLATION_DOMAIN + 'ibexa_user_settings' ); } @@ -50,20 +48,18 @@ public function getDescription(): string return $this->translator->trans( 'user.setting.mode.description', [], - self::TRANSLATION_DOMAIN + 'ibexa_user_settings' ); } public function getDisplayValue(string $storageValue): string { - switch (true) { - case $storageValue === self::EXPERT: - return $this->translator->trans('user.setting.mode.expert', [], self::TRANSLATION_DOMAIN); - case $storageValue === self::SMART: - return $this->translator->trans('user.setting.mode.smart', [], self::TRANSLATION_DOMAIN); - } + $translationMap = [ + self::EXPERT => $this->translator->trans('user.setting.mode.expert', [], 'ibexa_user_settings'), + self::SMART => $this->translator->trans('user.setting.mode.smart', [], 'ibexa_user_settings'), + ]; - return $storageValue; + return $translationMap[$storageValue] ?? $storageValue; } public function getDefaultValue(): string @@ -82,8 +78,8 @@ public function mapFieldForm( 'label' => 'user.setting.mode.name', 'expanded' => true, 'multiple' => false, - 'translation_domain' => self::TRANSLATION_DOMAIN, - 'help' => $this->translator->trans('user.setting.mode.help', [], self::TRANSLATION_DOMAIN), + 'translation_domain' => 'ibexa_user_settings', + 'help' => $this->translator->trans('user.setting.mode.help', [], 'ibexa_user_settings'), 'help_html' => true, ] ); @@ -92,24 +88,26 @@ public function mapFieldForm( public static function getTranslationMessages(): array { return [ - (new Message('user.setting.mode.help', self::TRANSLATION_DOMAIN)) + (new Message('user.setting.mode.help', 'ibexa_user_settings')) ->setDesc( - '

Smart mode – A clean and intuitive interface with a simplified content structure, designed for new and non-advanced users. Features include:

+ '

Smart mode – A clean and intuitive interface with a simplified content + structure, designed for new and non-advanced users. Features include:

-

Expert mode – Tailored for experienced users familiar with Ibexa DXP. Provides comprehensive insights into the technical aspects of Content structure, including:

+

Expert mode – Tailored for experienced users familiar with Ibexa DXP. + Provides comprehensive insights into the technical aspects of Content structure, including:

' ), - (new Message('user.setting.mode.expert', self::TRANSLATION_DOMAIN))->setDesc('Expert'), - (new Message('user.setting.mode.smart', self::TRANSLATION_DOMAIN))->setDesc('Smart'), - (new Message('user.setting.mode.name', self::TRANSLATION_DOMAIN))->setDesc('Mode'), - (new Message('user.setting.mode.description', self::TRANSLATION_DOMAIN))->setDesc('Mode'), + (new Message('user.setting.mode.expert', 'ibexa_user_settings'))->setDesc('Expert'), + (new Message('user.setting.mode.smart', 'ibexa_user_settings'))->setDesc('Smart'), + (new Message('user.setting.mode.name', 'ibexa_user_settings'))->setDesc('Mode'), + (new Message('user.setting.mode.description', 'ibexa_user_settings'))->setDesc('Mode'), ]; } } From cdd016e14d2b17b5e0bc5672efe8ed6b9accc87f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20S=C5=82omka?= Date: Wed, 22 Nov 2023 10:53:07 +0100 Subject: [PATCH 06/13] Translation improvements --- src/lib/UserSetting/UserMode.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/UserSetting/UserMode.php b/src/lib/UserSetting/UserMode.php index d117f80b7e..b1a9faab9d 100644 --- a/src/lib/UserSetting/UserMode.php +++ b/src/lib/UserSetting/UserMode.php @@ -97,7 +97,7 @@ public static function getTranslationMessages(): array
  • Hidden Technical Details tab
  • Hidden Locations and Versions tabs in Content items
  • -

    Expert mode – Tailored for experienced users familiar with Ibexa DXP. +

    Expert mode – Tailored for experienced users familiar with Ibexa DXP. Provides comprehensive insights into the technical aspects of Content structure, including:

    • Technical Details tab
    • From 2606fd9e04bd920b0c6e047f63ba9f1880947991 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20S=C5=82omka?= Date: Wed, 22 Nov 2023 11:51:53 +0100 Subject: [PATCH 07/13] Changed AdminUIParser to AdminUiParser --- .../Parser/{AdminUIParser.php => AdminUiParser.php} | 6 +++--- src/bundle/IbexaAdminUiBundle.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) rename src/bundle/DependencyInjection/Configuration/Parser/{AdminUIParser.php => AdminUiParser.php} (92%) diff --git a/src/bundle/DependencyInjection/Configuration/Parser/AdminUIParser.php b/src/bundle/DependencyInjection/Configuration/Parser/AdminUiParser.php similarity index 92% rename from src/bundle/DependencyInjection/Configuration/Parser/AdminUIParser.php rename to src/bundle/DependencyInjection/Configuration/Parser/AdminUiParser.php index 2216a2719d..6d11745d9f 100644 --- a/src/bundle/DependencyInjection/Configuration/Parser/AdminUIParser.php +++ b/src/bundle/DependencyInjection/Configuration/Parser/AdminUiParser.php @@ -24,7 +24,7 @@ * default_user_mode: smart * ``` */ -final class AdminUIParser extends AbstractParser +final class AdminUiParser extends AbstractParser { private const MODES = [ 'expert' => UserMode::EXPERT, @@ -45,7 +45,7 @@ public function mapConfig( $settings = $scopeSettings['admin_ui']; - $this->addSuggestionParameters($settings, $currentScope, $contextualizer); + $this->addUserModeParameters($settings, $currentScope, $contextualizer); } public function addSemanticConfig(NodeBuilder $nodeBuilder): void @@ -62,7 +62,7 @@ public function addSemanticConfig(NodeBuilder $nodeBuilder): void /** * @param array $settings */ - private function addSuggestionParameters( + private function addUserModeParameters( array $settings, string $currentScope, ContextualizerInterface $contextualizer diff --git a/src/bundle/IbexaAdminUiBundle.php b/src/bundle/IbexaAdminUiBundle.php index 94beef0071..521a9a9e49 100644 --- a/src/bundle/IbexaAdminUiBundle.php +++ b/src/bundle/IbexaAdminUiBundle.php @@ -72,7 +72,7 @@ private function getConfigParsers(): array new Parser\SubtreePath(), new Parser\LimitationValueTemplates(), new Parser\Assets(), - new Parser\AdminUIParser(), + new Parser\AdminUiParser(), ]; } } From 9e9b904730cf235d40760de036ddad6900054b08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20S=C5=82omka?= Date: Wed, 22 Nov 2023 12:04:02 +0100 Subject: [PATCH 08/13] Added missing parameter --- src/bundle/Resources/config/default_parameters.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/bundle/Resources/config/default_parameters.yaml b/src/bundle/Resources/config/default_parameters.yaml index d96d7a7a44..23edeee277 100644 --- a/src/bundle/Resources/config/default_parameters.yaml +++ b/src/bundle/Resources/config/default_parameters.yaml @@ -76,3 +76,5 @@ parameters: ibexa.io.multifile_upload.max_file_size: 5242880 ibexa.admin_ui.content_tree.node_factory.max_location_ids_in_single_aggregation: 100 + + ibexa.site_access.config.default.admin_ui.default_user_mode: smart From 17ef47921ad4146b1016c977316515f48084bd59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20S=C5=82omka?= Date: Wed, 22 Nov 2023 15:55:49 +0100 Subject: [PATCH 09/13] Fixed choice loader --- src/lib/Form/Type/User/UserModeChoiceType.php | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/src/lib/Form/Type/User/UserModeChoiceType.php b/src/lib/Form/Type/User/UserModeChoiceType.php index 15d25bea89..565b905f51 100644 --- a/src/lib/Form/Type/User/UserModeChoiceType.php +++ b/src/lib/Form/Type/User/UserModeChoiceType.php @@ -10,7 +10,6 @@ use Ibexa\AdminUi\UserSetting\UserMode; use Symfony\Component\Form\AbstractType; -use Symfony\Component\Form\ChoiceList\ChoiceList; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\OptionsResolver\OptionsResolver; @@ -21,8 +20,11 @@ final class UserModeChoiceType extends AbstractType public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ - 'choice_loader' => ChoiceList::lazy($this, $this->getChoiceLoader()), 'translation_domain' => self::TRANSLATION_DOMAIN, + 'choices' => [ + 'user.setting.mode.expert' => UserMode::EXPERT, + 'user.setting.mode.smart' => UserMode::SMART, + ], ]); } @@ -30,17 +32,4 @@ public function getParent(): string { return ChoiceType::class; } - - /** - * @phpstan-return callable(): array - */ - private function getChoiceLoader(): callable - { - return static function (): array { - return [ - 'user.setting.mode.expert' => UserMode::EXPERT, - 'user.setting.mode.smart' => UserMode::SMART, - ]; - }; - } } From 42f0416dda80331c857f758dda354136661e9ab9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20S=C5=82omka?= Date: Wed, 22 Nov 2023 16:07:57 +0100 Subject: [PATCH 10/13] Removed yoda codding --- .../DependencyInjection/Configuration/Parser/AdminUiParser.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/DependencyInjection/Configuration/Parser/AdminUiParser.php b/src/bundle/DependencyInjection/Configuration/Parser/AdminUiParser.php index 6d11745d9f..c50215dddc 100644 --- a/src/bundle/DependencyInjection/Configuration/Parser/AdminUiParser.php +++ b/src/bundle/DependencyInjection/Configuration/Parser/AdminUiParser.php @@ -69,7 +69,7 @@ private function addUserModeParameters( ): void { $userMode = $settings['default_user_mode']; - if (false === array_key_exists($userMode, self::MODES)) { + if (!array_key_exists($userMode, self::MODES)) { return; } From f951110bc6f9374c41a8457f8d58d6297ae64237 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20S=C5=82omka?= Date: Thu, 23 Nov 2023 11:22:06 +0100 Subject: [PATCH 11/13] Hardcoded translation domain --- src/lib/Form/Type/User/UserModeChoiceType.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/lib/Form/Type/User/UserModeChoiceType.php b/src/lib/Form/Type/User/UserModeChoiceType.php index 565b905f51..65b9612d90 100644 --- a/src/lib/Form/Type/User/UserModeChoiceType.php +++ b/src/lib/Form/Type/User/UserModeChoiceType.php @@ -15,12 +15,10 @@ final class UserModeChoiceType extends AbstractType { - private const TRANSLATION_DOMAIN = 'ibexa_user_settings'; - public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ - 'translation_domain' => self::TRANSLATION_DOMAIN, + 'translation_domain' => 'ibexa_user_settings', 'choices' => [ 'user.setting.mode.expert' => UserMode::EXPERT, 'user.setting.mode.smart' => UserMode::SMART, From a5fb29529ae43a2fbe9a7341124e1961b783b845 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20S=C5=82omka?= Date: Thu, 23 Nov 2023 12:49:20 +0100 Subject: [PATCH 12/13] Smart/Expert insted of Expert/Smart in choice --- src/lib/Form/Type/User/UserModeChoiceType.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Form/Type/User/UserModeChoiceType.php b/src/lib/Form/Type/User/UserModeChoiceType.php index 65b9612d90..8ce56ea399 100644 --- a/src/lib/Form/Type/User/UserModeChoiceType.php +++ b/src/lib/Form/Type/User/UserModeChoiceType.php @@ -20,8 +20,8 @@ public function configureOptions(OptionsResolver $resolver): void $resolver->setDefaults([ 'translation_domain' => 'ibexa_user_settings', 'choices' => [ - 'user.setting.mode.expert' => UserMode::EXPERT, 'user.setting.mode.smart' => UserMode::SMART, + 'user.setting.mode.expert' => UserMode::EXPERT, ], ]); } From a804f6b99bd57839862bfa813343eb01f7e48e9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20S=C5=82omka?= Date: Thu, 23 Nov 2023 13:08:42 +0100 Subject: [PATCH 13/13] Fixed default value --- src/bundle/Resources/config/default_parameters.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/config/default_parameters.yaml b/src/bundle/Resources/config/default_parameters.yaml index 23edeee277..8be5cee2f0 100644 --- a/src/bundle/Resources/config/default_parameters.yaml +++ b/src/bundle/Resources/config/default_parameters.yaml @@ -77,4 +77,4 @@ parameters: ibexa.admin_ui.content_tree.node_factory.max_location_ids_in_single_aggregation: 100 - ibexa.site_access.config.default.admin_ui.default_user_mode: smart + ibexa.site_access.config.default.admin_ui.default_user_mode: '1'