Formulaire mission complet : sélection sauveteur/statut, durée indéterminée, préparation

- Ajout get_statuts() et get_sauveteurs() pour les select du formulaire
- Stockage ID utilisateur en session pour lier la mission au créateur
- Durée indéterminée -> date_fin = 2099-12-31
- Checkbox "En préparation"
- Renommage Opérations -> Missions (header + sub-nav)
- Sub-nav harmonisée entre nouvelle mission et ajout sauveteur
This commit is contained in:
Noah 2026-06-10 22:05:40 +02:00
parent 70d457dd0b
commit 65abef740d
7 changed files with 101 additions and 27 deletions

View file

@ -32,6 +32,7 @@ function verify_login_ctrl(?string $route)
if ($user && password_verify($passwd, $user['passwd'])) { if ($user && password_verify($passwd, $user['passwd'])) {
session_regenerate_id(true); session_regenerate_id(true);
$_SESSION['id'] = $user['ID'];
$_SESSION['login'] = $user['login']; $_SESSION['login'] = $user['login'];
$_SESSION['role'] = $user['type']; $_SESSION['role'] = $user['type'];

View file

@ -1,15 +1,24 @@
<?php <?php
function operations_form_ctrl() { function operations_form_ctrl()
{
require_once('controllers/auth_utilities.php'); require_once('controllers/auth_utilities.php');
if (!has_any_role(['gestionnaire', 'administration'])) { if (!has_any_role(['gestionnaire', 'administration'])) {
header('Location: index.php?route=auth&ask=operations'); header('Location: index.php?route=auth&ask=operations');
exit; exit;
} }
require('models/connection.php');
require('models/lecture_page_model.php');
$pdo = connection();
$sauveteurs = get_sauveteurs($pdo);
$statuts = get_statuts($pdo);
require('views/operations_view.php'); require('views/operations_view.php');
} }
function add_operation_write_ctrl() { function add_operation_write_ctrl()
{
require_once('controllers/auth_utilities.php'); require_once('controllers/auth_utilities.php');
if (!has_any_role(['gestionnaire', 'administration'])) { if (!has_any_role(['gestionnaire', 'administration'])) {
header('Location: index.php?route=auth&ask=operations'); header('Location: index.php?route=auth&ask=operations');
@ -20,29 +29,42 @@ function add_operation_write_ctrl() {
exit; exit;
} }
$date_debut = $_POST['date_debut']; $id_sauveteur = (int) $_POST['id_sauveteur'];
$date_fin = $_POST['date_fin']; $id_statut = (int) $_POST['id_statut'];
$lieu = $_POST['lieu']; $lieu = $_POST['lieu'];
$date_debut = str_replace('T', ' ', $_POST['date_debut']) . ':00';
$en_prepa = isset($_POST['en_prepa']) ? 1 : 0;
$indeterminee = isset($_POST['duree_indeterminee']);
$date_debut = str_replace('T', ' ', $date_debut) . ':00'; // Durée indéterminée → date très lointaine
$date_fin = str_replace('T', ' ', $date_fin) . ':00'; if ($indeterminee || empty($_POST['date_fin'])) {
$date_fin = '2099-12-31 23:59:00';
} else {
$date_fin = str_replace('T', ' ', $_POST['date_fin']) . ':00';
}
// Valeurs par défaut pour les clés étrangères (à adapter quand l'auth sera active) // Utilisateur connecté
$en_prepa = 0; $id_utilisateur = isset($_SESSION['id']) ? (int) $_SESSION['id'] : 1;
$id_sauveteur = 1;
$id_statut = 1;
$id_utilisateur = 1;
require('models/connection.php'); require('models/connection.php');
$c = connection(); $c = connection();
require('models/operation_crud.php'); require('models/operation_crud.php');
$resultat = create_operation_crud($c, $date_debut, $date_fin, $lieu, $en_prepa, $id_sauveteur, $id_statut, $id_utilisateur); $resultat = create_operation_crud(
$c,
$date_debut,
$date_fin,
$lieu,
$en_prepa,
$id_sauveteur,
$id_statut,
$id_utilisateur
);
if ($resultat) { if ($resultat) {
$_SESSION['notification'] = 'Opération enregistrée avec succès.'; $_SESSION['notification'] = 'Mission enregistrée avec succès.';
} else { } else {
$_SESSION['notification'] = 'Erreur lors de l\'enregistrement.'; $_SESSION['notification'] = 'Erreur lors de l\'enregistrement de la mission.';
} }
header('Location: index.php?route=operations'); header('Location: index.php?route=operations');

View file

@ -1,5 +1,11 @@
<?php <?php
function get_statuts(PDO $pdo): array
{
$sql = "SELECT ID, TypeStatut FROM Statut ORDER BY TypeStatut";
return $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
}
function get_sauveteurs(PDO $pdo): array function get_sauveteurs(PDO $pdo): array
{ {
$sql = "SELECT ID, nom, prenom, specialite $sql = "SELECT ID, nom, prenom, specialite

View file

@ -4,7 +4,7 @@
function recuperation_auth(PDO $connex, string $login):?array { function recuperation_auth(PDO $connex, string $login):?array {
require_once('config/config.php'); require_once('config/config.php');
$req = "SELECT login, passwd, type FROM Utilisateur WHERE login = :login"; $req = "SELECT ID, login, passwd, type FROM Utilisateur WHERE login = :login";
$prep = $connex->prepare($req); $prep = $connex->prepare($req);
$prep->bindValue(':login', $login); $prep->bindValue(':login', $login);

View file

@ -1,6 +1,11 @@
<?php require('views/header.php'); ?> <?php require('views/header.php'); ?>
<h2>Ajout de personnes</h2> <nav class="sub-nav">
<a href="index.php?route=operations">Nouvelle mission</a>
<a href="index.php?route=ajout_personnes">Ajout sauveteur</a>
</nav>
<h2>Ajout d'un sauveteur</h2>
<form action="index.php?route=ajout_personnes" method="post"> <form action="index.php?route=ajout_personnes" method="post">
<p> <p>

View file

@ -8,7 +8,7 @@ if (is_logged()) {
$nav .= '<li><a href="index.php?route=planning">Accueil</a></li>'; $nav .= '<li><a href="index.php?route=planning">Accueil</a></li>';
if (has_any_role(['gestionnaire', 'administration'])) { if (has_any_role(['gestionnaire', 'administration'])) {
$nav .= '<li><a href="index.php?route=operations">Opérations</a></li>'; $nav .= '<li><a href="index.php?route=operations">Missions</a></li>';
} }
if (has_role('administration')) { if (has_role('administration')) {

View file

@ -1,14 +1,41 @@
<?php require('views/header.php'); ?> <?php require('views/header.php'); ?>
<nav class="sub-nav"> <nav class="sub-nav">
<a href="index.php?route=operations">Opérations</a> <a href="index.php?route=operations">Nouvelle mission</a>
<a href="index.php?route=ajout_personnes">Ajout personnes</a> <a href="index.php?route=ajout_personnes">Ajout sauveteur</a>
</nav> </nav>
<h2>Création d'une opération</h2> <h2>Assigner une mission</h2>
<form action="index.php?route=add_operation" method="POST"> <form action="index.php?route=add_operation" method="POST">
<p>
<label for="id_sauveteur">Sauveteur :</label>
<select name="id_sauveteur" id="id_sauveteur" required>
<option value="">-- Choisir un sauveteur --</option>
<?php foreach ($sauveteurs as $s): ?>
<option value="<?= $s['ID'] ?>">
<?= htmlentities($s['nom'] . ' ' . $s['prenom']) ?> (<?= htmlentities($s['specialite']) ?>)
</option>
<?php endforeach; ?>
</select>
</p>
<p>
<label for="id_statut">Statut :</label>
<select name="id_statut" id="id_statut" required>
<option value="">-- Choisir un statut --</option>
<?php foreach ($statuts as $st): ?>
<option value="<?= $st['ID'] ?>"><?= htmlentities($st['TypeStatut']) ?></option>
<?php endforeach; ?>
</select>
</p>
<p>
<label for="lieu">Lieu :</label>
<input type="text" id="lieu" name="lieu" placeholder="Ex : Grotte de Lestélas" required>
</p>
<p> <p>
<label for="date_debut">Date / heure début :</label> <label for="date_debut">Date / heure début :</label>
<input type="datetime-local" id="date_debut" name="date_debut" required> <input type="datetime-local" id="date_debut" name="date_debut" required>
@ -16,16 +43,29 @@
<p> <p>
<label for="date_fin">Date / heure fin :</label> <label for="date_fin">Date / heure fin :</label>
<input type="datetime-local" id="date_fin" name="date_fin" required> <input type="datetime-local" id="date_fin" name="date_fin">
</p> </p>
<p> <p>
<label for="lieu">Lieu :</label> <label>
<input type="text" id="lieu" name="lieu" placeholder="Saisir le lieu" required> <input type="checkbox" name="duree_indeterminee" value="1" onclick="
var fin = document.getElementById('date_fin');
if (this.checked) { fin.disabled = true; fin.value = ''; }
else { fin.disabled = false; }
">
Durée indéterminée
</label>
</p> </p>
<p> <p>
<input type="submit" value="Enregistrer l'opération"> <label>
<input type="checkbox" name="en_prepa" value="1">
En préparation
</label>
</p>
<p>
<input type="submit" value="Enregistrer la mission">
</p> </p>
</form> </form>