<?php namespace App\Controller; use App\Entity\ActivityEntity; use App\Entity\ActorEntity; use App\Entity\TaskEntity; use App\Form\Activity\ActivityAddForm; use App\Form\Activity\ActivityDeleteForm; use App\Form\Activity\ActivityEditForm; use App\Form\Activity\ActivityFilterForm; use App\Form\Task\TaskAddForm; use App\Form\Task\TaskDeleteForm; use App\Repository\ActivityRepository; use App\Repository\ActorRepository; use App\Repository\TaskRepository; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Generator\UrlGenerator; /** * Controller for activity related pages */ class ActivityController extends AbstractExtendedController { /** * Page for the list of activities * * @param Request $request * @return Response */ public function activities(Request $request): Response { // Get repositories $entityManager = $this->getDoctrine()->getManager(); /** @var ActivityRepository $activityRepository */ $activityRepository = $entityManager->getRepository(ActivityEntity::class); /** @var ActorRepository $actorRepository */ $actorRepository = $entityManager->getRepository(ActorEntity::class); // Get actors $actors = $actorRepository->findAll(); // Activity add form /** @var ActivityAddForm $activityAddForm */ $activityAddForm = $this->createNamedCustomForm('activityAdd', ActivityAddForm::class, [ 'actors' => $actors ]); $activityAddForm->handleRequest($request); if ($activityAddForm->isSubmitted() && $activityAddForm->isValid()) { $errors = $activityAddForm->validate(); if (empty($errors)) { $activity = $activityAddForm->getActivity(); $entityManager->persist($activity); $entityManager->flush(); return $this->ajaxFormAnswer([ 'redirect' => $this->generateUrl('activity_activity', [ 'id' => $activity->getId(), ], UrlGenerator::ABSOLUTE_PATH) ]); } return $this->ajaxFormAnswer([ 'error' => join('<br/>', $errors), 'code' => Response::HTTP_BAD_REQUEST ]); } // Activity delete form /** @var ActivityDeleteForm $activityDeleteForm */ $activityDeleteForm = $this->createNamedCustomForm('activityDelete', ActivityDeleteForm::class); $activityDeleteForm->handleRequest($request); if ($activityDeleteForm->isSubmitted() && $activityDeleteForm->isValid()) { $errors = $activityDeleteForm->validate(); if (empty($errors)) { $activity = $activityDeleteForm->getActivity($activityRepository); if (! is_null($activity)) { $entityManager->remove($activity); $entityManager->flush(); return $this->ajaxFormAnswer([ 'refresh' => true, ]); } return $this->ajaxFormAnswer([ 'error' => 'Activité non trouvé', 'code' => Response::HTTP_BAD_REQUEST, ]); } return $this->ajaxFormAnswer([ 'error' => join('<br/>', $errors), 'code' => Response::HTTP_BAD_REQUEST, ]); } // Filter /** @var ActivityFilterForm $activityFilterForm */ $activityFilterForm = $this->createNamedGetCustomForm('activityFilter', ActivityFilterForm::class, [ 'actors' => $actors ]); $activityFilterForm->handleRequest($request); $activities = $activityFilterForm->getActivities($activityRepository); return $this->render('activity/activities.html.twig', [ 'activities' => $activities, 'activityFilterForm' => $activityFilterForm, 'activityDeleteForm' => $activityDeleteForm, 'activityAddForm' => $activityAddForm, ]); } /** * Page for editing activity * * @param String $id * @param Request $request * @return Response */ public function activity(string $id, Request $request): Response { // Get repositories $entityManager = $this->getDoctrine()->getManager(); /** @var ActivityRepository $activityRepository */ $activityRepository = $entityManager->getRepository(ActivityEntity::class); /** @var ActorRepository $actorRepository */ $actorRepository = $entityManager->getRepository(ActorEntity::class); /** @var TaskRepository $taskRepository */ $taskRepository = $entityManager->getRepository(TaskEntity::class); // Get activity $activity = $activityRepository->find($id); // Get actors $actors = $actorRepository->findAll(); // Activity edit form /** @var ActivityEditForm $activityEditForm */ $activityEditForm = $this->createNamedCustomForm('edit', ActivityEditForm::class, [ 'actors' => $actors ]); $activityEditForm->handleRequest($request); if ($activityEditForm->isSubmitted() && $activityEditForm->isValid()) { $errors = $activityEditForm->validate(); $errors = $activityEditForm->validate(); if (empty($errors)) { $activityEditForm->updateActivity($activity); $entityManager->persist($activity); $entityManager->flush(); return $this->ajaxFormAnswer([ 'message' => 'Modification enregistrées', 'refresh' => true, ]); } return $this->ajaxFormAnswer([ 'error' => join('<br/>', $errors), 'code' => Response::HTTP_BAD_REQUEST, ]); } // Activity delete form /** @var ActivityDeleteForm $activityDeleteForm */ $activityDeleteForm = $this->createNamedCustomForm('activityDelete', ActivityDeleteForm::class); $activityDeleteForm->handleRequest($request); if ($activityDeleteForm->isSubmitted() && $activityDeleteForm->isValid()) { $errors = $activityDeleteForm->validate(); if (empty($errors)) { if (! is_null($activity)) { $entityManager->remove($activity); $entityManager->flush(); return $this->ajaxFormAnswer([ 'redirect' => $this->generateUrl('activity_activities', [], UrlGenerator::ABSOLUTE_PATH), ]); } return $this->ajaxFormAnswer([ 'error' => 'Activité non trouvé', 'code' => Response::HTTP_BAD_REQUEST, ]); } return $this->ajaxFormAnswer([ 'error' => join('<br/>', $errors), 'code' => Response::HTTP_BAD_REQUEST, ]); } // Task add form /** @var TaskAddForm $taskAddForm */ $taskAddForm = $this->createNamedCustomForm('taskAdd', TaskAddForm::class, [ 'actors' => $actors, 'actor' => $activity->getActor() ]); $taskAddForm->handleRequest($request); if ($taskAddForm->isSubmitted() && $taskAddForm->isValid()) { $errors = $taskAddForm->validate(); if (empty($errors)) { $task = $taskAddForm->getTask(); $task->setActivity($activity); $entityManager->persist($task); $entityManager->flush(); return $this->ajaxFormAnswer([ 'refresh' => true, 'reset' => true, ]); } return $this->ajaxFormAnswer([ 'error' => join('<br/>', $errors), 'code' => Response::HTTP_BAD_REQUEST, ]); } // Task delete form /** @var TaskDeleteForm $taskDeleteForm */ $taskDeleteForm = $this->createNamedCustomForm('taskDelete', TaskDeleteForm::class); $taskDeleteForm->handleRequest($request); if ($taskDeleteForm->isSubmitted() && $taskDeleteForm->isValid()) { $errors = $taskDeleteForm->validate(); if (empty($errors)) { $task = $taskDeleteForm->getTask($taskRepository); if (! is_null($task)) { $entityManager->remove($task); $entityManager->flush(); return $this->ajaxFormAnswer([ 'refresh' => true, ]); } return $this->ajaxFormAnswer([ 'error' => 'Tâche non trouvé', 'code' => Response::HTTP_BAD_REQUEST, ]); } return $this->ajaxFormAnswer([ 'error' => join('<br/>', $errors), 'code' => Response::HTTP_BAD_REQUEST, ]); } // Update fields $activityEditForm->updateFields($activity); // Get tasks $tasks = $taskRepository->findBy([ 'activity' => $activity, ]); return $this->render('activity/activity.html.twig', [ 'activity' => $activity, 'tasks' => $tasks, 'activityEditForm' => $activityEditForm, 'activityDeleteForm' => $activityDeleteForm, 'taskAddForm' => $taskAddForm, 'taskDeleteForm' => $taskDeleteForm, ]); } }