From 51540391826da81596c04610b37f8d7f60d4e245 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Mon, 3 Feb 2020 12:47:55 +0100 Subject: [PATCH] [alt names] add alt names on person creation form --- Controller/PersonController.php | 10 ++++--- Form/CreationPersonType.php | 30 +++++++++++++++++-- Form/DataMapper/PersonAltNameDataMapper.php | 18 +++++++++-- Form/Type/PersonAltNameType.php | 8 ++++- Resources/config/services.yml | 8 ----- Resources/config/services/form.yml | 20 +++++++++++-- Resources/views/Person/create.html.twig | 4 +++ .../views/Person/create_review.html.twig | 14 +++++---- 8 files changed, 85 insertions(+), 27 deletions(-) diff --git a/Controller/PersonController.php b/Controller/PersonController.php index bdc1250ae..37c647fc4 100644 --- a/Controller/PersonController.php +++ b/Controller/PersonController.php @@ -281,7 +281,7 @@ class PersonController extends Controller $r->setStatusCode(400); return $r; } - + $form = $this->createForm( //CreationPersonType::NAME, CreationPersonType::class, @@ -294,7 +294,7 @@ class PersonController extends Controller $form->handleRequest($request); $person = $this->_bindCreationForm($form); - + $errors = $this->_validatePersonAndAccompanyingPeriod($person); $this->get('logger')->info(sprintf('Person created with %d errors ', count($errors))); @@ -311,7 +311,7 @@ class PersonController extends Controller $form = $this->createForm( CreationPersonType::NAME, - new Person(), + $person, array( 'action' => $this->generateUrl('chill_person_review'), 'form_status' => CreationPersonType::FORM_NOT_REVIEWED @@ -338,7 +338,9 @@ class PersonController extends Controller ); return $this->render('ChillPersonBundle:Person:create_review.html.twig', - array('alternatePersons' => $alternatePersons, + array( + 'person' => $person, + 'alternatePersons' => $alternatePersons, 'firstName' => $form['firstName']->getData(), 'lastName' => $form['lastName']->getData(), 'birthdate' => $form['birthdate']->getData(), diff --git a/Form/CreationPersonType.php b/Form/CreationPersonType.php index 6da8fe375..ec3ddbf82 100644 --- a/Form/CreationPersonType.php +++ b/Form/CreationPersonType.php @@ -27,11 +27,11 @@ use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToStringTransformer; use Symfony\Component\Form\Extension\Core\Type\HiddenType; use Symfony\Component\Form\Extension\Core\Type\DateType; - use Chill\MainBundle\Form\Type\CenterType; use Chill\PersonBundle\Form\Type\GenderType; use Chill\MainBundle\Form\Type\DataTransformer\CenterTransformer; -use Chill\PersonBundle\Form\CreationPersonType; +use Chill\PersonBundle\Config\ConfigPersonAltNamesHelper; +use Chill\PersonBundle\Form\Type\PersonAltNameType; class CreationPersonType extends AbstractType { @@ -47,9 +47,19 @@ class CreationPersonType extends AbstractType * @var CenterTransformer */ private $centerTransformer; + + /** + * + * @var ConfigPersonAltNamesHelper + */ + protected $configPersonAltNamesHelper; - public function __construct(CenterTransformer $centerTransformer) { + public function __construct( + CenterTransformer $centerTransformer, + ConfigPersonAltNamesHelper $configPersonAltNamesHelper + ) { $this->centerTransformer = $centerTransformer; + $this->configPersonAltNamesHelper = $configPersonAltNamesHelper; } /** @@ -78,6 +88,14 @@ class CreationPersonType extends AbstractType )) ->add('center', HiddenType::class) ; + + if ($this->configPersonAltNamesHelper->hasAltNames()) { + $builder->add('altNames', PersonAltNameType::class, [ + 'by_reference' => false, + 'force_hidden' => true + ]); + } + $builder->get('birthdate') ->addModelTransformer($dateToStringTransformer); $builder->get('creation_date') @@ -105,6 +123,12 @@ class CreationPersonType extends AbstractType )) ->add('center', CenterType::class) ; + + if ($this->configPersonAltNamesHelper->hasAltNames()) { + $builder->add('altNames', PersonAltNameType::class, [ + 'by_reference' => false + ]); + } } } diff --git a/Form/DataMapper/PersonAltNameDataMapper.php b/Form/DataMapper/PersonAltNameDataMapper.php index 3449fe814..d1f50404b 100644 --- a/Form/DataMapper/PersonAltNameDataMapper.php +++ b/Form/DataMapper/PersonAltNameDataMapper.php @@ -3,6 +3,7 @@ namespace Chill\PersonBundle\Form\DataMapper; use Symfony\Component\Form\DataMapperInterface; +use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Symfony\Component\Form\Exception\UnexpectedTypeException; use Chill\PersonBundle\Entity\PersonAltName; @@ -44,7 +45,15 @@ class PersonAltNameDataMapper implements DataMapperInterface public function mapFormsToData($forms, &$viewData) { $mapIndexToKey = []; - foreach ($viewData->getIterator() as $key => $altName) { + + if (is_array($viewData)) { + $dataIterator = $viewData; + } else { + $dataIterator = $viewData instanceof ArrayCollection ? + $viewData->toArray() : $viewData->getIterator(); + } + + foreach ($dataIterator as $key => $altName) { /** @var PersonAltName $altName */ $mapIndexToKey[$altName->getKey()] = $key; } @@ -64,7 +73,12 @@ class PersonAltNameDataMapper implements DataMapperInterface ->setKey($key) ->setLabel($form->getData()) ; - $viewData->add($altName); + + if (is_array($viewData)) { + $viewData[] = $altName; + } else { + $viewData->add($altName); + } } } } diff --git a/Form/Type/PersonAltNameType.php b/Form/Type/PersonAltNameType.php index fc2d752ab..1ba58e86e 100644 --- a/Form/Type/PersonAltNameType.php +++ b/Form/Type/PersonAltNameType.php @@ -6,6 +6,7 @@ use Symfony\Component\Form\AbstractType; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\Extension\Core\Type\TextType; +use Symfony\Component\Form\Extension\Core\Type\HiddenType; use Chill\PersonBundle\Config\ConfigPersonAltNamesHelper; use Chill\MainBundle\Templating\TranslatableStringHelper; @@ -38,7 +39,9 @@ class PersonAltNameType extends AbstractType public function buildForm(FormBuilderInterface $builder, array $options) { foreach ($this->getKeyChoices() as $label => $key) { - $builder->add($key, TextType::class, [ + $builder->add( + $key, + $options['force_hidden'] ? HiddenType::class : TextType::class, [ 'label' => $label, 'required' => false ]); @@ -64,6 +67,9 @@ class PersonAltNameType extends AbstractType { $resolver ->setDefault('class', \Chill\PersonBundle\Entity\PersonAltName::class) + ->setDefined('force_hidden') + ->setAllowedTypes('force_hidden', 'bool') + ->setDefault('force_hidden', false) ; } diff --git a/Resources/config/services.yml b/Resources/config/services.yml index b17bf6acb..8e7901a31 100644 --- a/Resources/config/services.yml +++ b/Resources/config/services.yml @@ -39,11 +39,3 @@ services: - "%chill_person.validation.birtdate_not_before%" tags: - { name: validator.constraint_validator, alias: birthdate_not_before } - - chill.main.form.person_creation: - class: Chill\PersonBundle\Form\CreationPersonType - arguments: - - "@chill.main.form.data_transformer.center_transformer" - tags: - - { name: form.type, alias: chill_personbundle_person_creation } - diff --git a/Resources/config/services/form.yml b/Resources/config/services/form.yml index 2a1390ea3..6e2415ac5 100644 --- a/Resources/config/services/form.yml +++ b/Resources/config/services/form.yml @@ -1,11 +1,25 @@ services: - chill.person.form.person_creation: - class: Chill\PersonBundle\Form\PersonType + Chill\PersonBundle\Form\PersonType: arguments: - - "%chill_person.person_fields%" + - '%chill_person.person_fields%' - '@Chill\PersonBundle\Config\ConfigPersonAltNamesHelper' tags: - { name: form.type } + + chill.person.form.person_creation: + alias: 'Chill\PersonBundle\Form\PersonType' + deprecated: true + + Chill\PersonBundle\Form\CreationPersonType: + arguments: + - '@chill.main.form.data_transformer.center_transformer' + - '@Chill\PersonBundle\Config\ConfigPersonAltNamesHelper' + tags: + - { name: form.type } + + chill.main.form.person_creation: + alias: 'Chill\PersonBundle\Form\CreationPersonType' + deprecated: true chill.person.accompanying_period_closing_motive: class: Chill\PersonBundle\Form\Type\ClosingMotiveType diff --git a/Resources/views/Person/create.html.twig b/Resources/views/Person/create.html.twig index 2e247b299..d7d6fda61 100644 --- a/Resources/views/Person/create.html.twig +++ b/Resources/views/Person/create.html.twig @@ -28,6 +28,10 @@ {{ form_row(form.firstName, { 'label' : 'First name'|trans }) }} {{ form_row(form.lastName, { 'label' : 'Last name'|trans }) }} + + {% if form.altNames is defined %} + {{ form_widget(form.altNames) }} + {% endif %} {{ form_row(form.birthdate, { 'label' : 'Date of birth'|trans }) }} diff --git a/Resources/views/Person/create_review.html.twig b/Resources/views/Person/create_review.html.twig index 22e51ae27..c8dd64455 100644 --- a/Resources/views/Person/create_review.html.twig +++ b/Resources/views/Person/create_review.html.twig @@ -44,7 +44,7 @@ - {{ person }}{% spaceless %} + {{ person|chill_entity_render_string }}{% spaceless %} {% if person.isOpen == false %} {% endif %} @@ -65,11 +65,8 @@ {{ form_start(form) }}

{{ 'You will create this person'|trans }}

-
{{ 'First name'|trans }}
-
{{ firstName }}
- -
{{ 'Last name'|trans }}
-
{{ lastName }}
+
{{ 'Name'|trans }}
+
{{ person|chill_entity_render_string }}
{{ 'Date of birth'|trans }}
{{ birthdate|localizeddate('long', 'none', app.request.locale)|default( 'Unknown date of birth'|trans ) }}
@@ -79,6 +76,11 @@
{{ 'Creation date'|trans }}
{{ creation_date|localizeddate('long', 'none', app.request.locale) }}
+ + {% if form.altNames is defined %} + {# mark as rendered #} + {{ form_widget(form.altNames) }} + {% endif %}
{{ form_rest(form) }}