[alt names] add alt names on person creation form

This commit is contained in:
Julien Fastré 2020-02-03 12:47:55 +01:00
parent 289afcdd0c
commit 5154039182
8 changed files with 85 additions and 27 deletions

View File

@ -311,7 +311,7 @@ class PersonController extends Controller
$form = $this->createForm( $form = $this->createForm(
CreationPersonType::NAME, CreationPersonType::NAME,
new Person(), $person,
array( array(
'action' => $this->generateUrl('chill_person_review'), 'action' => $this->generateUrl('chill_person_review'),
'form_status' => CreationPersonType::FORM_NOT_REVIEWED 'form_status' => CreationPersonType::FORM_NOT_REVIEWED
@ -338,7 +338,9 @@ class PersonController extends Controller
); );
return $this->render('ChillPersonBundle:Person:create_review.html.twig', return $this->render('ChillPersonBundle:Person:create_review.html.twig',
array('alternatePersons' => $alternatePersons, array(
'person' => $person,
'alternatePersons' => $alternatePersons,
'firstName' => $form['firstName']->getData(), 'firstName' => $form['firstName']->getData(),
'lastName' => $form['lastName']->getData(), 'lastName' => $form['lastName']->getData(),
'birthdate' => $form['birthdate']->getData(), 'birthdate' => $form['birthdate']->getData(),

View File

@ -27,11 +27,11 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToStringTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToStringTransformer;
use Symfony\Component\Form\Extension\Core\Type\HiddenType; use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\DateType; use Symfony\Component\Form\Extension\Core\Type\DateType;
use Chill\MainBundle\Form\Type\CenterType; use Chill\MainBundle\Form\Type\CenterType;
use Chill\PersonBundle\Form\Type\GenderType; use Chill\PersonBundle\Form\Type\GenderType;
use Chill\MainBundle\Form\Type\DataTransformer\CenterTransformer; 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 class CreationPersonType extends AbstractType
{ {
@ -48,8 +48,18 @@ class CreationPersonType extends AbstractType
*/ */
private $centerTransformer; private $centerTransformer;
public function __construct(CenterTransformer $centerTransformer) { /**
*
* @var ConfigPersonAltNamesHelper
*/
protected $configPersonAltNamesHelper;
public function __construct(
CenterTransformer $centerTransformer,
ConfigPersonAltNamesHelper $configPersonAltNamesHelper
) {
$this->centerTransformer = $centerTransformer; $this->centerTransformer = $centerTransformer;
$this->configPersonAltNamesHelper = $configPersonAltNamesHelper;
} }
/** /**
@ -78,6 +88,14 @@ class CreationPersonType extends AbstractType
)) ))
->add('center', HiddenType::class) ->add('center', HiddenType::class)
; ;
if ($this->configPersonAltNamesHelper->hasAltNames()) {
$builder->add('altNames', PersonAltNameType::class, [
'by_reference' => false,
'force_hidden' => true
]);
}
$builder->get('birthdate') $builder->get('birthdate')
->addModelTransformer($dateToStringTransformer); ->addModelTransformer($dateToStringTransformer);
$builder->get('creation_date') $builder->get('creation_date')
@ -105,6 +123,12 @@ class CreationPersonType extends AbstractType
)) ))
->add('center', CenterType::class) ->add('center', CenterType::class)
; ;
if ($this->configPersonAltNamesHelper->hasAltNames()) {
$builder->add('altNames', PersonAltNameType::class, [
'by_reference' => false
]);
}
} }
} }

View File

@ -3,6 +3,7 @@
namespace Chill\PersonBundle\Form\DataMapper; namespace Chill\PersonBundle\Form\DataMapper;
use Symfony\Component\Form\DataMapperInterface; use Symfony\Component\Form\DataMapperInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection; use Doctrine\Common\Collections\Collection;
use Symfony\Component\Form\Exception\UnexpectedTypeException; use Symfony\Component\Form\Exception\UnexpectedTypeException;
use Chill\PersonBundle\Entity\PersonAltName; use Chill\PersonBundle\Entity\PersonAltName;
@ -44,7 +45,15 @@ class PersonAltNameDataMapper implements DataMapperInterface
public function mapFormsToData($forms, &$viewData) public function mapFormsToData($forms, &$viewData)
{ {
$mapIndexToKey = []; $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 */ /** @var PersonAltName $altName */
$mapIndexToKey[$altName->getKey()] = $key; $mapIndexToKey[$altName->getKey()] = $key;
} }
@ -64,7 +73,12 @@ class PersonAltNameDataMapper implements DataMapperInterface
->setKey($key) ->setKey($key)
->setLabel($form->getData()) ->setLabel($form->getData())
; ;
$viewData->add($altName);
if (is_array($viewData)) {
$viewData[] = $altName;
} else {
$viewData->add($altName);
}
} }
} }
} }

