Ajout du dossier api avec la géolocalisation automatique des casernes de pompiers
This commit is contained in:
201
api/scripts/php/migrate_entites.php
Normal file
201
api/scripts/php/migrate_entites.php
Normal file
@@ -0,0 +1,201 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Script de migration pour la table entites (users_entites → entites)
|
||||
* Transfert les données de la base source (geosector) vers la base cible (geosector_app)
|
||||
* Gère le chiffrement des données sensibles
|
||||
*/
|
||||
|
||||
require_once dirname(__DIR__) . '/config.php';
|
||||
require_once __DIR__ . '/MigrationConfig.php';
|
||||
require_once dirname(dirname(__DIR__)) . '/src/Services/ApiService.php';
|
||||
|
||||
try {
|
||||
// Création du tunnel SSH si nécessaire
|
||||
createSshTunnel();
|
||||
|
||||
// Connexion aux bases de données
|
||||
$sourceDb = getSourceConnection();
|
||||
$targetDb = getTargetConnection();
|
||||
|
||||
// Utilisation directe de la classe ApiService pour le chiffrement
|
||||
|
||||
// Récupération des entités depuis la base source
|
||||
$stmt = $sourceDb->query("SELECT * FROM users_entites");
|
||||
$entites = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
echo "Nombre d'entités à migrer: " . count($entites) . PHP_EOL;
|
||||
|
||||
// Préparation de la requête d'insertion
|
||||
$insertQuery = "INSERT INTO entites (
|
||||
id,
|
||||
encrypted_name,
|
||||
adresse1,
|
||||
adresse2,
|
||||
code_postal,
|
||||
ville,
|
||||
fk_region,
|
||||
fk_type,
|
||||
encrypted_phone,
|
||||
encrypted_mobile,
|
||||
encrypted_email,
|
||||
gps_lat,
|
||||
gps_lng,
|
||||
encrypted_iban,
|
||||
encrypted_bic,
|
||||
chk_demo,
|
||||
chk_mdp_manuel,
|
||||
chk_copie_mail_recu,
|
||||
chk_accept_sms,
|
||||
fk_user_creat,
|
||||
fk_user_modif,
|
||||
chk_active
|
||||
) VALUES (
|
||||
:id,
|
||||
:encrypted_name,
|
||||
:adresse1,
|
||||
:adresse2,
|
||||
:code_postal,
|
||||
:ville,
|
||||
:fk_region,
|
||||
:fk_type,
|
||||
:encrypted_phone,
|
||||
:encrypted_mobile,
|
||||
:encrypted_email,
|
||||
:gps_lat,
|
||||
:gps_lng,
|
||||
:encrypted_iban,
|
||||
:encrypted_bic,
|
||||
:chk_demo,
|
||||
:chk_mdp_manuel,
|
||||
:chk_copie_mail_recu,
|
||||
:chk_accept_sms,
|
||||
:fk_user_creat,
|
||||
:fk_user_modif,
|
||||
:chk_active
|
||||
) ON DUPLICATE KEY UPDATE
|
||||
encrypted_name = VALUES(encrypted_name),
|
||||
adresse1 = VALUES(adresse1),
|
||||
adresse2 = VALUES(adresse2),
|
||||
code_postal = VALUES(code_postal),
|
||||
ville = VALUES(ville),
|
||||
fk_region = VALUES(fk_region),
|
||||
fk_type = VALUES(fk_type),
|
||||
encrypted_phone = VALUES(encrypted_phone),
|
||||
encrypted_mobile = VALUES(encrypted_mobile),
|
||||
encrypted_email = VALUES(encrypted_email),
|
||||
gps_lat = VALUES(gps_lat),
|
||||
gps_lng = VALUES(gps_lng),
|
||||
encrypted_iban = VALUES(encrypted_iban),
|
||||
encrypted_bic = VALUES(encrypted_bic),
|
||||
chk_demo = VALUES(chk_demo),
|
||||
chk_mdp_manuel = VALUES(chk_mdp_manuel),
|
||||
chk_copie_mail_recu = VALUES(chk_copie_mail_recu),
|
||||
chk_accept_sms = VALUES(chk_accept_sms),
|
||||
fk_user_modif = VALUES(fk_user_modif),
|
||||
chk_active = VALUES(chk_active)";
|
||||
|
||||
$insertStmt = $targetDb->prepare($insertQuery);
|
||||
|
||||
// Compteurs
|
||||
$successCount = 0;
|
||||
$errorCount = 0;
|
||||
|
||||
// Traitement de chaque entité
|
||||
foreach ($entites as $entite) {
|
||||
try {
|
||||
// Mappage des champs entre les deux structures
|
||||
$id = isset($entite['rowid']) ? $entite['rowid'] : $entite['id'];
|
||||
$chkActive = isset($entite['active']) ? $entite['active'] : (isset($entite['chk_active']) ? $entite['chk_active'] : 1);
|
||||
|
||||
// Chiffrement des données sensibles (uniquement si non vides)
|
||||
$libelle = $entite['libelle'] ?? '';
|
||||
$encryptedName = !empty($libelle) ? ApiService::encryptData($libelle) : '';
|
||||
|
||||
// Traitement des numéros de téléphone
|
||||
$tel1 = $entite['tel1'] ?? '';
|
||||
$tel2 = $entite['tel2'] ?? '';
|
||||
|
||||
// Initialisation des variables
|
||||
$encryptedPhone = '';
|
||||
$encryptedMobile = '';
|
||||
|
||||
// Vérification si tel1 commence par 06 ou 07 (mobile)
|
||||
if (preg_match('/^0[67]/', $tel1)) {
|
||||
$encryptedMobile = ApiService::encryptData($tel1);
|
||||
} elseif (!empty($tel1)) {
|
||||
$encryptedPhone = ApiService::encryptData($tel1);
|
||||
}
|
||||
|
||||
// Vérification si tel2 commence par 06 ou 07 (mobile)
|
||||
if (preg_match('/^0[67]/', $tel2)) {
|
||||
// Si encryptedMobile est déjà rempli, on garde le premier mobile trouvé
|
||||
if (empty($encryptedMobile)) {
|
||||
$encryptedMobile = ApiService::encryptData($tel2);
|
||||
} elseif (empty($encryptedPhone)) {
|
||||
// Si on a déjà un mobile mais pas de téléphone fixe, on met le second mobile comme téléphone
|
||||
$encryptedPhone = ApiService::encryptData($tel2);
|
||||
}
|
||||
} elseif (!empty($tel2)) {
|
||||
// Si encryptedPhone est déjà rempli, on garde le premier fixe trouvé
|
||||
if (empty($encryptedPhone)) {
|
||||
$encryptedPhone = ApiService::encryptData($tel2);
|
||||
}
|
||||
}
|
||||
|
||||
// Chiffrement des autres données sensibles (uniquement si non vides)
|
||||
$email = $entite['email'] ?? '';
|
||||
$iban = $entite['iban'] ?? '';
|
||||
$bic = $entite['bic'] ?? '';
|
||||
|
||||
$encryptedEmail = !empty($email) ? ApiService::encryptSearchableData($email) : '';
|
||||
$encryptedIban = !empty($iban) ? ApiService::encryptData($iban) : '';
|
||||
$encryptedBic = !empty($bic) ? ApiService::encryptData($bic) : '';
|
||||
|
||||
// Préparation des données pour l'insertion
|
||||
$entiteData = [
|
||||
'id' => $id,
|
||||
'encrypted_name' => $encryptedName,
|
||||
'adresse1' => $entite['adresse1'] ?? '',
|
||||
'adresse2' => $entite['adresse2'] ?? '',
|
||||
'code_postal' => $entite['cp'] ?? '',
|
||||
'ville' => $entite['ville'] ?? '',
|
||||
'fk_region' => $entite['fk_region'] ?? null,
|
||||
'fk_type' => $entite['fk_type'] ?? 1,
|
||||
'encrypted_phone' => $encryptedPhone,
|
||||
'encrypted_mobile' => $encryptedMobile,
|
||||
'encrypted_email' => $encryptedEmail,
|
||||
'gps_lat' => $entite['gps_lat'] ?? '',
|
||||
'gps_lng' => $entite['gps_lng'] ?? '',
|
||||
'encrypted_iban' => $encryptedIban,
|
||||
'encrypted_bic' => $encryptedBic,
|
||||
'chk_demo' => 0, // Valeur par défaut à 0 comme demandé
|
||||
'chk_mdp_manuel' => $entite['chk_mdp_manuel'] ?? 1,
|
||||
'chk_copie_mail_recu' => $entite['chk_copie_mail_recu'] ?? 0,
|
||||
'chk_accept_sms' => $entite['chk_accept_sms'] ?? 0,
|
||||
'fk_user_creat' => $entite['fk_user_modif'] ?? null,
|
||||
'fk_user_modif' => $entite['fk_user_modif'] ?? null,
|
||||
'chk_active' => $chkActive
|
||||
];
|
||||
|
||||
// Insertion dans la base cible
|
||||
$insertStmt->execute($entiteData);
|
||||
$successCount++;
|
||||
} catch (Exception $e) {
|
||||
$errorCount++;
|
||||
echo "Erreur lors de la migration de l'entité ID {$id}: " . $e->getMessage() . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
echo "Migration terminée. Succès: $successCount, Erreurs: $errorCount" . PHP_EOL;
|
||||
|
||||
// Fermer le tunnel SSH
|
||||
closeSshTunnel();
|
||||
} catch (Exception $e) {
|
||||
echo "Erreur critique: " . $e->getMessage() . PHP_EOL;
|
||||
|
||||
// Fermer le tunnel SSH en cas d'erreur
|
||||
closeSshTunnel();
|
||||
|
||||
exit(1);
|
||||
}
|
||||
Reference in New Issue
Block a user