188 lines
7.4 KiB
PHP
188 lines
7.4 KiB
PHP
|
<?php
|
||
|
// Inclure le module d'annonces et feuille de style
|
||
|
include 'annonces.php';
|
||
|
?>
|
||
|
|
||
|
<link rel="stylesheet" type="text/css" href="/pa/style.css">
|
||
|
|
||
|
<?php
|
||
|
// Charger les annonces du fichier JSON
|
||
|
function loadAnnonces()
|
||
|
{
|
||
|
if (file_exists('annonces.json')) {
|
||
|
$json = file_get_contents('annonces.json');
|
||
|
return json_decode($json, true) ?? [];
|
||
|
}
|
||
|
return [];
|
||
|
}
|
||
|
|
||
|
// Sauvegarder les annonces dans le fichier JSON
|
||
|
function saveAnnonces($annonces)
|
||
|
{
|
||
|
$json = json_encode($annonces, JSON_PRETTY_PRINT);
|
||
|
file_put_contents('annonces.json', $json);
|
||
|
}
|
||
|
|
||
|
// Ajouter une annonce en vérifiant les entrées
|
||
|
function addAnnonce($title, $nombre, $description = '', $transportOption = '')
|
||
|
{
|
||
|
$annonces = loadAnnonces();
|
||
|
$annonce = [
|
||
|
'id' => uniqid(),
|
||
|
'title' => htmlspecialchars(trim($title)),
|
||
|
'nombre' => htmlspecialchars(trim($nombre)),
|
||
|
'description' => htmlspecialchars(trim($description) ?: "Aucun détail supplémentaire fourni."),
|
||
|
'transport_option' => htmlspecialchars(trim($transportOption)),
|
||
|
'date' => date('d-m-Y \à\ H:i:s')
|
||
|
];
|
||
|
$annonces[] = $annonce;
|
||
|
saveAnnonces($annonces);
|
||
|
return $annonce;
|
||
|
}
|
||
|
|
||
|
// Afficher toutes les annonces existantes avec le comptage des options de transport
|
||
|
function displayAnnonces()
|
||
|
{
|
||
|
$annonces = loadAnnonces();
|
||
|
$totalCovoiturage = 0;
|
||
|
$totalRdv = 0;
|
||
|
|
||
|
if (empty($annonces)) {
|
||
|
echo "<p>Aucune personne inscrite pour le moment.</p>";
|
||
|
} else {
|
||
|
foreach ($annonces as $annonce) {
|
||
|
echo "<div class='annonce'>";
|
||
|
echo "<h2>" . $annonce['title'] . "</h2>";
|
||
|
if ($annonce['nombre'] > 0) {
|
||
|
echo "<p>Nombre de personnes : " . $annonce['nombre'] . "</p>";
|
||
|
echo "<p>Option choisie : " . $annonce['transport_option'] . "</p>";
|
||
|
|
||
|
// Incrémenter les totaux en fonction de l'option choisie
|
||
|
if ($annonce['transport_option'] === 'Covoiturage') {
|
||
|
$totalCovoiturage += (int)$annonce['nombre'];
|
||
|
} elseif ($annonce['transport_option'] === 'Rendez-vous départ') {
|
||
|
$totalRdv += (int)$annonce['nombre'];
|
||
|
}
|
||
|
} else {
|
||
|
echo "<p>Cette personne a indiqué qu'elle ne sera pas présente.</p>";
|
||
|
}
|
||
|
echo "<p>" . $annonce['description'] . "</p>";
|
||
|
echo "<small>Publié le " . $annonce['date'] . "</small>";
|
||
|
echo "</div><hr>";
|
||
|
}
|
||
|
|
||
|
// Afficher les totaux
|
||
|
echo "<h2>Total des participants :</h2>";
|
||
|
echo "Total rendez-vous pour du covoiturage : " . $totalCovoiturage . "<br>";
|
||
|
echo "Total rendez-vous au départ randonnée : " . $totalRdv . "<br";
|
||
|
echo "<p></p>";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Gérer l'ajout d'une nouvelle annonce via POST
|
||
|
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['title'])) {
|
||
|
$nombre = isset($_POST['not_present']) ? 0 : ($_POST['nombre'] ?? 0);
|
||
|
$description = $_POST['description'] ?? '';
|
||
|
$transportOption = $nombre > 0 ? ($_POST['transport_option'] ?? '') : '';
|
||
|
|
||
|
// Validation pour s'assurer que nombre est positif ou nul
|
||
|
if ($nombre > 0 && empty($transportOption)) {
|
||
|
echo "<p style='color:red;'>Veuillez sélectionner une option de transport.</p>";
|
||
|
} else {
|
||
|
addAnnonce($_POST['title'], $nombre, $description, $transportOption);
|
||
|
header("Location: " . $_SERVER['PHP_SELF']);
|
||
|
exit;
|
||
|
}
|
||
|
}
|
||
|
?>
|
||
|
|
||
|
<!DOCTYPE html>
|
||
|
<html lang="fr">
|
||
|
|
||
|
<head>
|
||
|
<meta charset="UTF-8">
|
||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
<title>Qui vient</title>
|
||
|
<link rel="stylesheet" type="text/css" href="/pa/style.css">
|
||
|
</head>
|
||
|
|
||
|
<body>
|
||
|
<!-- Scroll To Top -->
|
||
|
<button onclick="topFunction()" id="scrollToTopButton" title="Haut de page"><i class="fa-solid fa-chevron-up"></i></button>
|
||
|
<script src="https://test.lemimi.fr/pa/js/scrolltotop.js" type="text/javascript"></script>
|
||
|
|
||
|
<h1>Qui vient... ou pas</h1>
|
||
|
|
||
|
<!-- Formulaire pour ajouter une annonce -->
|
||
|
<form method="POST">
|
||
|
<label for="title"><span style="color: #e03e2d;"><strong>*</strong></span> Indiquez qui vous êtes :</label><br>
|
||
|
<input type="text" id="title" name="title" required><br>
|
||
|
|
||
|
<label for="nombre">Indiquez le nombre de personnes :</label><br>
|
||
|
<input type="number" id="nombre" name="nombre" min="1"><br><br>
|
||
|
|
||
|
<!-- Conteneur pour les options de transport -->
|
||
|
<div id="additionalOptions" style="display: none;">
|
||
|
<label>Choisissez une option :</label><br>
|
||
|
<input type="radio" id="covoiturage" name="transport_option" value="Covoiturage">
|
||
|
<label for="covoiturage">Rendez-vous pour du covoiturage</label><br>
|
||
|
|
||
|
<input type="radio" id="rdv" name="transport_option" value="Rendez-vous départ">
|
||
|
<label for="rdv">Rendez-vous au point de départ</label><br>
|
||
|
</div>
|
||
|
|
||
|
<label>
|
||
|
<input type="checkbox" id="notPresent" name="not_present">
|
||
|
Je ne serai pas présent
|
||
|
</label><br>
|
||
|
|
||
|
<script>
|
||
|
// Variables pour les éléments du formulaire
|
||
|
const nombreField = document.getElementById('nombre');
|
||
|
const additionalOptions = document.getElementById('additionalOptions');
|
||
|
const transportOptions = document.getElementsByName('transport_option');
|
||
|
const notPresentCheckbox = document.getElementById('notPresent');
|
||
|
|
||
|
// Gestion de l'affichage des options de transport
|
||
|
nombreField.addEventListener('input', function() {
|
||
|
if (parseInt(this.value) > 0) {
|
||
|
additionalOptions.style.display = 'block'; // Affiche les options
|
||
|
transportOptions.forEach(option => option.required = true); // Les rend obligatoires
|
||
|
} else {
|
||
|
additionalOptions.style.display = 'none'; // Masque les options
|
||
|
transportOptions.forEach(option => option.required = false); // Les rend facultatives
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// Gestion de l'activation/désactivation de "Nombre de personnes"
|
||
|
notPresentCheckbox.addEventListener('change', function() {
|
||
|
if (this.checked) {
|
||
|
nombreField.value = ''; // Vide le champ
|
||
|
nombreField.disabled = true; // Désactive le champ
|
||
|
nombreField.required = false; // Retire le caractère obligatoire
|
||
|
additionalOptions.style.display = 'none'; // Masque les options
|
||
|
transportOptions.forEach(option => {
|
||
|
option.checked = false; // Déselectionne les options
|
||
|
option.required = false; // Rend les options facultatives
|
||
|
});
|
||
|
} else {
|
||
|
nombreField.disabled = false; // Réactive le champ
|
||
|
nombreField.required = true; // Rend obligatoire le champ
|
||
|
}
|
||
|
});
|
||
|
</script>
|
||
|
|
||
|
<label for="description">Si vous avez quelque chose à ajouter... c'est ici :</label><br>
|
||
|
<textarea id="description" name="description"></textarea><br>
|
||
|
<p style="text-align: right;"><span style="color: #e03e2d;"><strong>*</strong></span> Champs obligatoires</p>
|
||
|
|
||
|
<button type="submit">Ajouter ma participation</button>
|
||
|
|
||
|
</form>
|
||
|
|
||
|
<!-- Affichage des annonces et des totaux -->
|
||
|
<h2>Liste des participants</h2>
|
||
|
<?php displayAnnonces(); ?>
|
||
|
</body>
|
||
|
|
||
|
</html>
|