src/PaaBundle/Component/Connection/ConnectionWrapper.php line 59

Open in your IDE?
  1. <?php
  2. /*
  3.  * To change this license header, choose License Headers in Project Properties.
  4.  * To change this template file, choose Tools | Templates
  5.  * and open the template in the editor.
  6.  */
  7. namespace App\PaaBundle\Component\Connection;
  8. use PDO;
  9. use App\Limoog\PartageBundle\Component\cParametresBDD;
  10. class ConnectionWrapper extends \Doctrine\DBAL\Connection {
  11.     /**
  12.      * {@inheritDoc}
  13.      */
  14.     private $bConnectedToPAA 0;
  15.     // Les paramètres transmis par Symfony au constructeur, début
  16.     private $params ;
  17.     private $driver ;
  18.     private $config ;
  19.     private $eventManager ;
  20.     // Les paramètres transmis par Symfony au constructeur, fin
  21.     private $container ;
  22.     private $DBName ;
  23.     
  24.     /**
  25.      * Initializes a new instance of the Connection class.
  26.      *
  27.      * @param array                              $params       The connection parameters.
  28.      * @param \Doctrine\DBAL\Driver              $driver       The driver to use.
  29.      * @param \Doctrine\DBAL\Configuration|null  $config       The configuration, optional.
  30.      * @param \Doctrine\Common\EventManager|null $eventManager The event manager, optional.
  31.      *
  32.      * @throws \Doctrine\DBAL\DBALException
  33.      */
  34.     public function __construct(array $params, \Doctrine\DBAL\Driver $driver, \Doctrine\DBAL\Configuration $config null, \Doctrine\Common\EventManager $eventManager null) {
  35.         // LG 20200630 : rien n'est fait ici, mais dans le Initialise, qui est appellé après le setContainer, lequel est nécessaire pour connaitre sur quelle BDD travailler
  36.         // (appel préparé dans \applicationPAA_S4\src\Kernel.php, méthode process)
  37.         $this->params $params ;
  38.         $this->driver $driver ;
  39.         $this->config $config ;
  40.         $this->eventManager $eventManager ;
  41.         parent::__construct($this->params$this->driver$this->config$this->eventManager);        
  42.         
  43.     }
  44.     
  45.     /**
  46.      * Méthode appellée par \applicationPAA_S4\src\Kernel.php, méthode process
  47.      * @param Container $container
  48.      */
  49.     public function setContainer(\Symfony\Component\DependencyInjection\Container $container)
  50.     {
  51.         $this->container $container;
  52.         $this->DBName $container->get('session')->get('DBName'"default") ;
  53.         return ;
  54.     }
  55.     
  56.     /**
  57.      * Effectue l'initialisation, une fois qu'on a reçu le container et qu'on connait la BDD sur laquelle travailler
  58.      * Méthode appellée par \applicationPAA_S4\src\Kernel.php, méthode process
  59.      *
  60.      * @param array                              $params       The connection parameters.
  61.      * @param \Doctrine\DBAL\Driver              $driver       The driver to use.
  62.      * @param \Doctrine\DBAL\Configuration|null  $config       The configuration, optional.
  63.      * @param \Doctrine\Common\EventManager|null $eventManager The event manager, optional.
  64.      *
  65.      * @throws \Doctrine\DBAL\DBALException
  66.      */
  67.     public function initialise() {
  68. if ($this->params['dbname'] === "ORT_50") {
  69.     $toto "toto" ;
  70. }
  71.             
  72. //        $URL = $this->params['host'];
  73. //// $URL = "51.15.181.176" ;
  74. //        $port = $this->params['port'] ;
  75. //        $dbname = $this->params['dbname'] ;
  76. //        $user = $this->params['user'] ;
  77. //        $pwd = $this->params['password'] ;
  78. //        $driver = str_replace('pdo_', '', $this->params['driver']) ;
  79.         $suffixe = ($this->DBName=="default") ? "" "_" $this->DBName ;
  80.         // $driver = str_replace('pdo_', '', getenv('doctrine_database_driver' . $suffixe)) ; OLD JM 20220425 
  81.         $driver str_replace('pdo_'''lg_getenv('doctrine_database_driver' $suffixe)) ;
  82.         // $URL = getenv('doctrine_database_host' . $suffixe)    ; OLD JM 20220425 
  83.         $URL lg_getenv('doctrine_database_host' $suffixe)    ;
  84.         // $port = getenv('doctrine_database_port' . $suffixe) ; OLD JM 20220425 
  85.         $port lg_getenv('doctrine_database_port' $suffixe) ;
  86.         // $dbname = getenv('doctrine_database_name' . $suffixe) ; OLD JM 20220425 
  87.         $dbname lg_getenv('doctrine_database_name' $suffixe) ;
  88.         // $user = getenv('doctrine_database_user' . $suffixe) ; OLD JM 20220425 
  89.         $user lg_getenv('doctrine_database_user' $suffixe) ;
  90.         // $pwd = getenv('doctrine_database_password' . $suffixe) ; OLD JM 20220425 
  91.         $pwd lg_getenv('doctrine_database_password' $suffixe) ;
  92.         
  93.         $this->params['host'] = $URL ;
  94.         $this->params['port'] = $port ;
  95.         $this->params['dbname'] = $dbname ;
  96.         $this->params['user'] = $user ;
  97.         $this->params['password'] = $pwd ;
  98.         
  99.         // Ouvrir une connexion persistante
  100.         $lsCnxnString $driver ":"
  101.                 "host=" $URL ";"
  102.                 "port=" $port ";"
  103.                 "dbname=" $dbname ";" ;
  104.         
  105. // Ces fichiers de log seront créés dans le dossier web (sur le serveur : "/ort-sup/web")
  106. // file_put_contents('cnxnString.txt', $lsCnxnString, FILE_APPEND);
  107. // error_log($lsCnxnString, 3, 'cnxnString2.txt');
  108. // throw new \Exception("cnxnString = " . $lsCnxnString . "|user=".$params['user']."|password=".$params['password'] . "|path=".getcwd()) ;
  109. // LG 20200807 début : host, port, dbname sont vides ?
  110. if (!$driver) {
  111. // MG Modification 20200831 Début
  112. // Le echo pose problème avec les réponses en JSON
  113. //    echo "Erreur d'accès aux variables d'environnement lors de l'initialisation de la base de données<br>" ;
  114. // MG Modification 20200831 Fin
  115. //    echo "lsCnxnString = " . $lsCnxnString . "|<br>" ;
  116. //    echo "driver = " . $driver . "|<br>" ;
  117. //    echo "this->DBName = " . $this->DBName . "|<br>" ;
  118. //    echo "suffixe = " . $suffixe . "|<br>" ;
  119. //    echo "getenv('doctrine_database_driver') = " . getenv('doctrine_database_driver') . "|<br>" ;
  120. //    echo "getenv('doctrine_database_driver' . suffixe) = " . getenv('doctrine_database_driver' . $suffixe) . "|<br>" ;
  121.     $logger = new \App\PaaBundle\Component\MyLogger('onNotifieAction');
  122.     $idLog $logger->Log("Erreur d'accès aux variables d'environnement lors de l'initialisation de la base de données""info", array(), true);
  123.     
  124. //     throw new \Exception("le driver n'a pas été retrouvé !") ;
  125.     // Cela semble se produire dans des contextes où la connexion n'est pas utilisée
  126.     // Donc, faire un simple return semble suffire à résoudre le problème
  127.     return ;
  128. }
  129. // LG 20221108 old : PERSISTENT fait que des connexions restent ouvetes à totr sur pgAdmin        $loPDO = new PDO($lsCnxnString, $user, $pwd, array(PDO::ATTR_PERSISTENT => true));
  130.         $loPDO = new PDO($lsCnxnString$user$pwd, array());
  131.         $params['pdo'] = $loPDO;
  132.         $params['pdo']->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
  133.         $params['driver'] = 'pdo_' $params['pdo']->getAttribute(\PDO::ATTR_DRIVER_NAME);
  134.         parent::__construct($this->params$this->driver$this->config$this->eventManager);
  135.         return ;
  136.     }    
  137.     public function connect() {
  138.         // Appel à la procédure parente
  139.         $lvConnected parent::connect();
  140.         // Effectuer l'identification sous Postgres dès l'ouverture de la connexion
  141.         // Rend obsolète D:\Luc\Dev\DevWeb\Symfony\applicationPAA\src\PaaBundle\Component\EventListener\AVirer_PostConnectionListener.php ?
  142.         if ($this->isConnected() && !$this->bConnectedToPAA) {
  143.             // 1ere connexion : initialiser les éléments PAA
  144. //            $lsVersionPAA = "test" ;
  145. //            $liUser = "Null" ;
  146. //            $liMachine = "Null" ;
  147. //            $sql = "Select Paa.InitConnexionPaa('$lsVersionPAA', $liUser, $liMachine) As lOK" ;
  148. //            $this->_conn->query($sql) ;
  149.             $this->InitConnexionPaa(/* $this->_conn */);
  150.         }
  151.         return $lvConnected;
  152.     }
  153.     public function InitConnexionPaa($psVersionPAA null$piUser null$piMachine null) {
  154.         // 1ere connexion : initialiser les éléments PAA
  155.         // $user = $security->getUser();
  156.         // $poPDOConnexion = $poPDOConnexion?$poPDOConnexion:$this->_conn ;
  157.         $lsVersionPAA $psVersionPAA $psVersionPAA : (isset($_SESSION["gsVersionPAA"]) ? $_SESSION["gsVersionPAA"] : "Anonyme");
  158.         $liUser $piUser $piUser : (isset($_SESSION["giUser"]) ? $_SESSION["giUser"] : "Null");
  159.         if ($piMachine) {
  160.             
  161.         } else if (isset($_SESSION["giMachine"])) {
  162.             $liMachine $_SESSION["giMachine"];
  163.         } else {
  164.             // L'Id de machine n'est pas encore défini : il faut e rechercher maintenent
  165.             $loParamètresBDD = new cParametresBDD($this);
  166.             $liMachine $loParamètresBDD->rtvIdMachineByName(strtoupper(gethostname()));
  167.             $_SESSION["giMachine"] = $liMachine;
  168.         }
  169.         $liMachine $piMachine $piMachine : (isset($_SESSION["giMachine"]) ? $_SESSION["giMachine"] : "Null");
  170.         // Indiquer à Postgres le nom de l'application qui est connectée (selon code VFP)
  171. // LG 20221108 début
  172. // Textmerge("set application_name to '<<m._appli>>';"))
  173.         $sql "set application_name to 'PAA$lsVersionPAA'";
  174.         $this->_conn->query($sql);        
  175. // LG 20221108 fin
  176.         $sql "Select Paa.InitConnexionPaa('$lsVersionPAA', $liUser$liMachine) As lOK";
  177.         $this->_conn->query($sql);
  178.         $this->bConnectedToPAA 1;
  179.     }
  180.     // $psSQL : requête SQL
  181.     public function rtvSQLResult($psSQL$psFld ""$pvDftValue null, &$pbFound true) {
  182.         $loCur $this->_conn->query(utf8_encode($psSQL), PDO::FETCH_ASSOC);
  183.         $loRec $loCur->fetch(PDO::FETCH_ASSOC);
  184.         if ($loCur->rowCount() < 1) {
  185.             $pbFound false;
  186.             $lvResultat $pvDftValue;
  187.         } else {
  188.             if ($psFld) {
  189.                 // On a fourni le nom du champ
  190.                 $lvResultat $loRec[$psFld];
  191.             } else {
  192.                 // On prend la 1ere colonne
  193.                 $loRec array_values($loRec);
  194.                 $lvResultat $loRec[0];
  195.             }
  196.         }
  197.         return $lvResultat;
  198.     }
  199. }