diff --git a/src/Bundle/ChillActivityBundle/Controller/ActivityController.php b/src/Bundle/ChillActivityBundle/Controller/ActivityController.php index b7d5fcbd2..e6bcdf836 100644 --- a/src/Bundle/ChillActivityBundle/Controller/ActivityController.php +++ b/src/Bundle/ChillActivityBundle/Controller/ActivityController.php @@ -13,6 +13,7 @@ namespace Chill\ActivityBundle\Controller; use Chill\ActivityBundle\Entity\Activity; use Chill\ActivityBundle\Entity\ActivityReason; +use Chill\ActivityBundle\Form\ActivityFilterType; use Chill\ActivityBundle\Form\ActivityType; use Chill\ActivityBundle\Repository\ActivityACLAwareRepositoryInterface; use Chill\ActivityBundle\Repository\ActivityRepository; @@ -294,6 +295,10 @@ final class ActivityController extends AbstractController [$person, $accompanyingPeriod] = $this->getEntity($request); + $form = $this->createForm(ActivityFilterType::class); + + $form->handleRequest($request); + if ($person instanceof Person) { $this->denyAccessUnlessGranted(ActivityVoter::SEE, $person); $activities = $this->activityACLAwareRepository @@ -307,6 +312,7 @@ final class ActivityController extends AbstractController $view = 'ChillActivityBundle:Activity:listPerson.html.twig'; } elseif ($accompanyingPeriod instanceof AccompanyingPeriod) { + $this->denyAccessUnlessGranted(ActivityVoter::SEE, $accompanyingPeriod); $activities = $this->activityACLAwareRepository @@ -315,9 +321,12 @@ final class ActivityController extends AbstractController $view = 'ChillActivityBundle:Activity:listAccompanyingCourse.html.twig'; } + + return $this->render( $view, [ + 'form' => $form->createView(), 'activities' => $activities, 'person' => $person, 'accompanyingCourse' => $accompanyingPeriod, diff --git a/src/Bundle/ChillActivityBundle/Form/ActivityFilterType.php b/src/Bundle/ChillActivityBundle/Form/ActivityFilterType.php new file mode 100644 index 000000000..b38255a4f --- /dev/null +++ b/src/Bundle/ChillActivityBundle/Form/ActivityFilterType.php @@ -0,0 +1,107 @@ +translatableString = $translatableString; + + $this->translator = $translator; + } + + public function buildForm(FormBuilderInterface $builder, array $options): void + { + + $builder + ->add('types', EntityType::class, [ + 'class' => ActivityType::class, + 'label' => 'Activity type', + 'multiple' => true, + 'query_builder' => static function (EntityRepository $er) { + $qb = $er->createQueryBuilder('t'); + $qb->andWhere($qb->expr()->eq('t.active', "'TRUE'")); + + return $qb; + }, + 'choice_label' => function (ActivityType $t) { + return $this->translatableString->localize($t->getName()); + }, + 'required' => false, + ]) + ->add('jobs', EntityType::class, [ + 'class' => UserJob::class, + 'label' => 'user job', + 'multiple' => true, + 'query_builder' => static function (EntityRepository $er) { + $qb = $er->createQueryBuilder('j'); + $qb->andWhere($qb->expr()->eq('j.active', "'TRUE'")); + + return $qb; + }, + 'choice_label' => function (UserJob $j) { + return $this->translatableString->localize($j->getLabel()); + }, + 'required' => false, + ]) + ->add('dateFrom', ChillDateType::class, [ + 'label' => 'Activities after this date', + 'required' => false, + ]) + ->add('dateTo', ChillDateType::class, [ + 'label' => 'Activities before this date', + 'required' => false, + ]) + ->add('onlyMe', CheckboxType::class, [ + 'label' => 'My activities only', + 'required' => false, + ]); + + $builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) { + + $form = $event->getForm(); + $dateFrom = $form->get('dateFrom')->getData(); + $dateTo = $form->get('dateTo')->getData(); + + // check that date_from is before date_to + if ( + (null !== $dateFrom && null !== $dateTo) + && $dateFrom >= $dateTo + ) { + $form->get('dateTo')->addError(new FormError( + $this->translator->trans('This date should be after ' + . 'the date given in "Implied in an activity after ' + . 'this date" field') + )); + } + + }); + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + ]); + } + +} diff --git a/src/Bundle/ChillActivityBundle/Resources/views/Activity/listAccompanyingCourse.html.twig b/src/Bundle/ChillActivityBundle/Resources/views/Activity/listAccompanyingCourse.html.twig index a666f183d..7773d1728 100644 --- a/src/Bundle/ChillActivityBundle/Resources/views/Activity/listAccompanyingCourse.html.twig +++ b/src/Bundle/ChillActivityBundle/Resources/views/Activity/listAccompanyingCourse.html.twig @@ -27,7 +27,48 @@ {% set accompanying_course_id = accompanyingCourse.id %} {% endif %} -