src/Controller/FrontController.php line 135

Open in your IDE?
  1. <?php
  2. // src/Controller/FrontController.php
  3. namespace App\Controller;
  4. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  5. use Symfony\Component\Serializer\Encoder\XmlEncoder;
  6. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  7. use Symfony\Component\Serializer\Serializer;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use App\Entity\EStateAd;
  11. use App\Entity\AgencyUser;
  12. use App\Entity\Agency;
  13. use App\Entity\Cities;
  14. use App\Entity\SavedSearch;
  15. use App\Form\SearchAdsType;
  16. use App\Form\FilterAdsType;
  17. use App\Form\SignupFormType;
  18. use App\Form\ConfirmPasswordType;
  19. use App\Form\EStateAdContactFormType;
  20. use App\Form\SignupContactType;
  21. use App\Form\RentalSubscribeType;
  22. use App\Form\ResetPasswordType;
  23. use App\Client\StripeClient;
  24. use Symfony\Component\HttpFoundation\Request;
  25. use Knp\Component\Pager\PaginatorInterface;
  26. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  27. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  28. use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
  29. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  30. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  31. use Google\Service;
  32. use Symfony\Component\HttpFoundation\JsonResponse;
  33. use Symfony\Component\Validator\Constraints\NotBlank;
  34. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  35. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  36. use Symfony\Component\Security\Core\Security;
  37. use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;
  38. use App\Security\LoginFormAuthenticator;
  39. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  40. use Symfony\Component\Form\Extension\Core\Type\TextType;
  41. use Symfony\Component\HttpFoundation\Session\Session;
  42. use Cocur\Slugify\Slugify;
  43. class FrontController extends AbstractController
  44. {
  45.     public function __construct(Security $securitySessionInterface $session)
  46.     {
  47.         $this->encoders = [new XmlEncoder(), new JsonEncoder()];
  48.         $this->normalizers = [new ObjectNormalizer()];
  49.         $this->serializer = new Serializer($this->normalizers$this->encoders);
  50.         $this->session $session;
  51.         $this->security $security;
  52.     }
  53.     public function getReport($analytics) {
  54.       // Replace with your view ID, for example XXXX.
  55.       $VIEW_ID "208710174";
  56.       // Create the DateRange object.
  57.       $dateRange = new \Google_Service_AnalyticsReporting_DateRange();
  58.       $dateRange->setStartDate("7daysAgo");
  59.       $dateRange->setEndDate("today");
  60.       // Create the Metrics object.
  61.       $sessions = new \Google_Service_AnalyticsReporting_Metric();
  62.       $sessions->setExpression("ga:pageviews");
  63.       $sessions->setAlias("pageviews");
  64.       // Create the ReportRequest object.
  65.       $request = new \Google_Service_AnalyticsReporting_ReportRequest();
  66.       $request->setViewId($VIEW_ID);
  67.       $request->setDateRanges($dateRange);
  68.       $request->setMetrics(array($sessions));
  69.       $body = new \Google_Service_AnalyticsReporting_GetReportsRequest();
  70.       $body->setReportRequests( array( $request) );
  71.       return $analytics->reports->batchGet$body );
  72.     }
  73.     /**
  74.      * Parses and prints the Analytics Reporting API V4 response.
  75.      *
  76.      * @param An Analytics Reporting API V4 response.
  77.      */
  78.     public function printResults($reports) {
  79.       for ( $reportIndex 0$reportIndex count$reports ); $reportIndex++ ) {
  80.         $report $reports$reportIndex ];
  81.         $header $report->getColumnHeader();
  82.         $dimensionHeaders $header->getDimensions();
  83.         $metricHeaders $header->getMetricHeader()->getMetricHeaderEntries();
  84.         $rows $report->getData()->getRows();
  85.         for ( $rowIndex 0$rowIndex count($rows); $rowIndex++) {
  86.           $row $rows$rowIndex ];
  87.           $dimensions $row->getDimensions();
  88.           $metrics $row->getMetrics();
  89.           /*for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) {
  90.             print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n");
  91.           }*/
  92.           for ($j 0$j count($metrics); $j++) {
  93.             $values $metrics[$j]->getValues();
  94.             for ($k 0$k count($values); $k++) {
  95.               $entry $metricHeaders[$k];
  96.               print($entry->getName() . ": " $values[$k] . "\n");
  97.             }
  98.           }
  99.         }
  100.       }
  101.     }
  102.     
  103.     public function oauthcallback(Request $request)
  104.     {
  105.         $client = new \Google_Client();
  106.         $client->setAuthConfig(__DIR__ '/../../config/preums_ga.json');
  107.         $client->setRedirectUri('https://' $_SERVER['HTTP_HOST'] . '/oauthcallback');
  108.         $client->addScope(\Google_Service_Analytics::ANALYTICS_READONLY);
  109.         // Handle authorization flow from the server.
  110.         if (! isset($_GET['code'])) {
  111.             $auth_url $client->createAuthUrl();
  112.             return $this->redirect(filter_var($auth_urlFILTER_SANITIZE_URL));
  113.         } else {
  114.             $client->authenticate($_GET['code']);
  115.             $_SESSION['access_token'] = $client->getAccessToken();
  116.             $redirect_uri 'https://' $_SERVER['HTTP_HOST'] . '/';
  117.             return $this->redirect(filter_var($redirect_uriFILTER_SANITIZE_URL));
  118.         }
  119.     }
  120.     
  121.     public function index(Request $request$agencyuser null, \Swift_Mailer $mailer)
  122.     {
  123.         $user $this->getUser();
  124.         $entityManager $this->getDoctrine()->getManager();
  125.         
  126.         $contact_form $this->createForm(EStateAdContactFormType::class, null, ['userInfo' => $this->getUser()]);
  127.         if($user !== null){
  128.             $saved_search $entityManager->getRepository(SavedSearch::class)->findOneByUserId($user->getId());
  129.             if($saved_search == null){
  130.                 $search_form $this->createForm(SearchAdsType::class, null, ['search_field' => $this->session->get('search_field')]);
  131.             } else {
  132.                 $form_string json_decode($saved_search->getFormString());
  133.                 $search_form $this->createForm(SearchAdsType::class, null, [
  134.                     'search_field' => isset($form_string->filter_ads->filter_field) ? $form_string->filter_ads->filter_field null,
  135.                     'nb_rooms' => isset($form_string->filter_ads->nb_rooms) ? $form_string->filter_ads->nb_rooms null,
  136.                     'adtype' => isset($form_string->filter_ads->adtype) ? $form_string->filter_ads->adtype null,
  137.                     'projettype' => isset($form_string->filter_ads->projettype) ? $form_string->filter_ads->projettype null,
  138.                     'nb_bedrooms' => isset($form_string->filter_ads->nb_bedrooms) ? $form_string->filter_ads->nb_bedrooms null,
  139.                 ]);
  140.                 $options['min_surface'] = (isset($form_string->filter_ads->min_surface)) ? $form_string->filter_ads->min_surface null;
  141.                 $options['min_price'] = (isset($form_string->filter_ads->min_price)) ? $form_string->filter_ads->min_price 0;
  142.                 $options['max_price'] = (isset($form_string->filter_ads->max_price)) ? $form_string->filter_ads->max_price 100000;
  143.             }    
  144.         } else {
  145.             $search_form $this->createForm(SearchAdsType::class, null, ['search_field' => $this->session->get('search_field')]);
  146.         }
  147.         
  148.         $contact_form->handleRequest($request);
  149.         if ($contact_form->isSubmitted() && $contact_form->isValid()) {
  150.             $data $contact_form->getData();
  151.             $estatead_repository $this->getDoctrine()->getRepository(EStateAd::class);
  152.             $estatead $estatead_repository->findOneByReference($data['reference']);
  153.             /*dd($estatead->getOwnerId()->getEmail());*/
  154.             $message = (new \Swift_Message('[PREUMS] Félicitations! Une personne est intéressé par votre annonce ' $data['reference'] . '.'))
  155.                 ->setFrom('postmaster@nouveausite.fr')
  156.                 ->setTo($estatead->getOwnerId()->getEmail())
  157.                 ->setBody(
  158.                     $this->renderView(
  159.                         // templates/emails/registration.html.twig
  160.                         'emails/estatead_contact.html.twig',
  161.                         ['reference' => $data['reference'], 'email' => $data['email'], 'email' => $data['email'], 'name' => $data['name'], 'phone' => $data['phone'], 'message' => $data['message']]
  162.                     ),
  163.                     'text/html'
  164.                 )
  165.             ;
  166.             
  167.             if(!$mailer->send($message$failures))
  168.             {
  169.                 dd($failures);
  170.             }
  171.             
  172.             $this->addFlash('success''estatead_contact');
  173.             return $this->redirectToRoute('index');
  174.         }
  175.         $rental_form $this->createForm(RentalSubscribeType::class, null, []);
  176.         
  177.         $search_form->handleRequest($request);
  178.         if ($search_form->isSubmitted() && $search_form->isValid()) {
  179.             // $form->getData() holds the submitted values
  180.             // but, the original `$task` variable has also been updated
  181.             $task $search_form->getData();
  182.             //var_dump($task);
  183.             // ... perform some action, such as saving the task to the database
  184.             // for example, if Task is a Doctrine entity, save it!
  185.             // $entityManager = $this->getDoctrine()->getManager();
  186.             // $entityManager->persist($task);
  187.             // $entityManager->flush();
  188.             return $this->redirectToRoute('estatead_listing', ['request' => $request], 307);
  189.         }
  190.         $estatead_repository $this->getDoctrine()->getRepository(EStateAd::class);
  191.         
  192.         $this->session->set('search_ads'null);
  193.         /*dd($estatead_repository->getHomeAds());*/
  194.         $options = [
  195.             'rental_form' => $rental_form->createView(),
  196.             'search_form' => $search_form->createView(),
  197.             'contact_form' => $contact_form->createView(),
  198.             'estateads' => $estatead_repository->getHomeAds(),
  199.             'search_form_values' => isset($form_string) ? $form_string null
  200.         ];
  201.         return $this->render('front/index.html.twig'$options);
  202.     }
  203.     
  204.     public function estatead_listing(Request $requestPaginatorInterface $paginator, \Swift_Mailer $mailer)
  205.     {
  206.         /*dd(filter_var($request->headers->get('referer'), FILTER_SANITIZE_URL), $this->generateUrl('index'), $request);*/
  207.         /*dd($request->request);*/
  208.         $estatead_repository $this->getDoctrine()->getRepository(EStateAd::class);
  209.         $contact_form $this->createForm(EStateAdContactFormType::class, null, ['userInfo' => $this->getUser()]);
  210.         
  211.         if(empty($this->session->get('search_ads')) || null == $this->session->get('search_ads')){
  212.             $this->session->set('search_ads'$request->request->get('search_ads'));
  213.         }
  214.         /*dd($this->session->get('search_ads'));*/
  215.         $filter_form $this->createForm(FilterAdsType::class, null, array(
  216.             'nb_rooms' => (isset($this->session->get('search_ads')['nb_rooms'])) ? $this->session->get('search_ads')['nb_rooms'] : null,
  217.             'search_field' => (isset($this->session->get('search_ads')['search_field'])) ? $this->session->get('search_ads')['search_field'] : null,
  218.             'projettype' => (isset($this->session->get('search_ads')['projettype'])) ? $this->session->get('search_ads')['projettype'] : null,
  219.             'adtype' => (isset($this->session->get('search_ads')['adtype'])) ? $this->session->get('search_ads')['adtype'] : null,
  220.             'nb_bedrooms' => (isset($this->session->get('search_ads')['nb_bedrooms'])) ? $this->session->get('search_ads')['nb_bedrooms'] : null,
  221.             'surface' => (isset($this->session->get('search_ads')['surface'])) ? $this->session->get('search_ads')['surface'] : null,
  222.             'min_price' => (isset($this->session->get('search_ads')['min_price'])) ? $this->session->get('search_ads')['min_price'] : null,
  223.             'max_price' => (isset($this->session->get('search_ads')['max_price'])) ? $this->session->get('search_ads')['max_price'] : null,
  224.         ));
  225.         
  226.         /*dd($this->session->get('search_ads'));*/
  227.         
  228.         $estate_data $estatead_repository->getListing();
  229.         
  230. /*        dd($estate_data);*/
  231.         /*$estate_ads = $paginator->paginate(
  232.             $estate_data, // Requête contenant les données Ã  paginer (ici nos articles)
  233.             $request->query->getInt('page', 1), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
  234.             6 // Nombre de résultats par page
  235.         );*/
  236.         $contact_form->handleRequest($request);
  237.         if ($contact_form->isSubmitted() && $contact_form->isValid()) {
  238.             $data $contact_form->getData();
  239.             $estatead_repository $this->getDoctrine()->getRepository(EStateAd::class);
  240.             $estatead $estatead_repository->findOneByReference($data['reference']);
  241.             /*dd($estatead->getOwnerId()->getEmail());*/
  242.             $message = (new \Swift_Message('[PREUMS] Félicitations! Une personne est intéressé par votre annonce ' $data['reference'] . '.'))
  243.                 ->setFrom('postmaster@nouveausite.fr')
  244.                 ->setTo($estatead->getOwnerId()->getEmail())
  245.                 ->setBody(
  246.                     $this->renderView(
  247.                         // templates/emails/registration.html.twig
  248.                         'emails/estatead_contact.html.twig',
  249.                         ['reference' => $data['reference'], 'email' => $data['email'], 'email' => $data['email'], 'name' => $data['name'], 'phone' => $data['phone'], 'message' => $data['message']]
  250.                     ),
  251.                     'text/html'
  252.                 )
  253.             ;
  254.             
  255.             if(!$mailer->send($message$failures))
  256.             {
  257.                 dd($failures);
  258.             }
  259.             
  260.             $this->addFlash('success''estatead_contact');
  261.             return $this->redirectToRoute('estatead_listing');
  262.         }
  263.         
  264.         /*dd($contact_form->isSubmitted());*/
  265.         
  266.         return $this->render('front/listing.html.twig', [
  267.             'filter_form' => $filter_form->createView(),
  268.             'estateads' => $estate_data,
  269.             'contact_form' => $contact_form->createView(),
  270.             'search_ads' => json_decode($this->session->get('search_ads')['search_field'])
  271.         ]);
  272.     }
  273.     
  274.     public function estatead_show(EStateAd $estateadRequest $request, \Swift_Mailer $mailer)
  275.     {
  276.         $user $this->getUser();
  277.         $contact_form $this->createForm(EStateAdContactFormType::class, null, ['userInfo' => $this->getUser()]);
  278.         
  279.         $options = array();
  280.         
  281.         if($user !== null && $user->getFavorites() !== null){
  282.             if(in_array($estatead->getId(), unserialize($user->getFavorites()))){
  283.                 $options['fav'] = true;
  284.             }
  285.         }
  286.         
  287.         $contact_form->handleRequest($request);
  288.         if ($contact_form->isSubmitted() && $contact_form->isValid()) {
  289.             $data $contact_form->getData();
  290.             $estatead_repository $this->getDoctrine()->getRepository(EStateAd::class);
  291.             $estatead $estatead_repository->findOneByReference($data['reference']);
  292.             /*dd($estatead->getOwnerId()->getEmail());*/
  293.             $message = (new \Swift_Message('[PREUMS] Félicitations! Une personne est intéressé par votre annonce ' $data['reference'] . '.'))
  294.                 ->setFrom('postmaster@nouveausite.fr')
  295.                 ->setTo($estatead->getOwnerId()->getEmail())
  296.                 ->setBody(
  297.                     $this->renderView(
  298.                         // templates/emails/registration.html.twig
  299.                         'emails/estatead_contact.html.twig',
  300.                         ['reference' => $data['reference'], 'email' => $data['email'], 'email' => $data['email'], 'name' => $data['name'], 'phone' => $data['phone'], 'message' => $data['message']]
  301.                     ),
  302.                     'text/html'
  303.                 )
  304.             ;
  305.             
  306.             if(!$mailer->send($message$failures))
  307.             {
  308.                 dd($failures);
  309.             }
  310.             
  311.             $this->addFlash('success''estatead_contact');
  312.             return $this->redirectToRoute('estatead_listing');
  313.         }
  314.         
  315.         return $this->render('front/estatead.html.twig', [
  316.             'estatead' => $estatead,
  317.             'favorites' => $options,
  318.             'contact_form' => $contact_form->createView(),
  319.         ]);
  320.     }
  321.     
  322.     public function signup_pro(Request $requestUserPasswordEncoderInterface $passwordEncoder, \Swift_Mailer $mailer)
  323.     {
  324.         $signup_form $this->createForm(SignupFormType::class, null, ['userEmail' => false]);
  325.         $contact_form $this->createForm(SignupContactType::class, null, []);
  326.         $agencyuser_repo $this->getDoctrine()->getRepository(AgencyUser::class);
  327.         $slugify = new Slugify();
  328.         
  329.         $signup_form->handleRequest($request);
  330.         if ($signup_form->isSubmitted() && $signup_form->isValid()) {
  331.             $task $signup_form->getData();
  332.             
  333.             /*dd($task);*/
  334.             
  335.             /*dd($task);*/
  336.             
  337.             $names substr($slugify->slugify($task['agencyuser']->getName()), 01);
  338.             $username $slugify->slugify($task['agencyuser']->getFirstName()).$names;
  339.             $entityManager $this->getDoctrine()->getManager();
  340.             
  341.             $password $passwordEncoder->encodePassword($task['agencyuser'], $task['agencyuser']->getPassword());
  342.             $task['agency']->addAgencyUser($task['agencyuser']);
  343.             $task['agency']->setCreatedAt(new \DateTime('now', new \DateTimeZone('Europe/Paris')));
  344.             $task['agency']->setStatus(0);
  345.             
  346.             if($agencyuser_repo->getUsername($username) !== null){
  347.                 $username $username '1';
  348.             }
  349.             
  350.             $task['agencyuser']->setUsername($username);
  351.             $task['agencyuser']->setEmail($task['agency']->getEmail());
  352.             $task['agencyuser']->setPassword($password);
  353.             $task['agencyuser']->setRoles(['ROLE_NORMAL_USER''ROLE_AGENCY_OWNER''ROLE_AGENCY_USER']);
  354.             
  355.             /*dd($task);*/
  356.             
  357.             $entityManager->persist($task['agencyuser']);
  358.             $entityManager->flush();
  359.             
  360.             $entityManager->persist($task['agency']);
  361.             $entityManager->flush();
  362.             
  363.             $message = (new \Swift_Message('[PREUMS] Demande de création pro'))
  364.                 ->setFrom('postmaster@nouveausite.fr')
  365.                 ->setTo($task['agency']->getEmail())
  366.                 ->setBody(
  367.                     $this->renderView(
  368.                         // templates/emails/registration.html.twig
  369.                         'emails/agency_registration.html.twig',
  370.                         ['name' => $task['agencyuser']->getName() . ' ' $task['agencyuser']->getFirstName(), 'mail' => $task['agency']->getEmail()]
  371.                     ),
  372.                     'text/html'
  373.                 )
  374.             ;
  375.             
  376.             if(!$mailer->send($message$failures))
  377.             {
  378.                 dd($failures);
  379.             }
  380.             
  381.             $message2 = (new \Swift_Message('[PREUMS] Nouvelle agence'))
  382.                 ->setFrom('postmaster@nouveausite.fr')
  383.                 ->setTo($this->getParameter('admin_mail'))
  384.                 ->setBody(
  385.                     $this->renderView(
  386.                         // templates/emails/registration.html.twig
  387.                         'emails/admin_agency_registration.html.twig',
  388.                         []
  389.                     ),
  390.                     'text/html'
  391.                 )
  392.             ;
  393.             
  394.             if(!$mailer->send($message2$failures))
  395.             {
  396.                 dd($failures);
  397.             }
  398.             
  399.             $this->addFlash('success''agency_signup');
  400.             return $this->redirectToRoute('index');
  401.         }
  402.         
  403.         if ($contact_form->isSubmitted() && $contact_form->isValid()) {
  404.             $contact_data $contact_form->getData();
  405.             $message = (new \Swift_Message('[PREUMS] Demande de contact pro'))
  406.                 ->setFrom('postmaster@nouveausite.fr')
  407.                 ->setTo($this->getParameter('admin_mail'))
  408.                 ->setBody(
  409.                     $this->renderView(
  410.                         // templates/emails/registration.html.twig
  411.                         'emails/agency_contact.html.twig',
  412.                         ['name' => $contact_data['name'], 'phone' => $contact_data['phone'], 'agency_name' => $contact_data['agency_name']]
  413.                     ),
  414.                     'text/html'
  415.                 )
  416.             ;
  417.             
  418.             if(!$mailer->send($message$failures))
  419.             {
  420.                 $this->addFlash('success''agency_contact');
  421.                 return $this->redirectToRoute('app_signup_pro');
  422.             }
  423.         }
  424.         
  425.         return $this->render('front/signup_pro.html.twig', [
  426.             'form' => $signup_form->createView(),
  427.             'contact_form' => $contact_form->createView(),
  428.         ]);
  429.     }
  430.     
  431.     public function signup(Request $requestUserPasswordEncoderInterface $passwordEncoder, \Swift_Mailer $mailerGuardAuthenticatorHandler $guardHandlerLoginFormAuthenticator $authenticator)
  432.     {
  433.         $signup_form $this->createForm(SignupFormType::class, null, ['userEmail' => true]);
  434.         $options = array();
  435.         
  436.         $signup_form->handleRequest($request);
  437.         if ($signup_form->isSubmitted() && $signup_form->isValid()) {
  438.             $task $signup_form->getData();
  439.             $agencyuser_repo $this->getDoctrine()->getRepository(AgencyUser::class);
  440.             $slugify = new Slugify();
  441.             
  442.             /*dd($task);*/
  443.             $names substr($slugify->slugify($task['agencyuser']->getName()), 01);
  444.             $username $slugify->slugify($task['agencyuser']->getFirstName()).$names;
  445.             $entityManager $this->getDoctrine()->getManager();
  446.             
  447.             $password $passwordEncoder->encodePassword($task['agencyuser'], $task['agencyuser']->getPassword());
  448.             
  449.             if($agencyuser_repo->getUsername($username) !== null){
  450.                 $username $username '1';
  451.             }
  452.             $task['agencyuser']->setAgencyId(null);
  453.             $task['agencyuser']->setUsername($username);
  454.             $task['agencyuser']->setPassword($password);
  455.             $task['agencyuser']->setRoles(['ROLE_NORMAL_USER''ROLE_USER']);
  456.             $entityManager->persist($task['agencyuser']);
  457.             $entityManager->flush();
  458.             
  459.             $message = (new \Swift_Message('[PREUMS] Demande de création de compte'))
  460.                 ->setFrom('postmaster@nouveausite.fr')
  461.                 ->setTo($task['agencyuser']->getEmail())
  462.                 ->setBody(
  463.                     $this->renderView(
  464.                         // templates/emails/registration.html.twig
  465.                         'emails/user_registration.html.twig',
  466.                         ['name' => $task['agencyuser']->getName() . ' ' $task['agencyuser']->getFirstName(), 'mail' => $task['agencyuser']->getEmail()]
  467.                     ),
  468.                     'text/html'
  469.                 )
  470.             ;
  471.             $options['agencyuser'] = $task['agencyuser'];
  472.             if(!$mailer->send($message$failures))
  473.             {
  474.                 dd($failures);
  475.             }
  476.             
  477.             /*$this->session->set('user_name', $task['agencyuser']->getName() . ' ' . $task['agencyuser']->getFirstName());*/
  478.             
  479.             $this->addFlash('success''user_signup');
  480.             return $guardHandler->authenticateUserAndHandleSuccess(
  481.                $task['agencyuser'],
  482.                $request,
  483.                $authenticator,
  484.                'main' // firewall name in security.yaml
  485.            );
  486.         }
  487.         
  488.         $options['form'] = $signup_form->createView();
  489.         
  490.         return $this->render('front/signup.html.twig'$options);
  491.     }
  492.     
  493.     public function rentalSubscribe(Request $request)
  494.     {
  495.         dd($request);
  496.     }
  497.     
  498.     public function my_profile(Request $request)
  499.     {
  500.         $user $this->getUser();
  501.         $agency_repo $this->getDoctrine()->getRepository(Agency::class);
  502.         $agency $agency_repo->findByUser($user->getAgencyId());
  503.         $options = array();
  504.         
  505.         $estatead_repo $this->getDoctrine()->getRepository(EStateAd::class);
  506.         
  507.         $options['nb_estateads'] = 0;
  508.         $options['nb_exclestateads'] = 0;
  509.         $options['nb_suboffers'] = 0;
  510.         
  511.         if($user->getAgencyId() != null){
  512.             $nb_estateads $estatead_repo->getNbAdsByAgencyId($user->getAgencyId()->getId());
  513.             $nb_exclestateads $estatead_repo->getNbExclAdsByAgencyId($user->getAgencyId()->getId());
  514.             $nb_suboffers $estatead_repo->getNbSubOffersByAgencyId($user->getAgencyId()->getId());
  515.             $options['nb_estateads'] = $nb_estateads;
  516.             $options['nb_exclestateads'] = $nb_exclestateads;
  517.             $options['nb_suboffers'] = $nb_suboffers;
  518.         }
  519.         
  520.         $options['agency'] = $agency;
  521.         return $this->render('back/profile.html.twig'$options);
  522.     }
  523.     
  524.     public function my_profile_edit(Request $request)
  525.     {
  526.         $user $this->getUser();
  527.         $signup_form $this->createForm(SignupFormType::class, $user);
  528.         $agency_repo $this->getDoctrine()->getRepository(Agency::class);
  529.         $agency $agency_repo->findByUser($user->getAgencyId());
  530.         return $this->render('back/profile_edit.html.twig', [
  531.             'form' => $signup_form,
  532.             'agency' => $agency
  533.         ]);
  534.     }
  535.     
  536.     public function my_subscription(Request $request)
  537.     {
  538.         $user $this->getUser();
  539.         
  540.         if($user == null){
  541.             return $this->redirectToRoute('index');
  542.         }
  543.         
  544.         $options = array();
  545.         
  546.         if($user->getTransactionDate() !== null){
  547.             $expiration_date = clone $user->getTransactionDate();
  548.             $expiration_date->add(new \DateInterval('P1M'));
  549.             /*dd($expiration_date);*/
  550.             $options['expiration_date'] = $expiration_date;
  551.         }
  552.         
  553.         $options['agencyuser'] = $user;
  554.         
  555.         return $this->render('back/subscription.html.twig'$options);
  556.     }
  557.     
  558.     public function changepassword(Request $requestUserPasswordEncoderInterface $passwordEncoder)
  559.     {
  560.         $token $request->get('token');
  561.         $user $this->getUser();
  562.         
  563.         if($user == null){
  564.             if($token == null){
  565.                 $this->addFlash('danger''Token Inconnu');
  566.                 return $this->redirectToRoute('index');
  567.             }
  568.         }
  569.         if ($request->isMethod('POST')) {
  570.             $entityManager $this->getDoctrine()->getManager();
  571.             $user $this->getUser();
  572.             /* @var $user User */
  573.             if ($user === null) {
  574.                 $this->addFlash('danger''Token Inconnu');
  575.                 return $this->redirectToRoute('index');
  576.             }
  577.             $user->setResetToken(null);
  578.             $user->setPassword($passwordEncoder->encodePassword($user$request->request->get('password')));
  579.             $entityManager->flush();
  580.             $this->addFlash('notice''Mot de passe mis Ã  jour');
  581.             return $this->redirectToRoute('easyadmin');
  582.         }else {
  583.             return $this->render('security/changepassword.html.twig', ['token' => $token]);
  584.         }
  585.     }
  586.     
  587.     public function forgotpassword(Request $request, \Swift_Mailer $mailerTokenGeneratorInterface $tokenGenerator)
  588.     {
  589.         if ($request->isMethod('POST')) {
  590.             $email $request->request->get('email');
  591.             $entityManager $this->getDoctrine()->getManager();
  592.             $user $entityManager->getRepository(AgencyUser::class)->findOneByEmail($email);
  593.             /* @var $user User */
  594.             if ($user === null) {
  595.                 $this->addFlash('danger''Email Inconnu');
  596.                 return $this->redirectToRoute('index');
  597.             }
  598.             $token $tokenGenerator->generateToken();
  599.             try{
  600.                 $user->setResetToken($token);
  601.                 $entityManager->flush();
  602.             } catch (\Exception $e) {
  603.                 $this->addFlash('warning'$e->getMessage());
  604.                 return $this->redirectToRoute('index');
  605.             }
  606.             $url $this->generateUrl('app_resetpassword', array('token' => $token), UrlGeneratorInterface::ABSOLUTE_URL);
  607.             $message = (new \Swift_Message('Forgot Password'))
  608.                 ->setFrom('postmaster@nouveausite.fr')
  609.                 ->setTo($user->getEmail())
  610.                 ->setBody(
  611.                     "blablabla voici le token pour reseter votre mot de passe : " $url,
  612.                     'text/html'
  613.                 );
  614.             $mailer->send($message);
  615.             $this->addFlash('notice''Mail envoyé');
  616.             return $this->redirectToRoute('index');
  617.         }
  618.         return $this->render('security/forgotpassword.html.twig');
  619.     }
  620.     
  621.     public function premium(Request $request)
  622.     {
  623.         if(null == $this->getUser()){
  624.             return $this->redirect($this->generateUrl('app_signup'));
  625.         }
  626.         
  627.         /*dd($this->security->isGranted('ROLE_PREMIUM_USER'));*/
  628.         
  629.         $form $this->get('form.factory')
  630.             ->createNamedBuilder('payment-form')
  631.             ->add('token'HiddenType::class, [
  632.                 'constraints' => [new NotBlank()],
  633.             ])
  634.             ->add('formula_type'ChoiceType::class, [
  635.                 'choices' => [
  636.                     '1' => '1',
  637.                     '2' => '2',
  638.                 ],
  639.                 'expanded' => true,
  640.                 'multiple' => false,
  641.                 'required' => true,
  642.             ])
  643.             ->add('promo_code'TextType::class, [
  644.                 'label' => 'Vous avez un code promo ?',
  645.                 'attr' => [
  646.                     'placeholder' => 'Votre code'
  647.                 ],
  648.                 'required' => false,
  649.             ])
  650.             ->add('submit'SubmitType::class, [
  651.                 'label' => 'Payer',
  652.                 'attr' => [
  653.                     'class' => 'cta cta-green'
  654.                 ]
  655.             ])
  656.             ->getForm();
  657.         if ($request->isMethod('POST')) {
  658.             $form->handleRequest($request);
  659.             /*dd($request);*/
  660.             if ($form->isValid()) {
  661.                 $data $form->getData();
  662. /*                dd($data);*/
  663.                 $config $this->getParameter('payment');
  664.                 $config['premium_amount'] = $config['premium_amount_monthly'];
  665.                 
  666.                 /*dd($data);*/
  667.                 try {
  668.                     $stripeClient = new StripeClient($this->getParameter('stripe_secret_key'), $config$this->getDoctrine()->getManager());
  669.                     $stripeClient->createPremiumCharge($this->getUser(), $form->get('token')->getData(), $data['formula_type'], $data['promo_code']);
  670.                     
  671.                     if($data['formula_type'] == 1){
  672.                         $this->addFlash('success''user_premium_1m');
  673.                     } else {
  674.                         $this->addFlash('success''user_premium_3m');
  675.                     }
  676.                     $redirect $this->generateUrl('index');
  677.                     return $this->redirect($redirect);
  678.                 } catch (\Stripe\Error\Base $e) {
  679.                     $redirect $this->generateUrl('premium');
  680.                     return $this->redirect($redirect);
  681.                 }
  682.             }
  683.         }
  684.         
  685.         return $this->render('front/premium.html.twig', array(
  686.             'form' => $form->createView(),
  687.             'stripe_public_key' => $this->getParameter('stripe_public_key'),
  688.         ));
  689.     }
  690.     
  691.     public function savesearch(Request $request)
  692.     {
  693.         if ($request->isXmlHttpRequest()) {
  694.             $params = array();
  695.             parse_str($request->get('form'), $params);
  696.             $user $this->getUser();
  697.             
  698.             $entityManager $this->getDoctrine()->getManager();
  699.             $savedSearch $entityManager->getRepository(SavedSearch::class)->findOneByUserId($user->getId());
  700.             $city json_decode($params['filter_ads']['filter_field']);
  701.             $params['filter_ads']['city_name'] = $city[0]->city_name;
  702.             $params['filter_ads']['min_surface'] = $params['min_surface'];
  703.             
  704.             if($savedSearch == null){
  705.                 $savedSearch = new SavedSearch();
  706.                 $savedSearch->setOwnerId($user->getId());
  707.                 $savedSearch->setFormString(json_encode($params));
  708.                 $entityManager->persist($savedSearch);
  709.             } else {
  710.                 $savedSearch->setFormString(json_encode($params));
  711.             }
  712.             $entityManager->merge($savedSearch);
  713.             $entityManager->flush();
  714.             
  715.             return new JsonResponse(array('success' => true));
  716.         }
  717.     }
  718.     
  719.     public function getcities(Request $request)
  720.     {
  721.         if ($request->isXmlHttpRequest()) {
  722.             /*$value = $request->get('value');*/
  723.             $value filter_input(INPUT_GET'value'FILTER_SANITIZE_STRING);
  724.             $entityManager $this->getDoctrine()->getManager();
  725.             $cities $entityManager->getRepository(Cities::class)->findByValue($value);
  726.             $jsonContent $this->serializer->serialize($cities'json');
  727.             return new Response($jsonContent);
  728.         }
  729.     }
  730.     
  731.     public function cgv(Request $request)
  732.     {
  733.         return $this->render('front/cgv.html.twig', array());
  734.     }
  735.     
  736.     public function cgu(Request $request)
  737.     {
  738.         return $this->render('front/cgu.html.twig', array());
  739.     }
  740.     
  741.     public function policy(Request $request)
  742.     {
  743.         return $this->render('front/policy.html.twig', array());
  744.     }
  745.     
  746.     public function mentions(Request $request)
  747.     {
  748.         return $this->render('front/mentions.html.twig', array());
  749.     }
  750.     
  751.     public function my_search(Request $request)
  752.     {
  753.         $user $this->getUser();
  754.         $entityManager $this->getDoctrine()->getManager();
  755.         
  756.         if($user == null){
  757.             return $this->redirectToRoute('index');
  758.         }
  759.         
  760.         $options = array();
  761.         
  762.         $saved_search $entityManager->getRepository(SavedSearch::class)->findOneByUserId($user->getId());
  763.         
  764.         if($saved_search !== null){
  765.             $form_string json_decode($saved_search->getFormString());
  766.             /*dd($form_string);*/
  767.             /*dd($form_string->nbrooms[0]);*/
  768.             /*if(in_array())*/
  769.             
  770.             /*dd([
  771.                 'search_field' => isset($form_string->filter_ads->filter_field) ? $form_string->filter_ads->filter_field : null,
  772.                 'nb_rooms' => isset($form_string->nbrooms) ? $form_string->nbrooms : null,
  773.                 'type' => isset($form_string->adtype) ? $form_string->adtype : null,
  774.                 'nb_bedrooms' => isset($form_string->nbbedrooms) ? $form_string->nbbedrooms : null,
  775.             ]);*/
  776.             /*dd($form_string);*/
  777.             
  778.             $search_form $this->createForm(SearchAdsType::class, null, [
  779.                 'search_field' => isset($form_string->filter_ads->filter_field) ? $form_string->filter_ads->filter_field null,
  780.                 'nb_rooms' => isset($form_string->filter_ads->nb_rooms) ? $form_string->filter_ads->nb_rooms null,
  781.                 'adtype' => isset($form_string->filter_ads->adtype) ? $form_string->filter_ads->adtype null,
  782.                 'projettype' => isset($form_string->filter_ads->projettype) ? $form_string->filter_ads->projettype null,
  783.                 'nb_bedrooms' => isset($form_string->filter_ads->nb_bedrooms) ? $form_string->filter_ads->nb_bedrooms null,
  784.             ]);
  785. /*dd($form_string);*/
  786.             $options['min_surface'] = $form_string->filter_ads->min_surface;
  787.             $options['min_price'] = (isset($form_string->filter_ads->min_price)) ? $form_string->filter_ads->min_price 0;
  788.             $options['max_price'] = (isset($form_string->filter_ads->max_price)) ? $form_string->filter_ads->max_price 100000;
  789.         } else {
  790.             $search_form $this->createForm(SearchAdsType::class, null, ['search_field' => $this->session->get('search_field')]);
  791.         }
  792.         
  793.         $search_form->handleRequest($request);
  794.         if ($search_form->isSubmitted() && $search_form->isValid()) {
  795.             // $form->getData() holds the submitted values
  796.             // but, the original `$task` variable has also been updated
  797.             $task $search_form->getData();
  798.             /*dd($task);*/
  799.             
  800.             if($saved_search == null){
  801.                 $saved_search = new SavedSearch();
  802.                 $saved_search->setOwnerId($user->getId());
  803.             }
  804.             $tmpArray = [
  805.                 'filter_ads' => [
  806.                     'filter_field' => $task['search_field'],
  807.                     'adtype' => implode(","$task['adtype']),
  808.                     'projettype' => $task['projettype'],
  809.                     'nb_rooms' => implode(","$task['nb_rooms']),
  810.                     'nb_bedrooms' => implode(","$task['nb_bedrooms']),
  811.                     'min_surface' => $task['min_surface'],
  812.                     'min_price' => $task['min_price'],
  813.                     'max_price' => $task['max_price'],
  814.                     'min_surface' => $task['min_surface'],
  815.                 ],
  816.             ];
  817.             /*dd($tmpArray);*/
  818.             $saved_search->setFormString(json_encode($tmpArray));
  819.             $entityManager->merge($saved_search);
  820.             $entityManager->flush();
  821.             /*dd();*/
  822.             return $this->redirectToRoute('app_search');
  823.         }
  824.         
  825.         $estatead_repository $this->getDoctrine()->getRepository(EStateAd::class);
  826.         
  827.         $this->session->set('search_ads'null);
  828.         
  829.         $options['search_form'] = $search_form->createView();
  830.         $options['agencyuser'] = $user;
  831.         
  832.         /*dd($options);*/
  833.         
  834.         return $this->render('back/search.html.twig'$options);
  835.     }
  836.     
  837.     public function favorites(Request $request)
  838.     {
  839.         $options = array();
  840.         $user $this->getUser();
  841.         
  842.         $estatead_repository $this->getDoctrine()->getRepository(EStateAd::class);
  843.         
  844.         if($user->getFavorites() !== null){
  845.             $res $estatead_repository->findByIds(unserialize($user->getFavorites()));
  846.             $options['favorites'] = $res;
  847.         } else {
  848.             $options['favorites'] = null;
  849.         }
  850.         
  851.         return $this->render('back/favorites.html.twig'$options);
  852.     }
  853.     
  854.     public function addfavorites(Request $request)
  855.     {
  856.         if ($request->isXmlHttpRequest()) {
  857.             $user $this->getUser();
  858.             if($user == null){
  859.                 return new JsonResponse([
  860.                     'error' => 'auth required'
  861.                 ], 401);
  862.             }
  863.             /*$value = $request->get('value');*/
  864.             $value filter_input(INPUT_GET'value'FILTER_SANITIZE_NUMBER_INT);
  865.             $entityManager $this->getDoctrine()->getManager();
  866.             $favorites $user->getFavorites();
  867.             
  868.             if($favorites == null){
  869.                 $fav = array($value);
  870.                 $user->setFavorites(serialize($fav));
  871.             } else {
  872.                 $fav unserialize($user->getFavorites());
  873.                 if(!in_array($value$fav)){
  874.                     $fav[] = $value;
  875.                 } else {
  876.                     array_splice($favarray_search($value$fav), 1);
  877.                 }
  878.                 
  879.                 $user->setFavorites(serialize($fav));
  880.             }
  881.             $entityManager->merge($user);
  882.             $entityManager->flush();
  883.             
  884.             return new JsonResponse(array('success' => true));
  885.         }
  886.     }
  887.     
  888.     public function deleteaccount(Request $requestUserPasswordEncoderInterface $passwordEncoder)
  889.     {
  890.         $user $this->getUser();
  891.         if($user == null){
  892.             return $this->redirectToRoute('index');
  893.         }
  894.         
  895.         $deleteUserForm $this->createForm(ConfirmPasswordType::class);
  896.         $options = array(
  897.             'form' => $deleteUserForm->createView()
  898.         );
  899.         
  900.         if ($request->isMethod('POST')) {
  901.             $deleteUserForm->handleRequest($request);
  902.             /*dd($request);*/
  903.             if ($deleteUserForm->isValid()) {
  904.                 $data $deleteUserForm->getData();
  905.                 if($passwordEncoder->isPasswordValid($user$data['password'])){
  906.                     $session = new Session();
  907.                     $session->clear();
  908.                     $session->migrate();
  909.                     
  910.                     //suppression du compte dans la bdd
  911.                     $em $this->getDoctrine()->getManager();
  912.                     $usrRepo $em->getRepository(AgencyUser::class);
  913.                     $userEntity $usrRepo->find($id);
  914.                     
  915.                     $em->remove($userEntity);
  916.                     $em->flush();
  917.                     /*dd($user);*/
  918.                     
  919.                     $this->addFlash('success''user_deleteacc');
  920.                     return $this->redirectToRoute('index');
  921.                 }
  922.             }
  923.         }
  924.         
  925.         return $this->render('back/deleteaccount.html.twig'$options);
  926.     }
  927. }