From f2ae183682b7fc9de3972c0fafdba912e8da40aa Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Fri, 25 Mar 2022 13:01:33 +0100 Subject: [PATCH 1/9] first commit --- .../ReassignAccompanyingPeriodController.php | 19 +++++++++++++-- .../reassign_list.html.twig | 24 +++++++++++++++++-- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/Bundle/ChillPersonBundle/Controller/ReassignAccompanyingPeriodController.php b/src/Bundle/ChillPersonBundle/Controller/ReassignAccompanyingPeriodController.php index 4abf5e93c..eb8dcc70e 100644 --- a/src/Bundle/ChillPersonBundle/Controller/ReassignAccompanyingPeriodController.php +++ b/src/Bundle/ChillPersonBundle/Controller/ReassignAccompanyingPeriodController.php @@ -19,6 +19,7 @@ use Chill\PersonBundle\Repository\AccompanyingPeriodACLAwareRepositoryInterface; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Form\Extension\Core\Type\FormType; +use Symfony\Component\Form\Extension\Core\Type\HiddenType; use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\Request; @@ -64,7 +65,9 @@ class ReassignAccompanyingPeriodController extends AbstractController throw new AccessDeniedException(); } - $form = $this->buildFilterForm(); + $periodIds = []; + + $form = $this->buildFilterForm($periodIds); $form->handleRequest($request); @@ -80,16 +83,25 @@ class ReassignAccompanyingPeriodController extends AbstractController $paginator->getCurrentPageFirstItemNumber() ); + foreach ($periods as $period) { + $periodIds[] = $period->getId(); + } + + $assignForm= $this->buildFilterForm($periodIds); + + dump($assignForm->get('periods')); + return new Response( $this->engine->render('@ChillPerson/AccompanyingPeriod/reassign_list.html.twig', [ 'paginator' => $paginator, 'periods' => $periods, 'form' => $form->createView(), + 'assignForm' => $assignForm->createView() ]) ); } - private function buildFilterForm(): FormInterface + private function buildFilterForm(array $periodIds): FormInterface { $data = [ 'user' => null, @@ -107,6 +119,9 @@ class ReassignAccompanyingPeriodController extends AbstractController 'multiple' => false, 'label' => 'User', 'required' => false, + ]) + ->add('periods', HiddenType::class, [ + 'data' => serialize($periodIds), ]); return $builder->getForm(); diff --git a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/reassign_list.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/reassign_list.html.twig index 87166d990..2b36a175f 100644 --- a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/reassign_list.html.twig +++ b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/reassign_list.html.twig @@ -14,7 +14,7 @@ {% if is_granted('CHILL_PERSON_ACCOMPANYING_PERIOD_UPDATE', period) %}
{% set job_id = null %} - {% if period.job is defined %} + {% if period.job is defined and period.job is not null %} {% set job_id = period.job.id %} {% endif %}
  • {{ form_end(form) }} +
    +

    {{ 'Attribute all parcours in this list to the following users,'|trans }}

    + {{ form_start(assignForm) }} +
    +
    + {{ form_label(assignForm.user ) }} + {{ form_widget(assignForm.user, {'attr': {'class': 'select2'}}) }} +
    +
    + +
      +
    • + +
    • +
    + {{ form_end(assignForm) }} +
    + {% if form.user.vars.value is empty %}

    {{ 'period_by_user_list.Pick a user'|trans }}

    {% elseif periods|length == 0 and form.user.vars.value is not empty %} From 79630765055d2aa8cca508ce438f4d84435a6c27 Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Fri, 25 Mar 2022 16:59:05 +0100 Subject: [PATCH 2/9] attempts to submit reassign form --- .../ReassignAccompanyingPeriodController.php | 127 ++++++++++++++++-- .../reassign_list.html.twig | 48 ++++--- 2 files changed, 143 insertions(+), 32 deletions(-) diff --git a/src/Bundle/ChillPersonBundle/Controller/ReassignAccompanyingPeriodController.php b/src/Bundle/ChillPersonBundle/Controller/ReassignAccompanyingPeriodController.php index eb8dcc70e..05dd70cb4 100644 --- a/src/Bundle/ChillPersonBundle/Controller/ReassignAccompanyingPeriodController.php +++ b/src/Bundle/ChillPersonBundle/Controller/ReassignAccompanyingPeriodController.php @@ -16,10 +16,12 @@ use Chill\MainBundle\Pagination\PaginatorFactory; use Chill\MainBundle\Repository\UserRepository; use Chill\MainBundle\Templating\Entity\UserRender; use Chill\PersonBundle\Repository\AccompanyingPeriodACLAwareRepositoryInterface; +use Chill\PersonBundle\Repository\AccompanyingPeriodRepository; +use Doctrine\ORM\EntityManagerInterface; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\FormType; -use Symfony\Component\Form\Extension\Core\Type\HiddenType; use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\Request; @@ -45,7 +47,21 @@ class ReassignAccompanyingPeriodController extends AbstractController private UserRepository $userRepository; - public function __construct(AccompanyingPeriodACLAwareRepositoryInterface $accompanyingPeriodACLAwareRepository, UserRepository $userRepository, EngineInterface $engine, FormFactoryInterface $formFactory, PaginatorFactory $paginatorFactory, Security $security, UserRender $userRender) + private AccompanyingPeriodRepository $courseRepository; + + private EntityManagerInterface $em; + + public function __construct( + AccompanyingPeriodACLAwareRepositoryInterface $accompanyingPeriodACLAwareRepository, + UserRepository $userRepository, + AccompanyingPeriodRepository $courseRepository, + EngineInterface $engine, + FormFactoryInterface $formFactory, + PaginatorFactory $paginatorFactory, + Security $security, + UserRender $userRender, + EntityManagerInterface $em + ) { $this->accompanyingPeriodACLAwareRepository = $accompanyingPeriodACLAwareRepository; $this->engine = $engine; @@ -54,6 +70,8 @@ class ReassignAccompanyingPeriodController extends AbstractController $this->security = $security; $this->userRepository = $userRepository; $this->userRender = $userRender; + $this->courseRepository = $courseRepository; + $this->em = $em; } /** @@ -65,9 +83,7 @@ class ReassignAccompanyingPeriodController extends AbstractController throw new AccessDeniedException(); } - $periodIds = []; - - $form = $this->buildFilterForm($periodIds); + $form = $this->buildFilterForm(); $form->handleRequest($request); @@ -83,14 +99,66 @@ class ReassignAccompanyingPeriodController extends AbstractController $paginator->getCurrentPageFirstItemNumber() ); - foreach ($periods as $period) { - $periodIds[] = $period->getId(); + // foreach ($periods as $period) { + // $periodIds[] = $period->getId(); + // } + + // $assignForm= $this->buildReassignForm($periods); + $assignData = []; + $assignForm = $this->createFormBuilder($assignData) + ->add('periods', ChoiceType::class, [ + // 'data' => serialize($periods), + 'choices' => $periods, + 'multiple' => true, + 'expanded' => true + ]) + ->add('user', EntityType::class, [ + 'class' => User::class, + 'choices' => $this->userRepository->findByActive(['username' => 'ASC']), + 'choice_label' => function (User $u) { + return $this->userRender->renderString($u, []); + }, + 'placeholder' => 'Choose a user to reassign to', + 'multiple' => false, + 'label' => 'User', + 'required' => true, + ]) + ->getForm(); + + $assignForm->handleRequest($request); + + if ($assignForm->isSubmitted()) { + + $periods = $assignForm->get('periods')->getData(); + $userAssign = $assignForm->get('user')->getData(); + + foreach($periods as $periodId) { + $reassignPeriod = $this->courseRepository->find($periodId); + $reassignPeriod->setUser($userAssign); + $this->em->persist($reassignPeriod); + } + + $this->em->flush(); + + $remainingPeriods = $this->accompanyingPeriodACLAwareRepository + ->findByUserOpenedAccompanyingPeriod( + $form['user']->getData(), + ['openingDate' => 'ASC'], + $paginator->getItemsPerPage(), + $paginator->getCurrentPageFirstItemNumber() + ); + + return new Response( + $this->engine->render('@ChillPerson/AccompanyingPeriod/reassign_list.html.twig', [ + 'paginator' => $paginator, + 'periods' => $remainingPeriods, + 'form' => $form->createView(), + 'assignForm' => $assignForm->createView() + ]) + ); + } - $assignForm= $this->buildFilterForm($periodIds); - - dump($assignForm->get('periods')); - return new Response( $this->engine->render('@ChillPerson/AccompanyingPeriod/reassign_list.html.twig', [ 'paginator' => $paginator, @@ -101,7 +169,7 @@ class ReassignAccompanyingPeriodController extends AbstractController ); } - private function buildFilterForm(array $periodIds): FormInterface + private function buildFilterForm(): FormInterface { $data = [ 'user' => null, @@ -119,9 +187,40 @@ class ReassignAccompanyingPeriodController extends AbstractController 'multiple' => false, 'label' => 'User', 'required' => false, + ]); + // ->add('periods', HiddenType::class, [ + // 'data' => serialize($periodIds), + // ]); + + return $builder->getForm(); + } + + private function buildReassignForm(array $periods): FormInterface + { + $defaultData = [ + 'user' => [], + 'periods' => $periods + ]; + + $builder = $this->formFactory->createBuilder(FormType::class, $defaultData, ['csrf_protection' => false, ]); + + $builder + ->add('periods', ChoiceType::class, [ + // 'data' => serialize($periods), + 'choices' => $periods, + 'multiple' => true, + 'expanded' => true ]) - ->add('periods', HiddenType::class, [ - 'data' => serialize($periodIds), + ->add('user', EntityType::class, [ + 'class' => User::class, + 'choices' => $this->userRepository->findByActive(['username' => 'ASC']), + 'choice_label' => function (User $u) { + return $this->userRender->renderString($u, []); + }, + 'placeholder' => 'Choose a user to reassign to', + 'multiple' => false, + 'label' => 'User', + 'required' => true, ]); return $builder->getForm(); diff --git a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/reassign_list.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/reassign_list.html.twig index 2b36a175f..201925188 100644 --- a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/reassign_list.html.twig +++ b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/reassign_list.html.twig @@ -59,15 +59,37 @@ {{ form_end(form) }} -
    -

    {{ 'Attribute all parcours in this list to the following users,'|trans }}

    + {% if form.user.vars.value is empty %} +

    {{ 'period_by_user_list.Pick a user'|trans }}

    + {% elseif periods|length == 0 and form.user.vars.value is not empty %} +

    {{ 'period_by_user_list.Any course or no authorization to see them'|trans }}

    + {% else %} +

    {{ 'Attribute parcours in this list to the following user,'|trans }}

    +

    {{ paginator.totalItems }} parcours à réassigner (calculé ce jour à {{ null|format_time('medium') }})

    + +
    +
    + {{ form_label(assignForm.user ) }} + {{ form_widget(assignForm.user, {'attr': {'class': 'select2'}}) }} +
    +
    + {{ form_start(assignForm) }} -
    -
    - {{ form_label(assignForm.user ) }} - {{ form_widget(assignForm.user, {'attr': {'class': 'select2'}}) }} +
    +
    + {% for choice in assignForm.periods.vars.choices %} +
    + + +
    + {% endfor %}
    + {% do assignForm.periods.setRendered() %}
    • @@ -77,22 +99,12 @@
    {{ form_end(assignForm) }} -
    - - {% if form.user.vars.value is empty %} -

    {{ 'period_by_user_list.Pick a user'|trans }}

    - {% elseif periods|length == 0 and form.user.vars.value is not empty %} -

    {{ 'period_by_user_list.Any course or no authorization to see them'|trans }}

    - - {% else %} -

    {{ paginator.totalItems }} parcours à réassigner (calculé ce jour à {{ null|format_time('medium') }})

    - -
    + {#
    {% for period in periods %} {% include '@ChillPerson/AccompanyingPeriod/_list_item.html.twig' with {'period': period, 'recordAction': m.period_actions(period), 'itemMeta': m.period_meta(period) } %} {% endfor %} -
    +
    #} {% endif %} {{ chill_pagination(paginator) }} From 818370f03723551a2956c64afd7e072783207d0a Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Mon, 28 Mar 2022 16:46:39 +0200 Subject: [PATCH 3/9] selected periods are not coming through in POST. Value not valid --- .../ReassignAccompanyingPeriodController.php | 48 ++++++------------- .../reassign_list.html.twig | 23 ++++----- 2 files changed, 26 insertions(+), 45 deletions(-) diff --git a/src/Bundle/ChillPersonBundle/Controller/ReassignAccompanyingPeriodController.php b/src/Bundle/ChillPersonBundle/Controller/ReassignAccompanyingPeriodController.php index 05dd70cb4..92097d807 100644 --- a/src/Bundle/ChillPersonBundle/Controller/ReassignAccompanyingPeriodController.php +++ b/src/Bundle/ChillPersonBundle/Controller/ReassignAccompanyingPeriodController.php @@ -99,38 +99,23 @@ class ReassignAccompanyingPeriodController extends AbstractController $paginator->getCurrentPageFirstItemNumber() ); - // foreach ($periods as $period) { - // $periodIds[] = $period->getId(); - // } + $assignPeriods = []; - // $assignForm= $this->buildReassignForm($periods); - $assignData = []; - $assignForm = $this->createFormBuilder($assignData) - ->add('periods', ChoiceType::class, [ - // 'data' => serialize($periods), - 'choices' => $periods, - 'multiple' => true, - 'expanded' => true - ]) - ->add('user', EntityType::class, [ - 'class' => User::class, - 'choices' => $this->userRepository->findByActive(['username' => 'ASC']), - 'choice_label' => function (User $u) { - return $this->userRender->renderString($u, []); - }, - 'placeholder' => 'Choose a user to reassign to', - 'multiple' => false, - 'label' => 'User', - 'required' => true, - ]) - ->getForm(); + foreach($periods as $period) { + $assignPeriods[$period->getId()] = $period; + } + + $assignForm = $this->buildReassignForm($assignPeriods); $assignForm->handleRequest($request); if ($assignForm->isSubmitted()) { $periods = $assignForm->get('periods')->getData(); - $userAssign = $assignForm->get('user')->getData(); + $userAssign = $assignForm->get('assignUser')->getData(); + + dump($periods); + dump($userAssign); foreach($periods as $periodId) { $reassignPeriod = $this->courseRepository->find($periodId); @@ -188,30 +173,23 @@ class ReassignAccompanyingPeriodController extends AbstractController 'label' => 'User', 'required' => false, ]); - // ->add('periods', HiddenType::class, [ - // 'data' => serialize($periodIds), - // ]); return $builder->getForm(); } private function buildReassignForm(array $periods): FormInterface { - $defaultData = [ - 'user' => [], - 'periods' => $periods - ]; + $defaultData = []; $builder = $this->formFactory->createBuilder(FormType::class, $defaultData, ['csrf_protection' => false, ]); $builder ->add('periods', ChoiceType::class, [ - // 'data' => serialize($periods), 'choices' => $periods, 'multiple' => true, 'expanded' => true ]) - ->add('user', EntityType::class, [ + ->add('assignUser', EntityType::class, [ 'class' => User::class, 'choices' => $this->userRepository->findByActive(['username' => 'ASC']), 'choice_label' => function (User $u) { @@ -223,6 +201,8 @@ class ReassignAccompanyingPeriodController extends AbstractController 'required' => true, ]); + $builder->get('periods')->resetViewTransformers(); + return $builder->getForm(); } } diff --git a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/reassign_list.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/reassign_list.html.twig index 201925188..ac03cafee 100644 --- a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/reassign_list.html.twig +++ b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/reassign_list.html.twig @@ -67,21 +67,22 @@

    {{ 'Attribute parcours in this list to the following user,'|trans }}

    {{ paginator.totalItems }} parcours à réassigner (calculé ce jour à {{ null|format_time('medium') }})

    -
    -
    - {{ form_label(assignForm.user ) }} - {{ form_widget(assignForm.user, {'attr': {'class': 'select2'}}) }} -
    -
    - {{ form_start(assignForm) }} +
    +
    + {{ form_label(assignForm.assignUser ) }} + {{ form_widget(assignForm.assignUser, {'attr': {'class': 'select2'}}) }} +
    +
    +
    + {# {{ dump(assignForm.periods.vars.choices) }} #} {% for choice in assignForm.periods.vars.choices %} -
    - -
    {% endblock %} From 69394df89be00b4a82d3b716555a637403d8d003 Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Tue, 19 Apr 2022 14:02:47 +0200 Subject: [PATCH 9/9] infinite loop bug on flush --- .../ReassignAccompanyingPeriodController.php | 131 ++++++++++-------- 1 file changed, 76 insertions(+), 55 deletions(-) diff --git a/src/Bundle/ChillPersonBundle/Controller/ReassignAccompanyingPeriodController.php b/src/Bundle/ChillPersonBundle/Controller/ReassignAccompanyingPeriodController.php index e760bd77a..254a0ff65 100644 --- a/src/Bundle/ChillPersonBundle/Controller/ReassignAccompanyingPeriodController.php +++ b/src/Bundle/ChillPersonBundle/Controller/ReassignAccompanyingPeriodController.php @@ -20,6 +20,8 @@ use Chill\PersonBundle\Repository\AccompanyingPeriodRepository; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\Form\CallbackTransformer; +use Symfony\Component\Form\Exception\TransformationFailedException; use Symfony\Component\Form\Extension\Core\Type\HiddenType; use Symfony\Component\Form\Extension\Core\Type\FormType; use Symfony\Component\Form\FormFactoryInterface; @@ -30,6 +32,7 @@ use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Symfony\Component\Security\Core\Security; use Symfony\Component\Templating\EngineInterface; +use Symfony\Component\Validator\Constraints\NotEqualTo; class ReassignAccompanyingPeriodController extends AbstractController { @@ -92,70 +95,75 @@ class ReassignAccompanyingPeriodController extends AbstractController $total = $this->accompanyingPeriodACLAwareRepository->countByUserOpenedAccompanyingPeriod($userFrom); $paginator = $this->paginatorFactory->create($total); $periods = $this->accompanyingPeriodACLAwareRepository - ->findByUserOpenedAccompanyingPeriod( - $userFrom, - ['openingDate' => 'ASC'], - $paginator->getItemsPerPage(), - $paginator->getCurrentPageFirstItemNumber() - ); + ->findByUserOpenedAccompanyingPeriod( + $userFrom, + ['openingDate' => 'ASC'], + $paginator->getItemsPerPage(), + $paginator->getCurrentPageFirstItemNumber() + ); - // Create an array of period id's to pass into assignForm hiddenfield $periodIds = []; foreach ($periods as $period) { $periodIds[] = $period->getId(); } - $userFromId = null !== $userFrom ? $userFrom->getId() : null; - - $assignForm = $this->buildReassignForm($periodIds, $userFromId); + // Create an array of period id's to pass into assignForm hiddenfield + $assignForm = $this->buildReassignForm($periodIds, $userFrom); $assignForm->handleRequest($request); + $userFromId = null !== $userFrom ? $userFrom->getId() : null; +dump($userFrom); if ($assignForm->isSubmitted()) { + dump(' assign submitted'); - $userFromId = (int) $assignForm->get('userFrom')->getData(); - $assignPeriodIds = json_decode($assignForm->get('periods')->getData(), true); - $userTo = $assignForm->get('userTo')->getData(); + + if ($assignForm->isSubmitted()) { + dump('reassign'); - $userFrom = $this->userRepository->find($userFromId); + $assignPeriodIds = json_decode($assignForm->get('periods')->getData(), true); + $userTo = $assignForm->get('userTo')->getData(); + $userFrom = $assignForm->get('userFrom')->getData(); + + $i = 0; + + dump($assignPeriodIds); + foreach($assignPeriodIds as $periodId) { + $period = $this->courseRepository->find($periodId); + + if ($userFrom === $period->getUser()) { + $period->setUser($userTo); + } - $remainingPeriods = $this->accompanyingPeriodACLAwareRepository - ->findByUserOpenedAccompanyingPeriod( - $userFrom, - ['openingDate' => 'ASC'], - $paginator->getItemsPerPage(), - $paginator->getCurrentPageFirstItemNumber() - ); + + if ($i === 10) { + // dd($i); + } - - foreach($remainingPeriods as $period) { - $id = $period->getId(); - - if (in_array($id, $assignPeriodIds)) { - $period->setUser($userTo); - $this->em->persist($period); + dump($period); + $i++; } + + //$this->em->flush(); + + // redirect to the first page + } - - $this->em->flush(); - - return new Response( - $this->engine->render('@ChillPerson/AccompanyingPeriod/reassign_list.html.twig', [ - 'paginator' => $paginator, - 'form' => $form->createView(), - 'assignForm' => $assignForm->createView() - ]) - ); - + } else { + dump('no assign form'); } + + + + return new Response( $this->engine->render('@ChillPerson/AccompanyingPeriod/reassign_list.html.twig', [ 'paginator' => $paginator, 'periods' => $periods, 'form' => $form->createView(), - 'assignForm' => $assignForm->createView() + 'assignForm' => isset($assignForm) ? $assignForm->createView() : null, ]) ); } @@ -170,7 +178,7 @@ class ReassignAccompanyingPeriodController extends AbstractController $builder ->add('user', EntityType::class, [ - 'class' => User::class, + 'class' => User::class, // pickUserType or PickDyamicUserType 'choices' => $this->userRepository->findByActive(['username' => 'ASC']), 'choice_label' => function (User $u) { return $this->userRender->renderString($u, []); @@ -183,27 +191,21 @@ class ReassignAccompanyingPeriodController extends AbstractController return $builder->getForm(); } - private function buildReassignForm(array $periodIds, ?int $userFromId): FormInterface + private function buildReassignForm(array $periodIds, ?User $userFrom): FormInterface { $defaultData = [ - 'userFrom' => $userFromId, - 'periods' => [], + 'userFrom' => $userFrom, + 'periods' => json_encode($periodIds), 'assignTo' => null ]; - $periodsJson = json_encode($periodIds); - - $builder = $this->formFactory->createBuilder(FormType::class, $defaultData, ['csrf_protection' => false, ]); + $builder = $this->formFactory->createBuilder(FormType::class, $defaultData); $builder - ->add('periods', HiddenType::class, [ - 'data' => $periodsJson, - ]) - ->add('userFrom', HiddenType::class, [ - 'data' => $userFromId - ]) + ->add('periods', HiddenType::class) + ->add('userFrom', HiddenType::class) ->add('userTo', EntityType::class, [ - 'class' => User::class, + 'class' => User::class, // PickUserType 'choices' => $this->userRepository->findByActive(['username' => 'ASC']), 'choice_label' => function (User $u) { return $this->userRender->renderString($u, []); @@ -212,9 +214,28 @@ class ReassignAccompanyingPeriodController extends AbstractController 'multiple' => false, 'label' => 'User', 'required' => true, + // add a constraint: userFrom is not equal to userTo + //'constraints' => NotEqualToh ]); - // $builder->get('periods')->resetViewTransformers(); + $builder->get('userFrom')->addModelTransformer(new CallbackTransformer( + function (?User $user) { + if (null === $user) { + return ''; + } + return $user->getId(); + }, + function (?string $id) { + if (null === $id) { + return null; + } + if (!is_int((int) $id)) { + throw new TransformationFailedException("the user id is not a numeric"); + } + + return $this->userRepository->find((int) $id); + } + )); return $builder->getForm(); }