ajout fichiers livrable final

This commit is contained in:
Noah 2026-06-14 22:48:24 +02:00
parent 99c4f383fe
commit 017663d65e
4 changed files with 171 additions and 79 deletions

View file

@ -1 +1,57 @@
# SAE_203_Gestion_des_sauveteurs
# SAE 2.3 - Gestion des sauveteurs SSF
---
## 1. Installation
1. Copier le dossier dans le répertoire web
2. Modifier `config/config.php` avec les identifiants de votre base MariaDB/MySQL
---
**Modifications ALTER par rapport au schéma initial :**
- `Utilisateur` : ajout de `nom`, `prenom`, `nomdep`, `num_tel`
- `Mission` : ajout de `Lieu`
---
## 2. Rôles
| Rôle | Permissions | Redirection après connexion |
|---|---|---|
| **lecture** | Planning uniquement | `planning` |
| **gestionnaire** | Planning + Missions + Ajout sauveteur | `operations` |
| **administration** | Tout + Gestion des comptes | `modif_utilisateurs_form` |
---
## 3. Comptes de test
| Login | Mot de passe | Rôle |
|---|---|---|
| `vverdon` | `gtrnet` | administration |
| `admin` | `admin` | administration |
| `gestionnaire` | `gestionnaire` | gestionnaire |
| `lecture` | `lecture` | lecture |
---
## 4. Sécurité
- **PDO** avec requêtes préparées et paramètres nommés (`:login`, `:date`)
- **password_hash()** (bcrypt) pour le stockage des mots de passe
- **password_verify()** pour la vérification à la connexion
- **session_regenerate_id(true)** après authentification
- **Regex** de validation des routes : `preg_match('#^[a-zA-Z0-9 _]*$#')`
- **htmlentities()** sur toutes les sorties utilisateur (protection XSS)
---
## 5. Planning — Fonctionnement
- 48 créneaux de 30 minutes (00:00 à 23:30)
- 1 ligne par sauveteur
- Test de chevauchement créneau/mission avec `DateTime`
- 7 couleurs correspondant aux 7 statuts SSF
- Opacité réduite (0.4) + lettre "P" pour les missions en préparation
- Durée indéterminée : date de fin = `2099-12-31`

59
base.sql Normal file
View file

@ -0,0 +1,59 @@
CREATE TABLE Utilisateur (
ID INT AUTO_INCREMENT PRIMARY KEY,
login VARCHAR(50) NOT NULL UNIQUE,
passwd VARCHAR(255) NOT NULL,
type VARCHAR(50) NOT NULL DEFAULT 'lecture',
nom VARCHAR(100),
prenom VARCHAR(100),
nomdep VARCHAR(10),
num_tel VARCHAR(20)
);
CREATE TABLE Sauveteur (
ID INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(100) NOT NULL,
prenom VARCHAR(100) NOT NULL,
departement VARCHAR(10) NOT NULL,
specialite VARCHAR(100) NOT NULL,
NumTel VARCHAR(20),
DateHeureEngagement DATETIME NOT NULL
);
CREATE TABLE Statut (
ID INT AUTO_INCREMENT PRIMARY KEY,
TypeStatut VARCHAR(50) NOT NULL,
couleur VARCHAR(20) NOT NULL
);
CREATE TABLE Mission (
ID INT AUTO_INCREMENT PRIMARY KEY,
DateHeureDebut DATETIME NOT NULL,
DateHeureFin DATETIME,
EnPrepa BOOLEAN NOT NULL DEFAULT 0,
Lieu VARCHAR(255),
ID_Sauveteur INT NOT NULL,
ID_statut INT NOT NULL,
ID_Utilisateur INT NOT NULL,
CONSTRAINT fk_mission_sauveteur
FOREIGN KEY (ID_Sauveteur) REFERENCES Sauveteur(ID)
ON DELETE CASCADE,
CONSTRAINT fk_mission_statut
FOREIGN KEY (ID_statut) REFERENCES Statut(ID)
ON DELETE RESTRICT,
CONSTRAINT fk_mission_utilisateur
FOREIGN KEY (ID_Utilisateur) REFERENCES Utilisateur(ID)
ON DELETE RESTRICT
);
INSERT INTO Statut (TypeStatut, couleur) VALUES
('Sauveteur disponible', 'vert'),
('Sauveteur en approche de la cavite', 'violet'),
('Sauveteur sous terre', 'marron'),
('Sauveteur equipe de gestion', 'jaune'),
('Sauveteur en mission a l exterieur', 'orange'),
('Sauveteur en repos', 'bleu'),
('Sauveteur en brancardage civiere', 'rouge');

