[ 'name' => 'DÉVELOPPEMENT', 'hostname' => 'dapp.geosector.fr', 'source_db' => 'geosector', 'target_db' => 'dva_geo' ], 'rca' => [ 'name' => 'RECETTE', 'hostname' => 'rapp.geosector.fr', 'source_db' => 'geosector', 'target_db' => 'rca_geo' ], 'pra' => [ 'name' => 'PRODUCTION', 'hostname' => 'app3.geosector.fr', 'source_db' => 'geosector', 'target_db' => 'pra_geo' ] ]; private $env; private $config; private $appConfig; /** * Constructeur * * @param string $env Environnement: 'dva', 'rca' ou 'pra' * @throws Exception Si l'environnement est invalide */ public function __construct(string $env) { if (!isset(self::ENV_MAPPING[$env])) { throw new Exception("Invalid environment: $env. Use 'dva', 'rca' or 'pra'"); } $this->env = $env; // Charger AppConfig (remonter de 4 niveaux: lib -> php -> migration2 -> scripts -> api) $appConfigPath = dirname(__DIR__, 4) . '/src/Config/AppConfig.php'; if (!file_exists($appConfigPath)) { throw new Exception("AppConfig not found at: $appConfigPath"); } require_once $appConfigPath; // Simuler le host pour AppConfig en CLI $hostname = self::ENV_MAPPING[$env]['hostname']; $_SERVER['SERVER_NAME'] = $hostname; $_SERVER['HTTP_HOST'] = $hostname; $this->appConfig = AppConfig::getInstance(); // Récupérer la config DB depuis AppConfig $dbConfig = $this->appConfig->getDatabaseConfig(); if (!$dbConfig || !isset($dbConfig['host'])) { throw new Exception("Database configuration not found for hostname: $hostname"); } // Construire la config pour la migration $this->config = [ 'name' => self::ENV_MAPPING[$env]['name'], 'host' => $dbConfig['host'], 'port' => $dbConfig['port'] ?? 3306, 'user' => $dbConfig['username'], 'pass' => $dbConfig['password'], 'source_db' => self::ENV_MAPPING[$env]['source_db'], 'target_db' => self::ENV_MAPPING[$env]['target_db'] ]; } /** * Retourne l'environnement actuel */ public function getEnv(): string { return $this->env; } /** * Retourne le nom complet de l'environnement */ public function getEnvName(): string { return $this->config['name']; } /** * Retourne l'hôte de la base de données */ public function getHost(): string { return $this->config['host']; } /** * Retourne le port de la base de données */ public function getPort(): int { return $this->config['port']; } /** * Retourne l'utilisateur de la base de données */ public function getUser(): string { return $this->config['user']; } /** * Retourne le mot de passe de la base de données */ public function getPassword(): string { return $this->config['pass']; } /** * Retourne le nom de la base source */ public function getSourceDb(): string { return $this->config['source_db']; } /** * Retourne le nom de la base cible */ public function getTargetDb(): string { return $this->config['target_db']; } /** * Retourne toute la configuration */ public function getConfig(): array { return $this->config; } /** * Détecte automatiquement l'environnement depuis le hostname * * @return string 'dva', 'rca' ou 'pra' (défaut: 'dva') */ public static function autoDetect(): string { $hostname = gethostname(); switch ($hostname) { case 'dva-geo': return 'dva'; case 'rca-geo': return 'rca'; case 'pra-geo': return 'pra'; default: return 'dva'; // Défaut } } /** * Vérifie si un environnement existe */ public static function exists(string $env): bool { return isset(self::ENV_MAPPING[$env]); } /** * Retourne la liste des environnements disponibles */ public static function getAvailableEnvironments(): array { return array_keys(self::ENV_MAPPING); } }