src/Controller/FrontController.php line 498

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', [
  222.             'actualites' => $actualites,
  223.             'noindex' => $page 1,
  224.         ]);
  225.     }
  226.     /**
  227.      * @Route("/offres-emploi/{slug}", name="app_job_offer_show")
  228.      */
  229.     public function showJobOffer(Request $requestJobOffer $jobOfferJobOfferRepository $jobOfferRepositoryEntityManagerInterface $emMailerInterface $mailerLoggerInterface $logger): Response
  230.     {
  231.         $jobOffers $jobOfferRepository->findBy(['published' => true], ['idPost' => 'DESC'], 2);
  232.         $candidacy = new JobOfferCandidacy();
  233.         $candidacy->setJobOffer($jobOffer);
  234.         $form $this->createForm(JobOfferCandidacyFrontType::class, $candidacy);
  235.         $form->handleRequest($request);
  236.         $sendOffer false;
  237.         if ($form->isSubmitted() && $form->isValid()) {
  238.             $candidacy->setCreatedAt(new \DateTime());
  239.             $em->persist($candidacy);
  240.             $em->flush();
  241.             $recipients $_ENV['MAIL_RECIPIENT_CANDIDACY'];
  242.             $recipients explode(','$recipients);
  243.             $email = (new TemplatedEmail())
  244.                 ->from(new Address($_ENV['MAIL_SENDER'], 'noocarb'))
  245.                 ->to(...$recipients)
  246.                 ->subject("Vous avez reçu une nouvelle candidature")
  247.                 // path of the Twig template to render
  248.                 ->htmlTemplate('mail/candidacy.html.twig')
  249.                 // pass variables (name => value) to the template
  250.                 ->context(["candidacy" => $candidacy'mail_hostname' => $_ENV['MAIL_HOSTNAME']]);
  251.             try {
  252.                 $mailer->send($email);
  253.                 $this->addFlash('successOffer''Merci pour votre candidature, notre équipe prend connaissance de votre dossier et reviendra vers vous dans les plus brefs délais.');
  254.             } catch (\Exception $e) {
  255.                 $logger->error($e->getMessage());
  256.                 $this->addFlash('errorsOffer''Une erreur est survenue, merci de rééssayer.');
  257.             }
  258.             $sendOffer true;
  259.         }
  260.         return $this->render('front/JobOffer/show.html.twig', array(
  261.             'page' => $jobOffer,
  262.             'jobOffers' => $jobOffers,
  263.             'form' => $form->createView(),
  264.             'sendOffer' => $sendOffer
  265.         ));
  266.     }
  267.     /**
  268.      * @Route("/offres-emploi", name="app_job_offer_list")
  269.      */
  270.     public function jobOfferPage(Request $requestJobOfferRepository $jobOfferRepository): Response
  271.     {
  272.         /** @var JobOfferPageRepository $repo */
  273.         $repo $this->em->getRepository(JobOfferPage::class);
  274.         $page $repo->findUnique();
  275.         $jobOffers $jobOfferRepository->findBy(['published' => true], ['id' => 'DESC']);
  276.         return $this->render('front/JobOffer/list.html.twig', array(
  277.             'page' => $page,
  278.             'jobOffers' => $jobOffers
  279.         ));
  280.     }
  281.     /**
  282.      * @Route("/references/publique/{page}", name="app_reference_public_index", requirements={"page"="\d+"}, defaults={"page": 1})
  283.      */
  284.     public function referencePublicPage(Request $request$pageReferencePublicRepository $referencePublicRepository): Response
  285.     {
  286.         /** @var ReferencePageRepository $repo */
  287.         $repo $this->em->getRepository(ReferencePage::class);
  288.         $pageRepo $repo->findUnique();
  289.         $referencesPublic = new Pagerfanta(new QueryAdapter($referencePublicRepository->createQueryBuilder('e')->orderBy('e.position''ASC')));
  290.         $referencesPublic->setMaxPerPage(6);
  291.         $referencesPublic->setCurrentPage($page);
  292.         return $this->render('front/Reference/list.html.twig', array(
  293.             'page' => $pageRepo,
  294.             'category' => "public",
  295.             'references' => $referencesPublic,
  296.         ));
  297.     }
  298.     /**
  299.      * @Route("/references/prive/{page}", name="app_reference_prive_index", requirements={"page"="\d+"}, defaults={"page": 1})
  300.      */
  301.     public function referencePrivePage(Request $request$pageReferencePriveRepository $referencePriveRepository): Response
  302.     {
  303.         /** @var ReferencePageRepository $repo */
  304.         $repo $this->em->getRepository(ReferencePage::class);
  305.         $pageRepo $repo->findUnique();
  306.         $referencesPrive = new Pagerfanta(new QueryAdapter($referencePriveRepository->createQueryBuilder('e')->orderBy('e.position''ASC')));
  307.         $referencesPrive->setMaxPerPage(6);
  308.         $referencesPrive->setCurrentPage($page);
  309.         return $this->render('front/Reference/list.html.twig', array(
  310.             'page' => $pageRepo,
  311.             'category' => "prive",
  312.             'references' => $referencesPrive,
  313.         ));
  314.     }
  315.     /**
  316.      * @Route("/references/publique/{slug}", name="app_reference_public_show")
  317.      */
  318.     public function showReferencePublic(Request $requestReferencePublic $referencePublicReferencePublicRepository $referencePublicRepository): Response
  319.     {
  320.         $referencesPublic $referencePublicRepository->findBy([], ['id' => 'DESC'], 3);
  321.         return $this->render('front/Reference/show.html.twig', array(
  322.             'page' => $referencePublic,
  323.             'references' => $referencesPublic,
  324.             'categorie' => 'public',
  325.         ));
  326.     }
  327.     /**
  328.      * @Route("/references/prive/{slug}", name="app_reference_prive_show")
  329.      */
  330.     public function showReferencePrive(Request $requestReferencePrive $referencePriveReferencePriveRepository $referencePriveRepository): Response
  331.     {
  332.         $referencesPrive $referencePriveRepository->findBy([], ['id' => 'DESC'], 3);
  333.         return $this->render('front/Reference/show.html.twig', array(
  334.             'page' => $referencePrive,
  335.             'references' => $referencesPrive,
  336.             'categorie' => 'prive',
  337.         ));
  338.     }
  339.     /**
  340.      * @Route("/contact", name="app_contact_page_index")
  341.      */
  342.     public function contactPage(Request $requestEntityManagerInterface $emMailerInterface $mailerLoggerInterface $logger): Response
  343.     {
  344.         /** @var ContactPageRepository $repo */
  345.         $repo $this->em->getRepository(ContactPage::class);
  346.         $page $repo->findUnique();
  347.         $contact = new Contact;
  348.         $form $this->createForm(ContactFormType::class, $contact);
  349.         // dd($form->handleRequest($request));
  350.         $form->handleRequest($request);
  351.         if ($form->isSubmitted() && $form->isValid()) {
  352.             /** @var Contact $contact */
  353.             $contact->setDate(new \DateTime());
  354.             $em->persist($contact);
  355.             $em->flush();
  356.             $recipients $_ENV['MAIL_RECIPIENT'];
  357.             $recipients explode(','$recipients);
  358.             $email = (new TemplatedEmail())
  359.                 ->from(new Address($_ENV['MAIL_SENDER'], 'noocarb'))
  360.                 ->to(...$recipients)
  361.                 ->subject("Vous avez reçu une nouvelle demande de contact")
  362.                 // path of the Twig template to render
  363.                 ->htmlTemplate('mail/contact.html.twig')
  364.                 // pass variables (name => value) to the template
  365.                 ->context(["contact" => $contact'mail_hostname' => $_ENV['MAIL_HOSTNAME']]);
  366.             try {
  367.                 $mailer->send($email);
  368.                 $this->addFlash('successContact''Merci nous avons reçu votre demande. Nous vous répondrons dans les plus brefs délais.');
  369.             } catch (\Exception $e) {
  370.                 $logger->error($e->getMessage());
  371.                 $this->addFlash('errorsContact''Une erreur est survenue, merci de rééssayer.');
  372.             }
  373.         }
  374.         return $this->render('front/ContactPage/index.html.twig', array(
  375.             'page' => $page,
  376.             'form' => $form->createView()
  377.         ));
  378.     }
  379.     /**
  380.      * @Route("/newsletter", name="app_newsletter")
  381.      */
  382.     public function addToNewsletter(Request $request)
  383.     {
  384.         $email json_decode($request->request->get('email'), true);
  385.         $this->addFlash('sendNewsletter''send.');
  386.         if (empty($email)) {
  387.             return $this->redirectToRoute('app_homepage');
  388.         }
  389.         $mailchimp = new \MailchimpMarketing\ApiClient();
  390.         $mailchimp->setConfig([
  391.             'apiKey' => '35dba78e6d7db3328149aacfa1dfa53e-us10',
  392.             'server' => 'us10'
  393.         ]);
  394.         $listMembers $mailchimp->lists->getListMembersInfo("feda93d28a")->members;
  395.         foreach ($listMembers as $member) {
  396.             if ($member->email_address == $email) {
  397.                 $this->addFlash('successNewsletter'"Votre email est déjà inscrit.");
  398.                 return $this->redirectToRoute('app_homepage');
  399.             }
  400.         }
  401.         try {
  402.             $mailchimp->lists->addListMember("feda93d28a", [
  403.                 "email_address" => $email,
  404.                 "status" => "subscribed",
  405.             ]);
  406.             $this->addFlash('successNewsletter''L\'email ' $email " a bien été ajouté à notre newsletter.");
  407.             return $this->redirectToRoute('app_homepage');
  408.         } catch (\Exception $e) {
  409.             $this->addFlash('errorsNewsletter'"Une erreur s'est produite, merci de rééssayer.");
  410.             return $this->redirectToRoute('app_homepage');
  411.         }
  412.         return $this->redirectToRoute('app_homepage');
  413.     }
  414.     /**
  415.      * @Route("/sitemap.{_format}", name="app_sitemap_front", format="html")
  416.      */
  417.     public function sitemap(Request $requestSitemapService $sitemapService): Response
  418.     {
  419.         $format $request->getRequestFormat();
  420.         $links $sitemapService->generateSitemap();
  421.         $template 'front/';
  422.         if ($format === 'xml') {
  423.             $template .= 'sitemap/index.xml.twig';
  424.         } else {
  425.             $template .= 'sitemap/index.html.twig';
  426.         }
  427.         return $this->render($template, [
  428.             'sitemapLinkGroups' => $links
  429.         ]);
  430.     }
  431.     /**
  432.      * @Route("/mentions-legales", name="app_legal_terms")
  433.      */
  434.     public function legalTerms(): Response
  435.     {
  436.         return $this->render('front/legalTerms.html.twig');
  437.     }
  438.     /**
  439.      * @Route("/confidentialite", name="app_confidentiality")
  440.      */
  441.     public function confidentiality(): Response
  442.     {
  443.         return $this->render('front/confidentiality.html.twig',array(
  444.         'siteName' => $_ENV['SITENAME'],
  445.         'hostname' => $_ENV['HOSTNAME']
  446.     ));
  447.     }
  448.     /**
  449.      * @Route("/page/{slug}", name="app_landing_page_show")
  450.      */
  451.     public function showLandingPage(Request $request, ?LandingPage $landingPage=null): Response
  452.     {
  453.         if ($landingPage === null) {
  454.             throw $this->createNotFoundException();
  455.         }
  456.         return $this->render('front/LandingPage/show.html.twig', array('page' => $landingPage));
  457.     }
  458. //
  459. //    /**
  460. //     * @Route("/landingPages/{page}", name="app_landing_page_list", requirements={"page"="\d+"}, defaults={"page": 1})
  461. //     */
  462. //    public function listLandingPages(Request $request, $page): Response
  463. //    {
  464. //        /** @var LandingPageRepository $repo */
  465. //        $repo = $this->em->getRepository(LandingPage::class);
  466. //        $landingPages = new Pagerfanta(new QueryAdapter($repo->createQueryBuilder('e')));
  467. //        $landingPages->setMaxPerPage(6);
  468. //        $landingPages->setCurrentPage($page);
  469. //        return $this->render('front/LandingPage/list.html.twig', array('landingPages' => $landingPages));
  470. //    }
  471. }