src/Controller/PageController.php line 173

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Form;
  4. use App\Entity\AbstractPage;
  5. use App\Entity\ServiceCategory;
  6. use App\Entity\User;
  7. use App\Entity\UserPage;
  8. use App\Entity\UserForm;
  9. use App\Form\FormFactory;
  10. use App\Mail\MailDispatcher;
  11. use App\Mail\MailEvent;
  12. use App\Repository\AboutCategoryRepository;
  13. use App\Repository\FormRepository;
  14. use App\Repository\ServiceCategoryRepository;
  15. use Doctrine\ORM\EntityManagerInterface;
  16. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  17. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  18. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. class PageController extends AbstractController
  23. {
  24.     /**
  25.      * @Route("/{id}/{filename}", name="user_file", requirements={"id": "\d+"})
  26.      *
  27.      * @param User $user
  28.      * @param      $filename
  29.      *
  30.      * @return \Symfony\Component\HttpFoundation\Response
  31.      */
  32.     public function getFile(User $user$filename)
  33.     {
  34.         if ($user !== $this->getUser() && !$this->isGranted('ROLE_ADMIN')) {
  35.             throw $this->createNotFoundException('Vous n\'avez pas accès à ce fichier');
  36.         }
  37.         $projectDir $this->getParameter('kernel.project_dir');
  38.         $fileDir $projectDir .'/files/'.$user->getId().'/'.$filename;
  39.         if (!file_exists($fileDir)) {
  40.             throw $this->createNotFoundException('Ce fichier n\'existe pas');
  41.         }
  42.         return $this->file($fileDir$filenameResponseHeaderBag::DISPOSITION_INLINE);
  43.     }
  44.     /**
  45.      * @Route("/espace-client/formulaire/{id}/{user_id}", name="form", defaults={"user_id" = null}, requirements={"user_id": "\d+"})
  46.      *
  47.      * @param Form        $form
  48.      * @param FormFactory $factory
  49.      * @param Request     $request
  50.      *
  51.      *
  52.      * @return \Symfony\Component\HttpFoundation\Response
  53.      * @ParamConverter("user", options={"id" = "user_id"})
  54.      */
  55.     public function form(Form $formFormFactory $factoryRequest $requestEntityManagerInterface $entityManagerMailDispatcher $mailDispatcherUser $user null)
  56.     {
  57.         $this->denyAccessUnlessGranted('ROLE_USER');
  58.         $isAdmin false;
  59.         if (empty($user)) {
  60.             $user $this->getUser();
  61.         } else {
  62.             $isAdmin true;
  63.             $this->denyAccessUnlessGranted('ROLE_ADMIN');
  64.         }
  65.         $userForm $entityManager->getRepository(UserForm::class)
  66.             ->findOneBy(['user' => $user'form' => $form]);
  67.         if (empty($userForm)) {
  68.             $userForm = new UserForm($user$form);
  69.             $entityManager->persist($userForm);
  70.         }
  71.         if ($isAdmin) {
  72.             $userForm->setChangeViewed(true);
  73.             $entityManager->flush();
  74.         } else {
  75.             $userForm->setChangeViewed(false);
  76.         }
  77.         $formType $factory->build($form$userForm);
  78.         $formType->handleRequest($request);
  79.         if ($formType->isSubmitted() && $formType->isValid()) {
  80.             if($request->isXmlHttpRequest()) {
  81.                 return $this->json([
  82.                     'progress' => $userForm->getProgression()
  83.                 ]);
  84.             }
  85.             foreach ($formType->getData() as $step) {
  86.                 foreach ($step as $field) {
  87.                     $entityManager->persist($field);
  88.                 }
  89.             }
  90.             $entityManager->flush();
  91.             $event = new MailEvent(['user' => $user'form' => $form]);
  92.             $mailDispatcher->dispatch(MailEvent::FORM_COMPLETED$event);
  93.         }
  94.         $form_view $formType->createView();
  95.         return $this->render('page/form.html.twig', ['form' => $form'form_view' => $form_view'isAdmin' => $isAdmin'user' => $user'userForm' => $userForm]);
  96.     }
  97.     /**
  98.      * @Route("/espace-client/formulaire/{id}/view/{user_id}", name="form_view", defaults={"user_id" = null})
  99.      *
  100.      * @param Form        $form
  101.      * @param FormFactory $factory
  102.      * @param Request     $request
  103.      *
  104.      *
  105.      * @return \Symfony\Component\HttpFoundation\Response
  106.      * @ParamConverter("user", options={"id" = "user_id"})
  107.      */
  108.     public function formView(Form $formFormFactory $factoryRequest $requestEntityManagerInterface $entityManagerUser $user null)
  109.     {
  110.         $this->denyAccessUnlessGranted('ROLE_USER');
  111.         $isAdmin false;
  112.         if (empty($user)) {
  113.             $user $this->getUser();
  114.         } else {
  115.             $isAdmin true;
  116.             $this->denyAccessUnlessGranted('ROLE_ADMIN');
  117.         }
  118.         $userForm $entityManager->getRepository(UserForm::class)
  119.             ->findOneBy(['user' => $user'form' => $form]);
  120.         if (!$userForm instanceof UserForm) {
  121.             throw $this->createNotFoundException();
  122.         }
  123.         if ($isAdmin) {
  124.             $userForm->setChangeViewed(true);
  125.             $entityManager->flush();
  126.         }
  127.         $formType $factory->build($form$userForm);
  128.         $form_view $formType->createView();
  129.         return $this->render('page/form_view.html.twig', [
  130.             'form' => $form,
  131.             'form_view' => $form_view'isAdmin' => $isAdmin'user' => $user'userForm' => $userForm]);
  132.     }
  133.     /**
  134.      *
  135.      * @ParamConverter("page", options={"repository_method"="findPageByUrl", "map_method_signature"=true})
  136.      * @param AbstractPage              $page
  137.      * @param ServiceCategoryRepository $serviceCategoryRepository
  138.      *
  139.      * @return \Symfony\Component\HttpFoundation\Response
  140.      */
  141.     public function index(AbstractPage $pageServiceCategoryRepository $serviceCategoryRepositoryAboutCategoryRepository $aboutCategoryRepositoryFormRepository $formRepository)
  142.     {
  143.         if ($page->getRequireUser()) {
  144.             $this->denyAccessUnlessGranted('ROLE_USER');
  145.         }
  146.         if (!$page->getPublic()) {
  147.             throw $this->createNotFoundException('Page non publiée');
  148.         }
  149.         $data = [
  150.             'page' => $page,
  151.             'user' => $this->getUser(),
  152.             'serviceCategories' => $serviceCategoryRepository->findBy(['public' => true]),
  153.             'aboutCategories' => $aboutCategoryRepository->findBy(['public' => true], ['sort' => 'asc']),
  154.             'forms' => $formRepository->findBy(['public' => true])
  155.         ];
  156.         return $this->render($page->getTemplate(), $data);
  157.     }
  158. }