buildFilterOrder(); $filterData = [ 'q' => (string) $filter->getQueryString(), 'dates' => $filter->getDateRangeData('dates'), 'event_types' => $filter->getEntityChoiceData('event_types'), ]; $total = $this->eventACLAwareRepository->countAllViewable($filterData); $pagination = $this->paginatorFactory->create($total); $events = $this->eventACLAwareRepository->findAllViewable($filterData, $pagination->getCurrentPageFirstItemNumber(), $pagination->getItemsPerPage()); $eventForms = []; foreach ($events as $event) { $eventForms[$event->getId()] = $this->createAddParticipationByPersonForm($event)->createView(); } return new Response($this->environment->render( '@ChillEvent/Event/page_list.html.twig', [ 'events' => $events, 'pagination' => $pagination, 'eventForms' => $eventForms, 'filter' => $filter, ] )); } private function buildFilterOrder(): FilterOrderHelper { $types = $this->eventTypeRepository->findAllActive(); $builder = $this->filterOrderHelperFactory->create(__METHOD__); $builder ->addDateRange('dates', 'event.filter.event_dates') ->addSearchBox(['name']) ->addEntityChoice('event_types', 'event.filter.event_types', EventType::class, $types, [ 'choice_label' => fn (EventType $e) => $this->translatableStringHelper->localize($e->getName()), ]); return $builder->build(); } private function createAddParticipationByPersonForm(Event $event): FormInterface { $builder = $this->formFactory ->createNamedBuilder( '', FormType::class, null, [ 'method' => 'GET', 'action' => $this->urlGenerator->generate('chill_event_participation_new'), 'csrf_protection' => false, ] ); $builder->add('person_id', PickPersonDynamicType::class, [ 'as_id' => true, 'multiple' => false, 'submit_on_adding_new_entity' => true, 'label' => 'Add a participation', ]); $builder->add('event_id', HiddenType::class, [ 'data' => $event->getId(), ]); return $builder->getForm(); } }