trans = $trans; $this->serializer = $serializer; $this->workRepository = $workRepository; $this->paginator = $paginator; $this->chillLogger = $chillLogger; } /** * @Route( * "{_locale}/person/accompanying-period/{id}/work/new", * name="chill_person_accompanying_period_work_new", * methods={"GET"} * ) */ public function createWork(AccompanyingPeriod $period): Response { $this->denyAccessUnlessGranted(AccompanyingPeriodWorkVoter::CREATE, $period); if ($period->getSocialIssues()->count() === 0) { $this->addFlash( 'error', $this->trans->trans( 'accompanying_work.You must add at least ' . 'one social issue on accompanying period' ) ); return $this->redirectToRoute('chill_person_accompanying_course_index', [ 'accompanying_period_id' => $period->getId(), ]); } $json = $this->serializer->normalize($period, 'json', ['groups' => ['read']]); return $this->render('@ChillPerson/AccompanyingCourseWork/create.html.twig', [ 'accompanyingCourse' => $period, 'json' => $json, ]); } /** * @Route( * "{_locale}/person/accompanying-period/work/{id}/delete", * name="chill_person_accompanying_period_work_delete", * methods={"GET", "POST", "DELETE"} * ) */ public function deleteWork(AccompanyingPeriodWork $work, Request $request): Response { $this->denyAccessUnlessGranted(AccompanyingPeriodWorkVoter::UPDATE, $work); $em = $this->getDoctrine()->getManager(); $form = $this->createDeleteForm($work->getId()); if ($request->getMethod() === Request::METHOD_DELETE) { $form->handleRequest($request); if ($form->isValid()) { $this->chillLogger->notice('An accompanying period work has been removed', [ 'by_user' => $this->getUser()->getUsername(), 'work_id' => $work->getId(), 'accompanying_period_id' => $work->getAccompanyingPeriod()->getId(), ]); $em->remove($work); $em->flush(); $this->addFlash( 'success', $this->trans->trans('The accompanying period work has been successfully removed.') ); return $this->redirectToRoute('chill_person_accompanying_period_work_list', [ 'id' => $work->getAccompanyingPeriod()->getId(), ]); } } return $this->render('@ChillPerson/AccompanyingCourseWork/delete.html.twig', [ 'accompanyingCourse' => $work->getAccompanyingPeriod(), 'work' => $work, 'delete_form' => $form->createView(), ]); } /** * @Route( * "{_locale}/person/accompanying-period/work/{id}/edit", * name="chill_person_accompanying_period_work_edit", * methods={"GET"} * ) */ public function editWork(AccompanyingPeriodWork $work): Response { $this->denyAccessUnlessGranted(AccompanyingPeriodWorkVoter::UPDATE, $work); $json = $this->serializer->normalize($work, 'json', ['groups' => ['read']]); return $this->render('@ChillPerson/AccompanyingCourseWork/edit.html.twig', [ 'accompanyingCourse' => $work->getAccompanyingPeriod(), 'work' => $work, 'json' => $json, ]); } /** * @Route( * "{_locale}/person/accompanying-period/{id}/work", * name="chill_person_accompanying_period_work_list", * methods={"GET"} * ) */ public function listWorkByAccompanyingPeriod(AccompanyingPeriod $period): Response { $this->denyAccessUnlessGranted(AccompanyingPeriodWorkVoter::SEE, $period); $totalItems = $this->workRepository->countByAccompanyingPeriod($period); $paginator = $this->paginator->create($totalItems); $works = $this->workRepository->findByAccompanyingPeriodOpenFirst( $period, $paginator->getItemsPerPage(), $paginator->getCurrentPageFirstItemNumber() ); return $this->render('@ChillPerson/AccompanyingCourseWork/index.html.twig', [ 'accompanyingCourse' => $period, 'works' => $works, 'paginator' => $paginator, ]); } private function createDeleteForm(int $id): Form { $params = []; $params['id'] = $id; return $this->createFormBuilder() ->setAction($this->generateUrl('chill_person_accompanying_period_work_delete', $params)) ->setMethod('DELETE') ->add('submit', SubmitType::class, ['label' => 'Delete']) ->getForm(); } }