<?php
namespace App\PaaBundle\Controller;
use App\PaaBundle\Controller\PAABaseController;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query\ResultSetMapping;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class ChangelogController extends PAABaseController {
/*
* Mise à jour du changelog
*/
// LG 20230208 old public function genChangelogScriptAction() {
public function genChangelogScriptAction($pbSetVersionDesLogsSansVersion) {
$em = $this->getDoctrineManager();
$repo = $em->getRepository("PaaBundle:" . 'changelog');
// LG 20230208 début
if ($pbSetVersionDesLogsSansVersion) {
// Attribuer le N° de version à tous les logs qui n'ont pas encore de version
$lsNomVersion = lg_getenv("paa_version") ;
$lsDateVersion = lg_getenv("paa_version_date") ;
$repo->setVersionDesLogsSansVersion($lsNomVersion, $lsDateVersion) ;
}
// LG 20230208 fin
// Récupérer la liste des mises à jour
$laLogDatasObj = $repo->getMaJ();
$laLogDatas = (array)$laLogDatasObj;
$lsValues = "";
foreach($laLogDatas as $key => $value) {
(array)$laLogDatas[$key] = (array)$laLogDatas[$key];
}
// Construire la liste des valeurs pour le Insert Into
$i = 0;
$liNbLogsTraités = 0 ;
$lsFields = "" ;
foreach($laLogDatas as $log) {
if ($liNbLogsTraités == 0) {
// Première ligne : il faut générer la liste des champs du Insert Into pour que les champs soient dans le bon ordre
foreach ($log as $key => $value) {
if ($lsFields) {
$lsFields .= ", " ;
}
$lsFields .= $key ;
}
}
// Générer les valeurs pour cette ligne
if ($lsValues) {
$lsValues .= ", \r\n" ;
}
$lsValues .= "(" ;
foreach ($log as $key => $value) {
if($laLogDatas[$i][$key] === null) {
$lsValues = $lsValues.'null';
if ($key != array_key_last($laLogDatas[$i])) {
$lsValues = $lsValues.',';
}
} else if (gettype($laLogDatas[$i][$key]) === 'string') {
$lsValues = $lsValues."'".pg_escape_string(trim($laLogDatas[$i][$key]))."',";
} else if (gettype($laLogDatas[$i][$key]) == 'boolean') {
if ($laLogDatas[$i][$key] === true) {
$lsValues = $lsValues.'true,';
} else if ($laLogDatas[$i][$key] === false) {
$lsValues = $lsValues.'false,';
} else {
throw new \Exception("Anomalie") ;
}
} else {
$lsValues = $lsValues.$laLogDatas[$i][$key].',';
}
}
$lsValues .= ")" ;
$i++;
$liNbLogsTraités++ ;
}
// LG 20230208 début
// $lsQuery = "DELETE FROM paa.changelog ;\r\n" ;
$lsQuery = "ALTER TABLE paa.changelog DISABLE Trigger ALL ;\r\n" ;
$lsQuery .= "DELETE FROM paa.changelog ;\r\n" ;
// LG 20230208 fin
if ($lsValues) {
$lsQuery .= "INSERT INTO paa.changelog ($lsFields)"
. " VALUES \r\n"
. "$lsValues ;" ;
}
// LG 20230208 début
// $lsQuery = "DELETE FROM paa.changelog ;\r\n" ;
$lsQuery .= "ALTER TABLE paa.changelog ENABLE Trigger ALL ;\r\n" ;
// LG 20230208 fin
//Génération du fichier .sql
$lsFichier = $this->get('kernel')->getProjectDir() . "\src\PaaBundle\ScriptsSQL\Changelog.sql" ;
$lsFichier = str_replace("\\", DIRECTORY_SEPARATOR, $lsFichier) ;
file_put_contents($lsFichier, $lsQuery);
$loMessage = new \stdClass;
$loMessage->status = "ok";
$loMessage->nbLogs = $liNbLogsTraités ; // LG 20220312
$lsMessage = json_encode($loMessage, JSON_UNESCAPED_UNICODE);
$response = new Response($lsMessage, Response::HTTP_OK, array('content-type' => 'text/json'));
return $response;
}
// Mettre à jour les données de la table ChangeLog avec le contenu du script src/PaaBundle/ScriptsSQL/Changelog.sql
public function majChangelogAction() {
$loConnexion = $this->getDoctrineConnection();
$loMessage = new \stdClass;
$lsFichier = $this->get('kernel')->getProjectDir() . "\src\PaaBundle\ScriptsSQL\Changelog.sql" ;
$lsFichier = str_replace("\\", DIRECTORY_SEPARATOR, $lsFichier) ;
if (file_exists($lsFichier)) {
$lsSQL = file_get_contents($lsFichier);
$lvResult = $loConnexion->exec($lsSQL);
$loMessage->status = "OK";
} else {
$loMessage->status = "KO";
$loMessage->msg = "Le fichier " . $lsFichier . " n'existe pas" ;
}
$lsMessage = json_encode($loMessage, JSON_UNESCAPED_UNICODE);
$response = new Response($lsMessage, Response::HTTP_OK, array('content-type' => 'text/json'));
return $response;
}
}