From 6a25cdacf05919f3d31683816256c073f559fe58 Mon Sep 17 00:00:00 2001 From: Maciej Kobus Date: Wed, 20 Dec 2017 11:18:29 +0100 Subject: [PATCH] EZP-28598: Fixes no filtering langauge on create content UI --- src/bundle/Resources/config/services.yml | 5 +- .../Resources/config/services/form_types.yml | 13 +++ .../config/services/type_extensions.yml | 5 -- .../Type/Content/Draft/ContentCreateType.php | 4 +- .../Language/LimitedLanguageChoiceType.php | 88 +++++++++++++++++++ 5 files changed, 104 insertions(+), 11 deletions(-) create mode 100644 src/bundle/Resources/config/services/form_types.yml delete mode 100644 src/bundle/Resources/config/services/type_extensions.yml create mode 100644 src/lib/Form/Type/Language/LimitedLanguageChoiceType.php diff --git a/src/bundle/Resources/config/services.yml b/src/bundle/Resources/config/services.yml index c631a65c0c..50a7c6975a 100644 --- a/src/bundle/Resources/config/services.yml +++ b/src/bundle/Resources/config/services.yml @@ -4,13 +4,13 @@ imports: - { resource: services/tabs.yml } - { resource: services/menu.yml } - { resource: services/application_config.yml } - - { resource: services/type_extensions.yml } - { resource: services/pagination.yml } - { resource: services/ui_config.yml } - { resource: services/components.yml } - { resource: services/dashboard.yml } - { resource: services/modules/subitems.yml } - { resource: services/form_processors.yml } + - { resource: services/form_types.yml } parameters: @@ -44,9 +44,6 @@ services: tags: - {name: kernel.event_subscriber} - EzSystems\EzPlatformAdminUi\Form\Type\: - resource: '../../../lib/Form/Type' - EzSystems\EzPlatformAdminUi\Form\DataMapper\: resource: '../../../lib/Form/DataMapper' diff --git a/src/bundle/Resources/config/services/form_types.yml b/src/bundle/Resources/config/services/form_types.yml new file mode 100644 index 0000000000..9259a2b2c6 --- /dev/null +++ b/src/bundle/Resources/config/services/form_types.yml @@ -0,0 +1,13 @@ +services: + _defaults: + autowire: true + autoconfigure: true + public: false + + + EzSystems\EzPlatformAdminUi\Form\Type\: + resource: '../../../lib/Form/Type' + + EzSystems\EzPlatformAdminUi\Form\Type\Language\LimitedLanguageChoiceType: + arguments: + $siteaccessLanguages: '$languages$' diff --git a/src/bundle/Resources/config/services/type_extensions.yml b/src/bundle/Resources/config/services/type_extensions.yml deleted file mode 100644 index a75730e093..0000000000 --- a/src/bundle/Resources/config/services/type_extensions.yml +++ /dev/null @@ -1,5 +0,0 @@ -services: - _defaults: - autowire: true - autoconfigure: true - public: true diff --git a/src/lib/Form/Type/Content/Draft/ContentCreateType.php b/src/lib/Form/Type/Content/Draft/ContentCreateType.php index 634414ec7a..27f53c8d20 100644 --- a/src/lib/Form/Type/Content/Draft/ContentCreateType.php +++ b/src/lib/Form/Type/Content/Draft/ContentCreateType.php @@ -12,7 +12,7 @@ use EzSystems\EzPlatformAdminUi\Form\Data\Content\Draft\ContentCreateData; use EzSystems\EzPlatformAdminUi\Form\Type\Content\LocationType; use EzSystems\EzPlatformAdminUi\Form\Type\ContentType\ContentTypeChoiceType; -use EzSystems\EzPlatformAdminUi\Form\Type\Language\LanguageChoiceType; +use EzSystems\EzPlatformAdminUi\Form\Type\Language\LimitedLanguageChoiceType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\FormBuilderInterface; @@ -50,7 +50,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) ) ->add( 'language', - LanguageChoiceType::class, + LimitedLanguageChoiceType::class, [ 'label' => false, 'multiple' => false, diff --git a/src/lib/Form/Type/Language/LimitedLanguageChoiceType.php b/src/lib/Form/Type/Language/LimitedLanguageChoiceType.php new file mode 100644 index 0000000000..81d924835c --- /dev/null +++ b/src/lib/Form/Type/Language/LimitedLanguageChoiceType.php @@ -0,0 +1,88 @@ +languageService = $languageService; + $this->siteaccessLanguages = $siteaccessLanguages; + $this->permissionResolver = $permissionResolver; + } + + public function getParent() + { + return ChoiceType::class; + } + + public function configureOptions(OptionsResolver $resolver) + { + $resolver + ->setDefaults([ + 'choice_loader' => $this->getChoiceLoader(), + 'choice_label' => 'name', + 'choice_name' => 'languageCode', + 'choice_value' => 'languageCode', + ]); + } + + /** + * @return CallbackChoiceLoader + */ + private function getChoiceLoader(): CallbackChoiceLoader + { + return new CallbackChoiceLoader( + function () { + $systemLanguages = $this->languageService->loadLanguages(); + $siteaccessLanguages = $this->siteaccessLanguages; + $availableLanguageCodes = array_intersect( + array_column($systemLanguages, 'languageCode'), + $siteaccessLanguages + ); + + $languages = array_filter($systemLanguages, function (Language $language) use ($availableLanguageCodes) { + return $language->enabled && in_array($language->languageCode, $availableLanguageCodes, true); + }); + + return $languages; + } + ); + } +}