View file

@ -1,78 +0,0 @@
<?php
require('controllers/auth_utilities.php');
session_start();
error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
ini_set('display_errors', 1);
$route = null;
if (isset($_GET['route'])) {
$route = 'invalid';
if (preg_match('#^[a-zA-Z0-9 _]*$#', $_GET['route'])) {
$route = $_GET['route'];
}
}
switch ($route) {
case null:
case '':
require('controllers/auth_ctrl2.php');
login_ctrl();
break;
case 'auth':
require('controllers/auth_ctrl2.php');
login_ctrl();
break;
case 'logout':
require('controllers/auth_ctrl2.php');
logout_ctrl();
break;
case 'planning':
require('controllers/lecture_page_ctrl.php');
planning_afficher_ctrl();
break;
case 'add_utilisateurs_form':
require('controllers/utilisateur_ctrl.php');
add_utilisateurs_form_ctrl();
break;
case 'add_utilisateurs':
require('controllers/utilisateur_ctrl.php');
add_utilisateurs_write_ctrl();
break;
case 'modif_utilisateurs_form':
require('controllers/modif_compte_ctrl.php');
modif_utilisateurs_form_ctrl();
break;
case 'modif_utilisateurs':
require('controllers/modif_compte_ctrl.php');
modif_utilisateurs_write_ctrl();
break;
case 'ajout_personnes':
require('controllers/contact_crtl.php');
contact_ctrl();
break;
case 'operations':
require('controllers/operation_ctrl.php');
operations_form_ctrl();
break;
case 'add_operation':
require('controllers/operation_ctrl.php');
add_operation_write_ctrl();
break;
default:
require('views/404_view.php');
break;
}

55
jeu_essai.sql Normal file
View file

