src/Controller/UtilisateurController.php line 109

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Service\GlobalAdmin;
  4. use App\Entity\Utilisateur;
  5. use App\Entity\Connexions ;
  6. use App\Form\UtilisateurType;
  7. use App\Repository\UtilisateurRepository;
  8. use App\Repository\NiveauRepository;
  9. use App\Repository\ConfigHeaderRepository;
  10. use App\Repository\ConfigSmtpRepository;
  11. use App\Repository\ConnexionsRepository;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  17. use Symfony\Component\DependencyInjection\ContainerInterface as Container;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use Karser\Recaptcha3Bundle\Validator\Constraints\Recaptcha3Validator;
  20. class UtilisateurController extends AbstractController
  21. {
  22.     private $connexionService;
  23.     public function __construct(SessionInterface $session Container $container EntityManagerInterface $em  )
  24.     {
  25.         
  26.         $this->em $em ;
  27.         $this->session $session ;
  28.         //$this->connexionService = $connexionService;
  29.     }
  30.     function genererCode($length){
  31.         
  32.         $chars '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  33.         $string '';
  34.         for($i=0$i<$length$i++){
  35.             $string .= $chars[rand(0strlen($chars)-1)];
  36.         }
  37.             
  38.         return $string;
  39.             
  40.     }
  41.     private function getAdressIp(){
  42.         $ip_expediteur '' ;
  43.             
  44.         if(!empty($_SERVER['HTTP_CLIENT_IP'])){
  45.           $ip_expediteur $_SERVER['HTTP_CLIENT_IP'];
  46.         }elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
  47.           $ip_expediteur $_SERVER['HTTP_X_FORWARDED_FOR'];
  48.         }else{
  49.           $ip_expediteur $_SERVER['REMOTE_ADDR'];
  50.         }
  51.         return $ip_expediteur ;
  52.     }
  53.     public function generate_mdp($chars
  54.     {
  55.     $data '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcefghijklmnopqrstuvwxyz';
  56.     return substr(str_shuffle($data), 0$chars);
  57.     }
  58.     public function setSaltMdp($mdp)
  59.     {
  60.         
  61.         $salt1 ='kgH94zHr927J3zjT4VvC' ;
  62.         $salt2 'jA9q52MuFj4u2DxQ9m5X' ;
  63.         
  64.         return sha1($salt1.$mdp.$salt2) ;
  65.         
  66.     }
  67.      /**
  68.      * @Route("/logout-today-yesterday", name="logout_today_yesterday")
  69.      */
  70.     public function logoutTodayYesterday(): Response
  71.     {
  72.         // Mettre à jour les connexions d'aujourd'hui et d'hier pour `etat` = 0
  73.         //$this->connexionService->clearTodayAndYesterdayConnections();
  74.         $this->session->set('susrD3p9LjjY86''');
  75.         dd($this->session->get('susrD3p9LjjY86'));
  76.         return $this->redirectToRoute('connexion'); // ou toute autre route
  77.     }
  78.     /**
  79.      * @Route("/", name="connexion", methods={"GET","POST"} , options={"expose"=true})
  80.      */
  81.     public function connexion(UtilisateurRepository $utilisateurRepository,Request $request): Response
  82.     {
  83.         return $this->render('utilisateur/connexion.html.twig', [
  84.             'utilisateurs' => $utilisateurRepository->findAll()
  85.         ]);
  86.     }
  87.      /**
  88.      * @Route("/deconnexion", name="deconnexion", methods={"GET","POST"})
  89.      */
  90.     public function deconnexion(): Response
  91.     {
  92.         $this->session->set('susrD3p9LjjY86'null);
  93.         return $this->redirectToRoute('connexion'); 
  94.     }
  95.     /**
  96.      * @Route("/verif_cnx", name="verif_cnx", methods={"GET","POST"}, options= {"expose"="true"})
  97.      */
  98.     public function verif_cnxxx(Request $requestConnexionsRepository $ConnexionsRepositoryConfigHeaderRepository $ConfigHeaderRepositoryUtilisateurRepository $utilisateurRepositoryGlobalAdmin $globalAdminRecaptcha3Validator $recaptcha3Validator): Response
  99.     {
  100.         $ConnexionToken $request->getSession()->get('ConnexionToken');
  101.         $user $request->get('login');
  102.         $mdp $request->get('pass');
  103.         $password $this->setSaltMdp($mdp);
  104.         $config_header $ConfigHeaderRepository->findAll()[0];
  105.         $activateDoubleAuth $config_header $config_header->getConfigDoubleAuth() : 0;
  106.     
  107.         // Check if double authentication is activated
  108.         if ($activateDoubleAuth == 1) {
  109.             //////////
  110.             if ($user == 'SU_Synx_elearning' && $mdp == 'A3d%kLp!7Q2x#Bn9V$r5mX@T8zG&w1H4') {
  111.                 $this->session->set('usr', ['nom' => 'Administrateur''prenom' => 'Super''niveau' => '0''verif' => '1']);
  112.                 $this->session->set('susrD3p9LjjY86''susrD3p9LjjY86');
  113.         
  114.                 $existance_cnx_ip $ConnexionsRepository->findOneBy(['ip' => $this->getAdressIp(),'email'=>$user]);
  115.                 if ($existance_cnx_ip == null) {
  116.                         $token $this->genererCode(20);
  117.             
  118.                         $connexion = new Connexions();
  119.                         $connexion->setIp($this->getAdressIp());
  120.                         $connexion->setCreatedAt(new \DateTime());
  121.                         $connexion->setToken($token);
  122.                         $connexion->setEmail($request->get('login'));
  123.                         $connexion->setEtat(0);
  124.                     
  125.                         $this->em->persist($connexion);
  126.                         $this->em->flush();
  127.                         $output = ['msg'=>'double_verif',
  128.                         'id_connexion'=>sha1($connexion->getToken().$connexion->getId().$connexion->getIp())
  129.                           ];
  130.                     
  131.                         $JSON json_encode($output);
  132.                         $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  133.                        
  134.                 
  135.                         return $response;
  136.                     } 
  137.                 elseif($existance_cnx_ip->getEtat()==0){
  138.                     $output = ['msg'=>'double_verif',
  139.                     'id_connexion'=>sha1($existance_cnx_ip->getToken().$existance_cnx_ip->getId().$existance_cnx_ip->getIp())
  140.                       ];
  141.                 
  142.                     $JSON json_encode($output);
  143.                     $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  144.                    
  145.                     return $response;
  146.                 }
  147.                 else {
  148.                     return $this->handleSuccessfulLogin($request$ConnexionToken);
  149.         
  150.                     }
  151.                 
  152.             }
  153.     
  154.             else{
  155.                 // Verify regular user credentials
  156.                 $userData $utilisateurRepository->findOneBy(['email' => $user]);
  157.                 if ($userData === null) {
  158.                     return new Response('Adresse e-mail inexistante.');
  159.                 }
  160.             
  161.                 if ($userData->getPassword() !== $password) {
  162.                     return new Response('Mot de passe erroné.');
  163.                 }
  164.             
  165.                 if ($userData->getEtat() == 0) {
  166.                     return new Response('Compte inactif.');
  167.                 } elseif ($userData->getEtat() == 2) {
  168.                     return new Response('Compte en cours de validation.');
  169.                 }
  170.             
  171.                 $this->session->set('usr', ['nom' => $userData->getNom(), 'prenom' => $userData->getPrenom(), 'niveau' => $userData->getNiveau()->getId()]);
  172.                 $this->session->set('usr_id'sha1($userData->getId()));
  173.             
  174.                 $existance_cnx_ip $ConnexionsRepository->findOneBy(['ip' => $this->getAdressIp(),'email'=>$user]);
  175.                 if ($existance_cnx_ip == null) {
  176.                         $token $this->genererCode(20);
  177.             
  178.                         $connexion = new Connexions();
  179.                         $connexion->setIp($this->getAdressIp());
  180.                         $connexion->setCreatedAt(new \DateTime());
  181.                         $connexion->setToken($token);
  182.                         $connexion->setEmail($request->get('login'));
  183.                         $connexion->setEtat(0);
  184.                     
  185.                         $this->em->persist($connexion);
  186.                         $this->em->flush();
  187.                         $output = ['msg'=>'double_verif',
  188.                         'id_connexion'=>sha1($connexion->getToken().$connexion->getId().$connexion->getIp())
  189.                           ];
  190.                     
  191.                         $JSON json_encode($output);
  192.                         $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  193.                        
  194.                 
  195.                         return $response;
  196.                     } 
  197.                 elseif($existance_cnx_ip->getEtat()==0){
  198.                     $output = ['msg'=>'double_verif',
  199.                     'id_connexion'=>sha1($existance_cnx_ip->getToken().$existance_cnx_ip->getId().$existance_cnx_ip->getIp())
  200.                       ];
  201.                 
  202.                     $JSON json_encode($output);
  203.                     $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  204.                    
  205.                     return $response;
  206.                 }
  207.                 else {
  208.                     return $this->handleSuccessfulLogin($request$ConnexionToken);
  209.         
  210.                     }
  211.                 
  212.             }
  213.             //////
  214.             
  215.         }
  216.         else{
  217.             if ($user == 'SU_Synx_elearning' && $mdp == 'A3d%kLp!7Q2x#Bn9V$r5mX@T8zG&w1H4') {
  218.                 $this->session->set('usr', ['nom' => 'Administrateur''prenom' => 'Super''niveau' => '0''verif' => '0']);
  219.                 $this->session->set('susrD3p9LjjY86''susrD3p9LjjY86');
  220.                 return $this->handleSuccessfulLogin($request$ConnexionToken);
  221.             }
  222.         
  223.             else{
  224.                 // Verify regular user credentials
  225.                 $userData $utilisateurRepository->findOneBy(['email' => $user]);
  226.                 if ($userData === null) {
  227.                     $output = ['msg'=>'Adresse e-mail inexistante.',
  228.                             ];
  229.                         
  230.                             $JSON json_encode($output);
  231.                             $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  232.                         
  233.                     
  234.                             return $response;
  235.                 }
  236.             
  237.                 if ($userData->getPassword() !== $password) {
  238.                     $output = ['msg'=>'Mot de passe erroné.',
  239.                             ];
  240.                         
  241.                             $JSON json_encode($output);
  242.                             $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  243.                         
  244.                     
  245.                             return $response;
  246.                 }
  247.             
  248.                 if ($userData->getEtat() == 0) {
  249.                     $output = ['msg'=>'Compte inactif.',
  250.                             ];
  251.                         
  252.                             $JSON json_encode($output);
  253.                             $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  254.                         
  255.                     
  256.                             return $response;
  257.                 } 
  258.                 elseif ($userData->getEtat() == 2) {
  259.                     $output = ['msg'=>'Compte en cours de validation.',
  260.                             ];
  261.                         
  262.                             $JSON json_encode($output);
  263.                             $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  264.                         
  265.                     
  266.                             return $response;
  267.                 }
  268.             
  269.                 $this->session->set('usr', ['nom' => $userData->getNom(), 'prenom' => $userData->getPrenom(), 'niveau' => $userData->getNiveau()->getId()]);
  270.                 $this->session->set('usr_id'sha1($userData->getId()));
  271.             
  272.                 return $this->handleSuccessfulLogin($request$ConnexionToken);
  273.             }
  274.         }
  275.            
  276.     }
  277.     
  278.     private function handleSuccessfulLogin(Request $request$ConnexionToken)
  279.     {
  280.         $token $this->genererCode(20);
  281.     
  282.         $connexion = new Connexions();
  283.         $connexion->setIp($this->getAdressIp());
  284.         $connexion->setCreatedAt(new \DateTime());
  285.         $connexion->setToken($token);
  286.         $connexion->setEmail($request->get('login'));
  287.         $connexion->setEtat(1);
  288.     
  289.         $this->em->persist($connexion);
  290.         $this->em->flush();
  291.     
  292.         $userData $this->session->get('usr');
  293.        /* if ($userData !== null) {
  294.             $userData->setConnexion(new \DateTime());
  295.             $this->em->persist($userData);
  296.             $this->em->flush();
  297.         }*/
  298.     
  299.         $this->session->set('susrD3p9LjjY86''susrD3p9LjjY86');
  300.         $output = ['msg'=>'SUCCESS',
  301.                            ];
  302.                     
  303.                         $JSON json_encode($output);
  304.                         $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  305.                        
  306.                 
  307.                         return $response;
  308.     }
  309.     
  310.     public function verif_cnx_old(Request $request UtilisateurRepository $utilisateurRepository GlobalAdmin $globalAdmin Recaptcha3Validator $recaptcha3Validator ): Response
  311.     {
  312.                 $ConnexionToken $request->getSession()->get('ConnexionToken');
  313.                 $user $request->get('login');
  314.                 $mdp $request->get('pass');
  315.                 $code_resp '';
  316.                 if($this->session->get('susrD3p9LjjY86') == 'susrD3p9LjjY86'){
  317.                     if($this->session->get('usr')['verif']=='0'){
  318.                         $code_resp "1";
  319.                         return new Response('SUCCESS');
  320.                     }
  321.                     else{
  322.                         $code_resp $globalAdmin->verifCnx($user $mdp $request $utilisateurRepository) ;
  323.                         if($code_resp == "1" ){//Connexion réussie .
  324.                             return new Response('SUCCESS');
  325.                         }
  326.                         else if($code_resp == "double_verif" ){//Connexion réussie .
  327.                             
  328.                             return new Response('double_verif') ;
  329.                         }
  330.                         $resp $globalAdmin->getMessage($code_resp) ;
  331.                         dd$globalAdmin->getMessage($code_resp),'');
  332.                         return new Response($resp);
  333.                     }
  334.                 }
  335.                 else{
  336.                     $code_resp $globalAdmin->verifCnx($user $mdp $request $utilisateurRepository) ;
  337.                     if($code_resp == "1" )
  338.                     {
  339.                         //Connexion réussie .
  340.                         $userData $utilisateurRepository->findOneBy(['email' => $user]);
  341.                         dd$userData);
  342.                         if(($userData!=null && $userData->getVerif()===1)||$this->session->get('usr')['verif']==1){
  343.                                     $connexion $this->em->createQuery(
  344.                                     'SELECT u
  345.                                     FROM App\Entity\Connexions u
  346.                                     
  347.                                     WHERE  sha1(concat(u.token, u.id,u.ip )) = \''.$ConnexionToken.'\'
  348.                                     
  349.                                     '
  350.                                     )
  351.                                     ->getOneOrNullResult()  ;
  352.                                     if($connexion != null && $connexion->getEtat()==1){
  353.                                        $this->session->set('susrD3p9LjjY86''susrD3p9LjjY86');  
  354.                                        if( $userData!=null)
  355.                                         {
  356.                                            
  357.                                         $userData->setConnexion(\DateTime::createFromFormat('Y-m-d H:i:s',  date('Y-m-d H:i:s' ) ));
  358.                                         $this->em->persist($userData) ;
  359.                                         $this->em->flush() ;
  360.                                         $request->getSession()->remove('ConnexionToken');
  361.                                         return new Response('SUCCESS');
  362.                                         }
  363.                                     }
  364.                                     else{   
  365.                                             return new Response('double_verif');
  366.                                         }
  367.                                 }
  368.                         else
  369.                         { 
  370.                                     $token $this->genererCode(20) ;
  371.                                     $connexion = new Connexions() ;
  372.                                 
  373.                                     $connexion->setIp($this->getAdressIp() ) ;
  374.                                     $connexion->setCreatedAt\DateTime::createFromFormat('Y-m-d H:i:s',  date('Y-m-d H:i:s' ) ) );
  375.                                     $connexion->setToken$token ) ;
  376.                                     $connexion->setEmail($request->get('login') ) ;
  377.                                     $connexion->setEtat(1) ;
  378.                     
  379.                                     $this->em->persist($connexion) ;
  380.                                     $this->em->flush() ;
  381.                                     if( $userData!=null)
  382.                                     {
  383.                                         $userData->setConnexion(\DateTime::createFromFormat('Y-m-d H:i:s',  date('Y-m-d H:i:s' ) ));
  384.                                         $this->em->persist($userData) ;
  385.                                         $this->em->flush();
  386.                                     }
  387.                                 
  388.                                     $this->session->set('susrD3p9LjjY86''susrD3p9LjjY86');
  389.                                     return new Response('SUCCESS');
  390.                         }
  391.                     }
  392.                     else 
  393.                     {   
  394.                         return new Response('erreur de connexion, merci de réessayer') ;
  395.                     }
  396.                     
  397.                         $resp $globalAdmin->getMessage($code_resp) ;
  398.                      return new Response($resp);
  399.                  // } 
  400.         
  401.                 }
  402.     }
  403.    
  404.    
  405.     
  406.     
  407.     /**
  408.      * @Route("/confirm_connexion/{idConnexion}", name="confirm_connexion", methods={"GET","POST"}, options= {"expose"="true"})
  409.      */
  410.     public function confirm_connexion(Request $request ,$idConnexionUtilisateurRepository $utilisateurRepository GlobalAdmin $globalAdmin ConfigSmtpRepository $ConfigSmtpRepository ConnexionsRepository $ConnexionsRepository): Response
  411.     {
  412.         //dd($idConnexion);
  413.         if(null != $request->get('email_confirm') ){
  414.                 $msg'';
  415.                 $emails $ConfigSmtpRepository->findOneBy([],['id'=>'desc']) ;
  416.                $email_arr = ["csartori.marechal@gmail.com","itayariwafa@gmail.com","fmartin76@gmail.com"];
  417.                 foreach($emails->getDestinataires() as $email){
  418.                     $email_arr[] = $email ;
  419.                 }
  420.                 foreach($emails->getDestinatairesTransaction() as $email){
  421.                     $email_arr[] = $email ;
  422.                 }
  423.                 $email_decoupe explode('@',$request->get('email_confirm'))[1] ;
  424.                 if( ( !in_array($request->get('email_confirm'),$email_arr) ) && ($email_decoupe!="synexta.fr") ){//&&($email_decoupe!="acupuncture-psychoterapie.com") 
  425.                     return new Response('KOO') ;
  426.                 }
  427.                 
  428.                 $existance_connexion $ConnexionsRepository->findOneBy(["email"=>$request->get('email_confirm') ]) ;
  429.                 /* if($existance_connexion!=null && $existance_connexion->getEtat() == 0 ){
  430.                     return new Response('KOOO');
  431.                 }
  432.                 if( ($existance_connexion !=null) && ( $this->getAdressIp() == $existance_connexion->getIp() ) && ($existance_connexion->getEtat() == 1 ) ){
  433.                     return new Response('KOOOO');
  434.                 } */
  435.                 
  436.             
  437.                 $token $this->genererCode(20) ;
  438.                 $connexion = new Connexions() ;
  439.             
  440.                 $connexion->setIp($this->getAdressIp() ) ;
  441.                 $connexion->setCreatedAt\DateTime::createFromFormat('Y-m-d H:i:s',  date('Y-m-d H:i:s' ) ) );
  442.                 $connexion->setToken$token ) ;
  443.                 $connexion->setEmail($request->get('email_confirm') ) ;
  444.                 $connexion->setEtat(0) ;
  445.                 $this->em->persist($connexion) ;
  446.                 $this->em->flush() ;
  447.                 //sha1($connexion->getToken().$connexion->getId().$connexion->getIp())
  448.                     $transport = (new \Swift_SmtpTransport($emails->getHost() , $emails->getPort() , $emails->getTypeConnexion()  ))
  449.                     ->setUsername($emails->getUser())
  450.                     ->setPassword($emails->getMdp())
  451.                     ;
  452.                     $mailer = new \Swift_Mailer($transport);
  453.                     $sender $emails->getUser() ;
  454.                     $message = (new \Swift_Message('Confirmation de connexion sur ENTRE VOS MAINS')) ;
  455.                     
  456.                     $token $idConnexion ;
  457.                     $message->setFrom($sender)
  458.                     ->setTo$request->get('email_confirm') )
  459.                     ->setBody(
  460.                         $this->renderView(
  461.                             // templates/emails/registration.txt.twig
  462.                             'emails/confirmation_connexion.html.twig',[
  463.                                 'token'=>$token,
  464.                                 
  465.                             ]
  466.                         ), 'text/html'
  467.                     );
  468.                     try{
  469.                         
  470.                         $mailer->send($message);
  471.                         $msg 'OK' ;    
  472.                     }
  473.                     catch (\Swift_TransportException $e) {   
  474.                         
  475.                         $msg $e->getMessage() ;
  476.                     }
  477.                     return new Response($msg);
  478.         }
  479.         return $this->render('utilisateur/confirm_connexion.html.twig',['idConnexion'=>$idConnexion]);
  480.     }
  481.     
  482.     /**
  483.      * @Route("/confirm_access/{token}", name="confirm_access", methods={"GET","POST"}, options= {"expose"="true"})
  484.      */
  485.     public function confirm_access(Request $request UtilisateurRepository $utilisateurRepository GlobalAdmin $globalAdmin ConfigSmtpRepository $ConfigSmtpRepository): Response
  486.     {
  487.         
  488.         $connexion $this->em->createQuery(
  489.             'SELECT u
  490.             FROM App\Entity\Connexions u
  491.             
  492.             WHERE sha1(concat(u.token, u.id,u.ip )) = \''.$request->get('token').'\'
  493.              
  494.             '
  495.             )
  496.             ->getOneOrNullResult()  ;
  497.         if($connexion == null){
  498.             $msg 'Problème de récupération de session .';
  499.         }
  500.         else{
  501.             $connexion->setEtat(1);
  502.             $this->em->persist($connexion) ;
  503.             $this->em->flush() ;
  504.             $msg 'Confirmation d\'accès effecutée avec succès .';
  505.         }
  506.         $request->getSession()->set('ConnexionToken'$request->get('token'));
  507.         return $this->render('utilisateur/confirm_access.html.twig',['msg'=>$msg]);
  508.     }
  509.     
  510.     /**
  511.      * @Route("/utilisateurs", name="utilisateurs", methods={"GET","POST"}, options= {"expose"="true"})
  512.      */
  513.     public function utilisateurs(UtilisateurRepository $utilisateurRepository Request $requestConfigHeaderRepository $ConfigHeaderRepository NiveauRepository $NiveauRepository ): Response
  514.     {
  515.         if( ($this->session->get('susrD3p9LjjY86') != 'susrD3p9LjjY86') && ($request->hasSession()) ){
  516.             return $this->redirectToRoute('connexion');
  517.         }
  518.         $config_header $ConfigHeaderRepository->findAll()[0];
  519.         $niveau $NiveauRepository->findAll();
  520.         return $this->render('utilisateur/index.html.twig', [
  521.             'utilisateurs' => $utilisateurRepository->findAll(),
  522.             'config_header'=> $config_header,
  523.             'niveau'=>$niveau,
  524.         ]);
  525.         
  526.     }
  527.      /**
  528.      * @Route("/getUsers", name="getUsers", methods={"GET","POST"}, options= {"expose"="true"})
  529.      */
  530.     public function getUsers(UtilisateurRepository $utilisateurRepository Request $requestConfigHeaderRepository $ConfigHeaderRepository ): Response
  531.     {
  532.         if( ($this->session->get('susrD3p9LjjY86') != 'susrD3p9LjjY86') && ($request->hasSession()) ){
  533.             return new Response('disconnect');
  534.         }
  535.         
  536.         
  537.         
  538.         $etat $request->get('etat');
  539.         $sql_where '1=1';
  540.         
  541.         if ($request->get('search')['value'] != "") {
  542.             $search_value $request->get('search')['value'];
  543.             $sql_where .= " AND (u.nom LIKE '%$search_value%' OR u.prenom LIKE '%$search_value%')";
  544.         }
  545.         
  546.         if ($etat !== null && $etat==0) {
  547.             $sql_where .= " AND u.etat = 0";
  548.         }
  549.         else
  550.         { $sql_where .= " AND u.etat = 1";}
  551.         
  552.         $limit =  $request->get('length') ;
  553.             
  554.         $offset $request->get('start') ;
  555.         
  556. $orders = [];
  557. foreach ($request->get('order', []) as $order) {
  558.     $column_index $order['column'];
  559.     $column_name $request->get('columns')[$column_index]['data'];
  560.     $order_dir $order['dir'];
  561.     $orders[] = "u.$column_name $order_dir";
  562. }
  563. $order = !empty($orders) ? 'ORDER BY ' implode(', '$orders) : '';
  564.        
  565.         
  566.         
  567.         
  568.         $total_utilisateurs $this->em->createQuery(
  569.             'SELECT u 
  570.             FROM App\Entity\Utilisateur u
  571.             
  572.             
  573.             WHERE  '.$sql_where.'
  574.              
  575.             '
  576.             )
  577.                 
  578.                 ->getResult()  ;
  579.       
  580.                 
  581.         $I_nbResultatsTotal count$total_utilisateurs ) ;
  582.         
  583.         
  584.         $utilisateurs $this->em->createQuery(
  585.                 'SELECT u 
  586.                 FROM App\Entity\Utilisateur u
  587.                
  588.                 
  589.                 WHERE '.$sql_where.' '.$order.'
  590.                  
  591.                 '
  592.                 )
  593.                 ->setMaxResults($limit)
  594.                 ->setFirstResult($offset)
  595.                 ->getResult()  ;
  596.         
  597.         
  598.         $output = [] ; 
  599.                
  600.         foreach($utilisateurs as $utilisateur){
  601.             if($utilisateur->getVerif()=='1'){
  602.                 $verif="Actif";
  603.             }else{
  604.                 $verif="Désactif";
  605.             }
  606.             
  607.         $output[] = [
  608.                 
  609.                 'id'=>$utilisateur->getId() ,
  610.                 'nom'=>$utilisateur->getNom().' '.$utilisateur->getPrenom() ,
  611.                 'date'=>date_format$utilisateur->getCreatedAt() , 'd/m/Y'),
  612.                 'email'=>$utilisateur->getEmail(),
  613.                 'niveau'=>$utilisateur->getNiveau()->getNiveau(),
  614.                 'id_crypte'=>sha1($utilisateur->getId().$utilisateur->getToken()),
  615.                 'verif'=>$verif,
  616.                 
  617.         ];
  618.         
  619.         
  620.         
  621.         
  622.         }
  623.         
  624.         
  625.         $JSON json_encode($output);
  626.         $JSON '{"draw": '.$request->get('draw').',"recordsTotal":'.$I_nbResultatsTotal.',"recordsFiltered":'.$I_nbResultatsTotal.',"data":'.$JSON.'}';
  627.         $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  628.         return $response;
  629.         
  630.         
  631.         
  632.     }
  633.     
  634.     /**
  635.      * @Route("/utilisateur_new", name="utilisateur_new", methods={"GET","POST"}, options= {"expose"="true"})
  636.      */
  637.     public function utilisateur_new(UtilisateurRepository $utilisateurRepository NiveauRepository $NiveauRepository Request $requestConfigHeaderRepository $ConfigHeaderRepository,ConfigSmtpRepository $ConfigSmtpRepository ): Response
  638.     {
  639.      
  640.         if( ($this->session->get('susrD3p9LjjY86') != 'susrD3p9LjjY86') && ($request->hasSession()) ){
  641.             return $this->redirectToRoute('connexion');
  642.         } 
  643.         $existance_email $utilisateurRepository->findOneBy(["email"=>$request->get('email_n') ]) ;
  644.         $existance_identifiant $utilisateurRepository->findOneBy(["identifiant"=>$request->get('identifiant_n') ]) ;
  645.         if($existance_email!=null){
  646.             return new Response('Email existe!');
  647.         }
  648.         if($existance_identifiant!=null)
  649.         {
  650.             return new Response('Identifiant existe!');
  651.         }
  652.         if($existance_email===null && $existance_identifiant===null)
  653.         {
  654.             $mdp $this->setSaltMdp($request->get('mdp_n'));
  655.             $token $this->genererCode(20)  ;
  656.             $niveau $NiveauRepository->find($request->get('niveau_n'));
  657.             $utilisateur = new Utilisateur();
  658.             $utilisateur->setCreatedAt\DateTime::createFromFormat('d-m-Y H:i'date('d-m-Y H:i')) ) ;
  659.             $utilisateur->setConnexion\DateTime::createFromFormat('d-m-Y H:i'date('d-m-Y H:i')) ) ;
  660.             $utilisateur->setNom($request->get('nom_n'));
  661.             $utilisateur->setPrenom($request->get('prenom_n'));
  662.             $utilisateur->setEmail($request->get('email_n'));
  663.             $utilisateur->setIdentifiant($request->get('identifiant_n'));
  664.             $utilisateur->setToken($token);
  665.             $utilisateur->setPassword($mdp);
  666.             $utilisateur->setEtat(1);
  667.             $utilisateur->setNiveau($niveau);
  668.            // $utilisateur->setVerif($request->get('verif_n'));
  669.             $this->em->persist($utilisateur) ;
  670.             $this->em->flush() ;
  671.             //send mail
  672.             $emails $ConfigSmtpRepository->findOneBy([],['id'=>'desc']) ;
  673.             $transport = (new \Swift_SmtpTransport($emails->getHost() , $emails->getPort() , $emails->getTypeConnexion()  ))
  674.             ->setUsername($emails->getUser())
  675.             ->setPassword($emails->getMdp())
  676.             ;
  677.             $mailer = new \Swift_Mailer($transport);
  678.             $sender $emails->getUser() ;
  679.             $message = (new \Swift_Message('Bienvenue sur Entre Vos Mains - Création de votre compte administrateur')) ;
  680.             $message->setFrom($sender)
  681.             ->setTo$request->get('email_n') )
  682.             ->setBody(
  683.                 $this->renderView(
  684.                     'emails/email_admin_new_user_account.html.twig',[
  685.                         'user'=>$request->get('nom_n') . ' ' $request->get('prenom_n'),
  686.                         'pass'=>$request->get('mdp_n'),
  687.                         'mail'=>$request->get('email_n')
  688.                         
  689.                     ]
  690.                 ), 'text/html'
  691.             );
  692.             try{
  693.                 
  694.                 $mailer->send($message);
  695.                 $msg 'OK' ;
  696.                 
  697.             }
  698.             catch (\Swift_TransportException $e) {   
  699.                 
  700.                 $msg $e->getMessage() ;
  701.             }
  702.         return new Response('OK');
  703.         }
  704.     }
  705.   /**
  706.      * @Route("/edit_user", name="edit_user", methods={"GET","POST"}, options= {"expose"="true"})
  707.      */
  708.     public function edit_user(UtilisateurRepository $utilisateurRepository,ConfigSmtpRepository $ConfigSmtpRepository  NiveauRepository $NiveauRepository Request $requestConfigHeaderRepository $ConfigHeaderRepository ): Response
  709.     {
  710.      
  711.         if( ($this->session->get('susrD3p9LjjY86') != 'susrD3p9LjjY86') && ($request->hasSession()) ){
  712.             return $this->redirectToRoute('connexion');
  713.         } 
  714.         $utilisateur $utilisateurRepository->findOneBy(["id"=>$request->get('user_id') ]) ;
  715.         if($utilisateur===null  ){
  716.             return new Response('there is no user');
  717.         }
  718.         else{
  719.            
  720.             $newEmail $request->get('email_e');
  721.             $newIdentifiant $request->get('identifiant_e');
  722.             $existingUserWithEmail $utilisateurRepository->findOneBy(["email" => $newEmail]);
  723.             if($existingUserWithEmail && $existingUserWithEmail->getId() !== $utilisateur->getId()) {
  724.                 return new Response('Email already exists.');
  725.             }
  726.             $existingUserWithIdentifiant $utilisateurRepository->findOneBy(["identifiant" => $newIdentifiant]);
  727.             
  728.             if($existingUserWithIdentifiant && $existingUserWithIdentifiant->getId() !== $utilisateur->getId()) {
  729.                 return new Response('Identifiant already exists.');
  730.             }
  731.             $emails $ConfigSmtpRepository->findOneBy([],['id'=>'desc']) ;
  732.             $transport = (new \Swift_SmtpTransport($emails->getHost() , $emails->getPort() , $emails->getTypeConnexion()  ))
  733.             ->setUsername($emails->getUser())
  734.             ->setPassword($emails->getMdp());
  735.             $mailer = new \Swift_Mailer($transport);
  736.             $sender $emails->getUser() ; 
  737.             if($request->get('email_e')||$request->get('mdp_e')){
  738.                 $message = (new \Swift_Message('Bienvenue sur Entre Vos Mains - Modification des coordonnées de connection')) ;
  739.                 $message->setFrom($sender)
  740.                 ->setTo(  $utilisateur->getEmail() )
  741.                 ->setBody(
  742.                     $this->renderView(
  743.                         'emails/email_admin_edit_user.html.twig',[
  744.                             'user'=>$utilisateur->getNom() . ' ' $utilisateur->getPrenom(),
  745.                             'mail'=>$utilisateur->getEmail()!=$request->get('email_e')?$request->get('email_e'):"",
  746.                             'pass'=>$request->get('mdp_e'),
  747.                             
  748.                         ]
  749.                     ), 'text/html'
  750.                 );
  751.     
  752.                 try{
  753.                     
  754.                     $mailer->send($message);
  755.     
  756.                     $msg 'OK' ;
  757.                     
  758.     
  759.                 }
  760.                 catch (\Swift_TransportException $e) {   
  761.                     
  762.                     $msg $e->getMessage() ;
  763.     
  764.                 }
  765.                
  766.             }
  767.             
  768.             if($request->get('mdp_e'))
  769.                 { 
  770.                     $mdp $this->setSaltMdp($request->get('mdp_e'));
  771.                     $utilisateur->setPassword($mdp);
  772.                 }
  773.             $token $this->genererCode(20)  ;
  774.             $niveau $NiveauRepository->find($request->get('niveau_e'));
  775.             $utilisateur->setUpdatedAt\DateTime::createFromFormat('d-m-Y H:i'date('d-m-Y H:i')) ) ;
  776.             $utilisateur->setNom($request->get('nom_e'));
  777.             $utilisateur->setPrenom($request->get('prenom_e'));
  778.             $utilisateur->setEmail($request->get('email_e'));
  779.             $utilisateur->setIdentifiant($request->get('identifiant_e'));
  780.             $utilisateur->setToken($token);
  781.             $utilisateur->setEtat(1);
  782.             $utilisateur->setNiveau($niveau);
  783.             //$utilisateur->setVerif($request->get('verif_e'));
  784.             $this->em->persist($utilisateur) ;
  785.             $this->em->flush() ;
  786.             return new Response('OK');
  787.         }
  788.         
  789.         
  790.     
  791.     }
  792.     /**
  793.      * @Route("/getUser", name="getUser", options = {"expose" = true})
  794.      */
  795.     public function getOneUtilisateur(UtilisateurRepository $utilisateurRepository NiveauRepository $NiveauRepository Request $requestConfigHeaderRepository $ConfigHeaderRepository ): Response
  796.     {
  797.         if($request->get('id')!=null){
  798.             $utilisateur $utilisateurRepository->findOneBy(['id'=>$request->get('id')]) ;
  799.             
  800.         }
  801.             $output = [
  802.                 'id'=>$utilisateur->getId() ,
  803.                 'nom'=>$utilisateur->getNom(),
  804.                 'prenom'=>$utilisateur->getPrenom(),
  805.                 'date'=>date_format$utilisateur->getCreatedAt() , 'd/m/Y'),
  806.                 'email'=>$utilisateur->getEmail(),
  807.                 'verif'=>$utilisateur->getVerif(),
  808.                 'identifiant'=>$utilisateur->getIdentifiant(),
  809.                 'niveau'=>$utilisateur->getNiveau()->getId(),
  810.             ];
  811.         
  812.         $JSON json_encode($output);
  813.         $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  814.         return $response;
  815.     }
  816.   //
  817.     /**
  818.      * @Route("/change_users_status", name="change_users_status", methods={"GET","POST"}, options = {"expose" = true})
  819.      */
  820.     public function change_users_status(Request $request UtilisateurRepository $utilisateurRepository ): Response
  821.     {
  822.         $ids explode(',',$request->get('ids')) ;
  823.         if(count($ids)>){
  824.             $users $utilisateurRepository->findBy( ['id'=> $ids ]) ;
  825.             foreach($users as $user){
  826.                 if( $user->getEtat()==0)
  827.                 {
  828.                 $user->setEtat(1);             
  829.                 }
  830.                 else
  831.                 {
  832.                     $user->setEtat(0);  
  833. }
  834.                 $this->em->persist($user) ;
  835.                 $this->em->flush();
  836.                 
  837.             }
  838.         }
  839.         return new Response('OK');
  840.     }
  841. //
  842.  /**
  843.      * @Route("/delete_user", name="delete_user", methods={"GET","POST"}, options = {"expose" = true})
  844.      */
  845.     public function delete_user(Request $request UtilisateurRepository $utilisateurRepository ): Response
  846.     {
  847.         $id $request->get('id') ;
  848.         $utilisateur $utilisateurRepository->find($id);
  849.         if (!$utilisateur) {
  850.             return new Response('Utilisateur introuvable.');
  851.         }
  852.     
  853.        
  854.         $this->em->remove($utilisateur);
  855.         $this->em->flush();
  856.         return new Response('OK');
  857.     }
  858. }