ajoute le portail Laravel : connexion prof/élève, session unique, gestion de classe, salle d'attente
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
aa31b6112f
commit
30e14b1c54
191 changed files with 25324 additions and 0 deletions
85
portail/app/Http/Controllers/SeanceController.php
Normal file
85
portail/app/Http/Controllers/SeanceController.php
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Classe;
|
||||
use App\Models\LabSession;
|
||||
use App\Models\Seance;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class SeanceController extends Controller
|
||||
{
|
||||
public function store(Request $request, Classe $classe): RedirectResponse
|
||||
{
|
||||
abort_if($classe->user_id !== Auth::guard('web')->id(), 403);
|
||||
|
||||
$donnees = $request->validate([
|
||||
'lab_id' => ['required', 'exists:labs,id'],
|
||||
]);
|
||||
|
||||
$seance = $classe->seances()->create([
|
||||
'lab_id' => $donnees['lab_id'],
|
||||
'statut' => Seance::SALLE_ATTENTE,
|
||||
'demarree_a' => now(),
|
||||
]);
|
||||
|
||||
return redirect()->route('seances.attente', $seance);
|
||||
}
|
||||
|
||||
public function attente(Seance $seance): View
|
||||
{
|
||||
abort_if($seance->classe->user_id !== Auth::guard('web')->id(), 403);
|
||||
|
||||
return view('seances.attente', [
|
||||
'seance' => $seance->load(['classe', 'lab', 'labSessions.eleve']),
|
||||
]);
|
||||
}
|
||||
|
||||
public function admettre(Seance $seance, LabSession $labSession): RedirectResponse
|
||||
{
|
||||
abort_if($seance->classe->user_id !== Auth::guard('web')->id(), 403);
|
||||
abort_if($labSession->seance_id !== $seance->id, 404);
|
||||
|
||||
$labSession->update(['etat' => LabSession::ADMIS]);
|
||||
|
||||
return redirect()->route('seances.attente', $seance);
|
||||
}
|
||||
|
||||
/**
|
||||
* Un élève rejoint la séance : il patiente jusqu'à ce que le prof l'admette.
|
||||
*/
|
||||
public function rejoindre(Request $request, Seance $seance): RedirectResponse
|
||||
{
|
||||
$eleve = Auth::guard('eleve')->user();
|
||||
abort_if($eleve->classe_id !== $seance->classe_id, 403);
|
||||
|
||||
LabSession::firstOrCreate(
|
||||
['seance_id' => $seance->id, 'eleve_id' => $eleve->id],
|
||||
['lab_id' => $seance->lab_id, 'etat' => LabSession::EN_ATTENTE],
|
||||
);
|
||||
|
||||
return redirect()->route('seances.eleve.attente', $seance);
|
||||
}
|
||||
|
||||
public function attenteEleve(Seance $seance): View|RedirectResponse
|
||||
{
|
||||
$eleve = Auth::guard('eleve')->user();
|
||||
abort_if($eleve->classe_id !== $seance->classe_id, 403);
|
||||
|
||||
$labSession = LabSession::where('seance_id', $seance->id)
|
||||
->where('eleve_id', $eleve->id)
|
||||
->first();
|
||||
|
||||
if ($labSession === null) {
|
||||
return redirect()->route('eleve');
|
||||
}
|
||||
|
||||
return view('seances.attente-eleve', [
|
||||
'seance' => $seance->load('lab'),
|
||||
'labSession' => $labSession,
|
||||
]);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue