Merge branch 'main' of http://nas.percolouco.com:3500/perco/HouseHub into parent_id #4

Merged
perco merged 8 commits from parent_id into main 2026-05-21 11:22:12 +02:00
Showing only changes of commit b44688a654 - Show all commits
+27 -11
View File
@@ -16,6 +16,11 @@ foreach ($families as $f) {
$family_id = $f['id']; $family_id = $f['id'];
echo "<h3>Mise à jour de <strong>{$f['name']}</strong> ($db_name)</h3><ul>"; echo "<h3>Mise à jour de <strong>{$f['name']}</strong> ($db_name)</h3><ul>";
// 🟢 SÉCURITÉ : On vide les variables à chaque famille pour éviter les fuites (le bug f2 vers f1)
$p1_name = null;
$p2_name = null;
$parents = [];
try { try {
$fam_pdo = new PDO("mysql:host=$host;dbname=$db_name;charset=utf8mb4", $user, $pass, [ $fam_pdo = new PDO("mysql:host=$host;dbname=$db_name;charset=utf8mb4", $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
@@ -36,17 +41,31 @@ foreach ($families as $f) {
} else { throw $e; } } else { throw $e; }
} }
// Auto-mapping // 🟢 CORRECTION DE L'AUTO-MAPPING : Si pf_people est vide, on la remplit !
$stmtUsers = $meta_pdo->prepare("SELECT id, username FROM users WHERE family_id = ?"); $stmtUsers = $meta_pdo->prepare("SELECT id, username, display_name FROM users WHERE family_id = ? ORDER BY id ASC");
$stmtUsers->execute([$family_id]); $stmtUsers->execute([$family_id]);
$users = $stmtUsers->fetchAll(); $users = $stmtUsers->fetchAll();
$mappedCount = 0; $mappedCount = 0;
foreach ($users as $u) { foreach ($users as $u) {
$stmtUpdate = $fam_pdo->prepare("UPDATE pf_people SET user_id = ? WHERE LOWER(name) = LOWER(?) AND user_id IS NULL"); // On vérifie si l'utilisateur existe déjà dans pf_people (via user_id ou son nom)
$stmtUpdate->execute([$u['id'], $u['username']]); $stmtCheck = $fam_pdo->prepare("SELECT id FROM pf_people WHERE user_id = ? OR LOWER(name) = LOWER(?)");
$mappedCount += $stmtUpdate->rowCount(); $stmtCheck->execute([$u['id'], $u['username']]);
$exists = $stmtCheck->fetchColumn();
if ($exists) {
// S'il existe, on s'assure que son user_id est bien renseigné
$stmtUpdate = $fam_pdo->prepare("UPDATE pf_people SET user_id = ? WHERE id = ?");
$stmtUpdate->execute([$u['id'], $exists]);
$mappedCount += $stmtUpdate->rowCount();
} else {
// S'il n'existe pas du tout (base f1 vide), on le crée !
$stmtInsert = $fam_pdo->prepare("INSERT INTO pf_people (name, user_id) VALUES (?, ?)");
$stmtInsert->execute([$u['display_name'] ?: $u['username'], $u['id']]);
$mappedCount++;
}
} }
echo "<span style='color:blue'>$mappedCount profils liés</span> - "; echo "<span style='color:blue'>$mappedCount profils liés ou créés</span> - ";
// role // role
try { try {
@@ -58,7 +77,7 @@ foreach ($families as $f) {
} else { throw $e; } } else { throw $e; }
} }
// 🟢 NOUVEAU : Colonne color // color
try { try {
$fam_pdo->exec("ALTER TABLE pf_people ADD COLUMN color VARCHAR(7) DEFAULT '#0891b2'"); $fam_pdo->exec("ALTER TABLE pf_people ADD COLUMN color VARCHAR(7) DEFAULT '#0891b2'");
echo "<span style='color:green'>colonne 'color' ajoutée</span> - "; echo "<span style='color:green'>colonne 'color' ajoutée</span> - ";
@@ -91,17 +110,14 @@ foreach ($families as $f) {
// ========================================== // ==========================================
echo "<li><strong>Table pf_alloc_values :</strong> "; echo "<li><strong>Table pf_alloc_values :</strong> ";
// Vérification et renommage de amount_alex
$checkAlex = $fam_pdo->query("SHOW COLUMNS FROM pf_alloc_values LIKE 'amount_alex'")->rowCount(); $checkAlex = $fam_pdo->query("SHOW COLUMNS FROM pf_alloc_values LIKE 'amount_alex'")->rowCount();
if ($checkAlex > 0) { if ($checkAlex > 0) {
// Utilisation de CHANGE pour compatibilité maximale avec les anciennes versions MySQL
$fam_pdo->exec("ALTER TABLE pf_alloc_values CHANGE amount_alex amount_p1 FLOAT DEFAULT 0"); $fam_pdo->exec("ALTER TABLE pf_alloc_values CHANGE amount_alex amount_p1 FLOAT DEFAULT 0");
echo "<span style='color:green'>amount_alex -> amount_p1</span> - "; echo "<span style='color:green'>amount_alex -> amount_p1</span> - ";
} else { } else {
echo "<span style='color:gray'>amount_p1 OK</span> - "; echo "<span style='color:gray'>amount_p1 OK</span> - ";
} }
// Vérification et renommage de amount_laia
$checkLaia = $fam_pdo->query("SHOW COLUMNS FROM pf_alloc_values LIKE 'amount_laia'")->rowCount(); $checkLaia = $fam_pdo->query("SHOW COLUMNS FROM pf_alloc_values LIKE 'amount_laia'")->rowCount();
if ($checkLaia > 0) { if ($checkLaia > 0) {
$fam_pdo->exec("ALTER TABLE pf_alloc_values CHANGE amount_laia amount_p2 FLOAT DEFAULT 0"); $fam_pdo->exec("ALTER TABLE pf_alloc_values CHANGE amount_laia amount_p2 FLOAT DEFAULT 0");
@@ -122,7 +138,7 @@ foreach ($families as $f) {
// 4. GESTION DU BUDGET (pf_salary_config) // 4. GESTION DU BUDGET (pf_salary_config)
// ========================================== // ==========================================
echo "<li><strong>Table pf_salary_config :</strong> "; echo "<li><strong>Table pf_salary_config :</strong> ";
// On récupère les vrais prénoms pour les remplacer dans les configs de salaires // On récupère les vrais prénoms fraîchement créés/mappés
$stmtParents = $fam_pdo->query("SELECT name FROM pf_people WHERE role = 'parent' ORDER BY id ASC"); $stmtParents = $fam_pdo->query("SELECT name FROM pf_people WHERE role = 'parent' ORDER BY id ASC");
$parents = $stmtParents->fetchAll(); $parents = $stmtParents->fetchAll();