src/Controller/FrontController.php line 164

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Actualite;
  4. use App\Entity\Contact;
  5. use App\Entity\ContactPage;
  6. use App\Entity\ExpertisePage;
  7. use App\Entity\ExpertisePrive;
  8. use App\Entity\ExpertisePublic;
  9. use App\Entity\JobOffer;
  10. use App\Entity\JobOfferCandidacy;
  11. use App\Entity\JobOfferPage;
  12. use App\Entity\LandingPage;
  13. use App\Entity\Presentation;
  14. use App\Entity\ReferencePage;
  15. use App\Entity\ReferencePrive;
  16. use App\Entity\ReferencePublic;
  17. use App\Entity\Solution;
  18. use App\Entity\SolutionPage;
  19. use App\Entity\Team;
  20. use App\Entity\ValeursEngagements;
  21. use App\Form\ContactFormType;
  22. use App\Form\JobOfferCandidacyFrontType;
  23. use App\Repository\ActualiteRepository;
  24. use App\Repository\ContactPageRepository;
  25. use App\Repository\ExpertisePageRepository;
  26. use App\Repository\ExpertisePriveRepository;
  27. use App\Repository\ExpertisePublicRepository;
  28. use App\Repository\HomepageRepository;
  29. use App\Repository\JobOfferPageRepository;
  30. use App\Repository\JobOfferRepository;
  31. use App\Repository\LandingPageRepository;
  32. use App\Repository\PresentationRepository;
  33. use App\Repository\ReferencePageRepository;
  34. use App\Repository\ReferencePublicRepository;
  35. use App\Repository\ReferencePriveRepository;
  36. use App\Repository\SolutionPageRepository;
  37. use App\Repository\SolutionRepository;
  38. use App\Repository\TeamMemberRepository;
  39. use App\Repository\TeamRepository;
  40. use App\Repository\ValeursEngagementsRepository;
  41. use Cofondateur\SocleTechniqueBundle\Sitemap\SitemapService;
  42. use Doctrine\ORM\EntityManagerInterface;
  43. use Doctrine\Persistence\ManagerRegistry;
  44. use Pagerfanta\Doctrine\ORM\QueryAdapter;
  45. use Pagerfanta\Pagerfanta;
  46. use Psr\Log\LoggerInterface;
  47. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  48. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  49. use Symfony\Component\HttpFoundation\Request;
  50. use Symfony\Component\HttpFoundation\Response;
  51. use Symfony\Component\Mailer\MailerInterface;
  52. use Symfony\Component\Mime\Address;
  53. use Symfony\Component\Routing\Annotation\Route;
  54. class FrontController extends AbstractController
  55. {
  56.     /** @var ManagerRegistry */
  57.     private $em;
  58.     public function __construct(ManagerRegistry $em)
  59.     {
  60.         $this->em $em;
  61.     }
  62.     /**
  63.      * @Route("/", name="app_homepage")
  64.      */
  65.     public function index(HomepageRepository $homepageRepositoryExpertisePriveRepository $expertisePriveRepositoryExpertisePublicRepository $expertisePublicRepositorySolutionRepository $solutionRepositoryReferencePriveRepository $referencePriveRepositoryReferencePublicRepository $referencePublicRepositoryActualiteRepository $actualiteRepository): Response
  66.     {
  67.         $page $homepageRepository->findUnique();
  68.         $expertisesPrive $expertisePriveRepository->findAll();
  69.         $expertisesPublic $expertisePublicRepository->findAll();
  70.         $solutions $solutionRepository->findAll();
  71.         $referencesPrive $referencePriveRepository->findAll();
  72.         $referencesPublic $referencePublicRepository->findAll();
  73.         $actualites $actualiteRepository->findBy(['published' => true], ['createdAt' => 'DESC'], 3);
  74.         return $this->render('front/index.html.twig', array(
  75.             'page' => $page,
  76.             'expertisesPrive' => $expertisesPrive,
  77.             'expertisesPublic' => $expertisesPublic,
  78.             'solutions' => $solutions,
  79.             'referencesPrive' => $referencesPrive,
  80.             'referencesPublic' => $referencesPublic,
  81.             'actualites' => $actualites,
  82.         ));
  83.     }
  84.     /**
  85.      * @Route("/presentation", name="app_presentation_index")
  86.      */
  87.     public function presentation(Request $requestExpertisePriveRepository $expertisePriveRepositoryExpertisePublicRepository $expertisePublicRepository): Response
  88.     {
  89.         /** @var PresentationRepository $repo */
  90.         $repo $this->em->getRepository(Presentation::class);
  91.         $page $repo->findUnique();
  92.         $expertisesPrive $expertisePriveRepository->findAll();
  93.         $expertisesPublic $expertisePublicRepository->findAll();
  94.         return $this->render('front/Presentation/index.html.twig', array(
  95.             'page' => $page,
  96.             'expertisesPrive' => $expertisesPrive,
  97.             'expertisesPublic' => $expertisesPublic,
  98.         ));
  99.     }
  100.     /**
  101.      * @Route("/valeursEngagements", name="app_valeurs_engagements_index")
  102.      */
  103.     public function valeursEngagements(Request $request): Response
  104.     {
  105.         /** @var ValeursEngagementsRepository $repo */
  106.         $repo $this->em->getRepository(ValeursEngagements::class);
  107.         $page $repo->findUnique();
  108.         return $this->render('front/ValeursEngagements/index.html.twig', array('page' => $page));
  109.     }
  110.     /**
  111.      * @Route("/equipe", name="app_team_index")
  112.      */
  113.     public function team(Request $requestTeamMemberRepository $teamMemberRepository): Response
  114.     {
  115.         /** @var TeamRepository $repo */
  116.         $repo $this->em->getRepository(Team::class);
  117.         $page $repo->findUnique();
  118.         $members $teamMemberRepository->findBy([], ["position" => "ASC"]);
  119.         return $this->render('front/Team/index.html.twig', array(
  120.             'page' => $page,
  121.             'members' => $members
  122.         ));
  123.     }
  124.     /**
  125.      * @Route("/expertises-decarbonation", name="app_expertise_page_index")
  126.      */
  127.     public function expertisePage(Request $requestExpertisePriveRepository $expertisePriveRepositoryExpertisePublicRepository $expertisePublicRepository): Response
  128.     {
  129.         /** @var ExpertisePageRepository $repo */
  130.         $repo $this->em->getRepository(ExpertisePage::class);
  131.         $page $repo->findUnique();
  132.         $expertisesPrive $expertisePriveRepository->findAll();
  133.         $expertisesPublic $expertisePublicRepository->findAll();
  134.         return $this->render('front/Expertise/list.html.twig', array(
  135.             'page' => $page,
  136.             'expertisesPrive' => $expertisesPrive,
  137.             'expertisesPublic' => $expertisesPublic,
  138.         ));
  139.     }
  140.     /**
  141.      * @Route("/expertises-decarbonation/publique/{slug}", name="app_expertise_public_show")
  142.      */
  143.     public function showExpertisePublic(Request $requestExpertisePublic $expertisePublicExpertisePublicRepository $expertisePublicRepository): Response
  144.     {
  145.         $expertisesPublic $expertisePublicRepository->findAll();
  146.         return $this->render('front/Expertise/show.html.twig', array(
  147.             'page' => $expertisePublic,
  148.             'expertises' => $expertisesPublic,
  149.             'categorie' => "public"
  150.         ));
  151.     }
  152.      /**
  153.      * @Route("/expertises-decarbonation/prive/{slug}", name="app_expertise_prive_show")
  154.      */
  155.     public function showExpertisePrive(Request $requestExpertisePrive $expertisePriveExpertisePriveRepository $expertisePriveRepository): Response
  156.     {
  157.         $expertisesPrive $expertisePriveRepository->findAll();
  158.         return $this->render('front/Expertise/show.html.twig', array(
  159.             'page' => $expertisePrive,
  160.             'expertises' => $expertisesPrive,
  161.             'categorie' => "prive",
  162.         ));
  163.     }
  164.     /**
  165.      * @Route("/solutions-decarbonation", name="app_solution_page_index")
  166.      */
  167.     public function solutionPage(Request $requestSolutionRepository $solutionRepository): Response
  168.     {
  169.         /** @var SolutionPageRepository $repo */
  170.         $repo $this->em->getRepository(SolutionPage::class);
  171.         $page $repo->findUnique();
  172.         $solutions $solutionRepository->findAll();
  173.         return $this->render('front/Solution/list.html.twig', array(
  174.             'page' => $page,
  175.             'solutions' => $solutions
  176.         ));
  177.     }
  178.     /**
  179.      * @Route("/solutions-decarbonation/detail/{slug}", name="app_solution_show")
  180.      */
  181.     public function showSolution(Request $requestSolution $solutionReferencePriveRepository $referencePriveRepositoryReferencePublicRepository $referencePublicRepositorySolutionRepository $solutionRepository): Response
  182.     {
  183.         $referencesPrive $referencePriveRepository->findAll();
  184.         $referencesPublic $referencePublicRepository->findAll();
  185.         $solutions $solutionRepository->findAll();
  186.         return $this->render('front/Solution/show.html.twig', array(
  187.             'page' => $solution,
  188.             'referencesPrive' => $referencesPrive,
  189.             'referencesPublic' => $referencesPublic,
  190.             'solutions' => $solutions,
  191.         ));
  192.     }
  193.     /**
  194.      * @Route("/actualites/detail/{slug}", name="app_actualite_show")
  195.      */
  196.     public function showActualite(Request $requestActualite $actualiteActualiteRepository $actualiteRepository): Response
  197.     {
  198.         $actualites $actualiteRepository->createQueryBuilder('a')
  199.         ->andWhere('a != :actualite')
  200.         ->andWhere('a.published = true')
  201.         ->setParameter('actualite'$actualite)
  202.         ->orderBy('a.createdAt''DESC')
  203.         ->setMaxResults(3)
  204.         ->getQuery()
  205.         ->getResult();
  206.         return $this->render('front/Actualite/show.html.twig', array(
  207.             'page' => $actualite,
  208.             'actualites' => $actualites
  209.         ));
  210.     }
  211.     /**
  212.      * @Route("/actualites/{page}", name="app_actualite_list", requirements={"page"="\d+"}, defaults={"page": 1})
  213.      */
  214.     public function listActualites(Request $request$page): Response
  215.     {
  216.         /** @var ActualiteRepository $repo */
  217.         $repo $this->em->getRepository(Actualite::class);
  218.         $actualites = new Pagerfanta(new QueryAdapter($repo->createQueryBuilder('e')->andWhere("e.published = true")->orderBy('e.createdAt''DESC')));
  219.         $actualites->setMaxPerPage(6);
  220.         $actualites->setCurrentPage($page);
  221.         return $this->render('front/Actualite/list.html.twig', array('actualites' => $actualites));
  222.     }
  223.     /**
  224.      * @Route("/offres-emploi/{slug}", name="app_job_offer_show")
  225.      */
  226.     public function showJobOffer(Request $requestJobOffer $jobOfferJobOfferRepository $jobOfferRepositoryEntityManagerInterface $emMailerInterface $mailerLoggerInterface $logger): Response
  227.     {
  228.         $jobOffers $jobOfferRepository->findBy(['published' => true], ['idPost' => 'DESC'], 2);
  229.         $candidacy = new JobOfferCandidacy();
  230.         $candidacy->setJobOffer($jobOffer);
  231.         $form $this->createForm(JobOfferCandidacyFrontType::class, $candidacy);
  232.         $form->handleRequest($request);
  233.         $sendOffer false;
  234.         if ($form->isSubmitted() && $form->isValid()) {
  235.             $candidacy->setCreatedAt(new \DateTime());
  236.             $em->persist($candidacy);
  237.             $em->flush();
  238.             $recipients $_ENV['MAIL_RECIPIENT_CANDIDACY'];
  239.             $recipients explode(','$recipients);
  240.             $email = (new TemplatedEmail())
  241.                 ->from(new Address($_ENV['MAIL_SENDER'], 'noocarb'))
  242.                 ->to(...$recipients)
  243.                 ->subject("Vous avez reçu une nouvelle candidature")
  244.                 // path of the Twig template to render
  245.                 ->htmlTemplate('mail/candidacy.html.twig')
  246.                 // pass variables (name => value) to the template
  247.                 ->context(["candidacy" => $candidacy'mail_hostname' => $_ENV['MAIL_HOSTNAME']]);
  248.             try {
  249.                 $mailer->send($email);
  250.                 $this->addFlash('successOffer''Merci pour votre candidature, notre équipe prend connaissance de votre dossier et reviendra vers vous dans les plus brefs délais.');
  251.             } catch (\Exception $e) {
  252.                 $logger->error($e->getMessage());
  253.                 $this->addFlash('errorsOffer''Une erreur est survenue, merci de rééssayer.');
  254.             }
  255.             $sendOffer true;
  256.         }
  257.         return $this->render('front/JobOffer/show.html.twig', array(
  258.             'page' => $jobOffer,
  259.             'jobOffers' => $jobOffers,
  260.             'form' => $form->createView(),
  261.             'sendOffer' => $sendOffer
  262.         ));
  263.     }
  264.     /**
  265.      * @Route("/offres-emploi", name="app_job_offer_list")
  266.      */
  267.     public function jobOfferPage(Request $requestJobOfferRepository $jobOfferRepository): Response
  268.     {
  269.         /** @var JobOfferPageRepository $repo */
  270.         $repo $this->em->getRepository(JobOfferPage::class);
  271.         $page $repo->findUnique();
  272.         $jobOffers $jobOfferRepository->findBy(['published' => true], ['id' => 'DESC']);
  273.         return $this->render('front/JobOffer/list.html.twig', array(
  274.             'page' => $page,
  275.             'jobOffers' => $jobOffers
  276.         ));
  277.     }
  278.     /**
  279.      * @Route("/references/publique/{page}", name="app_reference_public_index", requirements={"page"="\d+"}, defaults={"page": 1})
  280.      */
  281.     public function referencePublicPage(Request $request$pageReferencePublicRepository $referencePublicRepository): Response
  282.     {
  283.         /** @var ReferencePageRepository $repo */
  284.         $repo $this->em->getRepository(ReferencePage::class);
  285.         $pageRepo $repo->findUnique();
  286.         $referencesPublic = new Pagerfanta(new QueryAdapter($referencePublicRepository->createQueryBuilder('e')->orderBy('e.position''ASC')));
  287.         $referencesPublic->setMaxPerPage(6);
  288.         $referencesPublic->setCurrentPage($page);
  289.         return $this->render('front/Reference/list.html.twig', array(
  290.             'page' => $pageRepo,
  291.             'category' => "public",
  292.             'references' => $referencesPublic,
  293.         ));
  294.     }
  295.     /**
  296.      * @Route("/references/prive/{page}", name="app_reference_prive_index", requirements={"page"="\d+"}, defaults={"page": 1})
  297.      */
  298.     public function referencePrivePage(Request $request$pageReferencePriveRepository $referencePriveRepository): Response
  299.     {
  300.         /** @var ReferencePageRepository $repo */
  301.         $repo $this->em->getRepository(ReferencePage::class);
  302.         $pageRepo $repo->findUnique();
  303.         $referencesPrive = new Pagerfanta(new QueryAdapter($referencePriveRepository->createQueryBuilder('e')->orderBy('e.position''ASC')));
  304.         $referencesPrive->setMaxPerPage(6);
  305.         $referencesPrive->setCurrentPage($page);
  306.         return $this->render('front/Reference/list.html.twig', array(
  307.             'page' => $pageRepo,
  308.             'category' => "prive",
  309.             'references' => $referencesPrive,
  310.         ));
  311.     }
  312.     /**
  313.      * @Route("/references/publique/{slug}", name="app_reference_public_show")
  314.      */
  315.     public function showReferencePublic(Request $requestReferencePublic $referencePublicReferencePublicRepository $referencePublicRepository): Response
  316.     {
  317.         $referencesPublic $referencePublicRepository->findBy([], ['id' => 'DESC'], 3);
  318.         return $this->render('front/Reference/show.html.twig', array(
  319.             'page' => $referencePublic,
  320.             'references' => $referencesPublic,
  321.             'categorie' => 'public',
  322.         ));
  323.     }
  324.     /**
  325.      * @Route("/references/prive/{slug}", name="app_reference_prive_show")
  326.      */
  327.     public function showReferencePrive(Request $requestReferencePrive $referencePriveReferencePriveRepository $referencePriveRepository): Response
  328.     {
  329.         $referencesPrive $referencePriveRepository->findBy([], ['id' => 'DESC'], 3);
  330.         return $this->render('front/Reference/show.html.twig', array(
  331.             'page' => $referencePrive,
  332.             'references' => $referencesPrive,
  333.             'categorie' => 'prive',
  334.         ));
  335.     }
  336.     /**
  337.      * @Route("/contact", name="app_contact_page_index")
  338.      */
  339.     public function contactPage(Request $requestEntityManagerInterface $emMailerInterface $mailerLoggerInterface $logger): Response
  340.     {
  341.         /** @var ContactPageRepository $repo */
  342.         $repo $this->em->getRepository(ContactPage::class);
  343.         $page $repo->findUnique();
  344.         $contact = new Contact;
  345.         $form $this->createForm(ContactFormType::class, $contact);
  346.         // dd($form->handleRequest($request));
  347.         $form->handleRequest($request);
  348.         if ($form->isSubmitted() && $form->isValid()) {
  349.             /** @var Contact $contact */
  350.             $contact->setDate(new \DateTime());
  351.             $em->persist($contact);
  352.             $em->flush();
  353.             $recipients $_ENV['MAIL_RECIPIENT'];
  354.             $recipients explode(','$recipients);
  355.             $email = (new TemplatedEmail())
  356.                 ->from(new Address($_ENV['MAIL_SENDER'], 'noocarb'))
  357.                 ->to(...$recipients)
  358.                 ->subject("Vous avez reçu une nouvelle demande de contact")
  359.                 // path of the Twig template to render
  360.                 ->htmlTemplate('mail/contact.html.twig')
  361.                 // pass variables (name => value) to the template
  362.                 ->context(["contact" => $contact'mail_hostname' => $_ENV['MAIL_HOSTNAME']]);
  363.             try {
  364.                 $mailer->send($email);
  365.                 $this->addFlash('successContact''Merci nous avons reçu votre demande. Nous vous répondrons dans les plus brefs délais.');
  366.             } catch (\Exception $e) {
  367.                 $logger->error($e->getMessage());
  368.                 $this->addFlash('errorsContact''Une erreur est survenue, merci de rééssayer.');
  369.             }
  370.         }
  371.         return $this->render('front/ContactPage/index.html.twig', array(
  372.             'page' => $page,
  373.             'form' => $form->createView()
  374.         ));
  375.     }
  376.     /**
  377.      * @Route("/newsletter", name="app_newsletter")
  378.      */
  379.     public function addToNewsletter(Request $request)
  380.     {
  381.         $email json_decode($request->request->get('email'), true);
  382.         $this->addFlash('sendNewsletter''send.');
  383.         if (empty($email)) {
  384.             return $this->redirectToRoute('app_homepage');
  385.         }
  386.         $mailchimp = new \MailchimpMarketing\ApiClient();
  387.         $mailchimp->setConfig([
  388.             'apiKey' => '35dba78e6d7db3328149aacfa1dfa53e-us10',
  389.             'server' => 'us10'
  390.         ]);
  391.         $listMembers $mailchimp->lists->getListMembersInfo("feda93d28a")->members;
  392.         foreach ($listMembers as $member) {
  393.             if ($member->email_address == $email) {
  394.                 $this->addFlash('successNewsletter'"Votre email est déjà inscrit.");
  395.                 return $this->redirectToRoute('app_homepage');
  396.             }
  397.         }
  398.         try {
  399.             $mailchimp->lists->addListMember("feda93d28a", [
  400.                 "email_address" => $email,
  401.                 "status" => "subscribed",
  402.             ]);
  403.             $this->addFlash('successNewsletter''L\'email ' $email " a bien été ajouté à notre newsletter.");
  404.             return $this->redirectToRoute('app_homepage');
  405.         } catch (\Exception $e) {
  406.             $this->addFlash('errorsNewsletter'"Une erreur s'est produite, merci de rééssayer.");
  407.             return $this->redirectToRoute('app_homepage');
  408.         }
  409.         return $this->redirectToRoute('app_homepage');
  410.     }
  411.     /**
  412.      * @Route("/sitemap.{_format}", name="app_sitemap_front", format="html")
  413.      */
  414.     public function sitemap(Request $requestSitemapService $sitemapService): Response
  415.     {
  416.         $format $request->getRequestFormat();
  417.         $links $sitemapService->generateSitemap();
  418.         $template 'front/';
  419.         if ($format === 'xml') {
  420.             $template .= 'sitemap/index.xml.twig';
  421.         } else {
  422.             $template .= 'sitemap/index.html.twig';
  423.         }
  424.         return $this->render($template, [
  425.             'sitemapLinkGroups' => $links
  426.         ]);
  427.     }
  428.     /**
  429.      * @Route("/mentions-legales", name="app_legal_terms")
  430.      */
  431.     public function legalTerms(): Response
  432.     {
  433.         return $this->render('front/legalTerms.html.twig');
  434.     }
  435.     /**
  436.      * @Route("/confidentialite", name="app_confidentiality")
  437.      */
  438.     public function confidentiality(): Response
  439.     {
  440.         return $this->render('front/confidentiality.html.twig',array(
  441.         'siteName' => $_ENV['SITENAME'],
  442.         'hostname' => $_ENV['HOSTNAME']
  443.     ));
  444.     }
  445.     /**
  446.      * @Route("/page/{slug}", name="app_landing_page_show")
  447.      */
  448.     public function showLandingPage(Request $request, ?LandingPage $landingPage=null): Response
  449.     {
  450.         if ($landingPage === null) {
  451.             throw $this->createNotFoundException();
  452.         }
  453.         return $this->render('front/LandingPage/show.html.twig', array('page' => $landingPage));
  454.     }
  455. //
  456. //    /**
  457. //     * @Route("/landingPages/{page}", name="app_landing_page_list", requirements={"page"="\d+"}, defaults={"page": 1})
  458. //     */
  459. //    public function listLandingPages(Request $request, $page): Response
  460. //    {
  461. //        /** @var LandingPageRepository $repo */
  462. //        $repo = $this->em->getRepository(LandingPage::class);
  463. //        $landingPages = new Pagerfanta(new QueryAdapter($repo->createQueryBuilder('e')));
  464. //        $landingPages->setMaxPerPage(6);
  465. //        $landingPages->setCurrentPage($page);
  466. //        return $this->render('front/LandingPage/list.html.twig', array('landingPages' => $landingPages));
  467. //    }
  468. }