src/Controller/HomeController.php line 470

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Service\Email;
  4. use Vimeo\Vimeo;
  5. use App\Entity\City;
  6. use App\Entity\Job;
  7. use App\Entity\User;
  8. use App\Form\SearchType;
  9. use App\Entity\Newsletter;
  10. use App\Form\NewsletterType;
  11. use App\Form\SearchHomeType;
  12. use App\Repository\JobRepository;
  13. use App\Repository\CityRepository;
  14. use App\Repository\UserRepository;
  15. use App\Repository\SchoolRepository;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Symfony\Component\HttpFoundation\RedirectResponse;
  20. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  21. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  22. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  23. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  24. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  25. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  26. class HomeController extends AbstractController
  27. {
  28.     /**
  29.      * @Route("/user/set/password", name="user_set_password")
  30.      */
  31.     public function userSetPassword(Request $requestUserPasswordEncoderInterface $encoder) {
  32.         $entityManager $this->getDoctrine()->getManager();
  33.         $user $this->getDoctrine()->getRepository(User::class)->findOneById(390);
  34.         $hashPassword $encoder->encodePassword($user'audeCeleritup');
  35.         $user->setPassword($hashPassword);
  36.         $entityManager->persist($user);
  37.         $entityManager->flash();
  38.         die();
  39.     }
  40.     /**
  41.      * @Route("/users/relanch", name="users_relanch")
  42.      */
  43.     public function relaunch(UserRepository $repositoryRequest $request){
  44.         $offset 30 3600 24;
  45.         $entityManager $this->getDoctrine()->getManager();
  46.         // If user subscription will be end less 30 days
  47.         // And
  48.         $users $this->getDoctrine()->getRepository(User::class)->createQueryBuilder('u')
  49.           ->where('u.subscription_end < :subscriptionEnd')
  50.           ->andWhere('u.subscriptionRelaunch < :subscriptionRelaunch')
  51.           ->andWhere('u.subscriptionCancel = :subscriptionCancel')
  52.           ->andWhere('u.subscriptionAutoEnable = :subscriptionAutoEnable')
  53.           ->setParameter('subscriptionEnd'time() + $offset)
  54.           ->setParameter('subscriptionRelaunch'time() - $offset)
  55.           ->setParameter('subscriptionCancel'false)
  56.           ->setParameter('subscriptionAutoEnable'true)
  57.           ->getQuery()
  58.           ->getResult();
  59.         foreach ($users as $user) {
  60.             if($user->getSubscriptionAutoEnable()){
  61.                 if($_ENV['APP_ENV'] == 'prod'){
  62.                     $to $user;
  63.                 } else {
  64.                     $to = [
  65.                         'Email' => 'romain@meduza-agency.com',
  66.                         'Name' => 'Duflot Romain'
  67.                     ];
  68.                 }
  69.                 // -> Send email
  70.                 $email Email::send($to"SUBSCRIPTION_RENEW""Renouvellement de votre abonnement", [
  71.                     'fullName' => $user->getFullName(),
  72.                     'date' => date('d/m/Y'$user->getSubscriptionEnd()),
  73.                     'url' => $this->generateUrl('subscribe_renew', ['token' => $user->getToken()], UrlGeneratorInterface::ABSOLUTE_URL),
  74.                     'url_cancel' => $this->generateUrl('subscription_cancel', ['id' => $user->getId(), 'token' => $user->getToken()], UrlGeneratorInterface::ABSOLUTE_URL)
  75.                 ]);
  76.             } else {
  77.                 if($_ENV['APP_ENV'] == 'prod'){
  78.                     $to $user;
  79.                 } else {
  80.                     $to = [
  81.                         'Email' => 'romain@meduza-agency.com',
  82.                         'Name' => 'Duflot Romain'
  83.                     ];
  84.                 }
  85.                 $to = [
  86.                     'Email' => 'romain@meduza-agency.com',
  87.                     'Name' => 'Duflot Romain'
  88.                 ];
  89.                 // -> Send email
  90.                 $email Email::send($to"SUBSCRIPTION_END""Votre adhésion se termine", [
  91.                     'fullName' => $user->getFullName(),
  92.                     'date' => date('d/m/Y'$user->getSubscriptionEnd()),
  93.                     'url' => $this->generateUrl('home', [], UrlGeneratorInterface::ABSOLUTE_URL)
  94.                 ]);
  95.             }
  96.             $user->setSubscriptionRelaunch(time());
  97.             $entityManager->persist($user);
  98.             $entityManager->flush();
  99.         }
  100.         die();
  101.         /*
  102.         dump($users);
  103.         die();
  104.         */
  105.     }
  106.     /**
  107.      * Affiche la homepage
  108.      *
  109.      * @Route("/", name="home")
  110.      */
  111.     public function index(Request $requestSessionInterface $sessionCityRepository $cityJobRepository $jobUserPasswordEncoderInterface $encoder)
  112.     {
  113.         /*
  114.         $client = new Vimeo("{client_id}", "386b2da3d8c07f9b5ee657689741aeb49478f194", "be6385abac50e4f20e83069067f6ef38");
  115.         $response = $client->request('/tutorial', array(), 'GET');
  116.         print_r($response);
  117.         die();
  118.         */
  119.           /*
  120.           $entityManager = $this->getDoctrine()->getManager();
  121.           $user = $this->getDoctrine()->getRepository(User::class)->findOneById(390);
  122.           $password = $encoder->encodePassword($user,'audeCeleritup');
  123.           $user->setPassword($password);
  124.           $entityManager->persist($user);
  125.           $entityManager->flush();
  126.           */
  127.         $user $this->getUser();
  128.         $jobs $job->findAll();
  129.         $time = new \Datetime();
  130.         if(isset($user)){
  131.             if($user->getSubscription() <= $time){
  132.                 $user->setActif(0);
  133.                      $manager $this->getDoctrine()->getManager();
  134.                 $manager->persist($user);
  135.                 $manager->flush();
  136.             }else{
  137.                 $user->setActif(1);
  138.                      $manager $this->getDoctrine()->getManager();
  139.                 $manager->persist($user);
  140.                 $manager->flush();
  141.             }
  142.         }
  143.         $query = [];
  144.           $form2 $this->createForm(SearchHomeType::class, $query, ['method' => 'POST']);
  145.         // ->Reads the request and extracts the data from the form
  146.         // *******************************************************
  147.         $form2->handleRequest($request);
  148.         // -> Initialize a result array
  149.         // ****************************
  150.         $result = [];
  151.         $result_nearest = [];
  152.         $random_users = [];
  153.         if ($form2->isSubmitted() && $form2->isValid()) {
  154.             // -> extract and recover the data into variable
  155.             // *********************************************
  156.             extract($form2->getData());
  157.             if($job && empty($city)){
  158.                return $this->redirectToRoute('job', ['slug' => $job->getSlug()]);
  159.             }
  160.             if($city && empty($job)){
  161.                return $this->redirectToRoute('city', ['slug' => $city->getSlug()]);
  162.             }
  163.                 if($city && $job){
  164.                     $user $this->getDoctrine()->getRepository(User::class)->findOneBy([
  165.                         'city' => $city,
  166.                         'job' => $job
  167.                     ]);
  168.                     if($user){
  169.                         return $this->redirectToRoute('fiche_index', ['city_slug' => $city->getSlug(),'user_slug' => $user->getSlug()]);
  170.                     }
  171.                 }
  172.             // -> Get param category id in query url geolocalisation
  173.             $latlng $request->query->get('latlng');
  174.             if($latlng) {
  175.                 $values explode(',',$latlng);
  176.                 $lat $values[0];
  177.                 $lng $values[1];
  178.                 $city null;
  179.                 $result $this->getDoctrine()->getRepository(User::class)->searchUsers($job$city);
  180.                 $results = [];
  181.                 foreach($result as $user) {
  182.                     $userlat $user->getCity()->getLat();
  183.                     $userlng $user->getCity()->getLng();
  184.                     $theta $userlng $lng;
  185.                     $dist sin(deg2rad($lat)) * sin(deg2rad($userlat)) +  cos(deg2rad($lat)) * cos(deg2rad($userlat)) * cos(deg2rad($theta));
  186.                     $dist acos($dist);
  187.                     $dist rad2deg($dist);
  188.                     // -> Convert to miles
  189.                     $miles $dist 60 1.1515;
  190.                     // -> Convert to km
  191.                     $distance = ($miles 1.609344);
  192.                     // -> Push each result in array
  193.                     array_push($results, [$user'distance' => $distance]);
  194.                 }
  195.                 // -> Sort results by ASC
  196.                 usort($results, function($a$b) {
  197.                     return $a['distance'] <=> $b['distance'];
  198.                 });
  199.                 $result = [];
  200.                 foreach ($results as $user) {
  201.                     array_push($result$user[0]);
  202.                 }
  203.             }else{
  204.                 $result $this->getDoctrine()->getRepository(User::class)->searchUsers($job$city);
  205.                 // shuffle($result);
  206.                 if(!$result && $city){
  207.                     $results_nearest_users $this->getDoctrine()->getRepository(User::class)->searchUsers($jobnull);
  208.                     $lat $city->getLat();
  209.                     $lng $city->getLng();
  210.                     $results = [];
  211.                     foreach($results_nearest_users as $user) {
  212.                         $userlat $user->getCity()->getLat();
  213.                         $userlng $user->getCity()->getLng();
  214.                         $theta $userlng $lng;
  215.                         $dist sin(deg2rad($lat)) * sin(deg2rad($userlat)) +  cos(deg2rad($lat)) * cos(deg2rad($userlat)) * cos(deg2rad($theta));
  216.                         $dist acos($dist);
  217.                         $dist rad2deg($dist);
  218.                         // -> Convert to miles
  219.                         $miles $dist 60 1.1515;
  220.                         // -> Convert to km
  221.                         $distance = ($miles 1.609344);
  222.                         // -> Push each result in array
  223.                         array_push($results, [$user'distance' => $distance]);
  224.                     }
  225.                     // -> Sort results by ASC
  226.                     usort($results, function($a$b) {
  227.                         return $a['distance'] <=> $b['distance'];
  228.                     });
  229.                     $result_nearest = [];
  230.                     foreach ($results as $user) {
  231.                         array_push($result_nearest$user[0]);
  232.                     }
  233.                     if(!$result_nearest){
  234.                         $result_random $this->getDoctrine()->getRepository(User::class)->searchUsers(nullnull);
  235.                         // shuffle($result_random);
  236.                         $result_random array_slice($result_random03);
  237.                         $random_users $result_random;
  238.                     }
  239.                 }else {
  240.                     $result_random $this->getDoctrine()->getRepository(User::class)->searchUsers(nullnull);
  241.                     // shuffle($result_random);
  242.                     $result_random array_slice($result_random03);
  243.                     $random_users $result_random;
  244.                 }
  245.             }
  246.             // -> If one of the fields is completed in then the search query is launched, on this field
  247.             // ****************************************************************************************
  248.             return $this->render('home/search.html.twig'compact('user','result''result_nearest''random_users'));
  249.         }
  250.         $newsletter = new Newsletter();
  251.         $formNews $this->createForm(NewsletterType::class, $newsletter);
  252.         $formNews->handleRequest($request);
  253.         if ($formNews->isSubmitted() && $formNews->isValid()) {
  254.             // Save newsletter
  255.                 $manager $this->getDoctrine()->getManager();
  256.             $manager->persist($newsletter);
  257.             $manager->flush();
  258.             // -> Flash message
  259.             $this->addFlash("success""Votre inscription à la newsletter est confirmée");
  260.             return $this->redirectToRoute('home');
  261.         }
  262.         return $this->render('home/index.html.twig', [
  263.             'name' => 'Accueil',
  264.             'form' => $form2->createView(),
  265.             // 'cities' => $cities,
  266.             'formNews' => $formNews->createView(),
  267.             'jobs' => $jobs
  268.         ]);
  269.     }
  270.      /**
  271.       * Page professionnel Marketing
  272.       * @Route("/pro", name="pro")
  273.       */
  274.      public function pro(Request $request) {
  275.          return $this->render('home/pro.html.twig');
  276.      }
  277.      /**
  278.       * Page professionnel Marketing
  279.       * @Route("/pro/subscriptions", name="pro_subscriptions")
  280.       */
  281.      public function proSubscriptions(Request $request) {
  282.          return $this->render('home/pro_subscriptions.html.twig');
  283.      }
  284.     /**
  285.      * Permet de créer une barre de recherche dans le layout
  286.      *
  287.      * @param Request $request
  288.      * @param UserRepository $user_repo
  289.      * @param CityRepository $city_repo
  290.      * @param JobRepository $job_repo
  291.      * @return void
  292.      */
  293.     public function search(Request $requestUserRepository $user_repoCityRepository $city_repoJobRepository $job_repo)
  294.     {
  295.         $query = [];
  296.         $form $this->createForm(SearchHomeType::class, $query, ['method' => 'GET']);
  297.         // ->Reads the request and extracts the data from the form
  298.         // *******************************************************
  299.         $form->handleRequest($request);
  300.         // -> Initialize a result array
  301.         // ****************************
  302.         $result = [];
  303.         if ($form->isSubmitted() && $form->isValid()) {
  304.             // -> extract and recover the data into variable
  305.             // *********************************************
  306.             extract($form->getData());
  307.             // -> If one of the fields is completed in then the search query is launched, on this field
  308.             // ****************************************************************************************
  309.             $result $this->getDoctrine()->getRepository(User::class)->searchUsers($job$city);
  310.             return $this->redirectToRoute('home', array('result' => $result));
  311.         }
  312.         return $this->render('templates/_partials/nav.html.twig', [
  313.             'name' => 'Accueil',
  314.             'form' => $form->createView(),
  315.         ]);
  316.     }
  317.     /**
  318.      * Returns a random pseudo character string of variable size
  319.      *
  320.      * @param  [int] $length [Longueur souhaiter]
  321.      * @return [string] [chaine de caracteres pseudo aleatoire]
  322.     */
  323.     public function randomString($length)
  324.     {
  325.         $string "0123456789azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN";
  326.         return substr(str_shuffle(str_repeat($string$length)), 0$length);
  327.     }
  328.     /**
  329.      * Permet de se déconnecter
  330.      *
  331.      * @Route("/logout", name="account_logout")
  332.      *
  333.      * @return Response
  334.      */
  335.     public function logout()
  336.     {
  337.     }
  338.     /**
  339.      * Permet de se connecter
  340.      *
  341.      * @Route("/login", name="login")
  342.      *
  343.      * @return Response
  344.      */
  345.     public function login(AuthenticationUtils $utils){
  346.         $error $utils->getLastAuthenticationError();
  347.         $username $utils->getLastUsername();
  348.         return $this->render('_partials/login.html.twig', [
  349.             'hasError' => $error !== null,
  350.             'username' => $username,
  351.         ]);
  352.     }
  353. }