[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

@ -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(),

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\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
]);
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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)
;
}

View File

@ -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 }

View File

@ -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

View File

@ -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 }) }}

View File

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