serializer = $serializer; $this->dispatcher = $dispatcher; $this->validator = $validator; $this->workRepository = $workRepository; } /** * @Route("/{_locale}/person/parcours/new", name="chill_person_accompanying_course_new") */ public function newAction(Request $request): Response { $period = new AccompanyingPeriod(); $em = $this->getDoctrine()->getManager(); if ($request->query->has('person_id')) { $personIds = $request->query->get('person_id'); if (FALSE === \is_array($personIds)) { throw new BadRequestException("person_id parameter should be an array"); } foreach ($personIds as $personId) { $person = $em->getRepository(Person::class)->find($personId); if (NULL !== $person) { $period->addPerson($person); } } } $this->denyAccessUnlessGranted(AccompanyingPeriodVoter::SEE, $period); $em->persist($period); $em->flush(); return $this->redirectToRoute('chill_person_accompanying_course_edit', [ 'accompanying_period_id' => $period->getId() ]); } /** * Homepage of Accompanying Course section * * @Route("/{_locale}/parcours/{accompanying_period_id}", name="chill_person_accompanying_course_index") * @ParamConverter("accompanyingCourse", options={"id": "accompanying_period_id"}) */ public function indexAction(AccompanyingPeriod $accompanyingCourse): Response { // compute some warnings // get persons without household $withoutHousehold = []; foreach ($accompanyingCourse->getParticipations() as $p) { if (FALSE === $p->getPerson()->isSharingHousehold()) { $withoutHousehold[] = $p->getPerson(); } } $activities = $this->getDoctrine()->getManager()->getRepository(Activity::class)->findBy( ['accompanyingPeriod' => $accompanyingCourse], ['date' => 'DESC'], ); $works = $this->workRepository->findByAccompanyingPeriod( $accompanyingCourse, ['startDate' => 'DESC', 'endDate' => 'DESC'], 3 ); return $this->render('@ChillPerson/AccompanyingCourse/index.html.twig', [ 'accompanyingCourse' => $accompanyingCourse, 'withoutHousehold' => $withoutHousehold, 'works' => $works, 'activities' => $activities ]); } /** * Edit page of Accompanying Course section * * the page edit all blocks managed by vuejs component * * @Route("/{_locale}/parcours/{accompanying_period_id}/edit", name="chill_person_accompanying_course_edit") * @ParamConverter("accompanyingCourse", options={"id": "accompanying_period_id"}) */ public function editAction(AccompanyingPeriod $accompanyingCourse): Response { return $this->render('@ChillPerson/AccompanyingCourse/edit.html.twig', [ 'accompanyingCourse' => $accompanyingCourse ]); } /** * History page of Accompanying Course section * * the page show anti chronologic history with all actions, title of page is 'Accompanying Course History' * * @Route("/{_locale}/parcours/{accompanying_period_id}/history", name="chill_person_accompanying_course_history") * @ParamConverter("accompanyingCourse", options={"id": "accompanying_period_id"}) */ public function historyAction(AccompanyingPeriod $accompanyingCourse): Response { return $this->render('@ChillPerson/AccompanyingCourse/history.html.twig', [ 'accompanyingCourse' => $accompanyingCourse ]); } }