src/Controller/FrontController.php line 81

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Actuality;
  4. use App\Entity\BecomePartner;
  5. use App\Entity\Contact;
  6. use App\Entity\Devis;
  7. use App\Entity\DevisDocument;
  8. use App\Entity\Fluvial;
  9. use App\Entity\FluvialCategory;
  10. use App\Entity\LandingPage;
  11. use App\Entity\Maritime;
  12. use App\Entity\MaritimeCategory;
  13. use App\Entity\Presentation;
  14. use App\Entity\RecommendContact;
  15. use App\Entity\Service;
  16. use App\Entity\ServicePage;
  17. use App\Entity\Testimony;
  18. use App\Entity\ValeurEngagement;
  19. use App\Form\BecomePartnerFormType;
  20. use App\Form\ContactFormType;
  21. use App\Form\ContactFrontFormType;
  22. use App\Form\DevisFormType;
  23. use App\Form\Flow\DevisFormFlow;
  24. use App\Form\RecommendContactFormType;
  25. use App\Form\TestimonyFrontType;
  26. use App\Repository\ActualityRepository;
  27. use App\Repository\FluvialCategoryRepository;
  28. use App\Repository\FluvialRepository;
  29. use App\Repository\HomepageRepository;
  30. use App\Repository\MaritimeCategoryRepository;
  31. use App\Repository\MaritimeRepository;
  32. use App\Repository\PresentationRepository;
  33. use App\Repository\ServicePageRepository;
  34. use App\Repository\ServiceRepository;
  35. use App\Repository\TestimonyRepository;
  36. use App\Repository\ValeurEngagementRepository;
  37. use App\Service\EmailManager;
  38. use App\Utils\UploadedBase64File;
  39. use Doctrine\ORM\EntityManagerInterface;
  40. use Doctrine\Persistence\ManagerRegistry;
  41. use Pagerfanta\Doctrine\ORM\QueryAdapter;
  42. use Pagerfanta\Pagerfanta;
  43. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  44. use Symfony\Component\HttpFoundation\Request;
  45. use Symfony\Component\HttpFoundation\Response;
  46. use Symfony\Component\Routing\Annotation\Route;
  47. class FrontController extends AbstractController
  48. {
  49.     /** @var ManagerRegistry */
  50.     private $em;
  51.     public function __construct(ManagerRegistry $em)
  52.     {
  53.         $this->em $em;
  54.     }
  55.     /**
  56.      * @Route("/", name="app_homepage")
  57.      */
  58.     public function index(ActualityRepository $actualityRepositoryTestimonyRepository  $testimonyRepositoryHomepageRepository $homepageRepository): Response
  59.     {
  60.         $actualities $actualityRepository->findBy(array('published' => '1'), ['date' => 'DESC'], 3);
  61.         $testimonies $testimonyRepository->findBy(array(), array(), 3);
  62.         $page $homepageRepository->findUnique();
  63.         return $this->render('front/index.html.twig', [
  64.             'actualities' => $actualities,
  65.             'testimonies' => $testimonies,
  66.             'page' => $page
  67.         ]);
  68.     }
  69.     /**
  70.      * @Route("/presentation", name="app_presentation_index")
  71.      */
  72.     public function presentation(Request $request): Response
  73.     {
  74.         /** @var PresentationRepository $repo */
  75.         $repo $this->em->getRepository(Presentation::class);
  76.         $page $repo->findUnique();
  77.         return $this->render('front/Presentation/index.html.twig', array('page' => $page));
  78.     }
  79.     /**
  80.      * @Route("/valeurEngagement", name="app_valeur_engagement_index")
  81.      */
  82.     public function valeurEngagement(Request $request): Response
  83.     {
  84.         /** @var ValeurEngagementRepository $repo */
  85.         $repo $this->em->getRepository(ValeurEngagement::class);
  86.         $page $repo->findUnique();
  87.         return $this->render('front/ValeurEngagement/index.html.twig', array('page' => $page));
  88.     }
  89.     /**
  90.      * @Route("/assurance-maritime", name="app_maritime_index")
  91.      */
  92.     public function maritime(Request $requestMaritimeCategoryRepository $maritimeCategoryRepository): Response
  93.     {
  94.         /** @var MaritimeRepository $repo */
  95.         $repo $this->em->getRepository(Maritime::class);
  96.         $page $repo->findUnique();
  97.         $categories $maritimeCategoryRepository->findAll();
  98.         return $this->render('front/Assurance/index.html.twig', array(
  99.             'page' => $page,
  100.             'categories' => $categories,
  101.             'type' => "maritime",
  102.         ));
  103.     }
  104.     /**
  105.      * @Route("/assurance-maritime/{slug}", name="app_maritime_category_show")
  106.      */
  107.     public function showMaritimeCategory(Request $requestMaritimeCategory $maritimeCategoryServiceRepository $serviceRepository): Response
  108.     {
  109.         $services $serviceRepository->findAll();
  110.         return $this->render('front/AssuranceCategory/show.html.twig', array(
  111.             'page' => $maritimeCategory,
  112.             'services' => $services,
  113.             'type' => "maritime",
  114.         ));
  115.     }
  116.     /**
  117.      * @Route("/assurance-fluvial", name="app_fluvial_index")
  118.      */
  119.     public function Fluvial(Request $requestFluvialCategoryRepository $fluvialCategoryRepository): Response
  120.     {
  121.         /** @var FluvialRepository $repo */
  122.         $repo $this->em->getRepository(Fluvial::class);
  123.         $page $repo->findUnique();
  124.         $categories $fluvialCategoryRepository->findAll();
  125.         return $this->render('front/Assurance/index.html.twig', array(
  126.             'page' => $page,
  127.             'categories' => $categories,
  128.             'type' => "fluvial",
  129.         ));
  130.     }
  131.     /**
  132.      * @Route("/assurance-Fluvial/{slug}", name="app_fluvial_category_show")
  133.      */
  134.     public function showFluvialCategory(Request $requestFluvialCategory $fluvialCategoryServiceRepository $serviceRepository): Response
  135.     {
  136.         $services $serviceRepository->findAll();
  137.         return $this->render('front/AssuranceCategory/show.html.twig', array(
  138.             'page' => $fluvialCategory,
  139.             'services' => $services,
  140.             'type' => "fluvial",
  141.         ));
  142.     }
  143.     /**
  144.      * @Route("/services", name="app_services_index")
  145.      */
  146.     public function listServices(Request $requestServiceRepository $serviceRepositoryServicePageRepository $servicePageRepository): Response
  147.     {
  148.         $page $servicePageRepository->findUnique();
  149.         $services $serviceRepository->findAll();
  150.         return $this->render('front/Service/list.html.twig', array(
  151.             'services' => $services,
  152.             'page' => $page,
  153.         ));
  154.     }
  155.     /**
  156.      * @Route("/actualites/detail/{slug}", name="app_actuality_show")
  157.      */
  158.     public function showActuality(Request $requestActuality $actualityActualityRepository $actualityRepository): Response
  159.     {
  160.         $lastActualities $actualityRepository->findBy([], ['date' => 'DESC'], 3);
  161.         return $this->render('front/Actuality/show.html.twig', array(
  162.             'page' => $actuality,
  163.             'lastActualities' => $lastActualities,
  164.         ));
  165.     }
  166.     /**
  167.      * @Route("/actualites/{page}", name="app_actuality_list", requirements={"page"="\d+"}, defaults={"page": 1})
  168.      */
  169.     public function listActualitys(Request $request$page): Response
  170.     {
  171.         /** @var ActualityRepository $repo */
  172.         $repo $this->em->getRepository(Actuality::class);
  173.         $lastActuality $repo->findOneBy(array('published' => '1'), array('date' => 'desc'), 1);
  174.         $actualitys = new Pagerfanta(new QueryAdapter($repo->createQueryBuilder('e')->orderBy('e.date''DESC')->andWhere('e.published = 1')->andWhere('e != :last')->setParameter('last'$lastActuality)));
  175.         $actualitys->setMaxPerPage(6);
  176.         $actualitys->setCurrentPage($page);
  177.         return $this->render('front/Actuality/list.html.twig', array('actualitys' => $actualitys'lastActuality' => $lastActuality));
  178.     }
  179.     /**
  180.      * @Route("/livre-d-or/{page}", name="app_testimony_list", requirements={"page"="\d+"}, defaults={"page": 1})
  181.      */
  182.     public function listTestimonys(Request $request$pageEntityManagerInterface $em): Response
  183.     {
  184.         /** @var TestimonyRepository $repo */
  185.         $repo $this->em->getRepository(Testimony::class);
  186.         $testimonys = new Pagerfanta(new QueryAdapter($repo->createQueryBuilder('e')));
  187.         $testimonys->setMaxPerPage(6);
  188.         $testimonys->setCurrentPage($page);
  189.         $testimony = new Testimony;
  190.         $form $this->createForm(TestimonyFrontType::class, $testimony);
  191.         $form->handleRequest($request);
  192.         if ($form->isSubmitted() && $form->isValid()) {
  193.             /** @var Contact $contact */
  194.             $contact->setCreatedAt(new \DateTime());
  195.             $em->persist($contact);
  196.             $em->flush();
  197.             $this->addFlash('success''Merci, nous avons reçu votre Témoignage !');
  198.         }
  199.         return $this->render('front/Testimony/list.html.twig', array(
  200.             'testimonys' => $testimonys,
  201.             "form" => $form->createView(),
  202.         ));
  203.     }
  204.     /**
  205.      * @Route("/contact", name="app_contact_show")
  206.      */
  207.     public function showContact(Request $requestEntityManagerInterface $emEmailManager $mailer): Response
  208.     {
  209.         $contact = new Contact();
  210.         $form $this->createForm(ContactFrontFormType::class, $contact);
  211.         $form->handleRequest($request);
  212.         if ($form->isSubmitted() && $form->isValid()) {
  213.             $contact->setCreatedAt(new \DateTime());
  214.             $em->persist($contact);
  215.             $em->flush();
  216.             $mailer->sendContactMail($contact);
  217.             $this->addFlash('success''Merci nous avons bien reçu votre demande. Nous vous répondrons dans les plus brefs délais.');
  218.             $contact = new Contact();
  219.             $form $this->createForm(ContactFrontFormType::class, $contact);
  220.         }
  221.         return $this->render('front/Contact/show.html.twig', array(
  222.             'form' => $form->createView(),
  223.         ));
  224.     }
  225.     /**
  226.      * @Route("/landingPage/{slug}", name="app_landing_page_show")
  227.      */
  228.     public function showLandingPage(Request $requestLandingPage $landingPageEntityManagerInterface $emServiceRepository $serviceRepository): Response
  229.     {
  230.         $services $serviceRepository->findAll();
  231.         $contact = new Contact;
  232.         $form $this->createForm(ContactFormType::class, $contact);
  233.         $form->handleRequest($request);
  234.         if ($form->isSubmitted() && $form->isValid()) {
  235.             /** @var Contact $contact */
  236.             $contact->setCreatedAt(new \DateTime());
  237.             $em->persist($contact);
  238.             $em->flush();
  239.             $this->addFlash('success''Merci nous avons reçu votre demande. Nous vous répondrons dans les plus brefs délais.');
  240.         }
  241.         return $this->render('front/LandingPage/show.html.twig', array(
  242.             'page' => $landingPage,
  243.             'form' => $form->createView(),
  244.             'services' => $services
  245.         ));
  246.     }
  247.     /**
  248.      * @Route("/devis", name="app_devis_index")
  249.      */
  250.     public function showDevis(Request $requestEntityManagerInterface $emDevisFormFlow $flowEmailManager $mailer): Response
  251.     {
  252.         $devis = new Devis();
  253.         $flow->bind($devis);
  254.         $form $flow->createForm();
  255.         if ($flow->isValid($form)) {
  256.             if ($form->has('documents')) {
  257.                 foreach ($form->get('documents')->getData() as $base64Image) {
  258.                     $documentFile = new UploadedBase64File($base64Image["base64"], $base64Image["filename"]);
  259.                     $document = new DevisDocument();
  260.                     $document->setDocumentFile($documentFile);
  261.                     $devis->addDocument($document);
  262.                 }
  263.             }
  264.             $flow->saveCurrentStepData($form);
  265.             if ($flow->nextStep()) {
  266.                 // form for the next step
  267.                 $form $flow->createForm();
  268.             } else {
  269.                 // flow finished
  270.                 $devis->setCreatedAt(new \DateTime());
  271.                 $em->persist($devis);
  272.                 $em->flush();
  273.                 $flow->reset(); // remove step data from the session
  274.                 $mailer->sendDevisMailAdmin($devis);
  275.                 $mailer->sendDevisMailClient($devis);
  276.                 $this->addFlash('success''Merci nous avons reçu votre demande. Nous vous répondrons dans les plus brefs délais.');
  277.                 return $this->redirectToRoute("app_devis_index");
  278.             }
  279.         }
  280.         return $this->render('front/Devis/index.html.twig', array(
  281.             'form' => $form->createView(),
  282.             'flow' => $flow
  283.         ));
  284.     }
  285.     /**
  286.      * @Route("/espace-pro/recommandation-contact", name="app_recommandation_contact_index")
  287.      */
  288.     public function showRecommandationContact(Request $requestEntityManagerInterface $emEmailManager $mailer): Response
  289.     {
  290.         $recommendContact = new RecommendContact();
  291.         $form $this->createForm(RecommendContactFormType::class, $recommendContact);
  292.         $form->handleRequest($request);
  293.         if ($form->isSubmitted() && $form->isValid()) {
  294.             /** @var RecommendContact $recommendContact */
  295.             $recommendContact->setDate(new \DateTime());
  296.             $em->persist($recommendContact);
  297.             $em->flush();
  298.             $mailer->sendRecommendationMail($recommendContact);
  299.             $this->addFlash('success''Merci, nous avons reçu votre demande.');
  300.             return $this->redirectToRoute("app_recommandation_contact_index");
  301.         }
  302.         return $this->render('front/EspacePro/recommandation.html.twig', array(
  303.             'form' => $form->createView(),
  304.         ));
  305.     }
  306.     /**
  307.      * @Route("/espace-pro/devenir-partenaire", name="app_become_partner_index")
  308.      */
  309.     public function showBecomePartner(Request $requestEntityManagerInterface $emEmailManager $mailer): Response
  310.     {
  311.         $becomePartner = new BecomePartner;
  312.         $form $this->createForm(BecomePartnerFormType::class, $becomePartner);
  313.         $form->handleRequest($request);
  314.         if ($form->isSubmitted() && $form->isValid()) {
  315.             /** @var BecomePartner $becomePartner */
  316.             $becomePartner->setDate(new \DateTime());
  317.             $em->persist($becomePartner);
  318.             $em->flush();
  319.             $mailer->sendPartnershipMail($becomePartner);
  320.             $this->addFlash('success''Merci, nous avons reçu votre demande.');
  321.             return $this->redirectToRoute("app_recommandation_contact_index");
  322.         }
  323.         return $this->render('front/EspacePro/partner.html.twig', array(
  324.             'form' => $form->createView(),
  325.         ));
  326.     }
  327. }