= $maintenant) { return $distrib; } } return null; } /** * Vérifie si une distribution est passée */ function estPassee(array $distribution): bool { $maintenant = new DateTime(); $date = new DateTime($distribution['date']); return $date < $maintenant; } /** * Formate une date de distribution */ function formaterDate(string $date): string { $dateObj = new DateTime($date); $formatter = new IntlDateFormatter( 'fr_FR', IntlDateFormatter::LONG, IntlDateFormatter::NONE ); // Retirer l'année si c'est l'année courante $dateFormatee = $formatter->format($dateObj); // Ajouter le jour de la semaine si ce n'est pas un samedi $jourSemaine = $dateObj->format('N'); // 1=lundi, 6=samedi if ($jourSemaine != 6) { $joursTraduction = [ 1 => 'Lundi', 2 => 'Mardi', 3 => 'Mercredi', 4 => 'Jeudi', 5 => 'Vendredi', 7 => 'Dimanche' ]; return $joursTraduction[$jourSemaine] . ' ' . $dateObj->format('d') . ' ' . ucfirst($formatter->format($dateObj)); } return ucfirst($dateFormatee); } /** * Formate une date courte (pour le calendrier) */ function formaterDateCourte(string $date): string { $dateObj = new DateTime($date); $formatter = new IntlDateFormatter( 'fr_FR', IntlDateFormatter::LONG, IntlDateFormatter::NONE, 'Europe/Paris', IntlDateFormatter::GREGORIAN, 'd MMMM yyyy' ); // Vérifier si ce n'est pas un samedi $jourSemaine = $dateObj->format('N'); if ($jourSemaine != 6) { $joursTraduction = [ 1 => 'Lundi', 2 => 'Mardi', 3 => 'Mercredi', 4 => 'Jeudi', 5 => 'Vendredi', 7 => 'Dimanche' ]; return '' . $joursTraduction[$jourSemaine] . ' ' . $formatter->format($dateObj); } return $formatter->format($dateObj); } /** * Formate une date complète avec jour de la semaine */ function formaterDateComplete(DateTime $date): string { $formatter = new IntlDateFormatter( 'fr_FR', IntlDateFormatter::FULL, IntlDateFormatter::NONE, 'Europe/Paris', IntlDateFormatter::GREGORIAN, 'EEEE d MMMM' ); return ucfirst($formatter->format($date)); } /** * Formate une date pour le calendrier */ function formaterDateCalendrier(DateTime $date): string { $formatter = new IntlDateFormatter( 'fr_FR', IntlDateFormatter::LONG, IntlDateFormatter::NONE, 'Europe/Paris', IntlDateFormatter::GREGORIAN, 'd MMMM yyyy' ); return $formatter->format($date); } /** * Retourne l'info du lieu de distribution */ function getLieuInfo(?string $lieu): array { $lieux = [ 'grange' => [ 'nom' => 'La Grange', 'adresse' => '7 rue du Vieux Moulin', 'url' => 'https://www.openstreetmap.org/#map=19/43.51294/1.32234', 'description' => 'à « La Grange » de FIC – 7 rue du Vieux Moulin' ], 'secours' => [ 'nom' => 'Secours Populaire', 'adresse' => '28 rue Guillaume Berdeil', 'url' => 'https://www.openstreetmap.org/?mlat=43.516927&mlon=1.319663#map=19/43.516927/1.319663', 'description' => 'au Secours Populaire de Frouzins – 28 rue Guillaume Berdeil' ], 'latapie' => [ 'nom' => 'Salle des fêtes Jean Latapie', 'adresse' => 'Chemin des Mailheaux', 'url' => 'https://www.openstreetmap.org/way/123574995', 'description' => 'à la Salle des fêtes Jean Latapie – Chemin des Mailheaux' ] ]; return $lieux[$lieu] ?? []; } /** * Classe CSS pour le type de distribution */ function getClasseDistribution(array $distribution, bool $estProchaine): string { if ($estProchaine) { return 'bg-green-500'; } if (estPassee($distribution)) { return 'bg-gray-50 opacity-50'; } if ($distribution['type'] === 'annulee') { return 'bg-red-100'; } return 'bg-green-100'; } /** * Classe CSS pour le texte */ function getClasseTexte(array $distribution, bool $estProchaine): string { if ($estProchaine) { return 'text-white'; } if ($distribution['type'] === 'annulee') { return 'text-red-800'; } if (estPassee($distribution)) { return 'text-gray-800'; } return 'text-green-800'; } /** * Label du statut */ function getLabelStatut(array $distribution, bool $estProchaine): ?string { if ($estProchaine) { return 'Prochaine'; } if (estPassee($distribution)) { return 'Passée'; } return null; }