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"; } }