commentaires plus pertinent + supression anciens fichiers et anciens commentaires
This commit is contained in:
parent
5393f44339
commit
ec24a2f129
23 changed files with 401 additions and 376 deletions
|
|
@ -1,11 +1,11 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Aiguille vers le bon contrôleur selon la méthode HTTP
|
||||
*/
|
||||
function login_ctrl()
|
||||
{
|
||||
$ask_route = null;
|
||||
if (isset($_GET['ask'])) {
|
||||
$ask_route = htmlentities($_GET['ask']);
|
||||
}
|
||||
$ask_route = isset($_GET['ask']) ? htmlentities($_GET['ask']) : null;
|
||||
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
||||
verify_login_ctrl($ask_route);
|
||||
} else {
|
||||
|
|
@ -13,36 +13,43 @@ function login_ctrl()
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Affichage du formulaire de connexion
|
||||
*/
|
||||
function login_form_ctrl(?string $route)
|
||||
{
|
||||
require('views/login_views.php');
|
||||
login_form_view($route);
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérification du login/mot de passe
|
||||
*/
|
||||
function verify_login_ctrl(?string $route)
|
||||
{
|
||||
require('models/connection.php');
|
||||
require('models/user_crud.php');
|
||||
|
||||
$login = isset($_POST['login']) ? htmlentities($_POST['login']) : '';
|
||||
// On récupère les données du formulaire
|
||||
$login = isset($_POST['login']) ? htmlentities($_POST['login']) : '';
|
||||
$passwd = isset($_POST['password']) ? $_POST['password'] : '';
|
||||
|
||||
$c = connection();
|
||||
$c = connection();
|
||||
$user = recuperation_auth($c, $login);
|
||||
|
||||
if ($user && password_verify($passwd, $user['passwd'])) {
|
||||
session_regenerate_id(true);
|
||||
$_SESSION['id'] = $user['ID'];
|
||||
$_SESSION['id'] = $user['ID'];
|
||||
$_SESSION['login'] = $user['login'];
|
||||
$_SESSION['role'] = $user['type'];
|
||||
$_SESSION['role'] = $user['type'];
|
||||
|
||||
// Si une route était demandée avant auth, on y redirige
|
||||
// Si une route était demandée avant connexion, on y retourne
|
||||
if ($route) {
|
||||
header('Location: index.php?route=' . $route);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Sinon, redirection selon le rôle
|
||||
// Sinon on redirige selon le rôle
|
||||
switch ($user['type']) {
|
||||
case 'administration':
|
||||
header('Location: index.php?route=modif_utilisateurs_form');
|
||||
|
|
@ -55,14 +62,18 @@ function verify_login_ctrl(?string $route)
|
|||
break;
|
||||
}
|
||||
exit;
|
||||
} else {
|
||||
$_SESSION['notification'] = 'Erreur d\'authentification : login ou mot de passe incorrect.';
|
||||
$ask = $route ? '&ask=' . $route : '';
|
||||
header('Location: index.php?route=auth' . $ask);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Échec de l'authentification
|
||||
$_SESSION['notification'] = 'Erreur d\'authentification : login ou mot de passe incorrect.';
|
||||
$ask = $route ? '&ask=' . $route : '';
|
||||
header('Location: index.php?route=auth' . $ask);
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Déconnexion
|
||||
*/
|
||||
function logout_ctrl()
|
||||
{
|
||||
session_unset();
|
||||
|
|
|
|||
|
|
@ -1,40 +1,28 @@
|
|||
<?php
|
||||
|
||||
// True if user is logged (auth is right)
|
||||
function is_logged() {
|
||||
$status = false;
|
||||
if (isset($_SESSION['login'])) {
|
||||
$status = true;
|
||||
}
|
||||
return $status;
|
||||
// Vérifie si l'utilisateur est connecté
|
||||
function is_logged()
|
||||
{
|
||||
return isset($_SESSION['login']);
|
||||
}
|
||||
|
||||
// True if user has the role $role
|
||||
function has_role(string $role) {
|
||||
$status = false;
|
||||
|
||||
if (isset($_SESSION['role'])) {
|
||||
if ($_SESSION['role'] == $role) {
|
||||
$status = true;
|
||||
}
|
||||
}
|
||||
return $status;
|
||||
// Vérifie si l'utilisateur a un rôle précis
|
||||
function has_role(string $role)
|
||||
{
|
||||
return isset($_SESSION['role']) && $_SESSION['role'] == $role;
|
||||
}
|
||||
|
||||
|
||||
// True if user has at least one of the given roles
|
||||
// Vérifie si l'utilisateur a au moins un des rôles donnés
|
||||
function has_any_role(array $roles): bool
|
||||
{
|
||||
if (!isset($_SESSION['role'])) {
|
||||
return false;
|
||||
}
|
||||
return in_array($_SESSION['role'], $roles, true);
|
||||
return isset($_SESSION['role']) && in_array($_SESSION['role'], $roles, true);
|
||||
}
|
||||
|
||||
function verify_grants(string $route, string $role='') {
|
||||
if (! has_role($role) && ! ($role == '' && is_logged())) {
|
||||
// Contrôle d'accès : redirige vers auth si les droits sont insuffisants
|
||||
function verify_grants(string $route, string $role = '')
|
||||
{
|
||||
if (!has_role($role) && !($role == '' && is_logged())) {
|
||||
header('Location: index.php?route=auth&ask=' . $route);
|
||||
exit;
|
||||
}
|
||||
// Nothing is done so process goes on
|
||||
}
|
||||
|
|
@ -1,11 +1,17 @@
|
|||
<?php
|
||||
|
||||
function contact_ctrl() {
|
||||
/**
|
||||
* Aiguille vers le bon contrôleur selon la méthode HTTP
|
||||
*/
|
||||
function contact_ctrl()
|
||||
{
|
||||
// Réservé gestionnaire et administration
|
||||
require_once('controllers/auth_utilities.php');
|
||||
if (!has_any_role(['gestionnaire', 'administration'])) {
|
||||
header('Location: index.php?route=auth&ask=ajout_personnes');
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
||||
contact_write_ctrl();
|
||||
} else {
|
||||
|
|
@ -13,21 +19,28 @@ function contact_ctrl() {
|
|||
}
|
||||
}
|
||||
|
||||
function contact_form_ctrl() {
|
||||
/**
|
||||
* Affichage du formulaire
|
||||
*/
|
||||
function contact_form_ctrl()
|
||||
{
|
||||
require('views/contact_views.php');
|
||||
}
|
||||
|
||||
function contact_write_ctrl() {
|
||||
$nom = $_POST['nom'];
|
||||
/**
|
||||
* Enregistrement d'un nouveau sauveteur
|
||||
*/
|
||||
function contact_write_ctrl()
|
||||
{
|
||||
// Données du formulaire
|
||||
$nom = $_POST['nom'];
|
||||
$prenom = $_POST['prenom'];
|
||||
$dep = $_POST['dep'];
|
||||
$spe = $_POST['spe'];
|
||||
$tel = $_POST['tel'];
|
||||
$date = $_POST['ladate'];
|
||||
$heure = $_POST['lheure'];
|
||||
$dep = $_POST['dep'];
|
||||
$spe = $_POST['spe'];
|
||||
$tel = $_POST['tel'];
|
||||
|
||||
// Combine date + heure en DateTime
|
||||
$date_heure = $date . ' ' . $heure . ':00';
|
||||
// Assemblage date + heure
|
||||
$date_heure = $_POST['ladate'] . ' ' . $_POST['lheure'] . ':00';
|
||||
|
||||
if (empty($nom) || empty($prenom) || empty($tel)) {
|
||||
$_SESSION['notification'] = 'Veuillez remplir tous les champs obligatoires.';
|
||||
|
|
@ -35,6 +48,7 @@ function contact_write_ctrl() {
|
|||
return;
|
||||
}
|
||||
|
||||
// On écrit dans la base
|
||||
require('models/connection.php');
|
||||
$c = connection();
|
||||
require('models/contact_crud.php');
|
||||
|
|
|
|||
|
|
@ -1,41 +1,39 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Affichage du planning
|
||||
*/
|
||||
function planning_afficher_ctrl()
|
||||
{
|
||||
// Tout utilisateur connecté peut voir le planning
|
||||
require_once('controllers/auth_utilities.php');
|
||||
verify_grants('planning');
|
||||
|
||||
require('models/connection.php');
|
||||
require('models/lecture_page_model.php');
|
||||
|
||||
$pdo = connection();
|
||||
|
||||
// Date du planning
|
||||
if (isset($_GET['date'])) {
|
||||
$date = $_GET['date'];
|
||||
} else {
|
||||
$date = date('Y-m-d');
|
||||
}
|
||||
$date = isset($_GET['date']) ? $_GET['date'] : date('Y-m-d');
|
||||
|
||||
// Données depuis la base
|
||||
// On récupère les sauveteurs et leurs missions du jour
|
||||
$sauveteurs = get_sauveteurs($pdo);
|
||||
$missions = get_missions_planning($pdo, $date);
|
||||
|
||||
// Créneaux horaires : 0h à 24h toutes les 30 minutes
|
||||
// Créneaux de 30 minutes sur 24h
|
||||
$creneaux = [];
|
||||
for ($minutes = 0; $minutes < 1440; $minutes = $minutes + 30) {
|
||||
for ($minutes = 0; $minutes < 1440; $minutes += 30) {
|
||||
$heures = intdiv($minutes, 60);
|
||||
$mins = $minutes % 60;
|
||||
$creneaux[] = sprintf('%02d:%02d', $heures, $mins);
|
||||
}
|
||||
|
||||
// Regrouper les missions par sauveteur
|
||||
// On regroupe les missions par sauveteur
|
||||
$missions_par_sauveteur = [];
|
||||
foreach ($missions as $mission) {
|
||||
$id_sauv = $mission['ID_Sauveteur'];
|
||||
$missions_par_sauveteur[$id_sauv][] = $mission;
|
||||
$missions_par_sauveteur[$mission['ID_Sauveteur']][] = $mission;
|
||||
}
|
||||
|
||||
// Affichage
|
||||
require('views/lecture_page.php');
|
||||
planning_view($sauveteurs, $creneaux, $missions_par_sauveteur, $date);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,40 +1,50 @@
|
|||
<?php
|
||||
|
||||
function modif_utilisateurs_form_ctrl() {
|
||||
/**
|
||||
* Affichage du formulaire de modification de compte
|
||||
*/
|
||||
function modif_utilisateurs_form_ctrl()
|
||||
{
|
||||
// Réservé administration
|
||||
require_once('controllers/auth_utilities.php');
|
||||
verify_grants('modif_utilisateurs_form', 'administration');
|
||||
|
||||
// On charge la liste des comptes
|
||||
require('models/connection.php');
|
||||
$c = connection();
|
||||
require('models/modif_compte_model.php');
|
||||
|
||||
$comptes = get_all_comptes($c);
|
||||
|
||||
$compte_select = null;
|
||||
if (isset($_GET['id'])) {
|
||||
$compte_select = get_compte_by_id($c, (int) $_GET['id']);
|
||||
}
|
||||
$compte_select = isset($_GET['id']) ? get_compte_by_id($c, (int) $_GET['id']) : null;
|
||||
|
||||
require('views/modif_compte_view.php');
|
||||
modif_compte_view($comptes, $compte_select);
|
||||
}
|
||||
|
||||
function modif_utilisateurs_write_ctrl() {
|
||||
/**
|
||||
* Enregistrement des modifications d'un compte
|
||||
*/
|
||||
function modif_utilisateurs_write_ctrl()
|
||||
{
|
||||
require_once('controllers/auth_utilities.php');
|
||||
verify_grants('modif_utilisateurs', 'administration');
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||
header('Location: index.php?route=modif_utilisateurs_form');
|
||||
exit;
|
||||
}
|
||||
|
||||
$id = (int) $_POST['id'];
|
||||
$nom = htmlentities($_POST['nom']);
|
||||
// Données du formulaire
|
||||
$id = (int) $_POST['id'];
|
||||
$nom = htmlentities($_POST['nom']);
|
||||
$prenom = htmlentities($_POST['prenom']);
|
||||
$role = htmlentities($_POST['role']);
|
||||
$role = htmlentities($_POST['role']);
|
||||
$nomdep = htmlentities($_POST['nomdep']);
|
||||
$num_tel = htmlentities($_POST['num_tel']);
|
||||
$login = htmlentities($_POST['login']);
|
||||
$login = htmlentities($_POST['login']);
|
||||
$passwd = $_POST['passwd'] ?? '';
|
||||
|
||||
// On met à jour dans la base
|
||||
require('models/connection.php');
|
||||
$c = connection();
|
||||
require('models/modif_compte_model.php');
|
||||
|
|
|
|||
|
|
@ -1,13 +1,18 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Affiche le formulaire d'assignation de mission
|
||||
*/
|
||||
function operations_form_ctrl()
|
||||
{
|
||||
// Réservé gestionnaire et administration
|
||||
require_once('controllers/auth_utilities.php');
|
||||
if (!has_any_role(['gestionnaire', 'administration'])) {
|
||||
header('Location: index.php?route=auth&ask=operations');
|
||||
exit;
|
||||
}
|
||||
|
||||
// On charge les sauveteurs et les statuts pour les listes déroulantes
|
||||
require('models/connection.php');
|
||||
require('models/lecture_page_model.php');
|
||||
$pdo = connection();
|
||||
|
|
@ -17,6 +22,9 @@ function operations_form_ctrl()
|
|||
require('views/operations_view.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* Enregistre une nouvelle mission dans la base
|
||||
*/
|
||||
function add_operation_write_ctrl()
|
||||
{
|
||||
require_once('controllers/auth_utilities.php');
|
||||
|
|
@ -29,43 +37,32 @@ function add_operation_write_ctrl()
|
|||
exit;
|
||||
}
|
||||
|
||||
$id_sauveteur = (int) $_POST['id_sauveteur'];
|
||||
$id_statut = (int) $_POST['id_statut'];
|
||||
$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']);
|
||||
// Données du formulaire
|
||||
$id_sauveteur = (int) $_POST['id_sauveteur'];
|
||||
$id_statut = (int) $_POST['id_statut'];
|
||||
$lieu = $_POST['lieu'];
|
||||
$date_debut = str_replace('T', ' ', $_POST['date_debut']) . ':00';
|
||||
$en_prepa = isset($_POST['en_prepa']) ? 1 : 0;
|
||||
|
||||
// Durée indéterminée → date très lointaine
|
||||
if ($indeterminee || empty($_POST['date_fin'])) {
|
||||
// Durée indéterminée ou fin normale
|
||||
if (isset($_POST['duree_indeterminee']) || empty($_POST['date_fin'])) {
|
||||
$date_fin = '2099-12-31 23:59:00';
|
||||
} else {
|
||||
$date_fin = str_replace('T', ' ', $_POST['date_fin']) . ':00';
|
||||
}
|
||||
|
||||
// Utilisateur connecté
|
||||
$id_utilisateur = isset($_SESSION['id']) ? (int) $_SESSION['id'] : 1;
|
||||
|
||||
// On écrit dans la base
|
||||
require('models/connection.php');
|
||||
$c = connection();
|
||||
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) {
|
||||
$_SESSION['notification'] = 'Mission enregistrée avec succès.';
|
||||
} else {
|
||||
$_SESSION['notification'] = 'Erreur lors de l\'enregistrement de la mission.';
|
||||
}
|
||||
$_SESSION['notification'] = $resultat
|
||||
? 'Mission enregistrée avec succès.'
|
||||
: 'Erreur lors de l\'enregistrement de la mission.';
|
||||
|
||||
header('Location: index.php?route=operations');
|
||||
exit;
|
||||
|
|
|
|||
|
|
@ -1,39 +1,45 @@
|
|||
<?php
|
||||
|
||||
function add_utilisateurs_form_ctrl() {
|
||||
/**
|
||||
* Affichage du formulaire de création de compte
|
||||
*/
|
||||
function add_utilisateurs_form_ctrl()
|
||||
{
|
||||
// Réservé administration
|
||||
require_once('controllers/auth_utilities.php');
|
||||
verify_grants('add_utilisateurs_form', 'administration');
|
||||
require('views/creation_compte_view.php');
|
||||
}
|
||||
|
||||
function add_utilisateurs_write_ctrl() {
|
||||
/**
|
||||
* Enregistrement d'un nouveau compte utilisateur
|
||||
*/
|
||||
function add_utilisateurs_write_ctrl()
|
||||
{
|
||||
require_once('controllers/auth_utilities.php');
|
||||
verify_grants('add_utilisateurs', 'administration');
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||
header('Location: index.php?route=add_utilisateurs_form');
|
||||
exit;
|
||||
}
|
||||
|
||||
$nom = $_POST['nom'];
|
||||
$prenom = $_POST['prenom'];
|
||||
$role = $_POST['role'];
|
||||
$nomdep = $_POST['nomdep'];
|
||||
$num_tel = $_POST['num_tel'];
|
||||
$login = $_POST['login'];
|
||||
$mdp = $_POST['mdp'];
|
||||
|
||||
if (!preg_match('/^[a-zA-Z0-9_-]+$/', $login)) {
|
||||
// Contrôle des caractères du login
|
||||
if (!preg_match('/^[a-zA-Z0-9_-]+$/', $_POST['login'])) {
|
||||
$_SESSION['notification'] = 'Erreur : le login contient des caractères non autorisés.';
|
||||
require('views/creation_compte_view.php');
|
||||
return;
|
||||
}
|
||||
|
||||
$mdp_hache = password_hash($mdp, PASSWORD_DEFAULT);
|
||||
// Hashage du mot de passe
|
||||
$mdp_hache = password_hash($_POST['mdp'], PASSWORD_DEFAULT);
|
||||
|
||||
// On écrit dans la base
|
||||
require('models/connection.php');
|
||||
$c = connection();
|
||||
require('models/utilisateur_crud.php');
|
||||
create_utilisateur_crud($c, $nom, $prenom, $role, $nomdep, $num_tel, $login, $mdp_hache);
|
||||
|
||||
create_utilisateur_crud($c, $_POST['nom'], $_POST['prenom'], $_POST['role'], $_POST['nomdep'], $_POST['num_tel'], $_POST['login'], $mdp_hache);
|
||||
|
||||
$_SESSION['notification'] = 'Utilisateur créé avec succès.';
|
||||
header('Location: index.php');
|
||||
|
|
|
|||
143
css/global.css
143
css/global.css
|
|
@ -7,8 +7,10 @@ body {
|
|||
margin: 0;
|
||||
}
|
||||
|
||||
/* HEADER */
|
||||
header { background: #fff; border-bottom: 1px solid #d9d2c0; }
|
||||
header {
|
||||
background: #fff;
|
||||
border-bottom: 1px solid #d9d2c0;
|
||||
}
|
||||
|
||||
.header-top {
|
||||
max-width: 1000px;
|
||||
|
|
@ -25,10 +27,14 @@ header { background: #fff; border-bottom: 1px solid #d9d2c0; }
|
|||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
.header-top img { height: 45px; }
|
||||
.header-top img {
|
||||
height: 45px;
|
||||
}
|
||||
|
||||
/* NAVIGATION */
|
||||
nav { background: #f8f6f0; border-bottom: 2px solid #c49a3c; }
|
||||
nav {
|
||||
background: #f8f6f0;
|
||||
border-bottom: 2px solid #c49a3c;
|
||||
}
|
||||
|
||||
nav ul {
|
||||
max-width: 1000px;
|
||||
|
|
@ -45,10 +51,14 @@ nav a {
|
|||
text-decoration: none;
|
||||
}
|
||||
|
||||
nav a:hover { color: #c49a3c; }
|
||||
nav a.nav-right { margin-left: auto; }
|
||||
nav a:hover {
|
||||
color: #c49a3c;
|
||||
}
|
||||
|
||||
nav a.nav-right {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
/* BARRE SESSION */
|
||||
.session-bar {
|
||||
max-width: 1000px;
|
||||
margin: 0 auto;
|
||||
|
|
@ -58,7 +68,6 @@ nav a.nav-right { margin-left: auto; }
|
|||
color: #8b7a5c;
|
||||
}
|
||||
|
||||
/* NOTIFICATION */
|
||||
#notification {
|
||||
max-width: 1000px;
|
||||
margin: 10px auto 0 auto;
|
||||
|
|
@ -68,7 +77,6 @@ nav a.nav-right { margin-left: auto; }
|
|||
border-left: 4px solid #6a9f6a;
|
||||
}
|
||||
|
||||
/* CONTENU */
|
||||
article {
|
||||
max-width: 1100px;
|
||||
margin: 20px auto;
|
||||
|
|
@ -78,9 +86,11 @@ article {
|
|||
border: 1px solid #e0dbce;
|
||||
}
|
||||
|
||||
article h2 { color: #3b4a2e; margin-top: 0; }
|
||||
article h2 {
|
||||
color: #3b4a2e;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
/* SOUS-NAVIGATION */
|
||||
.sub-nav {
|
||||
margin-bottom: 15px;
|
||||
padding-bottom: 10px;
|
||||
|
|
@ -94,14 +104,29 @@ article h2 { color: #3b4a2e; margin-top: 0; }
|
|||
text-decoration: none;
|
||||
}
|
||||
|
||||
.sub-nav a:hover { text-decoration: underline; }
|
||||
.sub-nav a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* TABLEAUX */
|
||||
table { width: 100%; border-collapse: collapse; margin: 10px 0; }
|
||||
table th { background: #f8f6f0; color: #3b4a2e; padding: 10px; text-align: left; border-bottom: 2px solid #c49a3c; }
|
||||
table td { padding: 8px 10px; border-bottom: 1px solid #e8e2d2; }
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
table th {
|
||||
background: #f8f6f0;
|
||||
color: #3b4a2e;
|
||||
padding: 10px;
|
||||
text-align: left;
|
||||
border-bottom: 2px solid #c49a3c;
|
||||
}
|
||||
|
||||
table td {
|
||||
padding: 8px 10px;
|
||||
border-bottom: 1px solid #e8e2d2;
|
||||
}
|
||||
|
||||
/* PLANNING */
|
||||
.planning-nav {
|
||||
margin-bottom: 15px;
|
||||
display: flex;
|
||||
|
|
@ -114,21 +139,24 @@ table td { padding: 8px 10px; border-bottom: 1px solid #e8e2d2; }
|
|||
text-decoration: none;
|
||||
}
|
||||
|
||||
.planning-nav a:hover { text-decoration: underline; }
|
||||
.planning-nav a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.planning-tableau {
|
||||
overflow-x: auto;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.planning-tableau table { margin: 0; }
|
||||
.planning-tableau table {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.planning-tableau th {
|
||||
font-size: 0.7rem;
|
||||
padding: 5px 3px;
|
||||
text-align: center;
|
||||
min-width: 35px;
|
||||
writing-mode: horizontal-tb;
|
||||
}
|
||||
|
||||
.planning-tableau td {
|
||||
|
|
@ -149,11 +177,10 @@ table td { padding: 8px 10px; border-bottom: 1px solid #e8e2d2; }
|
|||
border-right: 2px solid #c49a3c;
|
||||
}
|
||||
|
||||
.sauveteur-nom small { color: #8b7a5c; font-size: 0.7rem; }
|
||||
|
||||
.cell-actif { opacity: 0.85; }
|
||||
|
||||
.cell-prepa { opacity: 0.4; }
|
||||
.sauveteur-nom small {
|
||||
color: #8b7a5c;
|
||||
font-size: 0.7rem;
|
||||
}
|
||||
|
||||
.planning-legende {
|
||||
margin-top: 15px;
|
||||
|
|
@ -161,9 +188,16 @@ table td { padding: 8px 10px; border-bottom: 1px solid #e8e2d2; }
|
|||
border-top: 1px solid #e8e2d2;
|
||||
}
|
||||
|
||||
.planning-legende h3 { font-size: 0.9rem; margin-bottom: 8px; }
|
||||
.planning-legende h3 {
|
||||
font-size: 0.9rem;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.legende-item { display: inline-block; margin-right: 15px; font-size: 0.8rem; }
|
||||
.legende-item {
|
||||
display: inline-block;
|
||||
margin-right: 15px;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
.legende-couleur {
|
||||
display: inline-block;
|
||||
|
|
@ -174,28 +208,33 @@ table td { padding: 8px 10px; border-bottom: 1px solid #e8e2d2; }
|
|||
vertical-align: middle;
|
||||
}
|
||||
|
||||
/* Couleurs des statuts (classes CSS) */
|
||||
.vert { background-color: #2ecc71; }
|
||||
.violet { background-color: #9b59b6; }
|
||||
.marron { background-color: #8B4513; }
|
||||
.jaune { background-color: #f1c40f; }
|
||||
.orange { background-color: #f39c12; }
|
||||
.bleu { background-color: #3498db; }
|
||||
.rouge { background-color: #e74c3c; }
|
||||
form label {
|
||||
display: inline-block;
|
||||
min-width: 140px;
|
||||
}
|
||||
|
||||
/* FORMULAIRES */
|
||||
form label { display: inline-block; min-width: 140px; }
|
||||
form input[type="text"],
|
||||
form input[type="password"],
|
||||
form input[type="date"],
|
||||
form select { padding: 5px 10px; border: 1px solid #d0cbb8; border-radius: 4px; }
|
||||
form input[type="submit"] {
|
||||
background: #c49a3c; color: #fff; border: none;
|
||||
padding: 8px 25px; border-radius: 4px; cursor: pointer;
|
||||
form select {
|
||||
padding: 5px 10px;
|
||||
border: 1px solid #d0cbb8;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
form input[type="submit"] {
|
||||
background: #c49a3c;
|
||||
color: #fff;
|
||||
border: none;
|
||||
padding: 8px 25px;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
form input[type="submit"]:hover {
|
||||
background: #b38a2e;
|
||||
}
|
||||
form input[type="submit"]:hover { background: #b38a2e; }
|
||||
|
||||
/* FOOTER */
|
||||
footer {
|
||||
background: #f8f6f0;
|
||||
border-top: 2px solid #c49a3c;
|
||||
|
|
@ -205,9 +244,17 @@ footer {
|
|||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
/* RESPONSIVE */
|
||||
@media (max-width: 700px) {
|
||||
nav ul { flex-wrap: wrap; justify-content: center; }
|
||||
nav a { padding: 8px 15px; font-size: 0.9rem; }
|
||||
article { margin: 10px 5px; padding: 15px; }
|
||||
nav ul {
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
}
|
||||
nav a {
|
||||
padding: 8px 15px;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
article {
|
||||
margin: 10px 5px;
|
||||
padding: 15px;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
134
index.php
134
index.php
|
|
@ -1,92 +1,78 @@
|
|||
<?php
|
||||
/**
|
||||
* The front controller
|
||||
* Vincent Verdon - 20240604
|
||||
*/
|
||||
|
||||
require('controllers/auth_utilities.php');
|
||||
session_start();
|
||||
|
||||
//Loads some functions for session managment and starts the session
|
||||
require('controllers/auth_utilities.php');
|
||||
session_start();
|
||||
//var_dump($_SESSION);
|
||||
error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
|
||||
ini_set('display_errors', 1);
|
||||
|
||||
|
||||
//The requested route
|
||||
$route = null;
|
||||
if (isset($_GET['route'])) {
|
||||
$route = 'invalid';
|
||||
if (preg_match('#^[a-zA-Z0-9 _]*$#', $_GET['route'])) {
|
||||
$route = $_GET['route'];
|
||||
}
|
||||
$route = null;
|
||||
if (isset($_GET['route'])) {
|
||||
$route = 'invalid';
|
||||
if (preg_match('#^[a-zA-Z0-9 _]*$#', $_GET['route'])) {
|
||||
$route = $_GET['route'];
|
||||
}
|
||||
}
|
||||
|
||||
//We switch to the good controller
|
||||
switch ($route) {
|
||||
switch ($route) {
|
||||
|
||||
case null:
|
||||
case '':
|
||||
require('controllers/auth_ctrl2.php');
|
||||
login_ctrl();
|
||||
break;
|
||||
|
||||
case null:
|
||||
require('controllers/auth_ctrl2.php');
|
||||
login_ctrl();
|
||||
break;
|
||||
case 'auth':
|
||||
require('controllers/auth_ctrl2.php');
|
||||
login_ctrl();
|
||||
break;
|
||||
|
||||
case '':
|
||||
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 'planning':
|
||||
require('controllers/lecture_page_ctrl.php');
|
||||
planning_afficher_ctrl();
|
||||
break;
|
||||
|
||||
case 'auth':
|
||||
require('controllers/auth_ctrl2.php');
|
||||
login_ctrl();
|
||||
break;
|
||||
case 'add_utilisateurs_form':
|
||||
require('controllers/utilisateur_ctrl.php');
|
||||
add_utilisateurs_form_ctrl();
|
||||
break;
|
||||
|
||||
case 'logout':
|
||||
require('controllers/auth_ctrl2.php');
|
||||
logout_ctrl();
|
||||
break;
|
||||
case 'add_utilisateurs':
|
||||
require('controllers/utilisateur_ctrl.php');
|
||||
add_utilisateurs_write_ctrl();
|
||||
break;
|
||||
|
||||
case 'add_utilisateurs_form':
|
||||
require('controllers/utilisateur_ctrl.php');
|
||||
add_utilisateurs_form_ctrl();
|
||||
break;
|
||||
case 'modif_utilisateurs_form':
|
||||
require('controllers/modif_compte_ctrl.php');
|
||||
modif_utilisateurs_form_ctrl();
|
||||
break;
|
||||
|
||||
case 'add_utilisateurs':
|
||||
require('controllers/utilisateur_ctrl.php');
|
||||
add_utilisateurs_write_ctrl();
|
||||
break;
|
||||
case 'modif_utilisateurs':
|
||||
require('controllers/modif_compte_ctrl.php');
|
||||
modif_utilisateurs_write_ctrl();
|
||||
break;
|
||||
|
||||
case 'modif_utilisateurs_form':
|
||||
require('controllers/modif_compte_ctrl.php');
|
||||
modif_utilisateurs_form_ctrl();
|
||||
break;
|
||||
case 'ajout_personnes':
|
||||
require('controllers/contact_crtl.php');
|
||||
contact_ctrl();
|
||||
break;
|
||||
|
||||
case 'modif_utilisateurs':
|
||||
require('controllers/modif_compte_ctrl.php');
|
||||
modif_utilisateurs_write_ctrl();
|
||||
break;
|
||||
case 'operations':
|
||||
require('controllers/operation_ctrl.php');
|
||||
operations_form_ctrl();
|
||||
break;
|
||||
|
||||
case 'ajout_personnes':
|
||||
require('controllers/contact_crtl.php');
|
||||
contact_ctrl();
|
||||
break;
|
||||
case 'add_operation':
|
||||
require('controllers/operation_ctrl.php');
|
||||
add_operation_write_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;
|
||||
|
||||
}
|
||||
default:
|
||||
require('views/404_view.php');
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,11 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Create a PDO connection
|
||||
* Crée une connexion PDO
|
||||
* @return PDO
|
||||
*/
|
||||
function connection() {
|
||||
//Loads config from file config.php
|
||||
function connection(): PDO
|
||||
{
|
||||
require_once('config/config.php');
|
||||
|
||||
//Db connection
|
||||
$connex = new PDO('mysql:host=' . HOST . ';dbname=' . DB,USER , PASSWORD);
|
||||
return $connex;
|
||||
return new PDO('mysql:host=' . HOST . ';dbname=' . DB, USER, PASSWORD);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,12 @@
|
|||
<?php
|
||||
|
||||
function create_sauveteur(PDO $c, string $nom, string $prenom, string $dep, string $spe, string $date_heure, string $tel): void {
|
||||
/**
|
||||
* Ajoute un sauveteur dans la base
|
||||
*/
|
||||
function create_sauveteur(PDO $c, string $nom, string $prenom, string $dep, string $spe, string $date_heure, string $tel): void
|
||||
{
|
||||
$req = "INSERT INTO Sauveteur (nom, prenom, departement, specialite, DateHeureEngagement, NumTel)
|
||||
VALUES (:nom, :prenom, :dep, :spe, :date_heure, :tel)";
|
||||
|
||||
$prep = $c->prepare($req);
|
||||
$prep->bindValue(':nom', $nom);
|
||||
$prep->bindValue(':prenom', $prenom);
|
||||
|
|
|
|||
|
|
@ -1,19 +1,26 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Liste des statuts (utilisé pour les select)
|
||||
*/
|
||||
function get_statuts(PDO $pdo): array
|
||||
{
|
||||
$sql = "SELECT ID, TypeStatut FROM Statut ORDER BY TypeStatut";
|
||||
return $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
|
||||
}
|
||||
|
||||
/**
|
||||
* Liste des sauveteurs
|
||||
*/
|
||||
function get_sauveteurs(PDO $pdo): array
|
||||
{
|
||||
$sql = "SELECT ID, nom, prenom, specialite
|
||||
FROM Sauveteur
|
||||
ORDER BY nom, prenom";
|
||||
$sql = "SELECT ID, nom, prenom, specialite FROM Sauveteur ORDER BY nom, prenom";
|
||||
return $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
|
||||
}
|
||||
|
||||
/**
|
||||
* Missions d'une journée avec leur statut
|
||||
*/
|
||||
function get_missions_planning(PDO $pdo, string $date): array
|
||||
{
|
||||
$sql = "SELECT m.ID_Sauveteur, m.DateHeureDebut, m.DateHeureFin, m.EnPrepa, s.TypeStatut
|
||||
|
|
|
|||
|
|
@ -1,7 +1,10 @@
|
|||
<?php
|
||||
|
||||
// Récupère tous les comptes utilisateurs
|
||||
function get_all_comptes(PDO $c): array {
|
||||
/**
|
||||
* Récupère tous les comptes utilisateurs
|
||||
*/
|
||||
function get_all_comptes(PDO $c): array
|
||||
{
|
||||
$req = "SELECT ID, login, type, nom, prenom, nomdep, num_tel FROM Utilisateur ORDER BY nom, prenom";
|
||||
$res = $c->query($req);
|
||||
$comptes = $res->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
|
@ -9,8 +12,11 @@ function get_all_comptes(PDO $c): array {
|
|||
return $comptes;
|
||||
}
|
||||
|
||||
// Récupère un compte par son ID
|
||||
function get_compte_by_id(PDO $c, int $id): ?array {
|
||||
/**
|
||||
* Récupère un compte par son ID
|
||||
*/
|
||||
function get_compte_by_id(PDO $c, int $id): ?array
|
||||
{
|
||||
$req = "SELECT ID, login, type, nom, prenom, nomdep, num_tel FROM Utilisateur WHERE ID = :id";
|
||||
$prep = $c->prepare($req);
|
||||
$prep->bindValue(':id', $id, PDO::PARAM_INT);
|
||||
|
|
@ -20,8 +26,11 @@ function get_compte_by_id(PDO $c, int $id): ?array {
|
|||
return $compte ?: null;
|
||||
}
|
||||
|
||||
// Met à jour un compte utilisateur
|
||||
function update_compte(PDO $c, int $id, string $nom, string $prenom, string $role, string $nomdep, string $num_tel, string $login, string $passwd): void {
|
||||
/**
|
||||
* Met à jour un compte (mot de passe optionnel)
|
||||
*/
|
||||
function update_compte(PDO $c, int $id, string $nom, string $prenom, string $role, string $nomdep, string $num_tel, string $login, string $passwd): void
|
||||
{
|
||||
$req = "UPDATE Utilisateur SET nom = :nom, prenom = :prenom, type = :role, nomdep = :dep, num_tel = :tel, login = :login WHERE ID = :id";
|
||||
$prep = $c->prepare($req);
|
||||
$prep->bindValue(':nom', $nom);
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
<?php
|
||||
|
||||
function create_operation_crud(PDO $connex, string $date_debut, string $date_fin, string $lieu, int $en_prepa, int $id_sauveteur, int $id_statut, int $id_utilisateur): bool {
|
||||
|
||||
// On insère les données dans la table Mission avec le champ Lieu ajouté
|
||||
/**
|
||||
* Insère une nouvelle mission
|
||||
*/
|
||||
function create_operation_crud(PDO $connex, string $date_debut, string $date_fin, string $lieu, int $en_prepa, int $id_sauveteur, int $id_statut, int $id_utilisateur): bool
|
||||
{
|
||||
$req = "INSERT INTO Mission (DateHeureDebut, DateHeureFin, EnPrepa, ID_Sauveteur, ID_statut, ID_Utilisateur, Lieu)
|
||||
VALUES (:date_debut, :date_fin, :en_prepa, :id_sauveteur, :id_statut, :id_utilisateur, :lieu)";
|
||||
|
||||
$prep = $connex->prepare($req);
|
||||
|
||||
$prep->bindValue(':date_debut', $date_debut);
|
||||
$prep->bindValue(':date_fin', $date_fin);
|
||||
$prep->bindValue(':lieu', $lieu);
|
||||
|
|
@ -15,10 +15,7 @@ function create_operation_crud(PDO $connex, string $date_debut, string $date_fin
|
|||
$prep->bindValue(':id_sauveteur', $id_sauveteur, PDO::PARAM_INT);
|
||||
$prep->bindValue(':id_statut', $id_statut, PDO::PARAM_INT);
|
||||
$prep->bindValue(':id_utilisateur', $id_utilisateur, PDO::PARAM_INT);
|
||||
|
||||
$resultat = $prep->execute();
|
||||
$prep->closeCursor();
|
||||
|
||||
return $resultat;
|
||||
}
|
||||
?>
|
||||
|
|
@ -1,16 +1,16 @@
|
|||
<?php
|
||||
|
||||
|
||||
|
||||
function recuperation_auth(PDO $connex, string $login):?array {
|
||||
require_once('config/config.php');
|
||||
/**
|
||||
* Récupère les infos d'authentification d'un utilisateur
|
||||
*/
|
||||
function recuperation_auth(PDO $connex, string $login): ?array
|
||||
{
|
||||
require_once('config/config.php');
|
||||
$req = "SELECT ID, login, passwd, type FROM Utilisateur WHERE login = :login";
|
||||
|
||||
$prep = $connex->prepare($req);
|
||||
$prep->bindValue(':login', $login);
|
||||
$prep->execute();
|
||||
$auth = $prep->fetch(PDO::FETCH_ASSOC);
|
||||
$prep->closeCursor();
|
||||
return $auth ?: null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,12 @@
|
|||
<?php
|
||||
|
||||
// Crée un nouvel utilisateur (tous les champs dans Utilisateur)
|
||||
function create_utilisateur_crud(PDO $c, string $nom, string $prenom, string $role, string $nomdep, string $num_tel, string $login, string $mdp_hache): void {
|
||||
$req = "INSERT INTO Utilisateur (login, passwd, type, nom, prenom, nomdep, num_tel) VALUES (:login, :passwd, :type, :nom, :prenom, :nomdep, :num_tel)";
|
||||
/**
|
||||
* Crée un nouveau compte utilisateur
|
||||
*/
|
||||
function create_utilisateur_crud(PDO $c, string $nom, string $prenom, string $role, string $nomdep, string $num_tel, string $login, string $mdp_hache): void
|
||||
{
|
||||
$req = "INSERT INTO Utilisateur (login, passwd, type, nom, prenom, nomdep, num_tel)
|
||||
VALUES (:login, :passwd, :type, :nom, :prenom, :nomdep, :num_tel)";
|
||||
$prep = $c->prepare($req);
|
||||
$prep->bindValue(':login', $login);
|
||||
$prep->bindValue(':passwd', $mdp_hache);
|
||||
|
|
|
|||
|
|
@ -1,8 +1,5 @@
|
|||
<?php
|
||||
header('Status: 404 Not Found', true, 404);
|
||||
|
||||
require('views/header.php');
|
||||
|
||||
echo '<h2>Page introuvable !</h2>';
|
||||
|
||||
echo '<h2>Page introuvable</h2>';
|
||||
require('views/footer.php');
|
||||
|
|
|
|||
|
|
@ -5,18 +5,13 @@
|
|||
<a href="index.php?route=modif_utilisateurs_form">Modifier un compte</a>
|
||||
</nav>
|
||||
|
||||
<h2>Ajout d'un nouveau compte</h2>
|
||||
<h2>Créer un compte</h2>
|
||||
|
||||
<form action="index.php?route=add_utilisateurs" method="post">
|
||||
<p><label>Nom :</label> <input type="text" name="nom" required></p>
|
||||
<p><label>Prénom :</label> <input type="text" name="prenom" required></p>
|
||||
<p>
|
||||
Nom : <input type="text" name="nom" required>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Prénom : <input type="text" name="prenom" required>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<label for="role">Choix du rôle :</label>
|
||||
<label for="role">Rôle :</label>
|
||||
<select name="role" id="role" required>
|
||||
<option value="">-- Sélectionnez un profil --</option>
|
||||
<option value="gestionnaire">Gestionnaire</option>
|
||||
|
|
@ -24,28 +19,11 @@
|
|||
<option value="administration">Administration</option>
|
||||
</select>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
NOM DEP : <input type="text" name="nomdep" required>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
n°tel : <input type="text" name="num_tel" required>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<label for="login">Login :</label>
|
||||
<input type="text" id="login" name="login" required>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<label for="mdp">Mot de passe :</label>
|
||||
<input type="password" id="mdp" name="mdp" required>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<input type="submit" value="Enregistrer">
|
||||
</p>
|
||||
<p><label>Département :</label> <input type="text" name="nomdep" required></p>
|
||||
<p><label>Téléphone :</label> <input type="text" name="num_tel" required></p>
|
||||
<p><label for="login">Login :</label> <input type="text" id="login" name="login" required></p>
|
||||
<p><label for="mdp">Mot de passe :</label> <input type="password" id="mdp" name="mdp" required></p>
|
||||
<p><input type="submit" value="Enregistrer"></p>
|
||||
</form>
|
||||
|
||||
<?php require('views/footer.php'); ?>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
<?php
|
||||
require_once('controllers/auth_utilities.php');
|
||||
|
||||
// --- NAVIGATION selon le rôle ---
|
||||
$nav = '';
|
||||
|
||||
if (is_logged()) {
|
||||
|
|
@ -18,14 +17,12 @@ if (is_logged()) {
|
|||
$nav .= '<li><a href="index.php?route=logout" class="nav-right">Déconnexion</a></li>';
|
||||
}
|
||||
|
||||
// --- BARRE DE SESSION ---
|
||||
if (is_logged()) {
|
||||
$session = 'Connecté : ' . htmlentities($_SESSION['login']) . ' (' . htmlentities($_SESSION['role']) . ')';
|
||||
} else {
|
||||
$session = 'Non connecté';
|
||||
}
|
||||
|
||||
// --- NOTIFICATION ---
|
||||
$notif = '';
|
||||
if (!empty($_SESSION['notification'])) {
|
||||
$notif = '<div id="notification">' . htmlentities($_SESSION['notification']) . '</div>';
|
||||
|
|
|
|||
|
|
@ -1,11 +1,14 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Affichage du planning avec le tableau des créneaux
|
||||
*/
|
||||
function planning_view(array $sauveteurs, array $creneaux, array $missions_par_sauveteur, string $date)
|
||||
{
|
||||
$date_formatee = date('d/m/Y', strtotime($date));
|
||||
require('views/header.php');
|
||||
|
||||
// Correspondance TypeStatut (base) → couleur HTML
|
||||
// Couleurs associées à chaque statut
|
||||
$couleurs = [
|
||||
'Sauveteur disponible' => '#2ecc71',
|
||||
'Sauveteur en approche de la cavite' => '#9b59b6',
|
||||
|
|
@ -40,34 +43,33 @@ function planning_view(array $sauveteurs, array $creneaux, array $missions_par_s
|
|||
|
||||
<?php foreach ($creneaux as $creneau): ?>
|
||||
<?php
|
||||
// Chercher si ce sauveteur a une mission sur ce créneau
|
||||
$statut = null;
|
||||
$statut = null;
|
||||
$en_prepa = false;
|
||||
|
||||
$debut_creneau = new DateTime($date . ' ' . $creneau . ':00');
|
||||
$fin_creneau = clone $debut_creneau;
|
||||
$fin_creneau = clone $debut_creneau;
|
||||
$fin_creneau->modify('+30 minutes');
|
||||
|
||||
// On cherche si une mission couvre ce créneau
|
||||
$liste_missions = $missions_par_sauveteur[$sauveteur['ID']] ?? [];
|
||||
foreach ($liste_missions as $mission) {
|
||||
$debut_mission = new DateTime($mission['DateHeureDebut']);
|
||||
$fin_mission = new DateTime($mission['DateHeureFin']);
|
||||
$fin_mission = new DateTime($mission['DateHeureFin']);
|
||||
|
||||
if ($debut_mission < $fin_creneau && $fin_mission > $debut_creneau) {
|
||||
$statut = $mission['TypeStatut'];
|
||||
$statut = $mission['TypeStatut'];
|
||||
$en_prepa = (bool) $mission['EnPrepa'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Affichage de la cellule
|
||||
if ($statut === null) {
|
||||
$style = '';
|
||||
$titre = '';
|
||||
$texte = '';
|
||||
} else {
|
||||
$couleur = $couleurs[$statut] ?? '#ccc';
|
||||
$titre = htmlspecialchars($statut);
|
||||
$titre = htmlspecialchars($statut);
|
||||
if ($en_prepa) {
|
||||
$style = 'background:' . $couleur . '; opacity:0.4;';
|
||||
$titre .= ' (préparation)';
|
||||
|
|
@ -88,9 +90,8 @@ function planning_view(array $sauveteurs, array $creneaux, array $missions_par_s
|
|||
|
||||
<div class="planning-legende">
|
||||
<h3>Légende</h3>
|
||||
|
||||
<span class="legende-item">
|
||||
<span class="legende-couleur" style="background:#2ecc71;"></span> Sauveteur disponible
|
||||
<span class="legende-couleur" style="background:#2ecc71;"></span> Disponible
|
||||
</span>
|
||||
<span class="legende-item">
|
||||
<span class="legende-couleur" style="background:#9b59b6;"></span> En approche de la cavité
|
||||
|
|
@ -108,7 +109,7 @@ function planning_view(array $sauveteurs, array $creneaux, array $missions_par_s
|
|||
<span class="legende-couleur" style="background:#3498db;"></span> En repos
|
||||
</span>
|
||||
<span class="legende-item">
|
||||
<span class="legende-couleur" style="background:#e74c3c;"></span> En brancardage civière
|
||||
<span class="legende-couleur" style="background:#e74c3c;"></span> Brancardage civière
|
||||
</span>
|
||||
<span class="legende-item">
|
||||
<span class="legende-couleur" style="background:#ccc; opacity:0.4;"></span>
|
||||
|
|
|
|||
|
|
@ -1,15 +1,17 @@
|
|||
<?php
|
||||
|
||||
function login_form_view(?string $route) {
|
||||
/**
|
||||
* Formulaire de connexion
|
||||
*/
|
||||
function login_form_view(?string $route)
|
||||
{
|
||||
require('views/header.php');
|
||||
|
||||
echo '<h2>Page d\'authentification</h2>';
|
||||
echo '<p>Merci de vous authentifier pour accéder à cette fonctionnalité.</p>';
|
||||
echo '<h2>Connexion</h2>';
|
||||
echo '<p>Merci de vous authentifier pour accéder à l\'application.</p>';
|
||||
echo '<form action="index.php?route=auth&ask=' . $route . '" method="post">';
|
||||
echo '<p><label>Login :</label> <input type="text" name="login"></p>';
|
||||
echo '<p><label>Mot de passe :</label> <input type="password" name="password"></p>';
|
||||
echo '<p><input type="submit" value="Valider"></p>';
|
||||
echo '<p><input type="submit" value="Se connecter"></p>';
|
||||
echo '</form>';
|
||||
|
||||
require('views/footer.php');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,10 @@
|
|||
<?php
|
||||
|
||||
function modif_compte_view(array $comptes, ?array $compte_select) {
|
||||
/**
|
||||
* Page de modification d'un compte existant
|
||||
*/
|
||||
function modif_compte_view(array $comptes, ?array $compte_select)
|
||||
{
|
||||
require('views/header.php');
|
||||
?>
|
||||
|
||||
|
|
@ -9,12 +13,10 @@ function modif_compte_view(array $comptes, ?array $compte_select) {
|
|||
<a href="index.php?route=modif_utilisateurs_form">Modifier un compte</a>
|
||||
</nav>
|
||||
|
||||
<h2>Modifier un compte existant</h2>
|
||||
<h2>Modifier un compte</h2>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
|
||||
<!-- COLONNE GAUCHE : liste des comptes -->
|
||||
<td style="width: 40%; vertical-align: top;">
|
||||
<h3>Liste des comptes</h3>
|
||||
<ul>
|
||||
|
|
@ -31,55 +33,37 @@ function modif_compte_view(array $comptes, ?array $compte_select) {
|
|||
</ul>
|
||||
</td>
|
||||
|
||||
<!-- COLONNE DROITE : formulaire de modification -->
|
||||
<td style="vertical-align: top;">
|
||||
<h3>Modifier les informations</h3>
|
||||
<h3>Informations</h3>
|
||||
|
||||
<?php if ($compte_select !== null): ?>
|
||||
<form action="index.php?route=modif_utilisateurs" method="post">
|
||||
<input type="hidden" name="id" value="<?= $compte_select['ID'] ?>">
|
||||
|
||||
<p>
|
||||
<label>Nom :</label>
|
||||
<input type="text" name="nom" size="40" value="<?= htmlentities($compte_select['nom']) ?>">
|
||||
</p>
|
||||
<p>
|
||||
<label>Prénom :</label>
|
||||
<input type="text" name="prenom" size="40" value="<?= htmlentities($compte_select['prenom']) ?>">
|
||||
</p>
|
||||
<p>
|
||||
<label>Rôle :</label>
|
||||
<p><label>Nom :</label>
|
||||
<input type="text" name="nom" size="40" value="<?= htmlentities($compte_select['nom']) ?>"></p>
|
||||
<p><label>Prénom :</label>
|
||||
<input type="text" name="prenom" size="40" value="<?= htmlentities($compte_select['prenom']) ?>"></p>
|
||||
<p><label>Rôle :</label>
|
||||
<select name="role">
|
||||
<option value="gestionnaire" <?= $compte_select['type'] === 'gestionnaire' ? 'selected' : '' ?>>Gestionnaire</option>
|
||||
<option value="lecture" <?= $compte_select['type'] === 'lecture' ? 'selected' : '' ?>>Lecture</option>
|
||||
<option value="administration" <?= $compte_select['type'] === 'administration' ? 'selected' : '' ?>>Administration</option>
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<label>Département :</label>
|
||||
<input type="text" name="nomdep" size="10" value="<?= htmlentities($compte_select['nomdep']) ?>">
|
||||
</p>
|
||||
<p>
|
||||
<label>N° téléphone :</label>
|
||||
<input type="text" name="num_tel" size="20" value="<?= htmlentities($compte_select['num_tel']) ?>">
|
||||
</p>
|
||||
<p>
|
||||
<label>Login :</label>
|
||||
<input type="text" name="login" size="40" value="<?= htmlentities($compte_select['login']) ?>">
|
||||
</p>
|
||||
<p>
|
||||
<label>Nouveau mot de passe :</label>
|
||||
<input type="password" name="passwd" size="40" placeholder="Laisser vide pour ne pas modifier">
|
||||
</p>
|
||||
<p>
|
||||
<input type="submit" value="Enregistrer les modifications">
|
||||
</p>
|
||||
</select></p>
|
||||
<p><label>Département :</label>
|
||||
<input type="text" name="nomdep" size="10" value="<?= htmlentities($compte_select['nomdep']) ?>"></p>
|
||||
<p><label>N° téléphone :</label>
|
||||
<input type="text" name="num_tel" size="20" value="<?= htmlentities($compte_select['num_tel']) ?>"></p>
|
||||
<p><label>Login :</label>
|
||||
<input type="text" name="login" size="40" value="<?= htmlentities($compte_select['login']) ?>"></p>
|
||||
<p><label>Nouveau mot de passe :</label>
|
||||
<input type="password" name="passwd" size="40" placeholder="Laisser vide pour ne pas modifier"></p>
|
||||
<p><input type="submit" value="Enregistrer les modifications"></p>
|
||||
</form>
|
||||
<?php else: ?>
|
||||
<p>Cliquez sur un compte dans la liste pour le modifier.</p>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
<?php
|
||||
require('views/header.php');
|
||||
?>
|
||||
<h2>Bienvenue sur l'application de gestion</h2>
|
||||
<p>Ceci est le contenu central de ma page d'accueil.</p>
|
||||
<?php
|
||||
require('views/footer.php');
|
||||
?>
|
||||
Loading…
Add table
Reference in a new issue