View File

@ -6,6 +6,7 @@ use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Chill\PersonBundle\Config\ConfigPersonAltNamesHelper; use Chill\PersonBundle\Config\ConfigPersonAltNamesHelper;
use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\MainBundle\Templating\TranslatableStringHelper;
@ -38,7 +39,9 @@ class PersonAltNameType extends AbstractType
public function buildForm(FormBuilderInterface $builder, array $options) public function buildForm(FormBuilderInterface $builder, array $options)
{ {
foreach ($this->getKeyChoices() as $label => $key) { foreach ($this->getKeyChoices() as $label => $key) {
$builder->add($key, TextType::class, [ $builder->add(
$key,
$options['force_hidden'] ? HiddenType::class : TextType::class, [
'label' => $label, 'label' => $label,
'required' => false 'required' => false
]); ]);
@ -64,6 +67,9 @@ class PersonAltNameType extends AbstractType
{ {
$resolver $resolver
->setDefault('class', \Chill\PersonBundle\Entity\PersonAltName::class) ->setDefault('class', \Chill\PersonBundle\Entity\PersonAltName::class)
->setDefined('force_hidden')
->setAllowedTypes('force_hidden', 'bool')
->setDefault('force_hidden', false)
; ;
} }

View File

@ -39,11 +39,3 @@ services:
- "%chill_person.validation.birtdate_not_before%" - "%chill_person.validation.birtdate_not_before%"
tags: tags:
- { name: validator.constraint_validator, alias: birthdate_not_before } - { 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 }

View File

@ -1,12 +1,26 @@
services: services:
chill.person.form.person_creation: Chill\PersonBundle\Form\PersonType:
class: Chill\PersonBundle\Form\PersonType
arguments: arguments:
- "%chill_person.person_fields%" - '%chill_person.person_fields%'
- '@Chill\PersonBundle\Config\ConfigPersonAltNamesHelper' - '@Chill\PersonBundle\Config\ConfigPersonAltNamesHelper'
tags: tags:
- { name: form.type } - { 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: chill.person.accompanying_period_closing_motive:
class: Chill\PersonBundle\Form\Type\ClosingMotiveType class: Chill\PersonBundle\Form\Type\ClosingMotiveType
arguments: arguments:

View File

@ -29,6 +29,10 @@
{{ form_row(form.lastName, { 'label' : 'Last 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 }) }} {{ form_row(form.birthdate, { 'label' : 'Date of birth'|trans }) }}
{{ form_row(form.gender, { 'label' : 'Gender'|trans }) }} {{ form_row(form.gender, { 'label' : 'Gender'|trans }) }}

View File

@ -44,7 +44,7 @@
<tr> <tr>
<td> <td>
<a href="{{ path('chill_person_view', {'person_id': person.id } ) }}"> <a href="{{ path('chill_person_view', {'person_id': person.id } ) }}">
{{ person }}{% spaceless %} {{ person|chill_entity_render_string }}{% spaceless %}
{% if person.isOpen == false %} {% if person.isOpen == false %}
<i class="icon-lock"></i> <i class="icon-lock"></i>
{% endif %} {% endif %}
@ -65,11 +65,8 @@
{{ form_start(form) }} {{ form_start(form) }}
<h2>{{ 'You will create this person'|trans }}</h2> <h2>{{ 'You will create this person'|trans }}</h2>
<dl> <dl>
<dt>{{ 'First name'|trans }}</dt> <dt>{{ 'Name'|trans }}</dt>
<dd>{{ firstName }}</dd> <dd>{{ person|chill_entity_render_string }}</dd>
<dt>{{ 'Last name'|trans }}</dt>
<dd>{{ lastName }}</dd>
<dt>{{ 'Date of birth'|trans }}</dt> <dt>{{ 'Date of birth'|trans }}</dt>
<dd>{{ birthdate|localizeddate('long', 'none', app.request.locale)|default( 'Unknown date of birth'|trans ) }}</dd> <dd>{{ birthdate|localizeddate('long', 'none', app.request.locale)|default( 'Unknown date of birth'|trans ) }}</dd>
@ -79,6 +76,11 @@
<dt>{{ 'Creation date'|trans }}</dt> <dt>{{ 'Creation date'|trans }}</dt>
<dd>{{ creation_date|localizeddate('long', 'none', app.request.locale) }}</dd> <dd>{{ creation_date|localizeddate('long', 'none', app.request.locale) }}</dd>
{% if form.altNames is defined %}
{# mark as rendered #}
{{ form_widget(form.altNames) }}
{% endif %}
</dl> </dl>
{{ form_rest(form) }} {{ form_rest(form) }}