From 5c630a9f2e709c0fab5d4c45036844d534c5dfb1 Mon Sep 17 00:00:00 2001
From: ryana
Date: Wed, 10 Jun 2026 16:40:50 +0200
Subject: [PATCH] modification planning
---
controllers/lecture_page_ctrl.php | 101 ++++++------------------
css/global.css | 9 +++
models/lecture_page_model.php | 31 ++++----
views/footer.php | 4 +-
views/header.php | 4 +-
views/lecture_page.php | 123 +++++++++++++++++++++---------
6 files changed, 141 insertions(+), 131 deletions(-)
diff --git a/controllers/lecture_page_ctrl.php b/controllers/lecture_page_ctrl.php
index 3fbdf9f..ed1f621 100644
--- a/controllers/lecture_page_ctrl.php
+++ b/controllers/lecture_page_ctrl.php
@@ -1,92 +1,39 @@
'#e74c3c', // Évacuation
- 2 => '#3498db', // ASV
- 3 => '#f39c12', // Transmission
- 4 => '#9b59b6', // Conseiller technique
- 5 => '#2ecc71', // Gestion
- 6 => '#8B4513', // Désobstruction
- 7 => '#e91e63', // Médical
- 8 => '#00bcd4', // Ventilation
- 9 => '#95a5a6', // Pas de spécialité
- ];
-
- // Créneaux 8h-20h (toutes les 30 min)
+ // Créneaux horaires : 0h à 24h toutes les 30 minutes
$creneaux = [];
- for ($min = 8 * 60; $min < 20 * 60; $min += 30) {
- $creneaux[] = sprintf('%02d:%02d', intdiv($min, 60), $min % 60);
+ for ($minutes = 0; $minutes < 1440; $minutes = $minutes + 30) {
+ $heures = intdiv($minutes, 60);
+ $mins = $minutes % 60;
+ $creneaux[] = sprintf('%02d:%02d', $heures, $mins);
}
- // Index des sauveteurs + couleur par spécialité
- $sauveteurs_index = [];
- foreach ($sauveteurs as $s) {
- $spe_num = (int) ($s['specialite'] ?? 0);
- $s['couleur'] = $couleurs[$spe_num] ?? '#cccccc';
- $sauveteurs_index[$s['ID']] = $s;
+ // Regrouper les missions par sauveteur
+ $missions_par_sauveteur = [];
+ foreach ($missions as $mission) {
+ $id_sauv = $mission['ID_Sauveteur'];
+ $missions_par_sauveteur[$id_sauv][] = $mission;
}
- // Grille : sauveteur_id → créneau → [couleur, en_prepa]
- $grille = [];
- foreach ($sauveteurs as $s) {
- $grille[$s['ID']] = [];
- foreach ($creneaux as $c) {
- $grille[$s['ID']][$c] = null;
- }
- }
-
- // Remplissage de la grille avec les missions
- foreach ($missions as $m) {
- $id_sauv = $m['ID_Sauveteur'];
- if (!isset($grille[$id_sauv])) continue;
-
- $debut = new DateTime($m['DateHeureDebut']);
- $fin = new DateTime($m['DateHeureFin']);
- $en_prepa = (bool) $m['EnPrepa'];
-
- foreach ($creneaux as $c) {
- $debut_creneau = new DateTime($date . ' ' . $c . ':00');
- $fin_creneau = (clone $debut_creneau)->modify('+30 minutes');
-
- if ($debut < $fin_creneau && $fin > $debut_creneau) {
- $grille[$id_sauv][$c] = [
- 'couleur' => $sauveteurs_index[$id_sauv]['couleur'],
- 'en_prepa' => $en_prepa,
- 'mission_id' => $m['ID'],
- ];
- }
- }
- }
-
- // Légende des spécialités
- $legendes = [
- 1 => 'Évacuation',
- 2 => 'ASV',
- 3 => 'Transmission',
- 4 => 'Conseiller technique',
- 5 => 'Gestion',
- 6 => 'Désobstruction',
- 7 => 'Médical',
- 8 => 'Ventilation',
- 9 => 'Pas de spécialité',
- ];
-
+ // Affichage
require('views/lecture_page.php');
- planning_view($sauveteurs, $sauveteurs_index, $creneaux, $grille, $date, $date_precedente, $date_suivante, $couleurs, $legendes);
+ planning_view($sauveteurs, $creneaux, $missions_par_sauveteur, $date);
}
diff --git a/css/global.css b/css/global.css
index 8bf294e..e222ab0 100644
--- a/css/global.css
+++ b/css/global.css
@@ -174,6 +174,15 @@ table td { padding: 8px 10px; border-bottom: 1px solid #e8e2d2; }
vertical-align: middle;
}
+/* Couleurs des statuts (classes CSS) */
+.vert { background-color: #2ecc71; }
+.violet { background-color: #9b59b6; }
+.marron { background-color: #8B4513; }
+.jaune { background-color: #f1c40f; }
+.orange { background-color: #f39c12; }
+.bleu { background-color: #3498db; }
+.rouge { background-color: #e74c3c; }
+
/* FORMULAIRES */
form label { display: inline-block; min-width: 140px; }
form input[type="text"],
diff --git a/models/lecture_page_model.php b/models/lecture_page_model.php
index 8ccb108..0b8d8b8 100644
--- a/models/lecture_page_model.php
+++ b/models/lecture_page_model.php
@@ -1,21 +1,22 @@
query($req)->fetchAll(PDO::FETCH_ASSOC);
+function get_sauveteurs(PDO $pdo): array
+{
+ $sql = "SELECT ID, nom, prenom, specialite
+ FROM Sauveteur
+ ORDER BY nom, prenom";
+ return $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
}
-// Récupère les missions d'une date donnée
-function get_missions_by_date(PDO $c, string $date): array {
- $req = "SELECT ID, DateHeureDebut, DateHeureFin, ID_Sauveteur, EnPrepa
- FROM Mission
- WHERE DATE(DateHeureDebut) = :date
- OR DATE(DateHeureFin) = :date
- ORDER BY DateHeureDebut";
-
- $stmt = $c->prepare($req);
- $stmt->bindValue(':date', $date);
- $stmt->execute();
+function get_missions_planning(PDO $pdo, string $date): array
+{
+ $sql = "SELECT m.ID_Sauveteur, m.DateHeureDebut, m.DateHeureFin, m.EnPrepa, s.TypeStatut
+ FROM Mission m
+ JOIN Statut s ON m.ID_statut = s.ID
+ WHERE DATE(m.DateHeureDebut) = :date
+ OR DATE(m.DateHeureFin) = :date
+ ORDER BY m.ID_Sauveteur, m.DateHeureDebut";
+ $stmt = $pdo->prepare($sql);
+ $stmt->execute([':date' => $date]);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
diff --git a/views/footer.php b/views/footer.php
index 5b12b68..cd20e97 100644
--- a/views/footer.php
+++ b/views/footer.php
@@ -1,8 +1,8 @@
- Spéléo-Secours Français — Application de gestion des sauveteurs
- © 2025 — Tous droits réservés
+ Spéléo-Secours Français - Application de gestion des sauveteurs
+ © 2025 - Tous droits réservés
diff --git a/views/header.php b/views/header.php
index 0f3b4ef..77a6326 100644
--- a/views/header.php
+++ b/views/header.php
@@ -38,7 +38,7 @@ $notif = '';
diff --git a/views/lecture_page.php b/views/lecture_page.php
index 29609d2..eb178c8 100644
--- a/views/lecture_page.php
+++ b/views/lecture_page.php
@@ -1,47 +1,84 @@
'#2ecc71',
+ 'Sauveteur en approche de la cavite' => '#9b59b6',
+ 'Sauveteur sous terre' => '#8B4513',
+ 'Sauveteur equipe de gestion' => '#f1c40f',
+ 'Sauveteur en mission a l\'exterieur' => '#f39c12',
+ 'Sauveteur en repos' => '#3498db',
+ 'Sauveteur en brancardage civiere' => '#e74c3c',
+ ];
?>
-