args['-raz'] = 'ONLYKEY'; // Initialisation $cti_sqlStatements = new CTI_SqlStatements_class('iCTI_import_'.$moduleName.'_CONSOLIDATION.XML', $iCTI_connexion, $environmentVars, $sqlOptions); $cti_sqlStatements->executeStatementsNode('DISABLE_INDEX'); $cti_sqlStatements->executeStatementsNode('RAZ'); // Consolidation environnement foreach ($childEnvironments as $environment) { $environmentVars = array(); $environmentVars['TX'] = $environment->name; $environmentVars['FINESS'] = $environment->finess; $environmentVars['FINESS_TEXTE'] = $environment->name; $environmentVars['DBHOST'] = $environment->host; $environmentVars['DBPORT'] = $environment->port; $environmentVars['DBNAME'] = $environment->dbname; $environmentVars['DBUSERNAME'] = $environment->username; $environmentVars['DBPASSWORD'] = $environment->password; $environmentVars['TPX'] = '_'.$environment->code; $environmentVars['CPX'] = $environment->code.'_'; $environmentVars['IPX'] = $environment->oid.'000000000000'; $environmentVars['PPX'] = $environment->oid; $environmentVars['PX'] = $environment->code; $cti_sqlStatements_env = new CTI_SqlStatements_class('iCTI_import_'.$moduleName.'_CONSOLIDATION.XML', $iCTI_connexion, $environmentVars, $sqlOptions); $cti_sqlStatements_env->executeStatementsNode('INIT'); $cti_sqlStatements_env->executeStatementsNode('PARAM'); $cti_sqlStatements_env->executeStatementsNode('PRODUCTION'); } // Finalisation $cti_sqlStatements->executeStatementsNode('ENABLE_INDEX'); $cti_sqlStatements->executeStatementsNode('POST'); } /** Récupère les "environnements enfants" qui consolident le module dont on précise le nom * Retourne un tableau de stclass contenant les propriétés suivantes : * - name * - directory * - code * - oid * - finess * - host ('localhost' si non trouvé) * - port ('5432' si non trouvé) * - dbname * - username * - password * Ou false en cas d'erreur * @param $moduleName * @return array|bool Tableau des "environnements enfants" ou false en cas d'erreur */ function getChildEnvironments($moduleName) { $environmentError = false; $childEnvironments = array(); $file = Environnement::getInstance()->getRootPath()."\settings\settings.XML"; if (file_exists($file)) { $xml = simplexml_load_file($file); if ($xml) { $nodes = $xml->xpath("/SETTINGS/CONSOLIDATION" . strtoupper($moduleName) . "/ENVIRONMENT"); foreach ($nodes as $environmentNode) { $environment = new stdClass(); $environment->name = ''; $environment->finess = ''; $environment->directory = ''; $environment->code = ''; $environment->oid = ''; $environment->host = ''; $environment->port = ''; $environment->dbname = ''; $environment->username = ''; $environment->password = ''; $environmentName = ''; $propertyNodes = $environmentNode->xpath("PROPERTY[@name='ENVIRONMENT']"); // Le noeud a été trouvé if (count($propertyNodes) == 1) { $environmentName = trim($propertyNodes[0]['value']); } $propertyNodes = $environmentNode->xpath("PROPERTY[@name='DIR']"); // Le noeud a été trouvé if (count($propertyNodes) == 1) { $environment->directory = trim($propertyNodes[0]['value']); } $propertyNodes = $environmentNode->xpath("PROPERTY[@name='PREFIX_CODE']"); // Le noeud a été trouvé if (count($propertyNodes) == 1) { $environment->code = strtoupper(trim($propertyNodes[0]['value'])); } $propertyNodes = $environmentNode->xpath("PROPERTY[@name='PREFIX_OID']"); // Le noeud a été trouvé if (count($propertyNodes) == 1) { $environment->oid = trim($propertyNodes[0]['value']); } $environmentSettings = getChildEnvironmentSettings($environment); if (! $environmentSettings) { logErrorMsg("Environnement $environmentName sur $environment->directory inexistant ou mal configuré"); $environmentError = true; } else { $environment->name = $environmentSettings->name; $environment->finess = $environmentSettings->finess; } $environmentDatabaseSettings = getChildEnvironmentDatabaseSettings($environment); if (! $environmentDatabaseSettings) { logErrorMsg("Environnement $environmentName sur $environment->directory inexistant ou mal configuré"); $environmentError = true; } else { $environment->host = $environmentDatabaseSettings->host; $environment->port = $environmentDatabaseSettings->port; $environment->dbname = $environmentDatabaseSettings->dbname; $environment->username = $environmentDatabaseSettings->username; $environment->password = $environmentDatabaseSettings->password; } if ($environment->code === '' || $environment->oid === 0) { logErrorMsg("Préfixes obligatoires ($environment->code,$environment->oid) pour environnement $environmentName"); $environmentError = true; } // Ajout de l'environnement dont on a contrôlé les paramètres if (!$environmentError) { $childEnvironments[] = $environment; } } } if ($environmentError) { logErrorMsg("Au moins un environnement de la consolidation ".ucfirst($moduleName)." n'est pas correct"); return false; } } else { return false; } return $childEnvironments; } /** Lit les informations d'un "environnement enfant" (qui consolide) * On récupère le chemin de l'environnement via sa propriété 'directory' * On retourne une stdClass avec les propriétés suivantes : * - name * - finess * @param $environment * @return stdClass|bool false en cas d'erreur */ function getChildEnvironmentSettings($environment) { $settings = new stdClass(); $settings->name = ''; $settings->finess = ''; $file = $environment->directory."\settings\settings.XML"; if (file_exists($file)) { $xml = simplexml_load_file($file); if ($xml) { $nodes = $xml->xpath("/SETTINGS/ENVIRONMENT/PROPERTY[@name='ENVIRONMENT']"); $settings->name = trim($nodes[0]['value']); $nodes = $xml->xpath("/SETTINGS/ENVIRONMENT/PROPERTY[@name='FINESS']"); $settings->finess = trim($nodes[0]['value']); } } else { return false; } return $settings; } /** Lit les informations de la base de données d'un "environnement enfant" (qui consolide) * On récupère le chemin de l'environnement via sa propriété 'directory' * On retourne une stdClass avec les propriétés suivantes : * - host ('localhost' si non trouvé) * - port ('5432' si non trouvé) * - dbname * - username * - password * @param $environment * @return stdClass|bool false en cas d'erreur */ function getChildEnvironmentDatabaseSettings($environment) { $dbSettings = new EnvironmentDatabaseSettings($environment->directory); try { $dbSettings->readSettings(); } catch (Exception $e) { logErrorMsg($e->getMessage()); return false; } $database = new stdClass(); $database->host = $dbSettings->getHost(); $database->port = $dbSettings->getPort(); $database->dbname = $dbSettings->getName(); $database->username = $dbSettings->getUsername(); $database->password = $dbSettings->getPassword(); return $database; } /** Vérifie si le module dont on précise le nom est configuré pour la consolidation * @param $moduleName * @return bool */ function checkIsConsolidate($moduleName) { $isConsolidate = false; $file = Environnement::getInstance()->getRootPath()."/settings/settings.XML"; $xml = simplexml_load_file($file); $nodes = $xml->xpath("/SETTINGS/MODULES/MODULE[@name='".$moduleName."' and @installed='true']"); // Le noeud a été trouvé if (count($nodes) == 1) { if (isset($nodes[0]['consolidate'])) { $isConsolidate = (strtolower($nodes[0]['consolidate']) === 'true'); } } return $isConsolidate; } /** Connecte la base de données de l'environnement * @return bool false en cas d'erreur * @throws Exception */ function iCTI_connect() { global $iCTI_connexion; // Connexion BD $iCTI_connexion = Database2Factory::getInstance(Environnement::PROVIDER_CTI); $ret = $iCTI_connexion->connect(); if (!$ret) { logErrorMsg("La connexion PostgreSQL iCTI a échoué"); return false; } return true; } function iCTI_disconnect() { global $iCTI_connexion; $iCTI_connexion->close(); } ?>