verifierProprietaire($classe); abort_if($quiz->classe_id !== $classe->id, 404); abort_if($quiz->questions()->count() === 0, 422, 'Ce quiz n’a encore aucune question.'); $session = $quiz->sessions()->create(['statut' => SessionQuiz::EN_ATTENTE, 'demarree_a' => now()]); return redirect()->route('sessions-quiz.show', $session); } public function show(SessionQuiz $session): View { $this->verifierProprietaireSession($session); return view('quiz.session-prof', [ 'session' => $session->load(['quiz.questions.choix', 'questionCourante.choix']), 'decompte' => $session->decompteQuestionCourante(), 'total_eleves' => $session->quiz->classe->eleves()->count(), ]); } public function etat(SessionQuiz $session): JsonResponse { $this->verifierProprietaireSession($session); return response()->json([ 'statut' => $session->statut, 'question_id' => $session->question_quiz_courante_id, 'decompte' => $session->decompteQuestionCourante(), ]); } public function suivante(SessionQuiz $session): RedirectResponse { $this->verifierProprietaireSession($session); $session->passerALaQuestionSuivante(); return redirect()->route('sessions-quiz.show', $session); } public function terminer(SessionQuiz $session): RedirectResponse { $this->verifierProprietaireSession($session); $session->terminer(); return redirect()->route('mes-classes.quiz.show', [$session->quiz->classe, $session->quiz]); } private function verifierProprietaireSession(SessionQuiz $session): void { abort_if($session->quiz->classe->user_id !== Auth::guard('web')->id(), 403); } private function verifierProprietaire(Classe $classe): void { abort_if($classe->user_id !== Auth::guard('web')->id(), 403); } }