docGeneratorTemplateRepository = $docGeneratorTemplateRepository; $this->engine = $engine; $this->entityManager = $entityManager; $this->formFactory = $formFactory; $this->security = $security; $this->urlGenerator = $urlGenerator; } /** * @Route("/{_locale}/calendar/calendar-doc/{id}/new", name="chill_calendar_calendardoc_new") */ public function create(Calendar $calendar, Request $request): Response { $calendarDoc = (new CalendarDoc($calendar, null))->setCalendar($calendar); if (!$this->security->isGranted(CalendarDocVoter::EDIT, $calendarDoc)) { throw new AccessDeniedHttpException(); } // set variables switch ($calendarDoc->getCalendar()->getContext()) { case 'accompanying_period': $view = '@ChillCalendar/CalendarDoc/new_accompanying_period.html.twig'; $returnRoute = 'chill_calendar_calendar_list_by_period'; $returnParams = ['id' => $calendarDoc->getCalendar()->getAccompanyingPeriod()->getId()]; break; case 'person': $view = '@ChillCalendar/CalendarDoc/new_person.html.twig'; $returnRoute = 'chill_calendar_calendar_list_by_person'; $returnParams = ['id' => $calendarDoc->getCalendar()->getPerson()->getId()]; break; default: throw new UnexpectedValueException('Unsupported context'); } $calendarDocDTO = new CalendarDoc\CalendarDocCreateDTO(); $form = $this->formFactory->create(CalendarDocCreateType::class, $calendarDocDTO); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $calendarDoc->createFromDTO($calendarDocDTO); $this->entityManager->persist($calendarDoc); $this->entityManager->flush(); if ($request->query->has('returnPath')) { return new RedirectResponse($request->query->get('returnPath')); } return new RedirectResponse( $this->urlGenerator->generate($returnRoute, $returnParams) ); } return new Response( $this->engine->render( $view, ['calendar_doc' => $calendarDoc, 'form' => $form->createView()] ) ); } /** * @Route("/{_locale}/calendar/calendar-doc/{id}/delete", name="chill_calendar_calendardoc_delete") */ public function delete(CalendarDoc $calendarDoc, Request $request): Response { if (!$this->security->isGranted(CalendarDocVoter::EDIT, $calendarDoc)) { throw new AccessDeniedHttpException('Not authorized to delete document'); } switch ($calendarDoc->getCalendar()->getContext()) { case 'accompanying_period': $view = '@ChillCalendar/CalendarDoc/delete_accompanying_period.html.twig'; $returnRoute = 'chill_calendar_calendar_list_by_period'; $returnParams = ['id' => $calendarDoc->getCalendar()->getAccompanyingPeriod()->getId()]; break; case 'person': $view = '@ChillCalendar/CalendarDoc/delete_person.html.twig'; $returnRoute = 'chill_calendar_calendar_list_by_person'; $returnParams = ['id' => $calendarDoc->getCalendar()->getPerson()->getId()]; break; default: throw new \LogicException(sprintf("This context '%s' is not supported", $calendarDoc->getCalendar()->getContext())); } $form = $this->formFactory->createBuilder() ->add('submit', SubmitType::class, [ 'label' => 'Delete', ]) ->getForm(); $form->handleRequest($request); if ($form->isSubmitted()) { $this->entityManager->remove($calendarDoc); $this->entityManager->flush(); if ($request->query->has('returnPath')) { return new RedirectResponse($request->query->get('returnPath')); } return new RedirectResponse( $this->urlGenerator->generate($returnRoute, $returnParams) ); } return new Response( $this->engine->render( $view, [ 'calendar_doc' => $calendarDoc, 'form' => $form->createView(), ] ) ); } /** * @Route("/{_locale}/calendar/calendar-doc/{id}/edit", name="chill_calendar_calendardoc_edit") */ public function edit(CalendarDoc $calendarDoc, Request $request): Response { if (!$this->security->isGranted(CalendarDocVoter::EDIT, $calendarDoc)) { throw new AccessDeniedHttpException(); } // set variables switch ($calendarDoc->getCalendar()->getContext()) { case 'accompanying_period': $view = '@ChillCalendar/CalendarDoc/edit_accompanying_period.html.twig'; $returnRoute = 'chill_calendar_calendar_list_by_period'; $returnParams = ['id' => $calendarDoc->getCalendar()->getAccompanyingPeriod()->getId()]; break; case 'person': $view = '@ChillCalendar/CalendarDoc/edit_person.html.twig'; $returnRoute = 'chill_calendar_calendar_list_by_person'; $returnParams = ['id' => $calendarDoc->getCalendar()->getPerson()->getId()]; break; default: throw new UnexpectedValueException('Unsupported context'); } $calendarDocEditDTO = new CalendarDoc\CalendarDocEditDTO($calendarDoc); $form = $this->formFactory->create(CalendarDocEditType::class, $calendarDocEditDTO); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $calendarDoc->editFromDTO($calendarDocEditDTO); $this->entityManager->flush(); if ($request->query->has('returnPath')) { return new RedirectResponse($request->query->get('returnPath')); } return new RedirectResponse( $this->urlGenerator->generate($returnRoute, $returnParams) ); } return new Response( $this->engine->render( $view, ['calendar_doc' => $calendarDoc, 'form' => $form->createView()] ) ); } }