src/Controller/TripsController.php line 420

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Parametres;
  4. use App\Entity\Voyage;
  5. use App\Entity\Etapes;
  6. use App\Entity\ListeMenu;
  7. use App\Entity\Jaime;
  8. use App\Entity\PhotosUsers;
  9. use App\Entity\ListeMenuTranslation;
  10. use App\Entity\ListeSaison;
  11. Use App\Entity\ListeSaisonTranslation;
  12. use App\Services\MenuFetcher;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  15. use Doctrine\ORM\EntityManagerInterface;
  16. use Doctrine\ORM\Query;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  19. use Symfony\Component\Form\AbstractType;
  20. use Symfony\Component\Form\FormBuilderInterface;
  21. use Symfony\Component\OptionsResolver\OptionsResolver;
  22. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  23. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  24. use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
  25. use Symfony\Component\Form\Extension\Core\Type\DateType;
  26. use Symfony\Component\Form\Extension\Core\Type\TextType;
  27. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  28. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  29. use Symfony\Component\Form\Extension\Core\Type\CountryType;
  30. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  31. class TripsController extends Controller
  32. {
  33.     /**
  34.      * @Route("/trips", name="trips")
  35.      */
  36.     public function index(SessionInterface $session, MenuFetcher $menuFetcher,Request $request)
  37.     {
  38.         
  39.         $user = $session->get('user',null);
  40.         /*
  41.          * controle d'accès 
  42.          * l'utilisateur doit avoir au minimum un credential user ou admin
  43.          */
  44.         
  45.         if ($user && $user->getIdCredentiel() > 2) 
  46.         {
  47.             $this->erreur = 2;       
  48.             return $this->redirect('Authentication/index?login_user=true&erreur=2');  
  49.         } 
  50.         if($user == null) 
  51.         {
  52.             return $this->redirectToRoute('login');
  53.         }
  54.         else
  55.         {
  56.             $utilisateur = array();
  57.             $utilisateur['iduser'] = $user->getIdParametres();
  58.             $utilisateur['nom'] = $user->getNom();
  59.             $utilisateur['prenom'] = $user->getPrenom();
  60.             $utilisateur['langue'] = $user->getLangue();     
  61.             $utilisateur['credentiel'] =    $user->getIdCredentiel(); 
  62.             $credentiel = $user->getIdCredentiel();               
  63.             $utilisateur['pseudo'] = $user->getPseudo();
  64.             $session->set('iduser', $user->getIdParametres());
  65.             $session->set('pseudo', $user->getPseudo());
  66.             if ($user->getPhoto() =='' || $user->getPhoto() == null)
  67.                 $utilisateur['photo'] = 'avatar.jpg';
  68.             else
  69.                 $utilisateur['photo'] = $user->getPhoto();
  70.         }            
  71.         
  72.         $em = $this->getDoctrine()->getManager();
  73.         $stmt = $em->getConnection()->prepare("SELECT `nom_voyage`, `detail_voyage`, `id_voyage_serveur` FROM `voyage` WHERE `voyage`.`id_parametres` = ".$user->getIdParametres()." ORDER BY `date_maj` DESC");
  74.         $stmt->execute();
  75.         $mesVoyages = $stmt->fetchAll();
  76.     
  77.     
  78.         
  79.         $listeMenu = $menuFetcher->menu('en', $em->getConnection());
  80.         $session->set('last_activity_time', time());
  81.         $page = 1; //par défaut
  82.         
  83.         return $this->render('Trips/index.html.php', array(
  84.             'mesProjets' => $mesVoyages,
  85.             
  86.             'listeMenu' => $listeMenu,
  87.             'page'=> $page,
  88.             'credentiel' => $user->getIdCredentiel(),
  89.             'utilisateur' => $utilisateur
  90.         ));
  91.         
  92.        /* return $this->json([
  93.             'message' => 'Welcome to your new controller!',
  94.             'path' => 'src/Controller/TripsController.php',
  95.         ]);*/    
  96.         
  97.         
  98.     }
  99.     
  100.      
  101.     public function showTrip($credentiel=0, MenuFetcher $menuFetcher, SessionInterface $session,Request $request)
  102.     {
  103.         $langue='fr';
  104.         $nblike=0;
  105.         $nbComments=0;
  106.         // éléments du menu dynamique 
  107.        $conn = $this->getDoctrine()->getManager()->getConnection();
  108.        $em = $this->getDoctrine()->getManager();
  109.        $listeMenu    = $menuFetcher->menu('en',$conn);
  110.         // données utilisateurs 
  111.         $id_voyage_serveur = $_GET['id_voyage_serveur'];
  112.         $id_user           = $_GET['id_parametre'];
  113.         $user = $session->get('user',null);
  114.         $last_activity = $session->get('last_activity_time',null);
  115.         $langue ='fr';
  116.         if ($user && $last_activity && (time() - $last_activity) > 86400)//24h d'inactivité = expiration de la session
  117.         {
  118.             $user = null;
  119.             $session->clear();
  120.             $session->invalidate();
  121.         }
  122.         
  123.         if($user)
  124.             $langue = $user->getLangue();
  125.         /*$user = $this->getDoctrine()
  126.                 ->getRepository(Parametres::class)
  127.                 ->find($id_user);*/
  128.                 
  129.         $utilisateur = array();
  130.         
  131.         if ($user==null)
  132.         {
  133.             $credentiel=3;
  134.             $utilisateur['nom'] = 'Visitor';
  135.             $utilisateur['photo'] = 'avatar.jpg';
  136.             $utilisateur['pseudo'] = 'Visitor';
  137.             $utilisateur['prenom'] = 'Visitor';
  138.         }
  139.         else
  140.         {
  141.             $utilisateur['iduser'] = $user->getIdParametres();
  142.             $utilisateur['nom'] = $user->getNom();
  143.             $utilisateur['prenom'] = $user->getPrenom();
  144.             $utilisateur['langue'] = $user->getLangue();     
  145.             $utilisateur['credentiel'] =    $user->getIdCredentiel(); 
  146.             $credentiel = $user->getIdCredentiel();               
  147.             $utilisateur['pseudo'] = $user->getPseudo();
  148.             $session->set('iduser', $user->getIdParametres());
  149.             $session->set('pseudo', $user->getPseudo());
  150.             if ($user->getPhoto() =='' || $user->getPhoto() == null)
  151.                 $utilisateur['photo'] = 'avatar.jpg';
  152.             else
  153.                 $utilisateur['photo'] = $user->getPhoto();
  154.         }
  155.         //données du voyage
  156.         $voyage = $this->getDoctrine()
  157.                 ->getRepository(Voyage::class)
  158.                 ->find($id_voyage_serveur);
  159.         //
  160.         if (!empty($voyage))
  161.             $id_voyageur = $voyage->getIdParametres();
  162.         $voyageur = $this->getDoctrine() 
  163.                 ->getRepository(Parametres::class)
  164.                 ->find($id_voyageur);
  165.         if (!empty($voyageur))
  166.         {
  167.         
  168.             $utilisateur['pseudo_voyageur']=$voyageur->getPseudo();
  169.             
  170.             if ($voyageur->getPhoto() != Null || $voyageur->getPhoto() !='' )
  171.                 $utilisateur['photo_voyageur']=$voyageur->getPhoto();
  172.             else
  173.                 $utilisateur['photo_voyageur']='avatar.jpg';
  174.         }
  175.             
  176.         // voir le nombre de like sur le voyage
  177.         $nblike    = $this->getNblike($id_voyage_serveur,$id_user);
  178.             
  179.         // appel du moteur de pagination 
  180.        
  181.        $pagination = $this->getCurrentStage($request, $id_voyage_serveur,$em);
  182.        // lire les photos de l'étape 
  183.         $mesEtapes = $pagination->getItems();
  184.         $url_photos=array();
  185.         $num_etape=1;
  186.         foreach ($mesEtapes  as $etape)
  187.         {
  188.             // photos étape
  189.                 $photo_users = $this->getDoctrine()
  190.                          ->getRepository(PhotosUsers::class)
  191.                          ->findBy(['idEtapeServeur'=>$etape->getIdEtapeServeur()]);
  192.             $num_photo=1;
  193.             foreach($photo_users as $photo)
  194.             {
  195.                 //$nom_photo = 'mini_papillon'.$photo->getIdphotoUser().$etape->getIdEtapeServeur().'.'.$photo->getExtension();
  196.             $url_photos[$num_etape][$num_photo]=array($photo->getIdphotoUser(),$etape->getIdEtapeServeur(),$photo->getExtension());
  197.             $num_photo++;
  198.             }
  199.            $num_etape++;            
  200.         }
  201.         $listePays = $this->getListePays($em);
  202.         
  203.         $session->set('last_activity_time', time());
  204.         $locale="fr_FR";
  205.         return $this->render('Trips/showTrip.html.php', array(
  206.         'voyage'=>$voyage,
  207.         'mesEtapes'=>$pagination->getItems(),
  208.         'langue'=>$langue,
  209.         'id_saison'=>$voyage->getIdListeSaison(),
  210.         'listeMenu'=>$listeMenu,
  211.         'listePays'=>$listePays,
  212.         'credentiel'=>$credentiel,
  213.         'utilisateur'=>$utilisateur,
  214.         'pagination'=>$pagination,
  215.         'nblike'=>$nblike,
  216.         'nbComments'=>$nbComments,
  217.         'user'=>$user,
  218.         'url_photos'=>$url_photos,
  219.         'locale'=>$locale
  220.         
  221.             
  222.     ));
  223. }
  224. public function getCurrentStage($request,$idVoyageServeur,$em)
  225.  {
  226.      
  227.      $dql   = "SELECT e FROM App\Entity\Etapes e WHERE e.idVoyageServeur ='".$idVoyageServeur."' ORDER BY e.numEtape";
  228.         $query = $em->createQuery($dql);
  229.         
  230.     /**
  231.      *@var $paginator \knp\Component\Pager\Paginator
  232.      */
  233.     
  234.     $paginator = $this->get('knp_paginator');
  235.     
  236.     
  237.     $pagination = $paginator->paginate(
  238.         $query,
  239.         $request->query->getInt('page',1),
  240.         $request->query->getInt('limit',1)
  241.     );
  242.    /*  echo '<pre>';
  243.     var_dump($pagination);
  244.     echo '</pre>';
  245.     die();*/
  246.    
  247.     return $pagination;
  248.  }
  249. public function newStage(Request $request, SessionInterface $session, MenuFetcher $menuFetcher)
  250. {
  251.     $id_voyage                 = $_GET['id_voyage_serveur'];
  252.     $id_etape_serveur         = $_GET['id_etape_serveur'];
  253.     $num_etape_precedent     = $_GET['current_sate_num'];
  254.     $user = $session->get('user',null);
  255.     if($user == null)
  256.     {
  257.         return $this->redirectToRoute('login');
  258.     }
  259.     
  260.     //$id_voyage = $_POST['id_voyage_serveur'];
  261.     //$page = $_POST['page'];
  262.     
  263.     $em = $this->getDoctrine()->getManager();
  264.     $query_voyage = $em->createQuery('SELECT v FROM App\Entity\Voyage v WHERE v.idVoyageServeur = :id AND v.idParametres = :param')
  265.                         ->setParameter('id', $id_voyage)
  266.                         ->setParameter('param', $user->getIdParametres());
  267.     $voyages = $query_voyage->execute();                    
  268.     
  269.     if(empty($voyages)) 
  270.     {
  271.         return $this->redirectToRoute('trip');
  272.     }
  273.             
  274.         $utilisateur = array();
  275.         
  276.         if ($user==null)
  277.         {
  278.             $credentiel=3;
  279.             $utilisateur['nom'] = 'Visitor';
  280.             $utilisateur['photo'] = 'avatar.jpg';
  281.             $utilisateur['pseudo'] = 'Visitor';
  282.             $utilisateur['prenom'] = 'Visitor';
  283.         }
  284.         else
  285.         {
  286.             $utilisateur['iduser'] = $user->getIdParametres();
  287.             $utilisateur['nom'] = $user->getNom();
  288.             $utilisateur['prenom'] = $user->getPrenom();
  289.             $utilisateur['langue'] = $user->getLangue();     
  290.             $utilisateur['credentiel'] =    $user->getIdCredentiel(); 
  291.             $credentiel = $user->getIdCredentiel();               
  292.             $utilisateur['pseudo'] = $user->getPseudo();
  293.             $session->set('iduser', $user->getIdParametres());
  294.             $session->set('pseudo', $user->getPseudo());
  295.             if ($user->getPhoto() =='' || $user->getPhoto() == null)
  296.                 $utilisateur['photo'] = 'avatar.jpg';
  297.             else
  298.                 $utilisateur['photo'] = $user->getPhoto();
  299.         }
  300.     $voyage = $voyages[0]; // resultat unique
  301.     
  302.     $listeMenu = $menuFetcher->menu('en', $em->getConnection());
  303.     $listePays = $this->getListePays($em);
  304.     $liste = $this->getListe($em);
  305.        $VoyageForm = $this->createFormBuilder($voyage)
  306.         ->add('idListeSaison', ChoiceType::class, array(
  307.             'choices' => array(
  308.                     'Printemps' => '1',
  309.                     'Eté' => '2',
  310.                     'Automne' => '3',
  311.                     'Hiver' => '4',
  312.                 )))
  313.         ->add('nomVoyage', TextType::class)
  314.         ->add('detailVoyage', TextareaType::class)
  315.         ->add('save', SubmitType::class, ['label' => 'valider'])
  316.         ->getForm();
  317.         $etape_affiche = new Etapes();
  318.         $etape_affiche->setDateCre(new \DateTime('now'));
  319.         $etape_affiche->setDateDeplacement(new \DateTime('now'));
  320.         $etape_affiche->setIdVoyageServeur($voyage->getIdVoyageServeur());
  321.         $etape_affiche->setNumEtape($num_etape_precedent + 1);
  322.         
  323.         //
  324.         $EtapeForm = $this->createFormBuilder($etape_affiche)  
  325.         ->add('dateDeplacement', DateType::class)
  326.         ->add('idListePays', ChoiceType::class, array('choices'=>$liste))
  327.         ->add('coordonneeGps', TextType::class)
  328.         ->add('adresse', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'25')))
  329.         ->add('hebergement', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'50')))
  330.         ->add('numEtape', IntegerType::class)
  331.         ->add('particulariteEtape', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'50')))
  332.         ->add('aVoir', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'50')))
  333.         ->add('aFaire', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'50')))
  334.         ->add('remarque', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'50')))
  335.         ->add('save', SubmitType::class, ['label' => 'valider'])
  336.         ->getForm();
  337.     $id_voyage_serveur=$voyage->getIdVoyageServeur();
  338.      $pagination = $this->getCurrentStage($request, $id_voyage_serveur,$em);
  339.         
  340.     return $this->render('Trips/newTrip.html.php', array(
  341.     'idVoyageServeur'=>$id_voyage, 
  342.     'VoyageForm'=>$VoyageForm->createView(),
  343.     'EtapeForm'=>$EtapeForm->createView(),
  344.     'page'=>$num_etape_precedent + 1,
  345.     'id_etape_serveur'=>$id_etape_serveur,
  346.     'url_photos'=>array(),
  347.     'num_etape'=>$num_etape_precedent + 1,
  348.     'credentiel'=>$user->getIdCredentiel(),
  349.     'utilisateur'=>$utilisateur,
  350.     'action'=>'new',
  351.     'pagination'=>$pagination,
  352.     'voyage'=>$voyage,
  353.     'user'=>$user,    
  354.     'listeMenu'=>$listeMenu));    
  355.     //echo 'id etape=>'.$id_etape_serveur;
  356.     //echo 'num etape=>'.$num_etape_precedent;
  357.     //die();
  358.     
  359. } 
  360. public function getEtapForm($etape)
  361. {
  362.   return $EtapeForm = $this->createFormBuilder($etape_affiche)  
  363.         ->add('dateDeplacement', DateType::class)
  364.         ->add('idListePays', ChoiceType::class, array('choices'=>$liste, 'preferred_choices' => array($etape_affiche->getIdListePays())))
  365.         ->add('coordonneeGps', TextType::class)
  366.         ->add('adresse', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'45')))
  367.         ->add('hebergement', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'50')))
  368.         ->add('numEtape', IntegerType::class)
  369.         ->add('particulariteEtape', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'50')))
  370.         ->add('aVoir', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'50')))
  371.         ->add('aFaire', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'50')))
  372.         ->add('remarque', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'50')))
  373.         ->add('save', SubmitType::class, ['label' => 'valider'])
  374.         ->getForm();
  375. }    
  376. Public function getListePays($em)
  377. {
  378.     $sql = "SELECT liste_pays.id_liste_pays, liste_pays_translation.pays  FROM `liste_pays`";
  379.        $sql .= " INNER JOIN `liste_pays_translation` "; 
  380.        $sql .= " ON `liste_pays_translation`.`id_liste_pays` = `liste_pays`.`id_liste_pays`";
  381.        $sql .= " where `lang`='fr' order by `pays`";
  382.        $statement_pays = $em->getConnection()->prepare($sql);
  383.        $statement_pays->execute();
  384.        $result_pays = $statement_pays->fetchAll();
  385.        $liste = array();
  386.        foreach($result_pays  as $key => $value)
  387.        {
  388.         $liste[$value['id_liste_pays']]=$value['pays'];
  389.        }
  390.   return $liste;       
  391. }
  392. Public function getListe($em)
  393. {
  394.     $sql = "SELECT liste_pays.id_liste_pays, liste_pays_translation.pays  FROM `liste_pays`";
  395.        $sql .= " INNER JOIN `liste_pays_translation` "; 
  396.        $sql .= " ON `liste_pays_translation`.`id_liste_pays` = `liste_pays`.`id_liste_pays`";
  397.        $sql .= " where `lang`='fr' order by `pays`";
  398.        $statement_pays = $em->getConnection()->prepare($sql);
  399.        $statement_pays->execute();
  400.        $result_pays = $statement_pays->fetchAll();
  401.        $liste = array();
  402.        foreach($result_pays  as $key => $value)
  403.        {
  404.         $liste[$value['pays']]=$value['id_liste_pays'];
  405.        }
  406.   return $liste;       
  407. }
  408. Public function coment()
  409. {
  410. }
  411. public function getNblike($idVoyageServeur,$id_user)
  412. {
  413.         $jaime= $this->getDoctrine()
  414.             ->getRepository(Jaime::class)
  415.             ->findBy(['idParametre'=>$id_user]);
  416.            
  417.             $this->user_like = true;     
  418.             if (!empty($jaime))
  419.              $this->user_like = false;
  420.          /******
  421.           * compter le nombre  de fois que le voyage a ét aimé
  422.           */
  423.          $this->nblike = 0;  
  424.          $enregts = $this->getDoctrine()
  425.             ->getRepository(Jaime::class)
  426.             ->findBy(['idVoyageServeur'=>$idVoyageServeur]);
  427.         
  428.          if (!isset($enregts))
  429.             $nblike = 0;
  430.          else
  431.             $nblike = count($enregts);
  432.     return $nblike;
  433.  
  434. }
  435. public function newProjet(Request $request, SessionInterface $session, MenuFetcher $menuFetcher)
  436. {
  437.         $user = $session->get('user',null);
  438.         $last_activity = $session->get('last_activity_time', null);
  439.         if($user == null)
  440.         {
  441.             return $this->redirectToRoute('login');
  442.         }
  443.         if($user && $last_activity && (time() - $last_activity) > 86400)
  444.         {
  445.             $session->clear();
  446.             $session->invalidate();
  447.             return $this->redirectToRoute('login');
  448.         }
  449.         
  450.         $langue = $user->getLangue();
  451.         $credentiel = $user->getIdCredentiel();
  452.         if ($user==null)
  453.         {
  454.             $credentiel=3;
  455.             $utilisateur['nom'] = 'Visitor';
  456.             $utilisateur['photo'] = 'avatar.jpg';
  457.             $utilisateur['pseudo'] = 'Visitor';
  458.             $utilisateur['prenom'] = 'Visitor';
  459.         }
  460.         else
  461.         {
  462.             $utilisateur['iduser'] = $user->getIdParametres();
  463.             $utilisateur['nom'] = $user->getNom();
  464.             $utilisateur['prenom'] = $user->getPrenom();
  465.             $utilisateur['langue'] = $user->getLangue();     
  466.             $utilisateur['credentiel'] =    $user->getIdCredentiel(); 
  467.             $credentiel = $user->getIdCredentiel();               
  468.             $utilisateur['pseudo'] = $user->getPseudo();
  469.             $session->set('iduser', $user->getIdParametres());
  470.             $session->set('pseudo', $user->getPseudo());
  471.             if ($user->getPhoto() =='' || $user->getPhoto() == null)
  472.                 $utilisateur['photo'] = 'avatar.jpg';
  473.             else
  474.                 $utilisateur['photo'] = $user->getPhoto();
  475.         }
  476.      // éléments du menu dynamique 
  477.        $conn = $this->getDoctrine()->getManager()->getConnection();
  478.        $listeMenu    = $menuFetcher->menu('en',$conn);
  479.        //liste pays
  480.        $sql = "SELECT liste_pays.id_liste_pays, liste_pays_translation.pays  FROM `liste_pays`";
  481.        $sql .= " INNER JOIN `liste_pays_translation` "; 
  482.        $sql .= " ON `liste_pays_translation`.`id_liste_pays` = `liste_pays`.`id_liste_pays`";
  483.        $sql .= " where `lang`='fr' order by `pays`";
  484.        //echo $sql;
  485.             $statement_pays =$conn->prepare($sql);
  486.             $statement_pays->execute();
  487.             $result_pays = $statement_pays->fetchAll();
  488.             $liste = array();
  489.        // liste des saisons 
  490.        foreach($result_pays  as $key => $value)
  491.        {
  492.         //  $liste=$value;
  493.       $liste[$value['pays']]=$value['id_liste_pays'];
  494.        }
  495.        $enregVoyage = new Voyage();
  496.        $VoyageForm = $this->createFormBuilder($enregVoyage)
  497.             ->add('idListeSaison', ChoiceType::class, array(
  498.             'choices' => array(
  499.                     'Printemps' => '1',
  500.                     'Eté' => '2',
  501.                     'Automne' => '3',
  502.                     'Hiver' => '4',  
  503.                 )))
  504.             ->add('nomVoyage', TextType::class)
  505.             ->add('detailVoyage', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'3','cols'=>'35')))
  506.             ->add('save', SubmitType::class, ['label' => 'valider'])
  507.             ->getForm();
  508.             
  509.       $etape = new Etapes();
  510.        $EtapeForm = $this->createFormBuilder($etape)  
  511.         ->add('dateDeplacement', DateType::class)
  512.         ->add('idListePays', ChoiceType::class, array('choices'=>$liste))
  513.         ->add('coordonneeGps', TextType::class)
  514.         ->add('adresse', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'42')))
  515.         ->add('hebergement', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'42')))
  516.         ->add('numEtape', IntegerType::class)
  517.         ->add('particulariteEtape', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'42')))
  518.         ->add('aVoir', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'42')))
  519.         ->add('aFaire', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'42')))
  520.         ->add('remarque', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'42')))
  521.         ->add('save', SubmitType::class, ['label' => 'valider'])
  522.         ->getForm();
  523.             
  524.         $session->set('last_activity_time', time());
  525.         
  526.         return $this->render('Trips/newTrip.html.php', array(
  527.         'VoyageForm'=>$VoyageForm->createView(),
  528.         'EtapeForm'=>$EtapeForm->createView(),
  529.         'langue'=>$langue,
  530.         'listeMenu'=>$listeMenu,
  531.         'num_etape'=>1,
  532.         'user'=>$user,
  533.         'utilisateur'=>$utilisateur,
  534.         'credentiel'=>$credentiel
  535.         ));
  536.             
  537. }
  538. public function editProject(Request $request, SessionInterface $session, MenuFetcher $menuFetcher) 
  539. {
  540.        /*
  541.        cette fonction permet l'édition d'un projet en vue d'une modification
  542.        */
  543.        $conn = $this->getDoctrine()->getManager()->getConnection();
  544.        $em = $this->getDoctrine()->getManager();
  545.        // récupérer le menu 
  546.        $listeMenu    = $menuFetcher->menu('en',$conn);
  547.         // récupération identifiant du voyage  
  548.         if($request->isMethod('GET'))
  549.             $id_voyage_serveur = $_GET['id_voyage_serveur'];
  550.         if (isset($_GET['page']) && !empty($_GET['page']))
  551.             $numEtape = $_GET['page'];
  552.         else
  553.             $numEtape=1;
  554.         
  555.         $user = $session->get('user',null);
  556.         $last_activity = $session->get('last_activity_time',null);
  557.         $langue ='fr';
  558.         if ($user && $last_activity && (time() - $last_activity) > 86400)//24h d'inactivité = expiration de la session
  559.         {
  560.             $user = null;
  561.             $session->clear();
  562.             $session->invalidate();
  563.         }
  564.         
  565.         if($user)
  566.             $langue = $user->getLangue();
  567.         /*$user = $this->getDoctrine()
  568.                 ->getRepository(Parametres::class)
  569.                 ->find($id_user);*/
  570.                 
  571.         $utilisateur = array();
  572.         
  573.         if ($user==null)
  574.         {
  575.             $credentiel=3;
  576.             $utilisateur['nom'] = 'Visitor';
  577.             $utilisateur['photo'] = 'avatar.jpg';
  578.             $utilisateur['pseudo'] = 'Visitor';
  579.             $utilisateur['prenom'] = 'Visitor';
  580.         }
  581.         else
  582.         {
  583.             $utilisateur['iduser'] = $user->getIdParametres();
  584.             $utilisateur['nom'] = $user->getNom();
  585.             $utilisateur['prenom'] = $user->getPrenom();
  586.             $utilisateur['langue'] = $user->getLangue();     
  587.             $utilisateur['credentiel'] =    $user->getIdCredentiel(); 
  588.             $credentiel = $user->getIdCredentiel();               
  589.             $utilisateur['pseudo'] = $user->getPseudo();
  590.             $session->set('iduser', $user->getIdParametres());
  591.             $session->set('pseudo', $user->getPseudo());
  592.             if ($user->getPhoto() =='' || $user->getPhoto() == null)
  593.                 $utilisateur['photo'] = 'avatar.jpg';
  594.             else
  595.                 $utilisateur['photo'] = $user->getPhoto();
  596.         }
  597.         //données du voyage
  598.     
  599.     if($request->isMethod('POST'))
  600.     {
  601.         $id_voyage = $_POST['id_voyage_serveur'];
  602.     }
  603.     if($request->isMethod('GET'))
  604.     {
  605.         $id_voyage = $_GET['id_voyage_serveur'];
  606.     }
  607.     
  608.     $user = $session->get('user',null);
  609.     if($user == null)
  610.     {
  611.         return $this->redirectToRoute('login');
  612.     }
  613.     
  614.     //$id_voyage = $_POST['id_voyage_serveur'];
  615.     //$page = $_POST['page'];
  616.     
  617.     $em = $this->getDoctrine()->getManager();
  618.     $query_voyage = $em->createQuery('SELECT v FROM App\Entity\Voyage v WHERE v.idVoyageServeur = :id AND v.idParametres = :param')
  619.                         ->setParameter('id', $id_voyage)
  620.                         ->setParameter('param', $user->getIdParametres());
  621.     $voyages = $query_voyage->execute();                    
  622.     
  623.     if(empty($voyages)) 
  624.     {
  625.         return $this->redirectToRoute('trip');
  626.     }
  627.     
  628.     $voyage = $voyages[0]; // resultat unique
  629.     
  630.     
  631.     //$listeMenu = $menuFetcher->menu('en', $em->getConnection());
  632.     
  633.     $sql = "SELECT liste_pays.id_liste_pays, liste_pays_translation.pays  FROM `liste_pays`";
  634.        $sql .= " INNER JOIN `liste_pays_translation` "; 
  635.        $sql .= " ON `liste_pays_translation`.`id_liste_pays` = `liste_pays`.`id_liste_pays`";
  636.        $sql .= " where `lang`='fr' order by `pays`";
  637.        $statement_pays = $em->getConnection()->prepare($sql);
  638.        $statement_pays->execute();
  639.        $result_pays = $statement_pays->fetchAll();
  640.        $liste = array();
  641.        foreach($result_pays  as $key => $value)
  642.        {
  643.         $liste[substr($value['pays'],0,10)]=$value['id_liste_pays'];
  644.        }  
  645.        
  646.     if (!isset($numEtape))
  647.         $_GET['num_etape'] = 1;
  648.     $query_etape = $em->createQuery('SELECT e FROM App\Entity\Etapes e WHERE e.idVoyageServeur = :id AND e.numEtape = :numEtape')
  649.                         ->setParameter('id', $id_voyage)
  650.                         ->setParameter('numEtape', $numEtape);
  651.     $etape_temp = $query_etape->execute();
  652.     if(empty($etape_temp))  
  653.     {
  654.         $etape_affiche = new Etapes();
  655.         $etape_affiche->setDateCre(new \DateTime('now'));
  656.         $etape_affiche->setIdVoyageServeur($voyage->getIdVoyageServeur());
  657.         $etape_affiche->setNumEtape($numEtape);
  658.     }
  659.     else
  660.     {
  661.         $etape_affiche = $etape_temp[0];
  662.         
  663.         //var_dump($etape_affiche);
  664.              
  665.     }
  666.     
  667.     $url_photos=array();
  668.     $photo_users = $this->getDoctrine()
  669.                     ->getRepository(PhotosUsers::class)
  670.                     ->findBy(['idEtapeServeur'=>$etape_affiche->getIdEtapeServeur()]);
  671.     $num_photo=1;
  672.     foreach($photo_users as $photo)
  673.     {
  674.         $url_photos[1][$num_photo]=array($photo->getIdphotoUser(),$etape_affiche->getIdEtapeServeur(),$photo->getExtension());
  675.         $num_photo++;
  676.     }
  677.     
  678.     /*
  679.     préparation du formulaire voyageForm
  680.     */
  681.     $VoyageForm = $this->createFormBuilder($voyage,['attr' => ['id' => 'wizard']])
  682.         ->add('idListeSaison', ChoiceType::class, array(
  683.             'choices' => array(
  684.                     'Printemps' => '1',
  685.                     'Eté' => '2',
  686.                     'Automne' => '3',
  687.                     'Hiver' => '4',
  688.                 )))
  689.         ->add('nomVoyage', TextType::class)
  690.         ->add('detailVoyage', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'3','cols'=>'32')))
  691.         ->add('save', SubmitType::class, ['label' => 'valider'])
  692.         ->getForm();
  693. /*    $VoyageForm->handleRequest($request);
  694.     if ($VoyageForm->isSubmitted() && $VoyageForm->isValid()) 
  695.     {
  696.         $voyage->setDateMaj(new \DateTime('now'));
  697.         $voyage->setIdParametres($user->getIdParametres());
  698.         $em->persist($voyage);
  699.         $em->flush();
  700.     }*/
  701.     
  702.     /*
  703.      préparation du formulaire etapeForm
  704.     */     
  705.     $EtapeForm = $this->createFormBuilder($etape_affiche)  
  706.         ->add('dateDeplacement', DateType::class)
  707.         ->add('idListePays', ChoiceType::class, array('choices'=>$liste, 'preferred_choices' => array($etape_affiche->getIdListePays())))
  708.         ->add('coordonneeGps', TextType::class)
  709.         ->add('adresse', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'42')))
  710.         ->add('hebergement', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'42')))
  711.         ->add('numEtape', IntegerType::class)
  712.         ->add('particulariteEtape', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'42')))
  713.         ->add('aVoir', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'42')))
  714.         ->add('aFaire', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'42')))
  715.         ->add('remarque', TextareaType::class,array('attr'=>array('class'=>'form-control','rows'=>'5','cols'=>'42')))
  716.         ->add('save', SubmitType::class, ['label' => 'valider'])
  717.         ->getForm();
  718. /*    $EtapeForm->handleRequest($request);
  719.     if ($EtapeForm->isSubmitted() && $EtapeForm->isValid()) 
  720.     {
  721.         $etape_affiche->setDateMaj(new \DateTime('now'));
  722.         $etape_affiche->setNumEtape(1);
  723.         $em->persist($etape_affiche);
  724.         $em->flush();
  725.     }*/
  726.     // gestion de la pagination
  727.     $id_voyage_serveur=$voyage->getIdVoyageServeur();    
  728.     $pagination = $this->getCurrentStage($request, $id_voyage_serveur,$em);
  729.     return $this->render('Trips/editProject.html.php', array(
  730.     'voyage'=>$voyage,
  731.     'idVoyageServeur'=>$id_voyage, 
  732.     'VoyageForm'=>$VoyageForm->createView(),
  733.     'EtapeForm'=>$EtapeForm->createView(),
  734.     'page'=>$numEtape,
  735.     'id_etape_serveur'=>$etape_affiche->getIdEtapeServeur(),
  736.     'url_photos'=>$url_photos,
  737.     'num_etape'=>$etape_affiche->getNumEtape(),
  738.     'credentiel'=>$user->getIdCredentiel(),
  739.     'utilisateur'=>$utilisateur,
  740.     'pagination'=>$pagination,
  741.     'user'=>$user,
  742.     'listeMenu'=>$listeMenu));
  743.      
  744. }
  745. public function saveProjet(Request $request,SessionInterface $session)
  746. {
  747.     /*
  748.     Ensemble des sénarios pour mettre à jour les tables Voyages et étapes 
  749.     */
  750.             
  751.     $user = $session->get('user',null);
  752.     $last_activity = $session->get('last_activity_time', null);
  753.     /*
  754.        si session utilisaateur expirée reconnexion de l'utilisateur 
  755.     */
  756.     if($user == null)
  757.     {
  758.         return $this->redirectToRoute('login');
  759.     }
  760.     
  761.     if($user && $last_activity && (time() - $last_activity) > 86400)
  762.     {
  763.         $session->clear();
  764.         $session->invalidate();
  765.         return $this->redirectToRoute('login');
  766.     }
  767.     // 
  768.     $em = $this->getDoctrine()->getManager();
  769.        $sql = "SELECT liste_pays.id_liste_pays, liste_pays_translation.pays  FROM `liste_pays`";
  770.        $sql .= " INNER JOIN `liste_pays_translation` "; 
  771.        $sql .= " ON `liste_pays_translation`.`id_liste_pays` = `liste_pays`.`id_liste_pays`";
  772.        $sql .= " where `lang`='fr' order by `pays`";
  773.        $statement_pays = $em->getConnection()->prepare($sql);
  774.        $statement_pays->execute();
  775.        $result_pays = $statement_pays->fetchAll();
  776.        $liste = array();
  777.        foreach($result_pays  as $key => $value)
  778.        {
  779.         $liste[$value['pays']]=$value['id_liste_pays'];
  780.        }  
  781.     $session->set('last_activity_time', time());
  782.     $entityManager = $this->getDoctrine()->getManager();
  783.     /*
  784.      update voyage 
  785.      si l'id du voyage existe il faut systématiquement faire une mise à jour 
  786.     */
  787.     
  788.     if (isset($_POST['id_voyage_serveur']) && !empty($_POST['id_voyage_serveur']))
  789.         
  790.     {
  791.     
  792.                 if ($_POST['action'] == "new")
  793.              {
  794.                  // die('je viens');
  795.                   $idVoyage = $_POST['id_voyage_serveur'];
  796.                   $numEtape = $_POST['numEtape'];
  797.                   $this->saveStage($request,$idVoyage,$numEtape);
  798.                   return $this->redirectToRoute('index');
  799.              }
  800.          // update par defaut de l'entité voyage
  801.          $id_voyage = $_POST['id_voyage_serveur'];
  802.          $num_etape = $_POST['numEtape'];
  803.          $enregVoyage = $em->getRepository(Voyage::class)->find($id_voyage);
  804.          //$enregVoyage = new Voyage($voyage );
  805.         
  806.        $VoyageForm = $this->createFormBuilder($enregVoyage)
  807.             ->add('idListeSaison', ChoiceType::class, array(
  808.             'choices' => array(
  809.                     'Printemps' => '1',
  810.                     'Eté' => '2',
  811.                     'Automne' => '3',
  812.                     'Hiver' => '4',
  813.                 )))
  814.             ->add('nomVoyage', TextType::class)
  815.             ->add('detailVoyage', TextareaType::class)
  816.             ->add('save', SubmitType::class, ['label' => 'valider'])
  817.             ->getForm();
  818.          $VoyageForm->handleRequest($request);
  819.          if ($VoyageForm->isSubmitted() && $VoyageForm->isValid()) {
  820.             //$enregVoyage->setDateCreation(new \DateTime('now'));
  821.             $enregVoyage->setDateMaj(new \DateTime('now'));
  822.             $enregVoyage->setIdParametres($user->getIdParametres());
  823.             
  824.             //$entityManager->persist($enregVoyage);
  825.             $entityManager->flush();
  826.             $lastId = $enregVoyage->getIdVoyageServeur();
  827.         // $voyage->setDetailVoyage=$_POST['detailVoyage'];
  828.         // $voyage->setNomVoyage=$_POST['form[nomVoyage]'];   
  829.         // $voyage_>setDateMaj(new \DateTime('now'));
  830.         // $entityManager->flush();
  831.          }
  832.     /*
  833.         update de l'entité étape si num etape existe 
  834.     */
  835.         
  836.     //   on vérifie si  le numéro d'étape envoyé ou saisie existe 
  837.          if (!empty($_POST['numEtape']))
  838.             $numEtape = $_POST['numEtape'];
  839.         
  840.             //die('Num etape='.$numEtape);  
  841.           
  842.          $etape=$entityManager->getRepository(Etapes::class)
  843.          ->findOneBy(['idVoyageServeur'=>$_POST['id_voyage_serveur'],'numEtape'=>$_POST['numEtape']]);
  844.          /*
  845.          echo '<pre>';
  846.          var_dump($etape);
  847.          echo '</pre>';
  848.          die();*/
  849.          
  850.           $EtapeForm = $this->createFormBuilder($etape)
  851.             //->add('numEtape', IntegerType::class,array('attr'=>array('value'=>$numEtape)))
  852.                ->add('idListePays', ChoiceType::class, ['choices'=>$liste])
  853.             ->add('dateDeplacement', DateType::class)
  854.             ->add('coordonneeGps', TextType::class)
  855.             ->add('adresse', TextareaType::class)
  856.             ->add('hebergement', TextareaType::class)
  857.             ->add('particulariteEtape', TextareaType::class)
  858.             ->add('aVoir', TextareaType::class)
  859.             ->add('aFaire', TextareaType::class)
  860.             ->add('remarque', TextareaType::class)
  861.             ->add('save', SubmitType::class, ['label' => 'valider'])
  862.             ->getForm();
  863.         $EtapeForm->handleRequest($request);   
  864.         // echo 'je passe ici  encore  ';
  865.          if ($EtapeForm->isSubmitted() && $EtapeForm->isValid()) {
  866.                 // die('je soumets num etape ='.$numEtape);
  867.          if (!empty($etape))
  868.          {              
  869.             $etape->setDateMaj(new \DateTime('now'));
  870.             
  871.           }
  872.           else
  873.           {
  874.               //die('+++++++++');
  875.             $etape->setDateCre(new \DateTime('now'));
  876.             $etape->setDateMaj(new \DateTime('now'));
  877.             $etape->setIdVoyageServeur($lastId);
  878.             $etape->setNumEtape($numEtape);
  879.             $entityManager = $this->getDoctrine()->getManager();
  880.             $entityManager->persist($etape); 
  881.           }
  882.            $entityManager->flush();
  883.            return $this->redirectToRoute('index');
  884.              
  885.       }
  886.     }
  887.       
  888.     /*
  889.         nouveau voyage projet 
  890.     */
  891.        $enregVoyage = new Voyage();
  892.         
  893.        $VoyageForm = $this->createFormBuilder($enregVoyage)
  894.             ->add('idListeSaison', ChoiceType::class, array(
  895.             'choices' => array(
  896.                     'Printemps' => '1',
  897.                     'Eté' => '2',
  898.                     'Automne' => '3',
  899.                     'Hiver' => '4',
  900.                 )))
  901.             ->add('nomVoyage', TextType::class)
  902.             ->add('detailVoyage', TextareaType::class)
  903.             ->add('save', SubmitType::class, ['label' => 'valider'])
  904.             ->getForm();
  905.          $VoyageForm->handleRequest($request);
  906.          if ($VoyageForm->isSubmitted() && $VoyageForm->isValid()) {
  907.             $enregVoyage->setDateCreation(new \DateTime('now'));
  908.             $enregVoyage->setDateMaj(new \DateTime('now'));
  909.             $enregVoyage->setIdParametres($user->getIdParametres());
  910.             $entityManager = $this->getDoctrine()->getManager();
  911.             $entityManager->persist($enregVoyage);
  912.             $entityManager->flush();
  913.             $lastId = $enregVoyage->getIdVoyageServeur();
  914.         /* echo ' premier formulaire envoye';
  915.          echo '<pre>',
  916.          var_dump($VoyageForm);
  917.          echo '</pre>';*/
  918.          }
  919.     
  920.         $etape = new Etapes();
  921.         
  922.       $EtapeForm = $this->createFormBuilder($etape)
  923.             ->add('numEtape', IntegerType::class)
  924.                ->add('idListePays', ChoiceType::class, ['choices'=>$liste])
  925.             ->add('dateDeplacement', DateType::class)
  926.             ->add('coordonneeGps', TextType::class)
  927.             ->add('adresse', TextareaType::class)
  928.             ->add('hebergement', TextareaType::class)
  929.             ->add('particulariteEtape', TextareaType::class)
  930.             ->add('aVoir', TextareaType::class)
  931.             ->add('aFaire', TextareaType::class)
  932.             ->add('remarque', TextareaType::class)
  933.             ->add('save', SubmitType::class, ['label' => 'valider'])
  934.             ->getForm();
  935.         $EtapeForm->handleRequest($request);
  936.          if ($EtapeForm->isSubmitted() && $EtapeForm->isValid()) {
  937.             $etape->setDateCre(new \DateTime('now'));
  938.             $etape->setDateMaj(new \DateTime('now'));
  939.             $etape->setIdVoyageServeur($lastId);
  940.             $etape->setNumEtape(1);
  941.             $entityManager = $this->getDoctrine()->getManager();
  942.             $entityManager->persist($etape);
  943.             $entityManager->flush();
  944.         /* echo 'deuxieme formulaire envoye';
  945.          echo '<pre>',
  946.          var_dump($EtapeForm);
  947.          echo '</pre>';*/
  948.          }
  949.         return $this->redirectToRoute('index');
  950.     
  951. }
  952. public function saveStage(Request $request,$idVoyage,$numEtape)
  953. {
  954.    $em = $this->getDoctrine()->getEntityManager();
  955.    $sql = "SELECT liste_pays.id_liste_pays, liste_pays_translation.pays  FROM `liste_pays`";
  956.    $sql .= " INNER JOIN `liste_pays_translation` "; 
  957.    $sql .= " ON `liste_pays_translation`.`id_liste_pays` = `liste_pays`.`id_liste_pays`";
  958.    $sql .= " where `lang`='fr' order by `pays`";
  959.    $statement_pays = $em->getConnection()->prepare($sql);
  960.    $statement_pays->execute();
  961.    $result_pays = $statement_pays->fetchAll();
  962.    $liste = array();
  963.        foreach($result_pays  as $key => $value)
  964.        {
  965.         $liste[$value['pays']]=$value['id_liste_pays'];
  966.        }  
  967.         $etape = new Etapes();
  968.         
  969.       $EtapeForm = $this->createFormBuilder($etape)
  970.             ->add('numEtape', IntegerType::class)
  971.                ->add('idListePays', ChoiceType::class, ['choices'=>$liste])
  972.             ->add('dateDeplacement', DateType::class)
  973.             ->add('coordonneeGps', TextType::class)
  974.             ->add('adresse', TextareaType::class)
  975.             ->add('hebergement', TextareaType::class)
  976.             ->add('particulariteEtape', TextareaType::class)
  977.             ->add('aVoir', TextareaType::class)
  978.             ->add('aFaire', TextareaType::class)
  979.             ->add('remarque', TextareaType::class)
  980.             ->add('save', SubmitType::class, ['label' => 'valider'])
  981.             ->getForm();
  982.          $EtapeForm->handleRequest($request);
  983.          if ($EtapeForm->isSubmitted() && $EtapeForm->isValid()) {
  984.             $etape->setDateCre(new \DateTime('now'));
  985.             $etape->setDateMaj(new \DateTime('now'));
  986.             $etape->setIdVoyageServeur($idVoyage);
  987.             $etape->setNumEtape($numEtape);
  988.             $entityManager = $this->getDoctrine()->getManager();
  989.             $entityManager->persist($etape);
  990.             $entityManager->flush();
  991.         /* echo 'deuxieme formulaire envoye';
  992.          echo '<pre>',
  993.          var_dump($EtapeForm);
  994.          echo '</pre>';*/
  995.          }
  996.     //    $this->redirectToRoute('index');
  997.     /*echo '<pre>';*/
  998. }
  999. }
  1000. ?>