@ -0,0 +1,55 @@
INSERT INTO Sauveteur (nom, prenom, departement, specialite, NumTel, DateHeureEngagement) VALUES
('Dalton', 'Joe', '75', 'Désobstruction', '0601020304', '2026-06-10 08:00:00'),
('Dalton', 'Jack', '75', 'Évacuation', '0601020305', '2026-06-10 08:00:00'),
('Dalton', 'William', '75', 'Transmission', '0601020306', '2026-06-10 08:00:00'),
('Dalton', 'Averell', '75', 'Gestion', '0601020307', '2026-06-10 08:00:00'),
('Croft', 'Lara', '11', 'Conseiller technique', '0601111111', '2026-06-10 09:00:00'),
('Jones', 'Indiana', '34', 'Conseiller technique', '0602222222', '2026-06-10 09:00:00'),
('Drake', 'Nathan', '13', 'Évacuation', '0603333333', '2026-06-10 09:00:00'),
('Tazieff', 'Haroun', '63', 'Médical', '0604444444', '2026-06-10 10:00:00'),
('Siffre', 'Michel', '06', 'Ventilation', '0605555555', '2026-06-10 10:00:00'),
('Martel', 'Édouard-Alfred', '46', 'Conseiller technique', '0611223344', '2026-06-10 07:30:00'),
('Petzl', 'Fernand', '38', 'ASV (assistance victime)','0699887766', '2026-06-10 09:15:00'),
('Casteret', 'Norbert', '31', 'Évacuation', '0677441122', '2026-06-10 10:00:00');
INSERT INTO Mission (DateHeureDebut, DateHeureFin, EnPrepa, Lieu, ID_Sauveteur, ID_statut, ID_Utilisateur) VALUES
-- Joe Dalton : sous terre 8h→12h
('2026-06-10 08:00:00', '2026-06-10 12:00:00', 0, 'Gouffre de Padirac', 1, 3, 1),
-- Jack Dalton : sous terre 8h30→11h
('2026-06-10 08:30:00', '2026-06-10 11:00:00', 0, 'Gouffre de Padirac', 2, 3, 1),
-- William Dalton : équipe de gestion 8h→18h
('2026-06-10 08:00:00', '2026-06-10 18:00:00', 0, 'PC Surface - Padirac', 3, 4, 1),
-- Averell Dalton : repos 12h→14h
('2026-06-10 12:00:00', '2026-06-10 14:00:00', 0, 'Camp de base', 4, 6, 1),
-- Lara Croft : sous terre, durée indéterminée
('2026-06-10 09:00:00', '2099-12-31 23:59:00', 0, 'Aven Armand', 5, 3, 1),
-- Indiana Jones : approche cavité 9h15→10h
('2026-06-10 09:15:00', '2026-06-10 10:00:00', 0, 'Grotte de Lascaux', 6, 2, 1),
-- Nathan Drake : sous terre 9h30→14h
('2026-06-10 09:30:00', '2026-06-10 14:00:00', 0, 'Gouffre Berger', 7, 3, 1),
-- Haroun Tazieff : mission extérieure 10h→16h
('2026-06-10 10:00:00', '2026-06-10 16:00:00', 0, 'Massif de la Chartreuse', 8, 5, 1),
-- Michel Siffre : sous terre indéterminé + préparation
('2026-06-10 10:00:00', '2099-12-31 23:59:00', 1, 'Grotte de Clamouse', 9, 3, 1),
-- Martel : brancardage civière 7h30→9h30
('2026-06-10 07:30:00', '2026-06-10 09:30:00', 0, 'Réseau de la Dent de Crolles', 10, 7, 1),
-- Petzl : disponible 9h→12h
('2026-06-10 09:00:00', '2026-06-10 12:00:00', 0, 'PC Surface - Aven Armand', 11, 1, 1),
-- Casteret : sous terre 10h→16h
('2026-06-10 10:00:00', '2026-06-10 16:00:00', 0, 'Gouffre de Padirac', 12, 3, 1);
INSERT INTO Mission (DateHeureDebut, DateHeureFin, EnPrepa, Lieu, ID_Sauveteur, ID_statut, ID_Utilisateur) VALUES
('2026-06-11 08:30:00', '2026-06-11 14:00:00', 0, 'Gouffre de Padirac', 1, 3, 1),
('2026-06-11 09:00:00', '2026-06-11 11:30:00', 0, 'Gouffre de Padirac', 2, 3, 1),
('2026-06-11 08:00:00', '2026-06-11 18:00:00', 0, 'PC Surface - Padirac', 3, 4, 1),
('2026-06-11 14:00:00', '2026-06-11 16:00:00', 0, 'Camp de base', 4, 6, 1),
('2026-06-11 10:00:00', '2099-12-31 23:59:00', 0, 'Aven Armand', 5, 3, 1),
('2026-06-11 09:30:00', '2026-06-11 10:30:00', 0, 'Grotte de Lascaux', 6, 2, 1),
('2026-06-11 09:00:00', '2026-06-11 15:00:00', 0, 'Gouffre Berger', 7, 3, 1),
('2026-06-11 10:30:00', '2026-06-11 17:00:00', 0, 'Massif de la Chartreuse', 8, 5, 1),
('2026-06-11 08:00:00', '2099-12-31 23:59:00', 1, 'Grotte de Clamouse', 9, 3, 1),
('2026-06-11 07:30:00', '2026-06-11 09:00:00', 0, 'Réseau de la Dent de Crolles', 10, 7, 1),
('2026-06-11 09:30:00', '2026-06-11 12:30:00', 0, 'PC Surface - Aven Armand', 11, 1, 1),
('2026-06-11 11:00:00', '2026-06-11 18:00:00', 0, 'Gouffre de Padirac', 12, 3, 1);