#!/bin/bash # # Script de patch pour adapter migrate_from_backup.php et migrate_batch.sh # pour fonctionner avec --env=rca|pra et source=geosector # set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PHP_SCRIPT="$SCRIPT_DIR/php/migrate_from_backup.php" BATCH_SCRIPT="$SCRIPT_DIR/migrate_batch.sh" echo "=== Patching migration scripts ===" echo "" # Backup des fichiers originaux echo "Creating backups..." cp "$PHP_SCRIPT" "$PHP_SCRIPT.backup" cp "$BATCH_SCRIPT" "$BATCH_SCRIPT.backup" echo "✓ Backups created" echo "" # ============================================================ # PATCH 1: migrate_from_backup.php - Configuration multi-env # ============================================================ echo "Patching migrate_from_backup.php..." # Étape 1: Remplacer les constantes DB par configuration multi-env sed -i '31,50s/.*/ \/\/ REPLACED BY PATCH - see below/' "$PHP_SCRIPT" # Insérer la nouvelle configuration après la ligne 38 sed -i '38a\ private $env;\ \ \/\/ Configuration multi-environnement\ private const ENVIRONMENTS = [\ '\''rca'\'' => [\ '\''host'\'' => '\''13.23.33.3'\'', \/\/ maria3 sur IN3\ '\''port'\'' => 3306,\ '\''user'\'' => '\''rca_geo_user'\'',\ '\''pass'\'' => '\''UPf3C0cQ805LypyM71iW'\'',\ '\''target_db'\'' => '\''rca_geo'\'',\ '\''source_db'\'' => '\''geosector'\'' \/\/ Base synchronisée par PM7\ ],\ '\''pra'\'' => [\ '\''host'\'' => '\''13.23.33.4'\'', \/\/ maria4 sur IN4\ '\''port'\'' => 3306,\ '\''user'\'' => '\''pra_geo_user'\'',\ '\''pass'\'' => '\''d2jAAGGWi8fxFrWgXjOA'\'',\ '\''target_db'\'' => '\''pra_geo'\'',\ '\''source_db'\'' => '\''geosector'\'' \/\/ Base synchronisée par PM7\ ]\ ];' "$PHP_SCRIPT" # Étape 2: Modifier le constructeur pour accepter $env sed -i 's/public function __construct($sourceDbName, $targetDbName, $mode/public function __construct($env, $mode/' "$PHP_SCRIPT" # Étape 3: Adapter le corps du constructeur sed -i '/public function __construct/,/^ }$/{ s/\$this->sourceDbName = \$sourceDbName;/\$this->env = \$env;\n if (!isset(self::ENVIRONMENTS[\$env])) {\n throw new Exception("Invalid environment: \$env. Use '\''rca'\'' or '\''pra'\''");\n }\n \$config = self::ENVIRONMENTS[\$env];\n \$this->sourceDbName = \$config['\''source_db'\''];\n \$this->targetDbName = \$config['\''target_db'\''];/ s/\$this->targetDbName = \$targetDbName;// s/Source: {\$sourceDbName}/Environment: \$env/ s/Cible: {\$targetDbName}/Source: {\$this->sourceDbName} → Target: {\$this->targetDbName}/ }' "$PHP_SCRIPT" # Étape 4: Modifier connect() pour utiliser la config de l'env sed -i '/public function connect()/,/^ }$/{ s/self::DB_HOST/self::ENVIRONMENTS[\$this->env]['\''host'\'']/g s/self::DB_PORT/self::ENVIRONMENTS[\$this->env]['\''port'\'']/g s/self::DB_USER_ROOT/self::ENVIRONMENTS[\$this->env]['\''user'\'']/g s/self::DB_PASS_ROOT/self::ENVIRONMENTS[\$this->env]['\''pass'\'']/g s/self::DB_USER/self::ENVIRONMENTS[\$this->env]['\''user'\'']/g s/self::DB_PASS/self::ENVIRONMENTS[\$this->env]['\''pass'\'']/g }' "$PHP_SCRIPT" # Étape 5: Modifier parseArguments() - supprimer source-db et target-db, ajouter env sed -i '/function parseArguments/,/^}$/{ s/'\''source-db'\'' => null,/'\''env'\'' => '\''rca'\'',/ s/'\''target-db'\'' => '\''pra_geo'\'',// }' "$PHP_SCRIPT" # Étape 6: Modifier showHelp() sed -i '/function showHelp/,/^}$/{ s/--source-db=NAME.*\[REQUIS\]/--env=ENV Environment: '\''rca'\'' (recette) ou '\''pra'\'' (production) [défaut: rca]/ s/--target-db=NAME.*/ (supprimé - déduit automatiquement de --env)/ s/--source-db=geosector_20251007/--env=rca/g s/--target-db=pra_geo//g s/--target-db=rca_geo//g }' "$PHP_SCRIPT" # Étape 7: Modifier la validation des arguments sed -i '/Validation des arguments/,/exit(1);/{ s/if (!$args\['\''source-db'\''\])/if (!isset(self::ENVIRONMENTS[\$args['\''env'\'']]))/ s/--source-db est requis/--env doit être '\''rca'\'' ou '\''pra'\''/ }' "$PHP_SCRIPT" # Étape 8: Modifier l'instanciation de BackupMigration sed -i '/new BackupMigration/,/);/{ s/\$args\['\''source-db'\''\],/\$args['\''env'\''],/ s/\$args\['\''target-db'\''\],// }' "$PHP_SCRIPT" echo "✓ migrate_from_backup.php patched" echo "" # ============================================================ # PATCH 2: migrate_batch.sh - Adapter pour env rca/pra # ============================================================ echo "Patching migrate_batch.sh..." # Étape 1: Détecter l'environnement automatiquement ou via paramètre sed -i '/# Configuration/a\ \ # Détection automatique de l'\''environnement\ if [ -f "/etc/hostname" ]; then\ CONTAINER_NAME=$(cat /etc/hostname)\ case $CONTAINER_NAME in\ rca-geo)\ ENV="rca"\ ;;\ pra-geo)\ ENV="pra"\ ;;\ *)\ ENV="rca" # Défaut\ ;;\ esac\ else\ ENV="rca" # Défaut\ fi' "$BATCH_SCRIPT" # Étape 2: Remplacer SOURCE_DB et TARGET_DB sed -i 's/SOURCE_DB="geosector_20251013_13"/# SOURCE_DB removed - always "geosector" (deduced from --env)/' "$BATCH_SCRIPT" sed -i 's/TARGET_DB="pra_geo"/# TARGET_DB removed - deduced from --env/' "$BATCH_SCRIPT" # Étape 3: Ajouter option --env dans le parsing sed -i '/--interactive|-i)/i\ --env)\ ENV="$2"\ shift 2\ ;;' "$BATCH_SCRIPT" # Étape 4: Modifier les appels à migrate_from_backup.php - ligne 200 sed -i '200,210s/--source-db="\$SOURCE_DB"/--env="$ENV"/' "$BATCH_SCRIPT" sed -i '200,210s/--target-db="\$TARGET_DB"//' "$BATCH_SCRIPT" # Étape 5: Modifier les appels dans la boucle - ligne 374 sed -i '374,380s/--source-db="\$SOURCE_DB"/--env="$ENV"/' "$BATCH_SCRIPT" sed -i '374,380s/--target-db="\$TARGET_DB"//' "$BATCH_SCRIPT" # Étape 6: Mettre à jour les messages de log sed -i 's/📁 Source: \$SOURCE_DB/🌍 Environment: $ENV/' "$BATCH_SCRIPT" sed -i 's/📁 Cible: \$TARGET_DB/📁 Source: geosector → Target: (déduit de $ENV)/' "$BATCH_SCRIPT" echo "✓ migrate_batch.sh patched" echo "" # ============================================================ # Résumé # ============================================================ echo "=== Patch completed ===" echo "" echo "Backups saved:" echo " - $PHP_SCRIPT.backup" echo " - $BATCH_SCRIPT.backup" echo "" echo "New usage:" echo " # Sur rca-geo (détection auto)" echo " ./migrate_batch.sh" echo "" echo " # Sur pra-geo avec --env explicite" echo " ./migrate_batch.sh --env=pra" echo "" echo " # Migration d'une entité spécifique" echo " php php/migrate_from_backup.php --env=rca --mode=entity --entity-id=45" echo "" echo "To restore backups:" echo " cp $PHP_SCRIPT.backup $PHP_SCRIPT" echo " cp $BATCH_SCRIPT.backup $BATCH_SCRIPT"