From bddcdd7de2ef630ef14573e19e87f181f7a8c085 Mon Sep 17 00:00:00 2001 From: nobohan Date: Mon, 8 Nov 2021 10:42:12 +0100 Subject: [PATCH] person: add preferrred_choices for countries and languages --- .../ChillMainExtension.php | 3 ++ .../DependencyInjection/Configuration.php | 2 +- .../Form/Type/Select2CountryType.php | 39 +++++++++++-------- .../Form/Type/Select2LanguageType.php | 13 +++++-- .../test/Fixtures/App/app/config/config.yml | 1 + .../ChillMainBundle/config/services/form.yaml | 1 + 6 files changed, 37 insertions(+), 22 deletions(-) diff --git a/src/Bundle/ChillMainBundle/DependencyInjection/ChillMainExtension.php b/src/Bundle/ChillMainBundle/DependencyInjection/ChillMainExtension.php index 8050fd9b6..3c1a61685 100644 --- a/src/Bundle/ChillMainBundle/DependencyInjection/ChillMainExtension.php +++ b/src/Bundle/ChillMainBundle/DependencyInjection/ChillMainExtension.php @@ -96,6 +96,9 @@ class ChillMainExtension extends Extension implements PrependExtensionInterface, $container->setParameter('chill_main.available_languages', $config['available_languages']); + $container->setParameter('chill_main.available_countries', + $config['available_countries']); + $container->setParameter('chill_main.routing.resources', $config['routing']['resources']); diff --git a/src/Bundle/ChillMainBundle/DependencyInjection/Configuration.php b/src/Bundle/ChillMainBundle/DependencyInjection/Configuration.php index 8965e7aaf..75dbd54b8 100644 --- a/src/Bundle/ChillMainBundle/DependencyInjection/Configuration.php +++ b/src/Bundle/ChillMainBundle/DependencyInjection/Configuration.php @@ -52,7 +52,7 @@ class Configuration implements ConfigurationInterface ->prototype('scalar')->end() ->end() // end of array 'available_languages' ->arrayNode('available_countries') - ->defaultValue(array('fr')) + ->defaultValue(array('FR')) ->prototype('scalar')->end() ->end() // end of array 'available_countries' ->arrayNode('routing') diff --git a/src/Bundle/ChillMainBundle/Form/Type/Select2CountryType.php b/src/Bundle/ChillMainBundle/Form/Type/Select2CountryType.php index 617d1afce..c8288d69d 100644 --- a/src/Bundle/ChillMainBundle/Form/Type/Select2CountryType.php +++ b/src/Bundle/ChillMainBundle/Form/Type/Select2CountryType.php @@ -28,6 +28,7 @@ use Chill\MainBundle\Form\Type\DataTransformer\ObjectToIdTransformer; use Doctrine\Persistence\ObjectManager; use Chill\MainBundle\Form\Type\Select2ChoiceType; use Chill\MainBundle\Templating\TranslatableStringHelper; +use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; /** * Extends choice to allow adding select2 library on widget @@ -37,31 +38,25 @@ use Chill\MainBundle\Templating\TranslatableStringHelper; */ class Select2CountryType extends AbstractType { - /** - * @var RequestStack - */ - private $requestStack; + private RequestStack $requestStack; - /** - * - * @var TranslatableStringHelper - */ - protected $translatableStringHelper; + private ObjectManager $em; - /** - * @var ObjectManager - */ - private $em; + protected TranslatableStringHelper $translatableStringHelper; + + protected ParameterBagInterface $parameterBag; public function __construct( RequestStack $requestStack, ObjectManager $em, - TranslatableStringHelper $translatableStringHelper + TranslatableStringHelper $translatableStringHelper, + ParameterBagInterface $parameterBag ) { $this->requestStack = $requestStack; $this->em = $em; $this->translatableStringHelper = $translatableStringHelper; + $this->parameterBag = $parameterBag; } public function getBlockPrefix() @@ -82,19 +77,29 @@ class Select2CountryType extends AbstractType public function configureOptions(OptionsResolver $resolver) { - $locale = $this->requestStack->getCurrentRequest()->getLocale(); $countries = $this->em->getRepository('Chill\MainBundle\Entity\Country')->findAll(); - $choices = array(); + $choices = []; + $preferredCountries = $this->parameterBag->get('chill_main.available_countries'); + $preferredChoices = []; foreach ($countries as $c) { $choices[$c->getId()] = $this->translatableStringHelper->localize($c->getName()); } + foreach ($preferredCountries as $pc) { + foreach ($countries as $c) { + if ($c->getCountryCode() == $pc) { + $preferredChoices[$c->getId()] = $this->translatableStringHelper->localize($c->getName()); + } + } + } + asort($choices, SORT_STRING | SORT_FLAG_CASE); $resolver->setDefaults(array( 'class' => 'Chill\MainBundle\Entity\Country', - 'choices' => array_combine(array_values($choices),array_keys($choices)) + 'choices' => array_combine(array_values($choices),array_keys($choices)), + 'preferred_choices' => array_combine(array_values($preferredChoices), array_keys($preferredChoices)) )); } } diff --git a/src/Bundle/ChillMainBundle/Form/Type/Select2LanguageType.php b/src/Bundle/ChillMainBundle/Form/Type/Select2LanguageType.php index 0583c2e03..a50569967 100644 --- a/src/Bundle/ChillMainBundle/Form/Type/Select2LanguageType.php +++ b/src/Bundle/ChillMainBundle/Form/Type/Select2LanguageType.php @@ -53,6 +53,7 @@ class Select2LanguageType extends AbstractType $this->requestStack = $requestStack; $this->em = $em; $this->translatableStringHelper = $translatableStringHelper; + $this->parameterBag = $parameterBag; } public function getBlockPrefix() @@ -73,20 +74,24 @@ class Select2LanguageType extends AbstractType public function configureOptions(OptionsResolver $resolver) { - $locale = $this->requestStack->getCurrentRequest()->getLocale(); $languages = $this->em->getRepository('Chill\MainBundle\Entity\Language')->findAll(); - $choices = array(); + $preferredLanguages = $this->parameterBag->get('chill_main.available_languages'); + $choices = []; + $preferredChoices = []; foreach ($languages as $l) { $choices[$l->getId()] = $this->translatableStringHelper->localize($l->getName()); } + foreach ($preferredLanguages as $l) { + $preferredChoices[$l] = $choices[$l]; + } asort($choices, SORT_STRING | SORT_FLAG_CASE); $resolver->setDefaults(array( 'class' => 'Chill\MainBundle\Entity\Language', - 'choices' => array_combine(array_values($choices),array_keys($choices)), - 'preferred_choices' => ['FR'] //TODO use $parameterBag->get('available_languages') + 'choices' => array_combine(array_values($choices), array_keys($choices)), + 'preferred_choices' => array_combine(array_values($preferredChoices), array_keys($preferredChoices)) )); } } diff --git a/src/Bundle/ChillMainBundle/Resources/test/Fixtures/App/app/config/config.yml b/src/Bundle/ChillMainBundle/Resources/test/Fixtures/App/app/config/config.yml index b16af4de1..530c29ee6 100644 --- a/src/Bundle/ChillMainBundle/Resources/test/Fixtures/App/app/config/config.yml +++ b/src/Bundle/ChillMainBundle/Resources/test/Fixtures/App/app/config/config.yml @@ -39,3 +39,4 @@ assetic: chill_main: available_languages: [fr, en] + available_countries: [FR] diff --git a/src/Bundle/ChillMainBundle/config/services/form.yaml b/src/Bundle/ChillMainBundle/config/services/form.yaml index 1013d6d09..f5302e52e 100644 --- a/src/Bundle/ChillMainBundle/config/services/form.yaml +++ b/src/Bundle/ChillMainBundle/config/services/form.yaml @@ -25,6 +25,7 @@ services: - "@request_stack" - "@doctrine.orm.entity_manager" - "@chill.main.helper.translatable_string" + - '@Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface' tags: - { name: form.type, alias: select2_chill_country }