prepare(" SELECT can_edit_slots FROM secretaire_praticien WHERE secretaire_user_id = :u AND praticien_id = :p AND is_active = 1 LIMIT 1 "); $st->execute(['u'=>$compteId,'p'=>$praticien_id]); $pivot = $st->fetch(PDO::FETCH_ASSOC); if (!$pivot || (int)$pivot['can_edit_slots'] !== 1) { http_response_code(403); exit('Forbidden'); } // ---- Ajouter un créneau (POST) $erreur = null; if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['jour'], $_POST['heure_debut'], $_POST['heure_fin'])) { $jour = trim((string)$_POST['jour']); $debut = trim((string)$_POST['heure_debut']); $fin = trim((string)$_POST['heure_fin']); // mini validation $joursValides = ['lundi','mardi','mercredi','jeudi','vendredi','samedi','dimanche']; if (!in_array($jour, $joursValides, true)) { $erreur = $translations['erreur_jour_invalide'] ?? "Jour invalide."; } elseif (!preg_match('#^\d{2}:\d{2}$#', $debut) || !preg_match('#^\d{2}:\d{2}$#', $fin)) { $erreur = $translations['erreur_format_heure'] ?? "Format d’heure invalide."; } elseif ($debut >= $fin) { $erreur = $translations['erreur_debut_avant_fin'] ?? "Heure de début après l’heure de fin."; } if (!$erreur) { $stmt = $pdo->prepare( "INSERT INTO disponibilite (praticien_id, jour_semaine, heure_debut, heure_fin) VALUES (:p, :j, :hd, :hf)" ); $stmt->execute([ 'p'=>$praticien_id, 'j'=>$jour, 'hd'=>$debut, 'hf'=>$fin ]); header('Location: /public/cabinet/disponibilites.php?praticien_id='.$praticien_id.'&ok=added', true, 303); exit; } } // ---- Supprimer un créneau (GET) // (idéalement: POST + CSRF, on garde GET pour coller à l’original, avec une vérif d’appartenance) if (isset($_GET['supprimer'])) { $id = (int)$_GET['supprimer']; // Vérifier que ce slot appartient bien à ce praticien $own = $pdo->prepare("SELECT 1 FROM disponibilite WHERE id = :id AND praticien_id = :p LIMIT 1"); $own->execute(['id'=>$id,'p'=>$praticien_id]); if ($own->fetchColumn()) { $stmt = $pdo->prepare("DELETE FROM disponibilite WHERE id = :id AND praticien_id = :p"); $stmt->execute(['id'=>$id,'p'=>$praticien_id]); header('Location: /public/cabinet/disponibilites.php?praticien_id='.$praticien_id.'&ok=deleted', true, 303); exit; } else { http_response_code(403); exit('Forbidden'); } } // ---- Récupérer les créneaux $stmt = $pdo->prepare( "SELECT * FROM disponibilite WHERE praticien_id = ? ORDER BY FIELD(jour_semaine,'lundi','mardi','mercredi','jeudi','vendredi','samedi','dimanche'), heure_debut" ); $stmt->execute([$praticien_id]); $dispos = $stmt->fetchAll(PDO::FETCH_ASSOC); // Prépare les traductions de jours $jourKeyMap = [ 'lundi'=>'jour_lundi','mardi'=>'jour_mardi','mercredi'=>'jour_mercredi', 'jeudi'=>'jour_jeudi','vendredi'=>'jour_vendredi','samedi'=>'jour_samedi','dimanche'=>'jour_dimanche', ]; $PAGE_TITRE = $translations['titre_disponibilites_date'] ?? 'Disponibilités (dates)'; $HEAD_EXTRA = << HTML; require_once __DIR__ . '/../includes/header_cabinet.php'; ?>

-