src/Controller/DefaultController.php line 77

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. // begin token-guard ---------------------------------------------------------------------------------
  4. use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
  5. use Symfony\Component\Security\Csrf\CsrfToken;
  6. use Symfony\Component\Security\Core\Exception\InvalidCsrfTokenException;
  7. use Symfony\Component\Security\Guard\Authenticator\AbstractFormLoginAuthenticator;
  8. // end token-guard ---------------------------------------------------------------------------------
  9. // begin mochel meyer products --------------------------------------------------------------
  10. use App\Service\DIVService;
  11. use App\Service\LOGDEFService;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\JsonResponse;
  17. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  18. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  19. use Symfony\Component\Validator\Validator\ValidatorInterface;       // contrôleur de contraintes
  20. use Doctrine\Persistence\ManagerRegistry;
  21. use Doctrine\ORM\Tools\Pagination\Paginator;
  22. use App\Entity\CFPPI;
  23. use App\Entity\CFLBF;
  24. use App\Entity\CFTBF;
  25. use App\Entity\CFCRO;
  26. use App\Entity\CFPRJ;
  27. use App\Entity\CFPFBTBF;
  28. use App\Entity\CFPFBCRO;
  29. use App\Entity\CFPFBEDE;
  30. use App\Entity\CFPFBEDA;
  31. use App\Entity\usr;
  32. use App\Entity\usl;
  33. class DefaultController extends AbstractController
  34. {
  35.   
  36.     // some services, begin token-guard ---------------------------------------------------------------------------------
  37.     private $csrfTokenManager;
  38.     private $parambag;
  39.     private $logdefservice;
  40.     private $divservice;
  41.     public function __construct
  42.         (
  43.             CsrfTokenManagerInterface $csrfTokenManager
  44.             ParameterBagInterface $parambag,
  45.             LOGDEFService $logdefservice,
  46.             DIVService $divservice,
  47.         )
  48.     {
  49.         $this->csrfTokenManager $csrfTokenManager;
  50.         $this->parambag $parambag;
  51.         $this->logdefservice $logdefservice;
  52.         $this->divservice $divservice;
  53.     }    
  54.     // end some services, token-guard ---------------------------------------------------------------------------------
  55.   
  56.     #[Route(path'/'name'indexRedirect')]
  57.     public function indexRedirect(Request $request)
  58.     {
  59.         return $this->redirect($this->generateUrl('pageaccueil'));    
  60.     }
  61.     
  62.     
  63.     #[Route(path'/accueil'name'pageaccueil')]
  64.     public function index
  65.         (
  66.             Request $request
  67.             ManagerRegistry $doctrine,
  68.             ValidatorInterface $validator
  69.         ): Response
  70.     {
  71.            
  72.         $em $doctrine->getManager();
  73.         $user $this->getUser();
  74.         if($user==null){        // protection ACL contre les lectures intempestives extérieures (saisie url directe)
  75.             $this->get('session')->getFlashBag()->add(
  76.                 'Erreur',
  77.                 'Impossible d\'accéder à la fonction demandée'
  78.             );
  79.             // renvoi page erreur
  80.             return $this->render('default\noaccess.html.twig'
  81.                 array(
  82.                 )
  83.             );
  84.         }
  85.         
  86.         // USR identifié OK        
  87.         $usrid $user->getUsrid();
  88.         $prfid $user->getPrfid()->getPrfid();
  89.         $prflib $user->getPrfid()->getPrflib();
  90.         
  91.         // vérif statu du compte (0,1,2)
  92.         $cptok=true;
  93.         $usr $em->getRepository(usr::class)->findOneBy(array('usrid'=>$usrid));
  94.         if(($usr->getUsrstatut()==2)||($usr->getUsrstatut()==0)){
  95.             if($usr->getUsrstatut()==2){
  96.                 $msg "Votre compte est actuellement bloqué (nac)";        // non actif
  97.             }else{
  98.                 $msg "Votre compte est en attente de validation (ava)";    // attente validation
  99.             }
  100.             $this->get('session')->getFlashBag()->add(
  101.                 "Erreur",
  102.                 $msg
  103.             );
  104.             
  105.             // renvoi page erreur
  106.             return $this->render('default\noaccess.html.twig'
  107.                 array(
  108.                 )
  109.             );
  110.             $cptok false;
  111.         
  112.         }else{
  113.             
  114.             if($usr->getUsrdatchgpwd()!=null){  // vérification de la validité du pwd
  115.                 $search_now time();
  116.                 $datchglimit date('Y-m-d'mktime(0,0,0,date('m'$search_now),date('d'$search_now),date('Y'$search_now)-1));
  117.                 if($usr->getUsrdatchgpwd()->format('Y-m-d')<=$datchglimit){
  118.                     $pwdok false;
  119.                 }
  120.             }else{
  121.                 $cptok false;
  122.             }
  123.             
  124.             if($cptok==false){  // modif pwd oblig
  125.                 return $this->render('usr\pwdoubli.html.twig', array(
  126.                     'msgcplt' => '',
  127.                     'pwdchgoblig' => 1,
  128.                     'fpwdemail' => ''
  129.                 ));        
  130.             }
  131.         }
  132.         
  133.         // =============== SUIVI LOGIN'S =====================
  134.         //var_dump($_SERVER);
  135.         if($cptok==true){
  136.             if(isset($_SERVER['HTTP_CACHE_CONTROL'])){  // variable temporaire, login réussi, mémo
  137.                 if($_SERVER['HTTP_CACHE_CONTROL']=="max-age=0"){    // indicateur démarrage session
  138.                     if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
  139.                         $ip $_SERVER['HTTP_X_FORWARDED_FOR'];
  140.                     }else{
  141.                         $ip $_SERVER['REMOTE_ADDR'];     // en général 127.0.0.1
  142.                     }
  143.                     
  144.                     $cook '';
  145.                     if(isset($_SERVER['HTTP_COOKIE'])){
  146.                         $cook str_replace('PHPSESSID=','',$_SERVER['HTTP_COOKIE']);
  147.                         $pos strpos($cook";");
  148.                         if($pos>1){
  149.                             $cook substr($cook0$pos-1);
  150.                         }else{
  151.                             $cook substr($cook0254);
  152.                         }
  153.                     }
  154.                     
  155.                     // enrgt dde : IP + Heure + login
  156.                     $datdde = new \DateTime();
  157.                     $usl = new usl;
  158.                     $usl->setUslip($ip);
  159.                     $usl->setUsldat($datdde);
  160.                     $usl->setUsllogin($user->getUsername());
  161.                     $usl->setUslctx('login');
  162.                     $usl->setUslcook($cook);
  163.                     $em->persist($usl);
  164.                     $em->flush();
  165.                 }
  166.             }
  167.             // =============================================
  168.             // màj usr ->date dernier log
  169.             $usrdatlog = new \DateTime();
  170.             $usrdatlog->createFromFormat("Y m d "time());
  171.             
  172.             $usr $em->getRepository(usr::class)->findOneBy(array('usrid'=>$user->getUsrid()));
  173.             $usr->setUsrchgpwdtok(null);
  174.             $usr->setUsrdatddechgpwd(null);
  175.             $usr->setUsrdatlog($usrdatlog);
  176.             $em->persist($usr);
  177.             $em->flush();
  178.             
  179.             // ========================================
  180.             // Si USR est admin, ouverture toujours sur le PPI de l'admin
  181.             
  182.             // vérif CFPPI OK (existe et correspond à USR), si non saisie paramètres oblig
  183.             $ppi_param $this->divservice->verif_cfppi_param($user);
  184.             $activ_menu $this->divservice->verif_activ_menu($ppi_param[1]);
  185.             $cfppiid $this->divservice->crypt_cfppiid($ppi_param[1]);
  186.             if($ppi_param[0]){        // passage obligé par les paramètres OK
  187.                 // affichage menu gauche + page Mes outils
  188.                 return $this->render('default\index.html.twig', array(
  189.                     'base_dir' => realpath($this->parambag->get('kernel.project_dir').'/..').DIRECTORY_SEPARATOR,
  190.                     'help_dir' => $this->parambag->get('dochelp_web_path'),
  191.                     'prfid' => $prfid,
  192.                     'prflib' => $prflib,
  193.                     'cfppi_ok' => $ppi_param[0],
  194.                     'cfppiid' => $cfppiid,
  195.                     'activ_menu' => $activ_menu,
  196.                 ));        
  197.                 
  198.                 
  199.             }else{        // saisie obligatoire des paramètres => ajout CFPPI
  200.                 // période : amplitude max 10 ans
  201.                 $anneeref date("Y");
  202.                 $lstanndeb = array();
  203.                 $lstannfin = array();
  204.                 for($i=0;$i<10;$i++){
  205.                     $anneedeb $anneeref $i;
  206.                     $anneefin $anneeref 10 $i;
  207.                     $lstanndeb[$anneedeb] = $anneedeb;
  208.                     $lstannfin[$anneefin] = $anneefin;
  209.                 }
  210.                 // var_dump($lstannref);
  211.                 
  212.                 $cfppi = new CFPPI();
  213.                 $form_ajo $this->createForm('App\Form\CFPPI_ajo'$cfppi, array(
  214.                     'lstanndeb'=>$lstanndeb,
  215.                     'lstannfin'=>$lstannfin,                            
  216.                 ));
  217.                 $form_ajo->add('Enregistrer','Symfony\Component\Form\Extension\Core\Type\SubmitType',array(
  218.                     'label'=>"Valider",
  219.                     'attr'=>array('class'=>'btn btn-primary')
  220.                 ));
  221.                 $form_ajo->add('Annuler''Symfony\Component\Form\Extension\Core\Type\ButtonType', array(
  222.                     'label'=>"Retour",
  223.                     'attr'=>array('class'=>'btn btn-primary''data-url'=>$this->generateUrl('app_logout'))
  224.                 ));
  225.                 $form_ajo->handleRequest($request);
  226.                         
  227.                 // vérif saisie form_ajo via validator annotations niveau Entity (après validation formulaire)
  228.                 if($request->request->get('cfppi_ajo')){
  229.                     // dd($request->request->get('cfppi_ajo'));
  230.                     $errors $validator->validate($cfppi);
  231.                     if(count($errors) > 0) {
  232.                         // dd($errors);
  233.                         foreach($errors as $error){
  234.                             $this->get('session')->getFlashBag()->add(
  235.                                 'Erreur',
  236.                                 $error->getmessage()
  237.                             );
  238.                         }
  239.                     }
  240.                 }else{
  241.                     $errors =  array();
  242.                 }
  243.                         
  244.                 if($request->request->get('cfppi_ajo')){      // ajout CFPPI
  245.                     if($form_ajo->isValid()){           //  si tout OK selon validator
  246.                         
  247.                         // begin token-guard --------------------------------------------------------------------------------------------------------------
  248.                         $postData $request->request->get('cfppi_ajo');
  249.                         $csrfToken $postData['_token'];
  250.                         if (false === $this->csrfTokenManager->isTokenValid(new CsrfToken('cfag44rotect'$csrfToken))) {
  251.                             $cause 4;
  252.                             $this->get('session')->getFlashBag()->add(
  253.                                 'Erreur',
  254.                                 "Impossible d'accéder à la fonction demandée. (noto)"        // bad token boy
  255.                             );
  256.                             return $this->redirect($this->generateUrl('pageaccueil')); // renvoi caval
  257.                             // end token-guard --------------------------------------------------------------------------------------------------------------
  258.                         
  259.                         }else{
  260.                         
  261.                             $ppidatcre = new \DateTime();
  262.                             $ppidatcre->createFromFormat("Y-m-d H:i:s"time());
  263.                             $cfppi->setUSRID($user);
  264.                             $cfppi->setPPIDATCRE($ppidatcre);
  265.                             $cfppi->setPPIDATMOD($ppidatcre);
  266.                             $em->persist($cfppi);
  267.                             $em->flush();
  268.                             $this->get('session')->getFlashBag()->add(
  269.                                 'Succès',
  270.                                 'Les paramètres ont été enregistrés avec succès.'
  271.                             );
  272.                         
  273.                             $this->divservice->cfppi_ajo_maj('ajo'$cfppi->getCFPPIID());        // création ou màj tables dépendantes du CFPPI
  274.                             // redirection du form vers Accueil, accès complet à CF 
  275.                             $activ_menu $this->divservice->verif_activ_menu($cfppiid);
  276.                             $cfppiid $this->divservice->crypt_cfppiid($cfppi->getCFPPIID());
  277.                             // redirection du form vers Accueil, accès complet à CF 
  278.                             return $this->render('default\index.html.twig', array(
  279.                                 'base_dir' => realpath($this->parambag->get('kernel.project_dir').'/..').DIRECTORY_SEPARATOR,
  280.                                 'help_dir' => $this->parambag->get('dochelp_web_path'),
  281.                                 'prfid' => $prfid,
  282.                                 'prflib' => $prflib,
  283.                                 'cfppi_ok' => 1,            // mais oui
  284.                                 'cfppiid' => $cfppiid,
  285.                                 'activ_menu' => $activ_menu
  286.                             ));        
  287.                         }
  288.                     }
  289.                 }
  290.                 // infobubulles : fonds de roulement only
  291.                 $lesdefs = array('fro');
  292.                 $deflog = array();
  293.                 foreach($lesdefs as $ladef){
  294.                     $deflog[$ladef] = $this->logdefservice->get_unedef($ladef); 
  295.                 }
  296.                 
  297.                 // $cfppiid = $this->divservice->crypt_cfppiid($cfppi->getCFPPIID());
  298.                 // Affichage form nouv CFPPI
  299.                 return $this->render('CFPPI\ajo.html.twig', array(
  300.                     'orig' => 'ajo',
  301.                     'help_dir' => $this->parambag->get('dochelp_web_path'),       //forcreatmenu
  302.                     'form_ajo' => $form_ajo->createView(),
  303.                     'usrorg' => $user->getusrorg(),
  304.                     'catlib' => $user->getcatid()->getcatlib(),
  305.                     'cfppi_ok' => $ppi_param[0],
  306.                     'cfppiid' => $cfppiid,
  307.                     'deflog' => $deflog,
  308.                     'errors' => $errors,
  309.                 ));    
  310.             
  311.             }
  312.         }
  313.     }
  314.     #[Route(path'/savplus'name'savoirplus')]
  315.     public function ensavoirplus
  316.         (
  317.             Request $request
  318.             ManagerRegistry $doctrine,
  319.         ): Response
  320.     {
  321.         // affichage d'une page neutre : explications sur un des utilitaires 
  322.         $em $doctrine->getManager();
  323.         $user $this->getUser();
  324.         if($user!=null){        // protection ACL contre les lectures intempestives extérieures (saisie url directe)
  325.             if(isset($_GET['wich'])){   // quel outil ?
  326.                 switch($_GET['wich']){
  327.                     case 'ppiplus':
  328.                         return $this->render('default\ppiplus.html.twig', array());        
  329.                     break;
  330.                     case 'modplus':
  331.                         return $this->render('default\modplus.html.twig', array());        
  332.                     break;
  333.                     case 'pfiplus':
  334.                         return $this->render('default\pfiplus.html.twig', array());        
  335.                     break;
  336.                     default:
  337.                         $this->get('session')->getFlashBag()->add(
  338.                             'error',
  339.                             "Impossible d'accéder à la fonction demandée !"
  340.                         );
  341.                         return $this->redirect($this->generateUrl('pageaccueil')); // renvoi caval
  342.                     break;        
  343.                 }
  344.             
  345.             }else{      // protection ACL contre les lectures intempestives extérieures (saisie url directe)
  346.                 $this->get('session')->getFlashBag()->add(
  347.                     'Erreur',
  348.                     "Impossible d'accéder à la fonction demandée !"
  349.                 );
  350.                 return $this->redirect($this->generateUrl('pageaccueil')); // renvoi caval
  351.             }
  352.             
  353.         }else{      // protection ACL contre les lectures intempestives extérieures (saisie url directe)
  354.             $this->get('session')->getFlashBag()->add(
  355.                 'Erreur',
  356.                 "Impossible d'accéder à la fonction demandée !"
  357.             );
  358.             return $this->redirect($this->generateUrl('pageaccueil')); // renvoi caval
  359.         }
  360.     }
  361.     #[Route(path'/accesssibilite'name'accesssibilite')]
  362.     public function accesssibilite
  363.         (
  364.             Request $request
  365.             ManagerRegistry $doctrine,
  366.         ): Response
  367.     {
  368.         return $this->render('default\accessibilite.html.twig', array());        
  369.     }
  370.     #[Route(path'/cgu'name'cgu')]
  371.     public function cgu
  372.         (
  373.             Request $request
  374.             ManagerRegistry $doctrine,
  375.         ): Response
  376.     {
  377.         return $this->render('default\cgu.html.twig', array());        
  378.     }
  379.     #[Route(path'/mentionslegales'name'mentionslegales')]
  380.     public function mentionslegales
  381.         (
  382.             Request $request
  383.             ManagerRegistry $doctrine,
  384.         ): Response
  385.     {
  386.         return $this->render('default\mentionslegales.html.twig', array());        
  387.     }
  388.     // accès CFPPIID d'un user à partir de admin_usr_maj pour un admin
  389.     #[Route(path'/ppi/admin/{CFPPIID}'name'ppi_admin')]
  390.     public function ppiadmin
  391.         (
  392.             $CFPPIID,
  393.             Request $request
  394.             ManagerRegistry $doctrine,
  395.             ValidatorInterface $validator
  396.         ): Response
  397.     {
  398.            
  399.         $em $doctrine->getManager();
  400.         $user $this->getUser();
  401.     
  402.         if($user==null){        // protection ACL contre les lectures intempestives extérieures (saisie url directe)
  403.             $this->get('session')->getFlashBag()->add(
  404.                 'Erreur',
  405.                 'Impossible d\'accéder à la fonction demandée'
  406.             );
  407.             return $this->redirect($this->generateUrl('pageaccueil')); // renvoi caval
  408.         }
  409.         
  410.         // USR identifié OK, accès réservé admin + gestionnaire
  411.         $lstadmin array_merge($this->divservice->getIdGestionnaire(), $this->divservice->getIdAdmin());
  412.         if(!in_array($user->getUsrid(), $lstadmin)){     // kontrol access
  413.             $this->get('session')->getFlashBag()->add(
  414.                 'Erreur',
  415.                 'Impossible d\'accéder à la fonction demandée'
  416.             );
  417.             return $this->redirect($this->generateUrl('pageaccueil')); // renvoi caval
  418.         }
  419.         
  420.         $maj_poss true;      // tout est ok, modification PPI par l'admin possible
  421.         // USR ADMIN identifié OK        
  422.         $prfid $user->getPrfid()->getPrfid();
  423.         $prflib $user->getPrfid()->getPrflib();
  424.         $cfppiid $this->divservice->decrypt_cfppiid($CFPPIID);
  425.         $activ_menu $this->divservice->verif_activ_menu($cfppiid);
  426.         // affichage menu gauche + page Mes outils
  427.         return $this->render('default\index.html.twig', array(
  428.             'base_dir' => realpath($this->parambag->get('kernel.project_dir').'/..').DIRECTORY_SEPARATOR,
  429.             'help_dir' => $this->parambag->get('dochelp_web_path'),
  430.             'prfid' => $prfid,
  431.             'prflib' => $prflib,
  432.             'cfppi_ok' => '1',
  433.             'cfppiid' => $CFPPIID,
  434.             'activ_menu' => $activ_menu,
  435.         ));        
  436.             
  437.     }
  438.     // ===============================================================
  439.     // utilitaires litu
  440.     // ===============================================================
  441.     /**
  442.      * 2020...
  443.      * suppression des comptes vides créés avant 31-12-2014 (ok si exec après ouv.session)
  444.      * 2022-07-15
  445.      * suppression des comptes vides créés avant 31-12-2016 (ok si exec après ouv.session)
  446.      * suppression des simu prosper, fusion, cif vides
  447.      */
  448.     #[Route(path'/supUsrVide'name'supUsrVide')]
  449.     public function supUsrVide(Request $request)
  450.     {
  451.         // ATTENTION : à ne pas utilier ou mettre à niveau avec PRB...
  452.         $em $doctrine->getManager();
  453.         $user $this->getUser();
  454.         
  455.         if($user->getusrid() == 11){    // vérif me
  456.     
  457.             $nb_usr_supp=0;$nb_pro_supp=0;$nb_fu_supp=0;$nb_cif_supp=0;
  458.             $query $em->getRepository(usr::class)->createQueryBuilder('usr'); 
  459.             $query
  460.                 ->select('usr')
  461.                 ->where('usr.usrdatcre <= :datcrelimit')
  462.                 // ->setParameter('datcrelimit' , '2014-12-31')
  463.                 ->setParameter('datcrelimit' '2016-12-31')
  464.                 ->orderBy('usr.usrdatcre''ASC')
  465.             ;
  466.             $usrs $query->getQuery()->getResult();
  467.             foreach($usrs as $usr){
  468.                 $usrasupp true;
  469.                 
  470.                 // =================================== PROSPER 
  471.                 $pros $em->getRepository(pro::class)->createQueryBuilder('pro')
  472.                     ->select('pro')
  473.                     ->where('pro.usrid = :usrid')
  474.                     ->setParameter('usrid' $usr->getusrid())
  475.                     ->orderBy('pro.proid''ASC')
  476.                     ->getQuery()->getResult()
  477.                 ;
  478.                 foreach($pros as $pro){
  479.                     
  480.                     $proan $em->getRepository(proan::class)->createQueryBuilder('proan')
  481.                         ->select('SUM(proan.PROAN_T1_a01+proan.PROAN_T1_a02+proan.PROAN_T1_a03+proan.PROAN_T1_a04+proan.PROAN_T1_a05+proan.PROAN_T1_a51+proan.PROAN_T1_b01+proan.PROAN_T1_b02+proan.PROAN_T1_b03+proan.PROAN_T1_b04+proan.PROAN_T1_b05+proan.PROAN_T1_c01+proan.PROAN_T1_c02+proan.PROAN_T1_c51+proan.PROAN_T1_x51+proan.PROAN_T1_x52+proan.PROAN_T2_a01+proan.PROAN_T2_a02+proan.PROAN_T2_a03+proan.PROAN_T2_a04+proan.PROAN_T2_a51+proan.PROAN_T2_a52+proan.PROAN_T2_a56+proan.PROAN_T2_a57+proan.PROAN_T3_a01+proan.PROAN_T3_a02+proan.PROAN_T3_a03+proan.PROAN_T3_a04+proan.PROAN_T3_a05+proan.PROAN_T3_a06+proan.PROAN_T3_a51+proan.PROAN_T3_b01+proan.PROAN_T3_b02+proan.PROAN_T3_b03+proan.PROAN_T3_b04+proan.PROAN_T3_b05+proan.PROAN_T3_b06+proan.PROAN_T3_b07+proan.PROAN_T3_b08+proan.PROAN_T3_b51+proan.PROAN_T3_x51+proan.PROAN_T4_a01+proan.PROAN_T4_a02+proan.PROAN_T4_a03+proan.PROAN_T4_a04+proan.PROAN_T4_a51+proan.PROAN_T4_a52) AS TOTO')
  482.                         ->where('proan.proid = :proid')
  483.                         ->setParameter('proid',$pro->getproid())
  484.                         ->groupBy('proan.proid')
  485.                         ->getQuery()
  486.                     ;
  487.                     if($proan->getSingleScalarResult()==0){ // PRO à supprimer
  488.                         foreach($pro->getPROANS() as $proan_a_sup){
  489.                             $pro->removePROAN($proan_a_sup);
  490.                         }
  491.                         $em->persist($pro);
  492.                         $em->flush();
  493.                         
  494.                         $pro_a_supp $em->getRepository(pro::class)->findOneBy(array('proid'=>$pro->getproid()));
  495.                         $em->remove($pro_a_supp);
  496.                         $em->flush();
  497.                         $nb_pro_supp++;
  498.                         
  499.                     }else{
  500.                         $usrasupp false;      // USR à maintenir
  501.                     }
  502.                 }
  503.                 
  504.                 
  505.                 // =================================== FUSION 
  506.                 $fus $em->getRepository(fu_sim::class)->createQueryBuilder('fusim')
  507.                     ->select('fusim')
  508.                     ->where('fusim.usrid = :usrid')
  509.                     ->setParameter('usrid' $usr->getusrid())
  510.                     ->orderBy('fusim.SIMID''ASC')
  511.                     ->getQuery()->getResult()
  512.                 ;
  513.                 foreach($fus as $fu){
  514.                     
  515.                     $fucomm $em->getRepository(fu_comm::class)->createQueryBuilder('fucomm')
  516.                         ->select('SUM(fucomm.COMTHBAS+fucomm.COMTHPRO+fucomm.COMFBBAS+fucomm.COMFBPRO+fucomm.COMFNBBAS+fucomm.COMFNBPRO+fucomm.COMCFEBAS+fucomm.COMCFEPRO+fucomm.COMCVAE+fucomm.COMIFER+fucomm.COMTAFNB+fucomm.COMTASCOM+fucomm.COMDCRTP+fucomm.COMFNGIR+fucomm.COMCPS+fucomm.COMACNE) AS TOTO')
  517.                         ->where('fucomm.SIMID = :SIMID')
  518.                         ->setParameter('SIMID',$fu->getSIMID())
  519.                         ->groupBy('fucomm.SIMID')
  520.                         ->getQuery()
  521.                     ;
  522.                     $totcomm $fucomm->getOneOrNullResult();
  523.                     if($totcomm==null){
  524.                         $totcomm 0;
  525.                     }
  526.                     
  527.                     $fuepci $em->getRepository(fu_epci::class)->createQueryBuilder('fuepci')
  528.                         ->select('SUM(fuepci.EPCDGFPOP+fuepci.EPCCOMNBR+fuepci.EPCDGFHAB+fuepci.EPCCIF+fuepci.EPCTHTXDPT+fuepci.EPCTHBAS+fuepci.EPCTHPRO+fuepci.EPCTHPROC+fuepci.EPCFBBAS+fuepci.EPCFBPRO+fuepci.EPCFBPROC+fuepci.EPCFNBBAS+fuepci.EPCFNBPRO+fuepci.EPCFNBPROC+fuepci.EPCCFEBAS+fuepci.EPCCFEPRO+fuepci.EPCCFEPROC+fuepci.EPCCFEZBAS+fuepci.EPCCFEZPRO+fuepci.EPCCFEEBAS+fuepci.EPCCFEEPRO+fuepci.EPCCVAE+fuepci.EPCIFER+fuepci.EPCTAFNB+fuepci.EPCTASCOM+fuepci.EPCDCRTP+fuepci.EPCFNGIR+fuepci.EPCCPS+fuepci.EPCACNE+fuepci.EPCCOMCVAE+fuepci.EPCCOMIFER+fuepci.EPCCOMTAFNB+fuepci.EPCCOMTASCOM+fuepci.EPCCOMCPS+fuepci.EPCCOMACTP+fuepci.EPCCOMCT+fuepci.EPCCOMARF+fuepci.EPCCOMCSC+fuepci.EPCCOMFNGIR+fuepci.EPCCOMDCRTP+fuepci.EPCOM+fuepci.EPCCOMOM+fuepci.EPCRASS+fuepci.EPCCOMRASS+fuepci.EPCCOMDS+fuepci.EPCDOTBAS+fuepci.EPCDOTPERE+fuepci.EPCBONIF+fuepci.EPCMAJOR+fuepci.EPCGARANT+fuepci.EPCECRET) AS TOTO')
  529.                         ->where('fuepci.SIMID = :SIMID')
  530.                         ->setParameter('SIMID',$fu->getSIMID())
  531.                         ->groupBy('fuepci.SIMID')
  532.                         ->getQuery()
  533.                     ;
  534.                     $totepci $fuepci->getOneOrNullResult();
  535.                     if($totepci==null){
  536.                         $totepci 0;
  537.                     }
  538.                     
  539.                     if(($totcomm==0)&&($totepci==0)){   // SIM à supprimer
  540.                         foreach($fu->getFUCOMMS() as $fucomm_a_sup){
  541.                             $fu->removeFUCOMM($fucomm_a_sup);
  542.                         }
  543.                         foreach($fu->getFUEPCIS() as $fuepci_a_sup){
  544.                             $fu->removeFUEPCI($fuepci_a_sup);
  545.                         }
  546.                         $em->persist($fu);
  547.                         $em->flush();
  548.                         
  549.                         $fu_a_supp $em->getRepository(fu_sim::class)->findOneBy(array('SIMID'=>$fu->getSIMID()));
  550.                         $em->remove($fu_a_supp);
  551.                         $em->flush();
  552.                         $nb_fu_supp++;
  553.                         
  554.                     }else{
  555.                         $usrasupp false;      // USR à maintenir
  556.                     }
  557.                 }
  558.                 
  559.                 // =================================== CIF 
  560.                 $cifs $em->getRepository(cif_sim::class)->createQueryBuilder('cifsim')
  561.                     ->select('cifsim')
  562.                     ->where('cifsim.usrid = :usrid')
  563.                     ->setParameter('usrid' $usr->getusrid())
  564.                     ->orderBy('cifsim.SIMID''ASC')
  565.                     ->getQuery()->getResult()
  566.                 ;
  567.                 foreach($cifs as $cif){
  568.                     
  569.                     $cifcomm $em->getRepository('App:CIF_COMM23')->createQueryBuilder('cifcomm')
  570.                         ->select('SUM(cifcomm.COMDCRTP+cifcomm.COMFNGIR+cifcomm.COMTHPX+cifcomm.COMFBPX+cifcomm.COMFNBPX+cifcomm.COMCVAE+cifcomm.COMTAFNB+cifcomm.COMCFE+cifcomm.COMIFER+cifcomm.COMTASCOM+cifcomm.COMRASS+cifcomm.COMTEOM) AS TOTO')
  571.                         ->where('cifcomm.SIMID = :SIMID')
  572.                         ->setParameter('SIMID',$cif->getSIMID())
  573.                         ->groupBy('cifcomm.SIMID')
  574.                         ->getQuery()
  575.                     ;
  576.                     $totcomm $cifcomm->getOneOrNullResult();
  577.                     if($totcomm==null){
  578.                         $totcomm 0;
  579.                     }
  580.                     
  581.                     $repo $em->getRepository('App:CIF_EPCI1');    // simu epci
  582.                     $cifepci $repo->createQueryBuilder('cifepci')
  583.                         ->select('SUM(cifepci.EPCDGFPOP+cifepci.EPCCIF) AS TOTO')
  584.                         ->where('cifepci.SIMID = :SIMID')
  585.                         ->setParameter('SIMID',$cif->getSIMID())
  586.                         ->groupBy('cifepci.SIMID')
  587.                         ->getQuery()
  588.                     ;
  589.                     $totepci $cifepci->getOneOrNullResult();
  590.                     if($totepci==null){
  591.                         $totepci 0;
  592.                     }
  593.                     
  594.                     if(($totcomm==0)&&($totepci==0)){   // SIM à supprimer
  595.                         foreach($cif->getCIFCOMM23S() as $cifcomm_a_sup){
  596.                             $cif->removeCIFCOMM23($cifcomm_a_sup);
  597.                         }
  598.                         foreach($cif->getCIFEPCIS() as $cifepci_a_sup){
  599.                             $cif->removeCIFEPCI($cifepci_a_sup);
  600.                         }
  601.                         $em->persist($cif);
  602.                         $em->flush();
  603.                         
  604.                         $cif_a_supp $em->getRepository(cif_sim::class)->findOneBy(array('SIMID'=>$cif->getSIMID()));
  605.                         $em->remove($cif_a_supp);
  606.                         $em->flush();
  607.                         $nb_cif_supp++;
  608.                         
  609.                     }else{
  610.                         $usrasupp false;      // USR à maintenir
  611.                     }
  612.                 }
  613.                 
  614.                 if($usrasupp==true){
  615.                     $usr_a_supp $em->getRepository(usr::class)->findOneBy(array('usrid'=>$usr->getusrid()));
  616.                     $em->remove($usr_a_supp);
  617.                     $em->flush();
  618.                     $nb_usr_supp++;
  619.                 }
  620.             }
  621.             // Message d'information    
  622.             $this->get('session')->getFlashBag()->add(
  623.                 'success',
  624.                 'Nb USR supp: '.$nb_usr_supp.' Nb PRO supp: '.$nb_pro_supp.' Nb FUSION supp: '.$nb_fu_supp.' Nb CIF supp: '.$nb_cif_supp
  625.                 //'il faut activer la fonction en premier'
  626.             );
  627.             return $this->render('default\index.html.twig', array(
  628.                 'base_dir' => realpath($this->container->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
  629.                 'help_dir' => $this->container->getParameter('dochelp_web_path'),
  630.                 'prfid' => 0,
  631.                 'prflib' => 'nondef',
  632.             ));        
  633.         }else{      // erreur réservé admin
  634.             $this->get('session')->getFlashBag()->add(
  635.                 'error',
  636.                 'La page demandée n\'existe pas ! (adm)'
  637.             );
  638.             // Affichage page inexistante
  639.             return $this->render('default\noway.html.twig'
  640.                 array(
  641.                     'linkaccueil'=> 1,
  642.                     'width'=> 1200,
  643.                     'height'=> 300
  644.                 )
  645.             );        
  646.         }
  647.         
  648.     }
  649.     
  650.     
  651.     
  652.     
  653.     /**
  654.      * suppression des simulations PROSPER stériles (ok si exec après ouv.session)
  655.      * @Route("/supProSteril", name="supProSteril")
  656.      */
  657.     public function supProSteril(Request $request)
  658.     {
  659.         $em $this->getDoctrine()->getManager();
  660.         $user $this->getUser();
  661.         
  662.         if($user->getusrid() == 11){    // vérif me
  663.     
  664.             $i=0;
  665.             $repo $em->getRepository('App:PRO');
  666.             $pros $repo->createQueryBuilder('pro')
  667.                 ->select('pro')
  668.                 ->orderBy('pro.proid''ASC')
  669.                 ->getQuery()
  670.                 ->getResult()
  671.             ;
  672.             foreach($pros as $pro){
  673.                 $repo $em->getRepository('App:PROAN');
  674.                 $proan $repo->createQueryBuilder('proan')
  675.                     ->select('SUM(proan.PROAN_T1_a01+proan.PROAN_T1_a02+proan.PROAN_T1_a03+proan.PROAN_T1_a04+proan.PROAN_T1_a05+proan.PROAN_T1_a51+proan.PROAN_T1_b01+proan.PROAN_T1_b02+proan.PROAN_T1_b03+proan.PROAN_T1_b04+proan.PROAN_T1_b05+proan.PROAN_T1_c01+proan.PROAN_T1_c02+proan.PROAN_T1_c51+proan.PROAN_T1_x51+proan.PROAN_T1_x52+proan.PROAN_T2_a01+proan.PROAN_T2_a02+proan.PROAN_T2_a03+proan.PROAN_T2_a04+proan.PROAN_T2_a51+proan.PROAN_T2_a52+proan.PROAN_T2_a56+proan.PROAN_T2_a57+proan.PROAN_T3_a01+proan.PROAN_T3_a02+proan.PROAN_T3_a03+proan.PROAN_T3_a04+proan.PROAN_T3_a05+proan.PROAN_T3_a06+proan.PROAN_T3_a51+proan.PROAN_T3_b01+proan.PROAN_T3_b02+proan.PROAN_T3_b03+proan.PROAN_T3_b04+proan.PROAN_T3_b05+proan.PROAN_T3_b06+proan.PROAN_T3_b07+proan.PROAN_T3_b08+proan.PROAN_T3_b51+proan.PROAN_T3_x51+proan.PROAN_T4_a01+proan.PROAN_T4_a02+proan.PROAN_T4_a03+proan.PROAN_T4_a04+proan.PROAN_T4_a51+proan.PROAN_T4_a52) AS TOTO')
  676.                     ->where('proan.proid = :proid')
  677.                     ->setParameter('proid',$pro->getproid())
  678.                     ->groupBy('proan.proid')
  679.                     ->getQuery()
  680.                 ;
  681.                 if($proan->getSingleScalarResult()==0){ // PRO à supprimer
  682.                     foreach($pro->getPROANS() as $proan_a_sup){
  683.                         $pro->removePROAN($proan_a_sup);
  684.                     }
  685.                     $em->persist($pro);
  686.                     $em->flush();
  687.                     
  688.                     $pro_a_supp $em->getRepository('App:PRO')->findOneBy(array('proid'=>$pro->getproid()));
  689.                     $em->remove($pro_a_supp);
  690.                     $em->flush();
  691.                 }
  692.             }
  693.             // Message d'information    
  694.             $this->get('session')->getFlashBag()->add(
  695.                 'success',
  696.                 'Les projets PROSPER sans données ont été supprimés avec succès'
  697.                 //'il faut activer la fonction en premier'
  698.             );
  699.             return $this->render('default\index.html.twig', array(
  700.                 'base_dir' => realpath($this->container->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
  701.                 'help_dir' => $this->container->getParameter('dochelp_web_path'),
  702.                 'prfid' => 0,
  703.                 'prflib' => 'nondef',
  704.             ));
  705.             
  706.         }else{      // erreur réservé admin
  707.             $this->get('session')->getFlashBag()->add(
  708.                 'error',
  709.                 'La page demandée n\'existe pas ! (adm)'
  710.             );
  711.             // Affichage page inexistante
  712.             return $this->render('default\noway.html.twig'
  713.                 array(
  714.                     'linkaccueil'=> 1,
  715.                     'width'=> 400,
  716.                     'height'=> 100
  717.                 )
  718.             );        
  719.         }
  720.       
  721.     }
  722.     
  723.     
  724.     
  725.     /**
  726.      * création des couples PRF, MEN manquants
  727.      * @Route("/prfMenAcc", name="crePrfMenAcc")
  728.      */
  729.     public function crePrfMenAcc(Request $request)
  730.     {
  731.         
  732.         $em $this->getDoctrine()->getManager();
  733.         $user $this->getUser();
  734.         
  735.         if($user->getusrid() == 11){    // vérif me
  736.         
  737.             $repo $this->getDoctrine()->getManager()->getRepository('App:PRF');
  738.             $prfs $repo->createQueryBuilder('prf')
  739.                 ->select('prf')
  740.                 ->orderBy('prf.prfid''ASC')
  741.                 ->getQuery()
  742.                 ->getResult()
  743.             ;
  744.             $repo $this->getDoctrine()->getManager()->getRepository('App:MEN');
  745.             $mens $repo->createQueryBuilder('men')
  746.                 ->select('men')
  747.                 ->orderBy('men.MENID''ASC')
  748.                 ->getQuery()
  749.                 ->getResult()
  750.             ;
  751.             $em $this->getDoctrine()->getManager();
  752.             foreach($prfs as $prf){
  753.                 $prfid_ec $prf->getprfid();
  754.                 foreach($mens as $men){
  755.                     
  756.                     $repo $this->getDoctrine()->getManager()->getRepository('App:PRF_MEN');
  757.                     $prf_men $repo->createQueryBuilder('prfmen')
  758.                         ->select('prfmen')
  759.                         ->where('prfmen.prfid = :prfid')
  760.                         ->setParameter('prfid',$prfid_ec)
  761.                         ->andwhere('prfmen.MENID = :MENID')
  762.                         ->setParameter('MENID',$men->getMENID())
  763.                         ->getQuery()
  764.                         ->getArrayResult()
  765.                     ;
  766.                     
  767.                     if(count($prf_men)==0){     // ajouter le couple sans droit
  768.                         
  769.                         /*
  770.                         $PRF_MEN = new PRF_MEN;
  771.                         $PRF_MEN->setprfid($prf);
  772.                         $PRF_MEN->setMENID($men);
  773.                         $PRF_MEN->setPRMACC(0);
  774.                         $em->persist($PRF_MEN);
  775.                         $em->flush();
  776.                         */
  777.                     }
  778.                 }
  779.             }
  780.             
  781.             // Message d'information    
  782.             $this->get('session')->getFlashBag()->add(
  783.                 'success',
  784.                 'Les couples PRF, MEN ont été ajoutés avec succès'
  785.                 //'il faut activer la fonction en premier'
  786.             );
  787.             
  788.             return $this->redirect($this->generateUrl('pageaccueil'));
  789.             
  790.         }else{      // erreur réservé admin
  791.             $this->get('session')->getFlashBag()->add(
  792.                 'error',
  793.                 'La page demandée n\'existe pas ! (adm)'
  794.             );
  795.             // Affichage page inexistante
  796.             return $this->render('default\noway.html.twig'
  797.                 array(
  798.                     'linkaccueil'=> 1,
  799.                     'width'=> 400,
  800.                     'height'=> 100
  801.                 )
  802.             );        
  803.         }
  804.             
  805.     }
  806.     /**
  807.      * ajout du compte 011bis pour chaque CFPPIID dans CFPFBTBF + CFPFBCRO et CFTBF + CFCRO
  808.      * @Route("/addClc011bis", name="addClc011bis")
  809.      */
  810.     public function addClc011bis(Request $request)
  811.     {
  812.         
  813.         $em $this->getDoctrine()->getManager();
  814.         $user $this->getUser();
  815.         
  816.         if($user->getusrid() == 32){    // vérif dpf
  817.             $query $em->getRepository(CFPPI::class)->createQueryBuilder('cfppi'); 
  818.             $query
  819.                 ->select('cfppi')
  820.             ;
  821.             $cfppis $query->getQuery()->getResult();
  822.             foreach($cfppis as $key=>$cfppi){
  823.                 
  824.                 $timeframe $this->divservice->get_cfppitimeframe($cfppi->getCFPPIID());
  825.                 $annee_deb $timeframe['annee_deb'];
  826.                 $annee_fin $timeframe['annee_fin'];
  827.                 $ppi_nbann $timeframe['ppi_nbann'];
  828.                 // a) ajout d'une classe par PPI
  829.                 $query $em->getRepository(CFPFBTBF::class)->createQueryBuilder('cfpfbtbf'); 
  830.                 $query
  831.                     ->select('cfpfbtbf.TBFID')
  832.                     ->where('cfpfbtbf.TBFCLC = :class011bis')
  833.                     ->setParameter('class011bis' '011bis')
  834.                     ->andwhere('cfpfbtbf.CFPPIID = :cfppiid')
  835.                     ->setParameter('cfppiid' $cfppi->getCFPPIID())
  836.                 ;
  837.                 $cfpfbtbfs $query->getQuery()->getArrayResult();
  838.                 if(count($cfpfbtbfs)<=0){        // pas exist, tu crées
  839.                     // ajout d'un enrgt dans CFTBF
  840.                     $cfpfbtfb = new CFPFBTBF;
  841.                     $cfpfbtfb->setTBFNAT('D');                                                                        // Indic.partie cible du tableau (Dépenses ou Recettes)
  842.                     $cfpfbtfb->setTBFCLC('011bis');                                                                // Classe comptable du groupe
  843.                     $cfpfbtfb->setTBFORD('3');                                                                        // N°Ordre élt dans groupe Dépenses ou Recettes
  844.                     $cfpfbtfb->setTBFTIT('Economie de charges à caractère général');            // Désignation de la classe comptable
  845.                     $cfpfbtfb->setTBFFLG(1);                                    // Flag mise en service, actif ou non
  846.                     $cfpfbtfb->setTBFIDX(0);                                    // Indexation, pourcentage à appliquer au montant 1° année
  847.                     $cfpfbtfb->setTBFMT(0);                                    // Montant 1° année si TBFIDX<>0
  848.                     $cfpfbtfb->setCFPPIID($cfppi);
  849.                     $em->persist($cfpfbtfb);
  850.                     // pour le TBF, ajout des données annuelles dans CFPFBCRO pour toute la durée du PPI 
  851.                     for($ann=$annee_deb;$ann<=$annee_fin;$ann++){
  852.                         // ajout de 1 enrgt dans CFPFBCRO
  853.                         $cfpfbcro = new CFPFBCRO;
  854.                         $cfpfbcro->setCRONAN($ann);            // N° de l'année
  855.                         // $cfpfbcro->setCROMT(0);                    // Montant (null autorisé)
  856.                         $cfpfbcro->setTBFID($cfpfbtfb);            // réf. de la ligne du tableau Budget Fonctionnement
  857.                         $em->persist($cfpfbcro);
  858.                     }
  859.                 }
  860.                 // b) idem pour chaque projet
  861.                 $query $em->getRepository(CFPRJ::class)->createQueryBuilder('cfprj'); 
  862.                 $query
  863.                     ->select('cfprj')
  864.                     ->where('cfprj.CFPPIID = :cfppiid')
  865.                     ->setParameter('cfppiid' $cfppi->getCFPPIID())
  866.                 ;
  867.                 $cfprjs $query->getQuery()->getResult();
  868.                 foreach($cfprjs as $key=>$cfprj){
  869.                     $query $em->getRepository(CFTBF::class)->createQueryBuilder('cftbf'); 
  870.                     $query
  871.                         ->select('cftbf.TBFID')
  872.                         ->where('cftbf.TBFCLC = :class011bis')
  873.                         ->setParameter('class011bis' '011bis')
  874.                         ->andwhere('cftbf.PRJID = :cfprjid')
  875.                         ->setParameter('cfprjid' $cfprj->getPRJID())
  876.                     ;
  877.                     $cftbfs $query->getQuery()->getArrayResult();
  878.                     if(count($cftbfs)<=0){        // pas exist, tu crées
  879.                         // ajout d'un enrgt dans CFTBF pour chaque PRJ
  880.                         $cftbf = new CFTBF;
  881.                         $cftbf->setTBFNAT('D');                                                                    // Indic.partie cible du tableau (Charges)
  882.                         $cftbf->setTBFCLC('011bis');                                                            // Classe comptable du groupe
  883.                         $cftbf->setTBFORD('3');                                                                    // Ordonnancement classe
  884.                         $cftbf->setTBFTIT('Economie de charges à caractère général');        // Désignation de la classe comptable
  885.                         $cftbf->setPRJID($cfprj);
  886.                         $em->persist($cftbf);
  887.                         // pour chaque TBF, ajout des données annuelles dans CFCRO pour toute la durée du projet 
  888.                         for($i=$cfprj->getPRJANNDEB();$i<=$cfprj->getPRJANNFIN();$i++){
  889.                             // ajout de 2 enrgt dans CFCRO (Hausse et Baisse)
  890.                             $cfcro = new CFCRO;
  891.                             $cfcro->setCRONAN($i);            // N° de l'année
  892.                             $cfcro->setCROMT(null);            // Montant nuul ok dorénavant ;-)
  893.                             $cfcro->setTBFID($cftbf);            // réf. de la ligne du tableau Budget Fonctionnement
  894.                             $em->persist($cfcro);
  895.                         }
  896.                     }
  897.                 }
  898.                 $em->flush();    // pour un ppi
  899.             }
  900.             // Message d'information    
  901.             $this->get('session')->getFlashBag()->add(
  902.                 'success',
  903.                 'Nouvelle classe 011bis ajoutée'
  904.             );
  905.             return $this->redirect($this->generateUrl('pageaccueil'));
  906.             
  907.         }else{      // erreur réservé admin
  908.             $this->get('session')->getFlashBag()->add(
  909.                 'error',
  910.                 'La page demandée n\'existe pas ! (adm)'
  911.             );
  912.             // Affichage page inexistante
  913.             return $this->render('default\noway.html.twig'
  914.                 array(
  915.                     'linkaccueil'=> 1,
  916.                     'width'=> 400,
  917.                     'height'=> 100
  918.                 )
  919.             );        
  920.         }
  921.     }
  922.     
  923.     
  924.     
  925.     /**
  926.      * cryptage des mots de passe des utilisateurs
  927.      * @Route("/usrLogPwd", name="doLogPwd")
  928.      */
  929.     public function doLogPwd(Request $request)
  930.     {
  931.         
  932.         $em $this->getDoctrine()->getManager();
  933.         $user $this->getUser();
  934.         
  935.         if($user->getusrid() == 11){    // vérif me
  936.         
  937.             $repo $this->getDoctrine()->getManager()->getRepository('App:USR');
  938.             $usr $repo->createQueryBuilder('usr')
  939.                 ->select('usr')
  940.                 ->orderBy('usr.username''ASC')        // USRLOGIN
  941.                 ->where('usr.password is null')
  942.                 ->andwhere('usr.usrid = :usrid')
  943.                 ->setParameter('usrid'11)
  944.                 ->getQuery()
  945.                 ->getResult()
  946.             ;
  947.             foreach($usr as $u){
  948.                 $hash $this->get('security.password_encoder')->encodePassword($u$u->getUSRPWD());
  949.                 $u->setPassword($hash);
  950.                 $em $this->getDoctrine()->getManager();
  951.                 $em->persist($u);
  952.                 $em->flush();
  953.             }
  954.             
  955.             // Message d'information    
  956.             $this->get('session')->getFlashBag()->add(
  957.                 'success',
  958.                 'Les mots de passe des utilisateurs ont été cryptés avec succès'
  959.             );
  960.             
  961.             //var_dump($this->get('session'));
  962.             
  963.             return $this->redirect($this->generateUrl('pageaccueil'));
  964.         
  965.         }else{      // erreur réservé admin
  966.             $this->get('session')->getFlashBag()->add(
  967.                 'error',
  968.                 'La page demandée n\'existe pas ! (adm)'
  969.             );
  970.             // Affichage page inexistante
  971.             return $this->render('default\noway.html.twig'
  972.                 array(
  973.                     'linkaccueil'=> 0,
  974.                     'width'=> 400,
  975.                     'height'=> 100
  976.                 )
  977.             );        
  978.         }
  979.         
  980.     }
  981.     /**
  982.      * Récupération + mémorisation URL courante pour redirection après login
  983.      */
  984.     #[Route(path'/storeRedirect'name'storeRedirect')]
  985.     public function storeRedirect(Request $request)
  986.     {
  987.         $currentUrl $request->query->get('uri');
  988.         if($currentUrl=='logout'){
  989.             return $this->redirect($this->generateUrl('app_logout'));
  990.         }else{
  991.             return $this->redirect($currentUrl);        // à vérifier
  992.         }
  993.     }
  994.     
  995.     
  996.     
  997.     /**
  998.      * Vérif statut de la session courante (Contrôle d'accès utilisateur), si pas OK retour login
  999.      */
  1000.     #[Route(path'/isalive'name'isalive')]
  1001.     public function isalive(Request $request)
  1002.     {
  1003.         $results = (session_status() === PHP_SESSION_ACTIVE) ? TRUE FALSE;
  1004.         $response = new Response(json_encode($results));
  1005.         return $response;
  1006.     }
  1007.     
  1008. }