src/Controller/Front/DefaultController.php line 56

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: michael
  5.  * Date: 04/02/2019
  6.  * Time: 15:39
  7.  */
  8. namespace App\Controller\Front;
  9. use App\Entity\Contact;
  10. use App\Entity\HearingBrand;
  11. use App\Entity\NewsLetter;
  12. use App\Form\NewsLetterType;
  13. use App\Form\ContactType;
  14. use App\Repository\FreelancerRepository;
  15. use App\Repository\NewsLetterRepository;
  16. use App\Repository\BlogPostRepository;
  17. use App\Repository\HearingBrandRepository;
  18. use App\Service\GmapsService;
  19. use App\Service\MediaoptinService;
  20. use App\Utils\Formatter;
  21. use Doctrine\ORM\EntityManagerInterface;
  22. use Exception;
  23. use Monolog\Logger;
  24. use Psr\Log\LoggerInterface;
  25. use Symfony\Component\HttpFoundation\Response;
  26. use Symfony\Component\Routing\Annotation\Route;
  27. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  28. use Symfony\Component\HttpFoundation\JsonResponse;
  29. use Symfony\Component\HttpFoundation\Request;
  30. class DefaultController extends AbstractController
  31. {
  32.     private const CUSTOMER_SERVICE_NUMBERS = [
  33.         "01" => "0184240000",
  34.         "02" => "0252800080",
  35.         "03" => "0375020001",
  36.         "04" => "0465020220",
  37.         "05" => "0533030003"
  38.     ];
  39.     /**
  40.      * @Route("/", name="home", methods={"GET", "POST"})
  41.      * @param Request $request
  42.      * @param EntityManagerInterface $em
  43.      * @param BlogPostRepository $blogPostRepository
  44.      * @param GmapsService $gmapsService
  45.      * @param FreelancerRepository $freelancerRepository
  46.      * @param HearingBrandRepository $hearingBrandRepository
  47.      * @param Logger $logger
  48.      * @return Response
  49.      */
  50.     public function index(
  51.         Request $request,
  52.         EntityManagerInterface $em,
  53.         BlogPostRepository $blogPostRepository,
  54.         GmapsService $gmapsService,
  55.         FreelancerRepository $freelancerRepository,
  56.         HearingBrandRepository $hearingBrandRepository,
  57.         LoggerInterface $logger
  58.     ): Response
  59.     {
  60.         // get lasted the 3 lasted articles
  61.         $blogPosts $blogPostRepository->getLastedArticle();
  62.         $areaCode null;
  63.         $contact = new Contact();
  64.         $form $this->createForm(ContactType::class, $contact);
  65.         $newsLetter = new NewsLetter();
  66.         $newsLetterForm $this->createForm(NewsLetterType::class, $newsLetter);
  67.         $form->handleRequest($request);
  68.         $newsLetterForm->handleRequest($request);
  69.         if ($form->isSubmitted() && $form->isValid()) {
  70.             $contact $form->getData();
  71.             $contact->setRequest('other');
  72.             $em->persist($contact);
  73.             $em->flush();
  74.             return $this->render('front_v4/mca/homepage/homepage.html.twig', [
  75.                 'hearingBrand' => $em->getRepository(HearingBrand::class)->findBy(['presentable' => true]),
  76.                 'freelancers' => $freelancerRepository->getOnlyWithLogo(),
  77.                 'form' => $form->createView(),
  78.                 'blogPosts' => $blogPosts,
  79.                 'status' => 'success',
  80.                 'newsLetterForm' => $newsLetterForm->createView(),
  81.             ]);
  82.         }
  83.         $ip $request->getClientIp();
  84.         // default area code
  85.         $phoneNumberCallMca self::CUSTOMER_SERVICE_NUMBERS["01"];
  86.         if($ip !== null) {
  87.             try {
  88.                 $areaCode $gmapsService->getAreaCodeFromIp($ip);
  89.             } catch (Exception $e) {
  90.                 $logger->warning('Error on getAreaCodeFromIp() : ' $e);
  91.             }
  92.         }
  93.         if($areaCode !== null) {
  94.             // choose phone number displayed with area code
  95.             $phoneNumberCallMca self::CUSTOMER_SERVICE_NUMBERS[$areaCode];
  96.         }
  97.         return $this->render('front_v4/mca/homepage/homepage.html.twig', [
  98.             'hearingBrands' => $hearingBrandRepository->findAll(),
  99.             'freelancers' => $freelancerRepository->getOnlyWithLogo(),
  100.             'blogPosts' => $blogPosts,
  101.             'phoneNumberCallMca' => $phoneNumberCallMca,
  102.             'form' => $form->createView(),
  103.             'newsLetterForm' => $newsLetterForm->createView(),
  104.         ]);
  105.     }
  106.     /**
  107.     * Ajax's method for newsletter subscription
  108.     *
  109.     * @Route("/newsletterRegistration", options={"expose"=true}, name="newsletter_registration")
  110.     */
  111.     public function ajaxNewsletterSubscription(Request $reqNewsLetterRepository $repository): JsonResponse
  112.     {
  113.         /**
  114.          * 1- Check data format (is it an email address?)
  115.          * 2- if not, return error
  116.          * 3- write in db
  117.          * 4- if already subscribed, return error
  118.          * 5- Return success
  119.          */
  120.         $email $req->request->get('email');
  121.         // reg exp from http://41mag.fr/regexp-php-les-8-expressions-regulieres-les-plus-utilisees.html
  122.         if (!preg_match" /^[^\W][a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\@[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\.[a-zA-Z]{2,4}$/ " $email)){
  123.                 return $this->json([
  124.                         'code' => 201,
  125.                         'msg' => 'Mail is not valid'
  126.                         ], 201);
  127.         }
  128.         // Si l'adresse est déja dans la bdd
  129.         if($repository->findOneBy(['email' => $email])){
  130.                     return $this->json([
  131.                             'code' => 202,
  132.                             'msg' => 'email already registered'
  133.                             ], 200);
  134.         }
  135.         $em $this->getDoctrine()->getManager();
  136.         $registartion = new NewsLetter();
  137.         $registartion->setEmail($email)
  138.             ->setRegisteredAt(new \DateTime());
  139.         $em->persist($registartion);
  140.         $em->flush();
  141.         return $this->json([
  142.                     'code' => 200,
  143.                     'msg' => 'Inscription enregistrée pour ' $email
  144.                     ], 200);
  145.     }
  146.     /**
  147.      * @Route("send-callback", name="send_callback_request", options={"expose"=true})
  148.      * @param MediaoptinService $mediaoptinService
  149.      * @param Request $request
  150.      * @return JsonResponse
  151.      * @throws Exception
  152.      */
  153.     public function sendCallbackRequestAction(MediaoptinService $mediaoptinServiceRequest $request): JsonResponse
  154.     {
  155.         // Check AJAX
  156.         if($request->isXmlHttpRequest()) {
  157.             $callbackRequestData = [];
  158.             $callbackRequestData['firstname'] = $request->request->get('firstname');
  159.             $callbackRequestData['lastname'] = $request->request->get('lastname');
  160.             $callbackRequestData['phoneNumber'] = Formatter::phoneNumberFrenchFormat($request->request->get('phoneNumber'));
  161.             // sanitize COOKIE values
  162.             $callbackRequestData['source'] = preg_replace('/[^-a-zA-Z0-9_]/''',  $request->cookies->get('utm_source'));
  163.             $callbackRequestData['content'] = preg_replace('/[^-a-zA-Z0-9_]/'''$request->cookies->get('utm_content'));
  164.             $callbackRequestData['url'] = preg_replace('/[^-a-zA-Z0-9_]/'''$request->getPathInfo());
  165.             $result $mediaoptinService->sendCallBackRequestToCampaign($callbackRequestData);
  166.             if($result === true) {
  167.                 return new JsonResponse(null200);
  168.             } else {
  169.                 return new JsonResponse(null500);
  170.             }
  171.         }
  172.         return new JsonResponse(null500);
  173.     }
  174. }