pour déploiement auto v2 via gitlab
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

141 lines
4.7 KiB

<?php
require_once('../../base/php/classDatabase.php');
require_once('../../outils/php/JsonLogicToSql5.php');
require_once('../../base/php/lib/cti/Database/Database2Factory.class.php');
require_once('../../base/php/lib/cti/Environnement/Environnement.class.php');
require_once('etudes/cardioInterventionnelle/EtudeCardioPost.php');
/**
* Classe executant les études
*
* Cette classe est limitée pour le moment au module PMSI.
* Pourrait être "multi" module en ajoutant un paramètre à la construction de la classe.
*
* Utilise JSONLogic pour décrire les règles
* @see https://jsonlogic.com/
*
* Converti le JSONLogic en SQL grâce à la classe JsonLogicToSql
* JsonLogicToSql5 -> PHP 5
* JsonLogicToSql -> PHP 7+
*/
class EtudeManager
{
/** @var JsonLogicToSql5 */
private $jsonLogic;
private $iCTI_connexion;
public function __construct()
{
$this->jsonLogic = new JsonLogicToSql5();
$this->iCTI_connexion = Database2Factory::getInstance(Environnement::PROVIDER_CTI);
}
/**
* Supprime les anciennes données uniquement si l'étude a une requête de "suppression"
*
* @param string $etude
* @return boolean
*/
public function clear($etude)
{
$res = $this->iCTI_connexion->query("SELECT * FROM pmsi.t_etude WHERE code = '$etude'");
if (!$res) {
echo "\r\n" . date("d/m/Y H:i:s") . "\t" . "Error" . "\t" . "Problème dans le clear de l'étude $etude";
return false;
}
$record = $this->iCTI_connexion->fetchAssoc($res);
if (!$record) {
echo "\r\n" . date("d/m/Y H:i:s") . "\t" . "WARNING" . "\t" . "L'étude $etude n'existe pas";
return false;
}
$clearCommand = $record["clear_request"];
if ($clearCommand !== "") {
$this->iCTI_connexion->query($clearCommand);
echo "\r\n" . date("d/m/Y H:i:s") . "\t" . "INFO" . "\t" . "Suppression effectuée pour l'étude $etude";
} else {
echo "\r\n" . date("d/m/Y H:i:s") . "\t" . "INFO" . "\t" . "Aucune suppression nécessaire pour l'étude $etude";
}
return true;
}
/**
* Execute les règles pour une étude donnée
* Récupère la requête de base et joue successivement la requête avec les clauses where générées par le JSONLogic
* Les règles sont stockées au format JSONLogic dans la table t_etude_rules
*
* @param string $etude
* @return void
*/
public function execute($etude)
{
$rules = array();
$queries = array();
/**
* Récupération des éléments communs à l'étude (t_etude)
*/
$res = $this->iCTI_connexion->query("SELECT * FROM pmsi.t_etude WHERE code = '$etude'");
if (!$res) {
echo "\r\n" . date("d/m/Y H:i:s") . "\t" . "ERROR" . "\t" . "Problème dans l'exécution dans de l'étude $etude";
return;
}
$record = $this->iCTI_connexion->fetchAssoc($res);
if (!$record) {
echo "\r\n" . date("d/m/Y H:i:s") . "\t" . "WARNING" . "\t" . "L'étude $etude n'existe pas";
return;
}
$id = $record["oid"];
$baseCommand = $record["base_request"];
$postClass = $record["post_class"];
/**
* Récupération et interprétation des règles grace au JSONLogic
*/
$res = $this->iCTI_connexion->query("SELECT * FROM pmsi.t_etude_rule WHERE etude_id = '$id'");
while ($row = $this->iCTI_connexion->fetchAssoc($res)) {
array_push($rules, $this->jsonLogic->apply(json_decode($row["json"], true)));
}
/**
* Constitution des requêtes finales en remplacant le {{ where }} par la clause générées dynamiquement
* Si l'étude n'a pas de rules particulère on exécute la requête de base
*/
if (count($rules)) {
foreach ($rules as $rule) {
$queries[] = preg_replace("/{{\s?WHERE\s?}}/im", "\n WHERE 1 = 1 AND\n" . $rule, $baseCommand);
}
} else {
$queries[] = $baseCommand;
}
/**
* Execution des requêtes
*/
foreach ($queries as $query) {
$res = $this->iCTI_connexion->query($query);
if (!$res) {
echo "\r\n" . date("d/m/Y H:i:s") . "\t" . "ERROR" . "\t" . "Erreur lors de l'éxecution d'une règle pour l'étude $etude";
return;
}
}
/**
* Execution des post Traitement
*/
if ($postClass){
$etudePost = new $postClass;
$etudePost->execute();
}
echo "\r\n" . date("d/m/Y H:i:s") . "\t" . "Execution de l'étude $etude avec succès";
}
}