src/Controller/LogementController.php line 29

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use App\Entity\Annonces;
  7. use Doctrine\Persistence\ManagerRegistry;
  8. use App\Entity\Visiteurs;
  9. use App\Entity\User;
  10. use App\Entity\Images;
  11. use App\Entity\VillesFrance;
  12. use App\Entity\Photoindex;
  13. use App\Entity\Event;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use App\Entity\Messages;
  16. use App\Form\MessagesType;
  17. use Symfony\Component\Mailer\MailerInterface;
  18. use Symfony\Component\Mime\Email;
  19. use App\Entity\PostLike;
  20. use App\Entity\Financement;
  21. use App\Controller\Fonctions\Fonctions;
  22. use Doctrine\ORM\Query\Expr\Join;
  23. class LogementController extends AbstractController
  24. {
  25.     #[Route('/logement/{slug}'name'app_logement')]
  26.     public function index(Request $requestManagerRegistry $doctrineAnnonces $annonceMailerInterface $mailer$slug): Response
  27.     {
  28.         $fonction = new Fonctions();
  29.         $userid $this->getUser();
  30.         $entityManager $doctrine->getManager();
  31.         // recuperation de 'id de l'annonce
  32.         $messageform 0;
  33.         $userRepo $entityManager->getRepository(Annonces::class);
  34.         $id $userRepo->findOneBy(["slug" => $slug]);
  35.         $iduser $id->getUser();
  36.         $etat $id->getEtat();
  37.         $domaine $id->getDomaine();
  38.         $agence 1;
  39.         $codepostale $id->getCodepostal();
  40.         $idagence 1
  41.         $sejour 0;
  42.         $logosite =  $fonction->FonctionLogo();
  43.         // recuperation des date den poste 
  44.         $datedebut $request->query->get('t-start');
  45.         $datefin $request->query->get('t-end');
  46.  
  47.         // Condition pour detection des dates. 
  48.         if (($datedebut  ==   true)  and ($datefin  ==   true)) {
  49.             $post  '?check_in=' .  $datedebut '&check_out=' .  $datefin '';
  50.             $datedebutteste    =  $fonction->Compardates($datedebut);
  51.             $datefinteste    =  $fonction->Compardates($datefin);
  52.             // condition pour verivier si les variable dates correspond à une date. 
  53.             if (($datedebutteste == 1) and ($datefinteste == 1)) {
  54.                 $queryBuilder $entityManager->createQueryBuilder();
  55.                 $datedebut =  $fonction->Convertiondate($datedebut);
  56.                 $datefin =  $fonction->Convertiondate($datefin);
  57.                 $queryBuilder->select('u')
  58.                     ->from(Event::class, 'u')
  59.                     ->where('u.annonce IN (:annonce)')
  60.                     ->andwhere('u.datedebut <= :datedebut')
  61.                     ->andwhere('u.datefin >= :datefin')
  62.                     ->andwhere('u.etat = :etat')
  63.                     ->setParameter('annonce', [$id])
  64.                     ->setParameter('datedebut', [$datedebut])
  65.                     ->setParameter('datefin', [$datefin])
  66.                     ->setParameter('etat', [0]);
  67.                 $query $queryBuilder->getQuery();
  68.                 $donnees $query->getResult();
  69.                 $nbr 0;
  70.                 foreach ($donnees as $user) {
  71.                     $nbr++;
  72.                 }
  73.                 $sejour $nbr;
  74.             }
  75.         } else {
  76.             $post '';
  77.         }
  78.         // fonction pour envoyer l'id du journal ou de l'utilisateur 
  79.         $userRepo $entityManager->getRepository(User::class);
  80.         $agence $userRepo->find($agence);
  81.         $like 0;
  82.         $presentation 0;
  83.         $url  =  $fonction->FonctionUrl();
  84.         $usertab =  [];
  85.         $proposition '';
  86.         $proposition '';
  87.         $poste '';
  88.         $ip =  $fonction->NomIp();
  89.         $defaut $etat;
  90.         // condition pour que l'auteur de l'annonce puisse voir son annonce même si elle n'est pas validé ou elle est plus en cour. 
  91.         if ($iduser ==  $userid) {
  92.             $defaut 1;
  93.         }
  94.         if ($etat ==  3) {
  95.             $messageerreur "L'annonce à était supprimer";
  96.         }
  97.         if ($etat ==  0) {
  98.             $messageerreur "L'annonce n'est pas encore validé.";
  99.         }
  100.         if ($defaut ==  1) {
  101.             if ($userid == true) {
  102.                 // recuperation de l'email. 
  103.                 $sent =  $userid->getEmail();
  104.                 $userRepo $entityManager->getRepository(User::class);
  105.                 $user $userRepo->find($userid);
  106.                 // déterminer le like
  107.                 $userRepo $entityManager->getRepository(PostLike::class);
  108.                 $like $userRepo->findOneBy(["annonce" => $id"user" => $userid]);
  109.                 if ($like == true) {
  110.                     $like 1;
  111.                 }
  112.                 // enregistrer les visite
  113.                 $userRepo $entityManager->getRepository(Annonces::class);
  114.                 $queryBuilder $entityManager->createQueryBuilder();
  115.                 $queryBuilder->select('u')
  116.                     ->from(Visiteurs::class, 'u')
  117.                     ->where('u.annonce IN (:annonce)')
  118.                     ->orwhere('u.user IN (:user)')
  119.                     ->orWhere('u.adresseip  >= :adresseip')
  120.                     ->setParameter('user', [$user])
  121.                     ->setParameter('annonce', [$id])
  122.                     ->setParameter('adresseip', [$ip]);
  123.                 $query $queryBuilder->getQuery();
  124.                 $userRepo $entityManager->getRepository(Visiteurs::class);
  125.                 $visite $userRepo->findOneBy(["annonce" => $id"user" => $user]);
  126.                 // insertion de la visite 
  127.                 if ($visite == false) {
  128.                     $visite = new Visiteurs();
  129.                     $visite->setUser($user);
  130.                     $visite->setAnnonce($id);
  131.                     $visite->setAdresseip($ip);
  132.                     $entityManager->persist($visite);
  133.                     $entityManager->flush();
  134.                 }
  135.                 // recherche des messages
  136.                 $userRepo $entityManager->getRepository(Messages::class);
  137.                 $messagenbr $userRepo->findBy(["annonce" => $id"sender" => $user]);
  138.                 $teste 0;
  139.                 foreach ($messagenbr as $user) {
  140.                     $teste++;
  141.                 }
  142.                 if ($user ==  $iduser) {
  143.                     $messageform 3;
  144.                 } else {
  145.                     if ($teste >  1) {
  146.                         $messageform 2;
  147.                     }
  148.                     if ($teste ==  0) {
  149.                         $messageform 1;
  150.                     }
  151.                 }
  152.                 // condition pour valider l'annonce 
  153.                 if ($request->isMethod('post')) {
  154.                     $userRepo $entityManager->getRepository(Annonces::class);
  155.                     // Modification deu crédit
  156.                     $user $userRepo->find($id);
  157.                     $user->setEtat($etat);
  158.                     $entityManager->flush();
  159.                     $userRepo $entityManager->getRepository(Annonces::class);
  160.                     if ($etat ==  0) {
  161.                         $nouvetat 1;
  162.                     } else {
  163.                         $nouvetat 0;
  164.                     }
  165.                     // Modification deu crédit
  166.                     $user $userRepo->find($id);
  167.                     $user->setEtat($nouvetat);
  168.                     $entityManager->flush();
  169.                 }
  170.                 // condition pour faire apparetre le message ou validation
  171.                 // création de la gallerie image 
  172.             }
  173.             // mettre l'id de l'annonce 
  174.             $userRepo $entityManager->getRepository(Annonces::class);
  175.             $userid $userRepo->findOneBy(['slug' => $slug]);
  176.             $id =   $userid->getId($slug);
  177.             $recipient =   $userid->getUser($slug);
  178.             $titre =   $userid->getTitre($slug);
  179.             $slug =   $userid->getSlug($slug);
  180.             $villeslug =   $userid->getVilleSlug($slug);
  181.             $somme =   $userid->getPrix($slug);
  182.             // mettre l'id de l'annonce 
  183.             $user $userRepo->find($id);
  184.             // mettre l'id du recepteur 
  185.             $userRepo $entityManager->getRepository(User::class);
  186.             $userrecipient $userRepo->find($recipient);
  187.             // mettre le mail d du recepteur 
  188.             $emailrecipient =   $userrecipient->getEmail();
  189.             // recuperation du type de l'annonceur 
  190.             $type $userrecipient->getType();
  191.             // création de la gallerie image 
  192.             $userRepo $entityManager->getRepository(Images::class);
  193.             $orderBy = ["id" => "ASC"];
  194.             $images $userRepo->findBy(["annonce" => $id], $orderBy);
  195.             if ($images == true) {
  196.                 $presentation 1;
  197.             }
  198.             // coordonnes gps 
  199.             $zoom 15;
  200.             $longitudelogement =   $userid->getLongitude($slug);
  201.             $latitudelogement =   $userid->getLatitude($slug);
  202.             $userRepo $entityManager->getRepository(VillesFrance::class);
  203.             $VilleFrance $userRepo->findOneBy(["ville_slug" => $villeslug]);
  204.             $longitude =   $VilleFrance->getVilleLongitudeDeg($villeslug);
  205.             $latitude =   $VilleFrance->getVilleLatitudeDeg($villeslug);
  206.             $ville =   $VilleFrance->getVilleSlug($villeslug);
  207.             $ville_densite_2010 =   $VilleFrance->getVilleDensite2010($villeslug);
  208.             if ($ville_densite_2010 >  1000) {
  209.                 $around '500';
  210.                 $zoom 16;
  211.             }
  212.             if ($ville_densite_2010 <  1000) {
  213.                 $zoom 14;
  214.                 $around '5000';
  215.             }
  216.             // condition pour créer les adresses 
  217.             $overpass 0;
  218.             if ($overpass == 1) {
  219.                 $typen '2';
  220.                 $array2   =  $fonction->Overpass($latitudelogement$longitudelogement$around$typen);
  221.                 $typen '4';
  222.                 $bus   =  $fonction->Overpass($latitudelogement$longitudelogement$around$typen);
  223.                 $typen '5';
  224.                 $tram   =  $fonction->Overpass($latitudelogement$longitudelogement$around$typen);
  225.                 $typen '6';
  226.                 $metro   =  $fonction->Overpass($latitudelogement$longitudelogement$around$typen);
  227.                 $type 'bus';
  228.                 $around '100';
  229.                 $lignesbus    =  $fonction->Transport($latitudelogement$longitudelogement$type$around);
  230.                 $type 'tram';
  231.                 $around '500';
  232.                 $lignestrams    =  $fonction->Transport($latitudelogement$longitudelogement$type$around);
  233.                 $type 'subway';
  234.                 $around '5000';
  235.                 $lignesmetro   =  $fonction->Transport($latitudelogement$longitudelogement$type$around);
  236.             } else {
  237.                 $array2 =  [];
  238.                 $bus =  [];
  239.                 $tram =  [];
  240.                 $metro  =  [];
  241.                 $lignesbus  =  [];
  242.                 $lignestrams   =  [];
  243.                 $lignesmetro  =  [];
  244.             }
  245.             $typen '1';
  246.             $type 'school';
  247.             $array1   =  $fonction->Openstreetmap($ville$type$typen);
  248.             $typen '3';
  249.             $type 'supermarket';
  250.             $array3   =  $fonction->Openstreetmap($ville$type$typen);
  251.             $typen '6';
  252.             $type 'railway=station';
  253.             $array6   =  $fonction->Openstreetmap($ville$type$typen);
  254.             $array4 array_merge($bus$tram$metro);
  255.             //   var_dump($array4);
  256.             $result array_merge($array1$array2$array3$array4);
  257.             $transport array_merge($lignesbus$lignestrams$lignesmetro);
  258.             $nbr 0;
  259.             // tableau pour faire le nombrepar categorie
  260.             $entie1 0;
  261.             $entie2 0;
  262.             $entie3 0;
  263.             $entie4 0;
  264.             $logo =  0;
  265.             $taillelogo =  0;
  266.             $typesensei 0;
  267.             foreach ($result as $customer) {
  268.                 if ($customer['type'] >  3) {
  269.                     // tableaiu pour tester les lignes 
  270.                     $lignes = [];
  271.                     foreach ($transport as $lignebus) {
  272.                         //  var_dump($lignebus);
  273.                         $distanceligne  =  $fonction->Distance($lignebus['lat'], $lignebus['lon'], $customer['lat'], $customer['lon']);
  274.                         $distanceselect 1;
  275.                         if ($distanceligne <  $distanceselect) {
  276.                             $lignes[] = array('colour' => $lignebus['colour'], 'network:short' => $lignebus['network:short'], 'network' => $lignebus['network'], 'operator:short' =>  $lignebus['operator:short'], 'from' => $lignebus['from'], 'name' => $lignebus['name'], 'ligne' => $lignebus['ligne'], 'type' => $lignebus['type'], 'highway' => $customer['highway'], "trolley" => $customer['trolley']);
  277.                         }
  278.                     }
  279.                 }
  280.                 $nbr++;
  281.                 $customer json_decode(json_encode($customer), true);
  282.                 $distance  =  $fonction->Distance($customer['lat'], $customer['lon'], $latitudelogement$longitudelogement);
  283.                 $distanceselect 1.5;
  284.                 if ($distance <  $distanceselect) {
  285.                     if ($customer['typenbr'] == 1) {
  286.                         $entie1++;
  287.                         if (isset($customer['typesensei']) == 1) {
  288.                             $typesensei $customer['typesensei'];
  289.                         } else {
  290.                             $typesensei 0;
  291.                         }
  292.                     }
  293.                     if ($customer['typenbr'] == 2) {
  294.                         $entie2++;
  295.                     }
  296.                     if ($customer['typenbr'] == 3) {
  297.                         $entie3++;
  298.                     }
  299.                     if ($customer['typenbr'] == 4) {
  300.                         $entie4++;
  301.                         $logo =   0;
  302.                         $taillelogo =  0;
  303.                         if ($customer['brand'] != 0) {
  304.                             $userRepoLogo $entityManager->getRepository(Photoindex::class);
  305.                             $usersByRolelogo $userRepoLogo->findBy(["type" => $customer['brand']]);
  306.                             foreach ($usersByRolelogo  as $user) {
  307.                                 $logo $user->getImages();
  308.                                 $taillelogo $user->getNbr();
  309.                             }
  310.                         }
  311.                     }
  312.                     $distance round($distance2);  // 1.96
  313.                     $tabligne[$nbr]   =   array("type" => $customer['nomfr'], "nom" => $customer['name'], "lat" => $customer['lat'], "lon" => $customer['lon'], "typenbr" => $customer['typenbr'], "nbr" => $nbr"distance" => $distance"logo" => $logo"taillelogo" => $taillelogo"typesensei" => $typesensei'highway' => $customer['highway'], 'lignes' => $lignes'amenity' => $customer['amenity']);
  314.                 }
  315.             }
  316.             $entite = array('entit1' => $entie1'entit2' => $entie2'entit3' => $entie3'entit4' => $entie4);
  317.             $adresse $tabligne;
  318.             $message = new Messages;
  319.             $form $this->createForm(MessagesType::class, $message);
  320.             $form->handleRequest($request);
  321.             if ($form->isSubmitted() && $form->isValid()) {
  322.                 $message->setSender($this->getUser());
  323.                 $em $this->getDoctrine()->getManager();
  324.                 $message->setTitle($titre);
  325.                 $message->setAnnonce($user);
  326.                 $message->setAgence($agence);
  327.                 $message->setRecipient($userrecipient);
  328.                 // recuperation du message pour le mail
  329.                 $messageenvoie $message->getMessage();
  330.                 $titre $message->getTitle();
  331.                
  332.                 $em->persist($message);
  333.                 $em->flush();
  334.                 $email = (new Email())
  335.                     ->from($sent)
  336.                     ->to($emailrecipient)
  337.                     //->cc('cc@example.com')
  338.                     //->bcc('bcc@example.com')
  339.                     //->replyTo('fabien@example.com')
  340.                     //->priority(Email::PRIORITY_HIGH)
  341.                     ->subject($titre)
  342.                     ->text('Sending emails is fun again!')
  343.                     ->html($messageenvoie);
  344.                 $mailer->send($email);
  345.                 $message "Message envoyé avec succès.";
  346.                 // message 
  347.                 $session $request->getSession();
  348.                 $session->set('message'1);
  349.  
  350.                 $this->addFlash('success'$message);
  351.             }
  352.             // condition pour faire les proposition de financement
  353.             $nbr 0;
  354.             $nbr1 0;
  355.             $userRepo $entityManager->getRepository(Financement::class);
  356.             $financement $userRepo->findAll();
  357.             $tabparligne = array();
  358.             $tabparbanque = array();
  359.             foreach ($financement as $user) {
  360.                 $nbr++;
  361.                 $taux $user->getTaux();
  362.                 $etablissement $user->getEtablissement();
  363.                 $pourcent_annuel 1.22;
  364.                 $nbr1 0;
  365.                 $duree 120;
  366.                 for ($i 1$i <= 3$i++) {
  367.                     $ans $duree 12;
  368.                     $nbr1++;
  369.                     $mensualite =    $fonction->CalculVPM($duree$pourcent_annuel$somme);
  370.                     $mensualite round($mensualite2);
  371.                     $tabparligne[$nbr1]   =   array("mensualite" => $mensualite"duree" => $ans);
  372.                     $duree $duree 2;
  373.                 }
  374.                 $tabparbanque  $tabparligne;
  375.                 $usertab[$nbr]  =   array("etablissement" =>  $etablissement"mensualite" =>  $mensualite"user" =>  $tabparbanque);
  376.                 // condition pour les proposition
  377.                 $recherchelog 2;
  378.                 $select 'u.logement  <= :logement';
  379.                 $orderBytype 'u.id';
  380.                 $orderBytypeOrder  'ASC';
  381.                 $userRepo $entityManager->getRepository(Annonces::class);
  382.                 $queryBuilder $entityManager->createQueryBuilder();
  383.                 $queryBuilder->select('u')
  384.                     ->from(Annonces::class, 'u')
  385.                     ->where('u.codepostale IN (:codepostale)')
  386.                     ->orwhere('u.titre IN (:titre)')
  387.                     ->andWhere($select)
  388.                     ->andWhere('u.prix  <= :prix')
  389.                     ->setParameter('codepostale', [$codepostale])
  390.                     ->setParameter('titre', ['essai'])
  391.                     ->setParameter('prix',  [$somme])
  392.                     ->setParameter('logement',  [$recherchelog])
  393.                     ->orderBy($orderBytype$orderBytypeOrder)
  394.                     ->setMaxResults(5);
  395.                 $query $queryBuilder->getQuery();
  396.                 $proposition $query->getResult();
  397.                 $userRepo $entityManager->getRepository(PostLike::class);
  398.                 $usersByRolepost $userRepo->findBy(["user" => $iduser]);
  399.                 $poste $usersByRolepost;
  400.             }
  401.         }
  402.    
  403.         if ($defaut ==  1) {
  404.             return $this->render('logement/index.html.twig', [
  405.                 "form" => $form->createView(),
  406.                 'annonce' => $annonce,
  407.                 'logo' => $logosite,
  408.                 'image' => $images,
  409.                 'auteur' => $userrecipient,
  410.                 'messageform' => $messageform,
  411.                 'like' => $like,
  412.                 'zoom' => $zoom,
  413.                 'latitude' => $latitude,
  414.                 'longitude' => $longitude,
  415.                 'latitudelogement' => $latitudelogement,
  416.                 'longitudelogement' => $longitudelogement,
  417.                 'presentation' => $presentation,
  418.                 'interet' => $usertab,
  419.                 'proposition' => $proposition,
  420.                 'post' => $poste,
  421.                 'adresse' => $adresse,
  422.                 'entite' => $entite,
  423.                 'url' => $url,
  424.                 'sejour' => $sejour,
  425.                 'post' => $post,
  426.             ]);
  427.         } else {
  428.             return $this->render('logement/defaut.html.twig', [
  429.                 'message' => $messageerreur,
  430.                 'logo' => $logosite,
  431.             ]);
  432.         }
  433.     }
  434. }