Paillasse/portail/resources/views/quiz/session-prof.blade.php

68 lines
4.1 KiB
PHP
Raw Normal View History

@extends('layouts.vitrine')
@section('titre', $session->quiz->titre.' · en direct')
@php($etats = \App\Models\SessionQuiz::class)
@section('contenu')
<div class="mx-auto max-w-3xl px-5 py-14 lg:px-10">
<p class="font-mono text-sm font-semibold">{{ $session->quiz->classe->nom }}</p>
<h1 class="mt-1 text-4xl font-extrabold tracking-tight">{{ $session->quiz->titre }}</h1>
@if ($session->statut === $etats::TERMINEE)
<div class="mt-8 rounded-2xl border border-[#e3e5e8] bg-[#e6f4ea] p-8 text-center">
<p class="text-2xl font-extrabold">Quiz terminé.</p>
<a href="{{ route('mes-classes.quiz.show', [$session->quiz->classe, $session->quiz]) }}" class="mt-4 inline-flex h-11 items-center rounded-full bg-black px-5 font-bold text-white">Retour au quiz</a>
</div>
@elseif (! $session->questionCourante)
<div class="mt-8 rounded-2xl border border-[#e3e5e8] bg-white p-8 text-center">
<p class="text-xl font-semibold">Prêt à commencer ({{ $session->quiz->questions->count() }} question(s)).</p>
<form action="{{ route('sessions-quiz.suivante', $session) }}" method="post" class="mt-4">
@csrf
<button type="submit" class="inline-flex h-12 items-center rounded-full bg-black px-6 text-lg font-bold text-white">Commencer</button>
</form>
</div>
@else
@php($question = $session->questionCourante)
@php($numero = $session->quiz->questions->search(fn ($q) => $q->id === $question->id) + 1)
<div class="mt-8 rounded-2xl border border-[#e3e5e8] bg-white p-8">
<p class="font-mono text-sm font-semibold">Question {{ $numero }} / {{ $session->quiz->questions->count() }}</p>
<p class="mt-2 text-2xl font-extrabold">{{ $question->enonce }}</p>
@if ($question->type === \App\Models\QuestionQuiz::VRAI_FAUX)
<p class="mt-4 font-mono font-semibold">Bonne réponse : {{ $question->reponse_vrai_faux ? 'Vrai' : 'Faux' }}</p>
@else
<ul class="mt-4 grid gap-1 font-semibold">
@foreach ($question->choix as $choix)
<li class="{{ $choix->est_correct ? 'text-[#3C8A5A]' : '' }}">{{ $choix->est_correct ? '✓' : '·' }} {{ $choix->texte }}</li>
@endforeach
</ul>
@endif
<div class="mt-6 flex items-center gap-4 rounded-xl border border-[#dadce0] bg-[#f8f9fa] p-4">
<p class="font-mono text-lg font-bold"><span data-repondu>{{ $decompte['repondu'] }}</span> / {{ $total_eleves }} ont répondu</p>
<p class="font-mono text-lg font-bold text-[#3C8A5A]"><span data-correctes>{{ $decompte['correctes'] }}</span> correctes</p>
</div>
<form action="{{ route('sessions-quiz.suivante', $session) }}" method="post" class="mt-6">
@csrf
<button type="submit" class="inline-flex h-12 items-center rounded-full bg-black px-6 text-lg font-bold text-white">{{ $numero === $session->quiz->questions->count() ? 'Terminer' : 'Question suivante' }}</button>
</form>
</div>
@endif
</div>
<script nonce="{{ Vite::cspNonce() }}">
(function () {
var questionId = @json($session->question_quiz_courante_id);
setInterval(function () {
fetch('{{ route('sessions-quiz.etat', $session) }}', { headers: { 'Accept': 'application/json' } })
.then(function (r) { return r.json(); })
.then(function (e) {
if (e.question_id !== questionId || e.statut === 'terminee') { location.reload(); return; }
var r = document.querySelector('[data-repondu]'); if (r) r.textContent = e.decompte.repondu;
var c = document.querySelector('[data-correctes]'); if (c) c.textContent = e.decompte.correctes;
}).catch(function () {});
}, 2000);
})();
</script>
@endsection