# 📝 Changelog - 10 novembre 2025 ## 🆕 Nouvelles fonctionnalités ### 1. Suppression d'incidents non pris en charge **Fichiers modifiés:** - `public/index.php` - Ajout route `POST /incidents/delete` - `app/Controllers/IncidentsController.php` - Nouvelle méthode `delete()` - `app/Views/incidents/detail.php` - Bouton de suppression conditionnel + script JS **Fonctionnalité:** - Permet aux **admins** et **agents** de supprimer un incident - Restriction: uniquement si le statut est **"open"** (non encore pris en charge) - Suppression en CASCADE (commentaires, pièces jointes, historique, etc.) - Confirmation JavaScript avant suppression - Messages de succès/erreur après l'action **Accès:** - Rôles autorisés: `admin`, `agent` - Bouton visible uniquement sur la page détail d'un incident avec statut "open" --- ### 2. Modification de comptes utilisateurs **Fichiers modifiés:** - `public/index.php` - Ajout route `POST /users/update` - `app/Controllers/UsersController.php` - Nouvelle méthode `update()` - `app/Views/settings/users.php` - Modal d'édition + bouton "Modifier" **Fonctionnalité:** - Permet aux **admins** de modifier les informations d'un utilisateur: - Nom - Email (avec vérification d'unicité) - Rôle (agent, technicien, superviseur, manager, admin) - Statut actif/inactif - Mot de passe (optionnel - laisser vide pour ne pas modifier) - Modal Bootstrap avec formulaire pré-rempli - Validation côté serveur - Messages de succès/erreur **Accès:** - Rôle autorisé: `admin` uniquement --- ### 3. Suppression de comptes utilisateurs **Fichiers modifiés:** - `public/index.php` - Ajout route `POST /users/delete` - `app/Controllers/UsersController.php` - Nouvelle méthode `delete()` - `app/Views/settings/users.php` - Bouton "Supprimer" + script JS **Fonctionnalité:** - Permet aux **admins** de supprimer un compte utilisateur - Protection: impossible de supprimer son propre compte - Confirmation JavaScript avant suppression - Suppression des données associées via contraintes FK - Messages de succès/erreur **Accès:** - Rôle autorisé: `admin` uniquement - Vérification supplémentaire: `user_id != current_user_id` --- ## 📄 Documentation créée ### MOBILE_RESPONSIVE_TODO.md Fichier de documentation détaillé sur l'état de la responsivité mobile: - Analyse des problèmes actuels par page - Recommandations CSS/HTML avec exemples de code - Checklist de validation - Plan d'implémentation en 4 phases - Ressources et bonnes pratiques **Note importante:** La plateforme n'est actuellement **pas responsive** sur mobile. Ce fichier sert de roadmap pour les futures améliorations. --- ## 🔧 Modifications techniques ### Routes ajoutées ```php // Incidents $router->post('/incidents/delete', [IncidentsController::class, 'delete']); // Utilisateurs $router->post('/users/update', [UsersController::class, 'update']); $router->post('/users/delete', [UsersController::class, 'delete']); ``` ### Méthodes de contrôleur ajoutées **IncidentsController:** ```php public function delete(): void ``` - Vérifie l'authentification et les rôles - Valide que le statut est "open" - Supprime l'incident et ses dépendances - Redirige avec message de succès/erreur **UsersController:** ```php public function update(): void public function delete(): void ``` - `update()`: Modification complète des informations utilisateur - `delete()`: Suppression avec protection contre l'auto-suppression ### Améliorations UI **Page détail incident (`app/Views/incidents/detail.php`):** - Nouveau bouton "Supprimer" (conditionnel) - Script JavaScript `confirmDeleteIncident(id)` - Vérification du statut en PHP pour affichage du bouton **Page gestion utilisateurs (`app/Views/settings/users.php`):** - Nouvelle colonne "Actions" dans le tableau - Boutons "Modifier" et "Supprimer" pour chaque utilisateur - Modal d'édition avec formulaire complet - Scripts JavaScript: - `editUser(id, name, email, roleKey, active)` - `deleteUser(id, name)` - Affichage des messages de succès/erreur via paramètres GET **Page liste incidents (`app/Views/incidents/index.php`):** - Alertes Bootstrap pour succès/erreur de suppression - Gestion des paramètres GET `?success=incident_deleted` et `?error=...` --- ## 🔒 Sécurité ### Vérifications implémentées 1. **Suppression d'incident:** - Authentification requise - Rôle admin ou agent requis - Vérification du statut "open" - Protection CSRF via méthode POST 2. **Modification d'utilisateur:** - Authentification requise - Rôle admin requis - Validation des données (email, nom, rôle) - Vérification d'unicité de l'email - Hash sécurisé du mot de passe (PASSWORD_DEFAULT) 3. **Suppression d'utilisateur:** - Authentification requise - Rôle admin requis - Protection contre l'auto-suppression - Vérification de l'existence de l'utilisateur --- ## 🧪 Tests recommandés ### À tester manuellement: **Suppression d'incident:** - [ ] Créer un incident (statut "open") - [ ] Vérifier que le bouton "Supprimer" apparaît - [ ] Confirmer la suppression - [ ] Vérifier le message de succès et redirection vers `/incidents` - [ ] Tenter de supprimer un incident avec statut != "open" (doit échouer) **Modification d'utilisateur:** - [ ] Cliquer sur "Modifier" pour un utilisateur - [ ] Modifier le nom, email, rôle - [ ] Enregistrer et vérifier le message de succès - [ ] Tenter de modifier l'email vers un email existant (doit échouer) - [ ] Changer le mot de passe et tester la connexion - [ ] Laisser le mot de passe vide et vérifier qu'il n'est pas modifié **Suppression d'utilisateur:** - [ ] Tenter de supprimer son propre compte (doit échouer) - [ ] Supprimer un autre utilisateur - [ ] Vérifier le message de succès - [ ] Vérifier que l'utilisateur n'apparaît plus dans la liste --- ## 📊 Impact sur la base de données ### Aucune migration requise Les fonctionnalités utilisent les tables existantes: - `incidents` (avec CASCADE DELETE sur relations) - `users` (modification/suppression directe) - `incident_statuses` (lecture seule, clé "open") ### Contraintes FK existantes utilisées ```sql -- Suppression automatique des dépendances lors de DELETE incident FOREIGN KEY (incident_id) REFERENCES incidents(id) ON DELETE CASCADE ``` Tables impactées: - `incident_assignments` - `incident_history` - `incident_comments` - `incident_comment_attachments` - `incident_reports` - `incident_final_reports` - etc. --- ## 🐛 Corrections de bugs Aucun bug corrigé dans cette itération (nouvelles fonctionnalités uniquement). --- ## ⚠️ Notes importantes 1. **Responsivité mobile:** - La plateforme n'est **PAS** responsive actuellement - Un fichier `MOBILE_RESPONSIVE_TODO.md` a été créé avec un plan détaillé - Implémentation recommandée en 4 phases (total ~10 jours) 2. **Suppression d'incidents:** - Seuls les incidents avec statut "open" peuvent être supprimés - Action irréversible avec confirmation JavaScript - Toutes les données liées sont supprimées (commentaires, PJ, historique) 3. **Gestion utilisateurs:** - Les admins ne peuvent pas supprimer leur propre compte (sécurité) - La modification du mot de passe est optionnelle - L'email doit rester unique dans la base --- ## 👥 Contributeurs - Assistant IA GitHub Copilot - Date: 10 novembre 2025 --- ## 🔜 Prochaines étapes suggérées 1. **Tests unitaires:** - Créer des tests pour les méthodes `delete()` des deux contrôleurs - Vérifier les cas limites (permissions, statuts, etc.) 2. **Amélioration UX:** - Ajouter des toasts au lieu de `alert()` JavaScript - Utiliser SweetAlert2 pour de meilleures modales de confirmation - Pagination sur la liste des utilisateurs si > 50 3. **Responsivité mobile:** - Suivre le plan dans `MOBILE_RESPONSIVE_TODO.md` - Commencer par les pages critiques (login, dashboard, liste incidents) 4. **Audit de sécurité:** - Vérifier toutes les routes pour les protections CSRF - Auditer les permissions sur toutes les actions sensibles - Implémenter un système de logs pour les actions admin (audit trail) --- **Version:** 1.0.0 **Date:** 10 novembre 2025 **Statut:** ✅ Production Ready