Files
lesfrouzivores.fr/src/distributions-utils.php
T

226 lines
5.3 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Fonctions utilitaires pour gérer les distributions
*/
/**
* Charge les distributions depuis le fichier de configuration
*/
function chargerDistributions(): array
{
return require __DIR__ . '/distributions.php';
}
/**
* Trouve la prochaine distribution
*/
function trouverProchaineDistribution(array $distributions): ?array
{
$maintenant = new DateTime();
foreach ($distributions as $distrib) {
$date = new DateTime($distrib['date']);
if ($date >= $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 '<strong>' . $joursTraduction[$jourSemaine] . '</strong> ' .
$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 <abbr title="Frouzins Initiatives Citoyennes">FIC</abbr> 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;
}