query("SELECT id, name, user_id, role, color, care_modes FROM pf_people WHERE is_active = 1 ORDER BY id ASC"); $familyPeople = $stmtPeople->fetchAll(PDO::FETCH_ASSOC); $parents = []; $kids = []; $helpers = []; foreach ($familyPeople as $p) { $role = strtolower($p['role'] ?? ''); if ($role === 'parent') { $parents[] = $p; } elseif ($role === 'enfant' || $role === 'child') { $p['modes'] = json_decode($p['care_modes'] ?? '[]', true) ?: []; $kids[] = $p; } elseif ($role === 'helper' || $role === 'nounou') { $helpers[] = $p; // 🟢 On stocke les intervenants } } // 2. Modes de garde (globaux du foyer, pour synchroniser avec le JS) $stmtFoyer = $pdo->query("SELECT care_modes, zone_scolaire FROM pf_foyer_settings LIMIT 1"); $foyerData = $stmtFoyer->fetch(PDO::FETCH_ASSOC); $activeCareModes = json_decode($foyerData['care_modes'] ?? '[]', true); if (!is_array($activeCareModes)) $activeCareModes = []; // 3. Matrice de congés dynamique (pour les en-têtes et la modale) $stmtLeaves = $pdo->query("SELECT person_id, leave_type FROM pf_person_leave_meta ORDER BY id ASC"); $dbLeaves = $stmtLeaves->fetchAll(PDO::FETCH_ASSOC); $leaveMatrix = []; $allLeaveTypes = []; foreach ($dbLeaves as $l) { $leaveMatrix[$l['person_id']][] = $l['leave_type']; $allLeaveTypes[$l['leave_type']] = true; } $allLeaveTypes = array_keys($allLeaveTypes); // ========================================== // VÉRIFICATIONS D'INTÉGRITÉ (ALERTES) // ========================================== $calendarAlerts = []; // 1. Aucun membre adulte/parent configuré if (empty($parents)) { $calendarAlerts[] = "Aucun adulte configuré. Rendez-vous dans les Paramètres Généraux de HouseHub pour ajouter les membres du foyer."; } // 2. Enfants présents, mais aucun mode de garde global défini if (!empty($kids) && empty($activeCareModes)) { $calendarAlerts[] = "Modes de garde manquants. Vous avez des enfants, mais aucun mode de garde n'est défini. Cliquez sur l'icône ⚙️ (Paramètres du calendrier) pour les ajouter."; } // 3. Référentiel des types de congés vide try { $countLeaveTypes = $pdo->query("SELECT COUNT(*) FROM pf_leave_types")->fetchColumn(); if ($countLeaveTypes == 0) { $calendarAlerts[] = "Types de congés manquants. Le catalogue des congés (CP, RTT...) est vide. Ajoutez-les dans les paramètres généraux."; } } catch (Exception $e) { // Si la table n'existe pas encore $calendarAlerts[] = "Table des congés manquante. Veuillez mettre à jour la base de données."; } // 4. Zone scolaire manquante (si tu l'as stockée dans pf_foyer_settings) $zoneScolaire = $foyerData['zone_scolaire'] ?? null; if (empty($zoneScolaire)) { $calendarAlerts[] = "Zone scolaire non définie. Cliquez sur l'icône ⚙️ pour configurer votre zone afin d'afficher les vacances scolaires."; } $pageTitle = tr('fc_page_title'); $activePage = "family-calendar"; $mainClass = "pf-family-calendar"; $pageCss = "/modules/family-calendar/family-calendar.css"; require __DIR__ . '/header.php'; ?>

⚠️

Configuration incomplète

📸

⚙️

🏖️

+

$parent): $parentClass = ($index % 2 === 0) ? 'col-alex' : 'col-laia'; // Couleurs alternées $pLeaves = $leaveMatrix[$parent['id']] ?? []; $colspan = count($pLeaves) * 2; ?> 0): ?> $parent): $parentClass = ($index % 2 === 0) ? 'col-alex' : 'col-laia'; $pLeaves = $leaveMatrix[$parent['id']] ?? []; ?> $parent): $parentClass = ($index % 2 === 0) ? 'col-alex' : 'col-laia'; $pLeaves = $leaveMatrix[$parent['id']] ?? []; ?>
Maladie

Off
Extra
$mode): $modeLower = strtolower($mode); if ($modeLower === 'avis'): ?>
Avis
🏫
Maladie