prepare('SELECT id, email, mot_de_passe, role, reference_id FROM compte WHERE id = ? LIMIT 1'); $stmt->execute([$compteId]); $compte = $stmt->fetch(PDO::FETCH_ASSOC); if ( !$compte || !in_array($compte['role'], ['client', 'praticien'], true) ) { $errorMsg = $translations['delete_account_error_not_found'] ?? 'Compte introuvable.'; } elseif (!password_verify($password, (string) $compte['mot_de_passe'])) { $errorMsg = $translations['delete_account_error_password'] ?? 'Mot de passe incorrect.'; } else { $refId = (int)$compte['reference_id']; $pdo->beginTransaction(); if ($compte['role'] === 'client') { // CLIENT : la plupart des FK sont en CASCADE ou SET NULL → un seul DELETE suffit $delClient = $pdo->prepare('DELETE FROM client WHERE id = ?'); $delClient->execute([$refId]); } elseif ($compte['role'] === 'praticien') { // PRATICIEN : il y a des FK SANS ON DELETE CASCADE // On nettoie d'abord les tables dépendantes // Tokens Google $stmt = $pdo->prepare('DELETE FROM google_tokens WHERE praticien_id = ?'); $stmt->execute([$refId]); // Tokens Outlook $stmt = $pdo->prepare('DELETE FROM outlook_tokens WHERE praticien_id = ?'); $stmt->execute([$refId]); // Paiements $stmt = $pdo->prepare('DELETE FROM paiement WHERE praticien_id = ?'); $stmt->execute([$refId]); // (éventuellement d’autres tables si tu ajoutes des FK plus tard) // Enfin : supprimer le praticien lui-même $delPrat = $pdo->prepare('DELETE FROM praticien WHERE id = ?'); $delPrat->execute([$refId]); } // Supprimer le compte d’authentification $delCompte = $pdo->prepare('DELETE FROM compte WHERE id = ?'); $delCompte->execute([$compte['id']]); $pdo->commit(); // Déconnexion propre $_SESSION = []; if (ini_get('session.use_cookies')) { $params = session_get_cookie_params(); setcookie( session_name(), '', time() - 42000, $params['path'], $params['domain'], $params['secure'], $params['httponly'] ); } session_destroy(); // Redirection vers la page de confirmation header('Location: /confirmation_suppression.php'); exit; } } catch (Throwable $e) { if ($pdo->inTransaction()) { $pdo->rollBack(); } error_log('Erreur suppression compte: ' . $e->getMessage()); $errorMsg = $translations['delete_account_error_generic'] ?? 'Une erreur est survenue, veuillez réessayer plus tard.'; } } } } /** Petite fonction helper pour échapper */ $e = static fn(string $s): string => htmlspecialchars($s, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); // -------------------------------------------------- // Textes via $translations // -------------------------------------------------- $title = $translations['delete_account_title'] ?? 'Supprimer mon compte'; $warningTitle = $translations['delete_account_warning_title'] ?? 'Attention, cette action est irréversible.'; $warningText = $translations['delete_account_warning_text'] ?? "La suppression de votre compte entraînera la suppression de vos données associées selon nos règles de confidentialité.\nCette action ne peut pas être annulée."; $pwdLabel = $translations['delete_account_password_label'] ?? 'Veuillez confirmer votre mot de passe :'; $pwdPlaceholder = $translations['delete_account_password_placeholder'] ?? 'Votre mot de passe'; $checkboxLabel = $translations['delete_account_checkbox_label'] ?? 'Je comprends que mon compte et mes données associées seront définitivement supprimés.'; $buttonLabel = $translations['delete_account_button_label'] ?? 'Supprimer mon compte'; $saTitle = $translations['delete_account_swal_title'] ?? 'Êtes-vous sûr de vouloir supprimer votre compte ?'; $saText = $translations['delete_account_swal_text'] ?? 'Cette action est définitive. Vous ne pourrez plus accéder à votre espace.'; $saConfirm = $translations['delete_account_swal_confirm'] ?? 'Oui, supprimer'; $saCancel = $translations['delete_account_swal_cancel'] ?? 'Annuler'; ?>