security = $security; $this->docGeneratorTemplateRepository = $docGeneratorTemplateRepository; $this->urlGenerator = $urlGenerator; $this->engine = $engine; } /** * @Route("/{_locale}/calendar/docgen/pick/{id}", name="chill_calendar_calendardoc_pick_template") */ public function pickTemplate(Calendar $calendar, Request $request): Response { if (!$this->security->isGranted(CalendarVoter::SEE, $calendar)) { throw new AccessDeniedException('Not authorized to see this calendar'); } if (0 === $number = $this->docGeneratorTemplateRepository->countByEntity(Calendar::class)) { throw new RuntimeException('should not be redirected to this page if no template'); } if (1 === $number) { $templates = $this->docGeneratorTemplateRepository->findByEntity(Calendar::class); if ($request->query->has('returnPath')) { $returnPathParam = ['returnPath' => $request->query->get('returnPath')]; } return new RedirectResponse( $this->urlGenerator->generate( 'chill_docgenerator_generate_from_template', array_merge( $returnPathParam ?? [], [ 'template' => $templates[0]->getId(), 'entityClassName' => Calendar::class, 'entityId' => $calendar->getId(), ] ) ) ); } switch ($calendar->getContext()) { case 'person': return new Response( $this->engine->render('@ChillCalendar/CalendarDoc/pick_template_person.html.twig', [ 'calendar' => $calendar, ]) ); case 'accompanying_period': return new Response( $this->engine->render('@ChillCalendar/CalendarDoc/pick_template_accompanying_period.html.twig', [ 'calendar' => $calendar, ]) ); default: throw new UnexpectedValueException('calendar context not expected : ' . $calendar->getContext()); } } }