From 650f2c8e1861ca635a0ce54593506bcbaeea8f48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Mon, 7 May 2018 22:32:59 +0200 Subject: [PATCH] remove "person" filter when a person file is opened --- Controller/SingleTaskController.php | 5 +- Form/SingleTaskListType.php | 57 +++++++++++++--------- Resources/views/SingleTask/_list.html.twig | 3 ++ 3 files changed, 41 insertions(+), 24 deletions(-) diff --git a/Controller/SingleTaskController.php b/Controller/SingleTaskController.php index 7b5dadcc4..a5baa16a2 100644 --- a/Controller/SingleTaskController.php +++ b/Controller/SingleTaskController.php @@ -358,7 +358,7 @@ class SingleTaskController extends Controller $params['person'] = $person; } - if ($request->query->has('user_id')) { + if (!empty($request->query->get('user_id', null))) { $userId = $request->query->getInt('user_id', null); $user = $this->getDoctrine()->getManager() @@ -373,7 +373,7 @@ class SingleTaskController extends Controller $params['user'] = $user; } - if ($request->query->has('scope_id')) { + if (!empty($request->query->get('scope_id'))) { $scopeId = $request->query->getInt('scope_id', null); $scope = $this->getDoctrine()->getManager() @@ -447,6 +447,7 @@ class SingleTaskController extends Controller // Form for filtering tasks $form = $formFactory->createNamed(null, SingleTaskListType::class, null, [ + 'person' => $viewParams['person'], 'method' => Request::METHOD_GET, 'csrf_protection' => false ]); diff --git a/Form/SingleTaskListType.php b/Form/SingleTaskListType.php index 7ee75117a..e4385d63b 100644 --- a/Form/SingleTaskListType.php +++ b/Form/SingleTaskListType.php @@ -20,11 +20,7 @@ namespace Chill\TaskBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Bridge\Doctrine\Form\Type\EntityType; -use Chill\MainBundle\Entity\Scope; -use Chill\MainBundle\Entity\Center; use Chill\MainBundle\Entity\User; -use Chill\MainBundle\Form\Type\ScopePickerType; -use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Chill\TaskBundle\Repository\SingleTaskRepository; use Symfony\Component\OptionsResolver\OptionsResolver; @@ -35,6 +31,9 @@ use Chill\TaskBundle\Security\Authorization\TaskVoter; use Symfony\Component\Security\Core\Role\Role; use Chill\TaskBundle\Entity\SingleTask; use Chill\PersonBundle\Form\Type\PickPersonType; +use Chill\PersonBundle\Entity\Person; +use Symfony\Component\Form\Extension\Core\Type\HiddenType; +use Chill\PersonBundle\Form\DataTransformer\PersonToIdTransformer; /** * @@ -49,12 +48,6 @@ class SingleTaskListType extends AbstractType */ protected $em; - /** - * - * @var SingleTaskRepository - */ - protected $singleTaskRepository; - /** * * @var TokenStorageInterface @@ -85,7 +78,7 @@ class SingleTaskListType extends AbstractType $builder ->add('user_id', EntityType::class, [ 'class' => User::class, - 'choices' => $this->getUsersAssigneedToTask(), + 'choices' => $this->getUsersAssigneedToTask($options), 'placeholder' => 'Choose a user', 'required' => false ]) @@ -94,15 +87,27 @@ class SingleTaskListType extends AbstractType 'expanded' => true, 'multiple' => true ]) - ->add('person_id', PickPersonType::class, [ - 'centers' => $this->authorizationHelper - ->getReachableCenters( - $this->tokenStorage->getToken()->getUser(), - new Role(TaskVoter::SHOW) - ), - 'required' => false - ]) ; + + if ($options['person'] === null) { + $builder + ->add('person_id', PickPersonType::class, [ + 'centers' => $this->authorizationHelper + ->getReachableCenters( + $this->tokenStorage->getToken()->getUser(), + new Role(TaskVoter::SHOW) + ), + 'required' => false + ]) + ; + } else { + // add a hidden field + $builder + ->add('person_id', HiddenType::class); + $builder->get('person_id') + ->addModelTransformer(new PersonToIdTransformer($this->em)) + ; + } } /** @@ -110,7 +115,7 @@ class SingleTaskListType extends AbstractType * * @return User[] */ - protected function getUsersAssigneedToTask() + protected function getUsersAssigneedToTask($options) { $qb = $this->em->createQueryBuilder(); $user = $this->tokenStorage->getToken()->getUser(); @@ -124,6 +129,13 @@ class SingleTaskListType extends AbstractType ->where("user.enabled = 'TRUE'") ; + if (NULL !== $options['person']) { + $qb + ->andWhere($qb->expr()->eq('task.person', ':person')) + ->setParameter('person', $options['person']) + ; + } + $i = 0; foreach ($centers as $center) { $circles = $this->authorizationHelper->getReachableCircles($user, $role, $center); @@ -147,8 +159,9 @@ class SingleTaskListType extends AbstractType public function configureOptions(OptionsResolver $resolver) { $resolver - // ->setRequired('center') - // ->setAllowedTypes('center', [ Center::class ]) + ->setDefined('person') + ->setDefault('person', null) + ->setAllowedTypes('person', [Person::class, 'null']) ; } } diff --git a/Resources/views/SingleTask/_list.html.twig b/Resources/views/SingleTask/_list.html.twig index 2d1f86b5c..fd8797c88 100644 --- a/Resources/views/SingleTask/_list.html.twig +++ b/Resources/views/SingleTask/_list.html.twig @@ -145,7 +145,10 @@ {{ form_start(form) }} {{ form_row(form.user_id) }} {{ form_row(form.status) }} + + {% if form.person_id is defined %} {{ form_row(form.person_id) }} + {% endif %} {{ form_end(form)}}