sépare la vitrine de l'application : vraie coquille, barre par rôle, chat
Une fois connecté, plus aucun lien vitrine : nouvelle layouts/app (barre
du haut avec menu avatar, barre latérale par rôle, bulle de chat
Messenger, barre d'onglets mobile). Les 10 entrées de navigation
demandées sont construites en vrai plutôt qu'en renvoi "bientôt
disponible" : Ma classe, Emploi du temps, Mes devoirs, Mes cours, Mes
notes côté élève ; Mes classes, Emploi du temps, Séances en direct,
Bibliothèque, Résultats (avec Observations, la dernière fonction
fictive du tableau de bord démo) côté prof.
Chat élève <-> prof de sa classe, jamais entre élèves. Mon profil,
Paramètres (thème, taille du texte), Signaler un problème, Mes
raccourcis. /eleve vidée des faux contenus ("À faire", "Ma progression",
"Mes QCM") restés avant le chantier "vrai cockpit".
Bug trouvé en testant en réel sur le serveur (pas en local) : le
compteur de messages non lus du chat ne redescendait jamais à zéro
(FilConversation sans lu_par_prof_a/lu_par_eleve_a dans son fillable) —
corrigé avec un test de non-régression.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
a41951d4e6
commit
592cba9c4c
89 changed files with 2890 additions and 138 deletions
|
|
@ -977,3 +977,32 @@ Le choix qui évite le plus de dette ici : ne pas réutiliser le mécanisme « p
|
|||
**Suite**
|
||||
|
||||
Reprendre le chantier « vrai cockpit » : Observations.
|
||||
|
||||
## 2026-10-13/14 — Séparer la vitrine de l'application
|
||||
|
||||
Demande d'Adam : une fois connecté (élève ou prof), on gardait le header vitrine (Fonctionnalités, Cours, Tarifs) — ça n'a pas de sens, comme sur Facebook il faut basculer dans une vraie interface d'application. Avant de coder, j'ai montré la liste des 10 entrées de navigation demandées (5 élève, 5 prof) : la plupart n'avaient pas de page réelle derrière (seulement `/mes-classes` et la banque de quiz existaient). Adam a choisi de construire une vraie version minimale de chaque page manquante plutôt qu'un simple renvoi « bientôt disponible ».
|
||||
|
||||
**Fait**
|
||||
|
||||
- `layouts/app` : barre du haut (logo, menu avatar — Mon profil, Paramètres, Aide, Signaler un problème, Se déconnecter), barre latérale (5 entrées par rôle + Mes raccourcis), zone centrale, bulle de chat Messenger. Mobile : barre d'onglets en bas (4 + Plus), chat plein écran. Thème clair/sombre et taille du texte réglables, appliqués via des attributs `data-theme`/`data-taille` sur `<html>`.
|
||||
- Nouvelles pages réelles, aucune donnée inventée :
|
||||
- Élève : **Ma classe** (annonces du prof, camarades en prénom + initiale, qui est en ligne dans les 3 dernières minutes, lien ENT si connu) ; **Emploi du temps** (séances + échéances de devoirs réunies, pas d'examens tant qu'aucun modèle n'existe) ; **Mes devoirs** (devoirs maison, TP disponibles via une séance ouverte, quiz en cours — avec badge) ; **Mes cours** (uniquement les cours.md réels des labs déjà pratiqués par la classe — un seul existe aujourd'hui) ; **Mes notes** (devoirs notés et corrections de labs, groupées par compétence du lab.yaml, jamais lue jusqu'ici).
|
||||
- Prof : **Emploi du temps** et **Séances en direct** (vue transverse à toutes les classes, plus besoin d'ouvrir chaque classe) ; **Bibliothèque** (labs + banque de quiz réels, distincte de la vitrine `/bibliotheque`) ; **Résultats** (corrections et nouvelles **Observations** — notes rapides sur un élève pour le conseil de classe, dernière fonction fictive du tableau de bord démo, jamais montrées à l'élève). Annonces et Observations se gèrent depuis le cockpit de la classe (`/mes-classes/{classe}`).
|
||||
- Chat Messenger élève ↔ prof de sa classe, jamais entre élèves (structurellement impossible : aucune route élève-élève n'existe) ; le prof peut couper le chat de sa classe ; historique conservé, purgé avec la classe (RGPD).
|
||||
- Mon profil, Paramètres, Signaler un problème (stocké, relu par Adam), Mes raccourcis (pages épinglées).
|
||||
- `/eleve` vidée des faux contenus (« À faire », « Ma progression », « Mes QCM » — des données inventées qui restaient depuis avant le chantier « vrai cockpit ») : ne reste que le quiz flash réel et des liens vers les 5 nouvelles pages.
|
||||
- Nouvelles tables : `annonces`, `observations`, `raccourcis`, `signalements`, `fils_conversation`, `messages_chat`, `cours` ; colonnes ajoutées à `users`/`eleves` (préférences, dernière activité), `labs` (compétences, enfin lues du lab.yaml), `classes` (chat_actif), `etablissements` (url_ent).
|
||||
- `cours:synchroniser` (même esprit que `labs:synchroniser` et `quiz:synchroniser-banque`) : lit les `cours.md` de `paillasse-contenus/`.
|
||||
- 9 nouveaux tests Pest (93 au total) : étanchéité des barres par rôle, impossibilité pour un élève d'atteindre les routes de chat du prof, deux élèves de classes différentes ne partagent jamais de fil, JavaScript valide des nouvelles pages, toutes les nouvelles pages se chargent sans erreur.
|
||||
|
||||
**Bug trouvé et corrigé en vérifiant en réel** (pas en local) : le compteur de messages non lus du chat ne redescendait jamais à zéro — `FilConversation` n'avait pas `lu_par_prof_a`/`lu_par_eleve_a` dans son `$fillable`, donc `update()` les ignorait silencieusement, sans erreur. Trouvé en testant un vrai aller-retour élève ↔ prof sur le serveur, pas par les tests locaux (qui ne vérifiaient pas la valeur du compteur). Corrigé, et le test de non-régression ajouté aurait aussi révélé un second problème plus subtil : marquer « lu » au moment d'envoyer son propre message n'a pas de sens (le filtre par expéditeur l'exclut déjà) et créait un risque d'égalité de seconde avec un message suivant — retiré des deux côtés.
|
||||
|
||||
**Vérifié sur le serveur réel** (un prof et un élève jetables, classe supprimée ensuite) : navigation cloisonnée par rôle (l'élève ne voit jamais les entrées prof et réciproquement), vitrine toujours accessible et intacte sans connexion, chat élève → prof → élève avec compteurs corrects après le correctif, coupure du chat par le prof effective immédiatement, annonce publiée visible dans Ma classe, observation ajoutée visible dans Résultats. La banque officielle et le quiz réel d'Adam n'ont pas bougé.
|
||||
|
||||
**Comprendre**
|
||||
|
||||
La leçon technique : les données injectées par un `View::composer` sur un layout ne sont visibles que dans le corps du layout lui-même (barre latérale, barre du haut) — pas dans le contenu de la page qui l'étend (`@section('contenu')`), parce que ce contenu est déjà rendu, en chaîne de caractères, avant que le composeur du layout ne s'exécute. Deux pages (`eleve.blade.php`, `aide-app.blade.php`) utilisaient à tort une variable du composeur dans leur propre contenu ; passées explicitement par leur contrôleur à la place.
|
||||
|
||||
**Suite**
|
||||
|
||||
Reprendre le chantier « vrai cockpit » : Observations étant maintenant construites, il ne reste que Surveillance d'examen — à cadrer avec Adam avant de coder (RGPD, mineurs).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue