name('accueil'); Route::view('/labs', 'labs.index')->name('labs.index'); Route::view('/labs/essai', 'labs.essai')->name('labs.essai'); Route::view('/cours', 'cours.index')->name('cours.index'); Route::view('/cours/adressage-ipv4', 'cours.show')->name('cours.show'); Route::view('/etablissements', 'etablissements')->name('etablissements'); Route::view('/tarifs', 'tarifs')->name('tarifs'); Route::view('/connexion', 'auth.connexion')->name('login'); Route::view('/inscription', 'auth.inscription')->name('register'); // Démo marketing (données fictives) : la vraie gestion de classe est sous /mes-classes. Route::view('/classes/suivi', 'classes.suivi')->name('suivi'); Route::view('/examen', 'examen')->name('examen'); // À brancher sur l'envoi d'e-mail (Mail::to('adam@belkacemi.me')->send(...)). // Envoyé par les navigateurs eux-mêmes (pas de jeton CSRF possible). Route::post('/csp-rapport', RapportCspController::class) ->withoutMiddleware(ValidateCsrfToken::class) ->middleware('throttle:30,1') ->name('csp.rapport'); Route::post('/contact', fn () => back()->with('contact_ok', true))->name('contact'); Route::view('/fonctionnalites', 'fonctionnalites')->name('fonctionnalites'); Route::view('/legal', 'legal')->name('legal'); Route::view('/cours/adressage-ipv4/cm', 'cours.cm')->name('cours.cm'); Route::view('/banque', 'banque')->name('banque'); Route::view('/quiz/projection', 'quiz.projection')->name('quiz.projection'); Route::view('/quiz', 'quiz.eleve')->name('quiz.eleve'); Route::view('/ide', 'ide')->name('ide'); Route::view('/bibliotheque', 'bibliotheque')->name('bibliotheque'); Route::view('/generateur', 'generateur')->name('generateur'); Route::view('/labs/web', 'labs.web')->name('labs.web'); Route::view('/maison', 'maison')->name('maison'); Route::view('/devoirs', 'devoirs')->name('devoirs'); Route::view('/td/imprimer', 'td.imprimable')->name('td.imprimable'); Route::view('/cockpit', 'cockpit')->name('cockpit'); // Démo marketing (données fictives), distincte de /eleve (vrai tableau de bord). Route::view('/mon-espace', 'espace-eleve')->name('espace.eleve'); Route::view('/vie-scolaire', 'vie-scolaire')->name('vie.scolaire'); Route::view('/eleves/fiche', 'fiche-eleve')->name('fiche.eleve'); Route::view('/correction', 'correction')->name('correction'); Route::view('/sujets/creer', 'sujet-creer')->name('sujet.creer'); Route::view('/messagerie', 'messagerie')->name('messagerie'); Route::view('/exports', 'export-ent')->name('export.ent'); Route::view('/aide', 'aide')->name('aide'); Route::view('/academie', 'academie')->name('academie'); Route::view('/paiement', 'paiement')->name('paiement'); Route::view('/paiement/confirme', 'paiement-ok')->name('paiement.ok'); Route::view('/compte/facturation', 'facturation')->name('facturation'); Route::view('/cours/fiche', 'cours.fiche')->name('cours.fiche'); Route::view('/etablissement', 'espace-etablissement')->name('espace.etablissement'); Route::view('/integration', 'integration')->name('integration'); Route::view('/cohortes', 'cohortes')->name('cohortes'); Route::view('/ressources/outil', 'ressource')->name('ressource'); Route::view('/visio', 'visio')->name('visio'); // --- Authentification (étape 8) --- Route::post('/connexion/prof', [ConnexionController::class, 'connexionProf'])->name('connexion.prof'); Route::post('/connexion/eleve', [ConnexionController::class, 'connexionEleve'])->name('connexion.eleve'); Route::get('/connexion/qr/{jeton}', [ConnexionController::class, 'connexionParQr'])->name('connexion.qr'); Route::post('/inscription', [InscriptionController::class, 'store'])->name('inscription.store'); Route::post('/deconnexion', [ConnexionController::class, 'deconnexion'])->name('deconnexion'); // --- Espace élève (protégé, session unique) --- Route::middleware(['auth:eleve', 'session.unique:eleve'])->group(function () { Route::get('/eleve', [EleveTableauDeBordController::class, 'show'])->name('eleve'); Route::post('/seances/{seance}/rejoindre', [SeanceController::class, 'rejoindre'])->name('seances.rejoindre'); Route::get('/seances/{seance}/attente-eleve', [SeanceController::class, 'attenteEleve'])->name('seances.eleve.attente'); Route::get('/seances/{seance}/etat-eleve', [SeanceController::class, 'etatEleve'])->name('seances.eleve.etat'); Route::post('/lab-sessions/{labSession}/corriger', [CorrectionController::class, 'corriger']) ->middleware('throttle:6,1') ->name('lab-sessions.corriger'); Route::post('/lab-sessions/{labSession}/machines/{labSessionMachine}/console', [ConsoleController::class, 'pourEleve'])->name('console.eleve'); }); // --- Espace prof (protégé, session unique) --- Route::middleware(['auth:web', 'session.unique:web'])->group(function () { Route::get('/mes-classes', [ClasseController::class, 'index'])->name('mes-classes.index'); Route::get('/mes-classes/{classe}', [ClasseController::class, 'show'])->name('mes-classes.show'); Route::post('/mes-classes/{classe}/eleves', [ClasseController::class, 'storeEleve'])->name('mes-classes.eleves.store'); Route::post('/mes-classes/{classe}/eleves/import', [ClasseController::class, 'importerCsv'])->name('mes-classes.eleves.importer'); Route::post('/mes-classes/{classe}/eleves/{eleve}/regenerer-code', [ClasseController::class, 'regenererCode'])->name('mes-classes.eleves.regenererCode'); Route::post('/mes-classes/{classe}/seances', [SeanceController::class, 'store'])->name('mes-classes.seances.store'); Route::get('/seances/{seance}/attente', [SeanceController::class, 'attente'])->name('seances.attente'); Route::post('/seances/{seance}/ouvrir', [SeanceController::class, 'ouvrir'])->name('seances.ouvrir'); Route::post('/seances/{seance}/admettre/{labSession}', [SeanceController::class, 'admettre'])->name('seances.admettre'); Route::get('/seances/{seance}/labsessions/{labSession}/console', [SeanceController::class, 'consoleProf'])->name('seances.console.prof.page'); Route::post('/seances/{seance}/labsessions/{labSession}/machines/{labSessionMachine}/console', [ConsoleController::class, 'pourProf'])->name('console.prof'); });