From 0f1604817bfadedcf0cc8aeb34880360a314e378 Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Thu, 7 Nov 2024 18:49:07 +0100 Subject: [PATCH] Allow the selection of multiple centers to create multiple groupcenters at once --- .../Controller/UserController.php | 17 +++++++++--- .../Form/Type/ComposedGroupCenterType.php | 26 +++++++------------ 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/Bundle/ChillMainBundle/Controller/UserController.php b/src/Bundle/ChillMainBundle/Controller/UserController.php index 95c78300f..d65c3a404 100644 --- a/src/Bundle/ChillMainBundle/Controller/UserController.php +++ b/src/Bundle/ChillMainBundle/Controller/UserController.php @@ -64,10 +64,19 @@ class UserController extends CRUDController $form->handleRequest($request); if ($form->isValid()) { - $groupCenter = $this->getPersistedGroupCenter( - $form[self::FORM_GROUP_CENTER_COMPOSED]->getData() - ); - $user->addGroupCenter($groupCenter); + + $formData = $form[self::FORM_GROUP_CENTER_COMPOSED]->getData(); + $selectedCenters = $formData['center']; + + foreach ($selectedCenters as $center) { + $groupCenter = new GroupCenter(); + $groupCenter->setCenter($center); + $groupCenter->setPermissionsGroup($formData['permissionsgroup']); + + $user->addGroupCenter($groupCenter); + + $em->persist($groupCenter); + } if (0 === $this->validator->validate($user)->count()) { $em->flush(); diff --git a/src/Bundle/ChillMainBundle/Form/Type/ComposedGroupCenterType.php b/src/Bundle/ChillMainBundle/Form/Type/ComposedGroupCenterType.php index 92a1e43e5..89a82d469 100644 --- a/src/Bundle/ChillMainBundle/Form/Type/ComposedGroupCenterType.php +++ b/src/Bundle/ChillMainBundle/Form/Type/ComposedGroupCenterType.php @@ -13,36 +13,30 @@ namespace Chill\MainBundle\Form\Type; use Chill\MainBundle\Entity\Center; use Chill\MainBundle\Entity\PermissionsGroup; -use Doctrine\ORM\EntityRepository; +use Chill\MainBundle\Repository\CenterRepository; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\FormBuilderInterface; -use Symfony\Component\OptionsResolver\OptionsResolver; class ComposedGroupCenterType extends AbstractType { + public function __construct(private readonly CenterRepository $centerRepository) {} + public function buildForm(FormBuilderInterface $builder, array $options) { + $centers = $this->centerRepository->findActive(); + $builder->add('permissionsgroup', EntityType::class, [ 'class' => PermissionsGroup::class, 'choice_label' => static fn (PermissionsGroup $group) => $group->getName(), - ])->add('center', EntityType::class, [ - 'class' => Center::class, - 'query_builder' => static function (EntityRepository $er) { - $qb = $er->createQueryBuilder('c'); - $qb->where($qb->expr()->eq('c.isActive', 'TRUE')) - ->orderBy('c.name', 'ASC'); - - return $qb; - }, + ])->add('center', ChoiceType::class, [ + 'choices' => $centers, + 'choice_label' => fn (Center $center) => $center->getName(), + 'multiple' => true, ]); } - public function configureOptions(OptionsResolver $resolver) - { - $resolver->setDefault('data_class', \Chill\MainBundle\Entity\GroupCenter::class); - } - public function getBlockPrefix() { return 'composed_groupcenter';