Paillasse/portail/app/Http/Controllers/EmploiDuTempsController.php

76 lines
2.5 KiB
PHP
Raw Permalink Normal View History

<?php
namespace App\Http\Controllers;
use App\Models\Devoir;
use App\Models\Seance;
use Carbon\Carbon;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Auth;
use Illuminate\View\View;
/**
* Emploi du temps (séparation vitrine/application, 2026-10-13) : séances
* et échéances de devoirs, réunies et triées par date. Pas d'examens ici
* tant qu'aucun modèle d'examen n'existe (CLAUDE.md : pas de ligne vide ni
* de donnée inventée).
*/
class EmploiDuTempsController extends Controller
{
public function show(): View
{
if ($prof = Auth::guard('web')->user()) {
$classeIds = $prof->classes()->whereNull('archivee_a')->pluck('id');
$seances = Seance::whereIn('classe_id', $classeIds)
->whereIn('statut', [Seance::PLANIFIEE, Seance::SALLE_ATTENTE, Seance::EN_COURS])
->whereNotNull('prevue_a')
->with(['classe', 'lab'])
->get();
$devoirs = Devoir::whereIn('classe_id', $classeIds)
->where('echeance', '>=', now())
->with('classe')
->get();
} else {
$eleve = Auth::guard('eleve')->user();
$seances = $eleve->classe->seances()
->whereIn('statut', [Seance::PLANIFIEE, Seance::SALLE_ATTENTE, Seance::EN_COURS])
->whereNotNull('prevue_a')
->with(['lab', 'classe'])
->get();
$devoirs = $eleve->classe->devoirs()->where('echeance', '>=', now())->get();
}
$evenements = $this->fusionner($seances, $devoirs);
return view('emploi-du-temps', ['evenements' => $evenements]);
}
/**
* @param Collection<int, Seance> $seances
* @param Collection<int, Devoir> $devoirs
* @return Collection<int, array{date: ?Carbon, type: string, titre: string, classe: string}>
*/
private function fusionner(Collection $seances, Collection $devoirs): Collection
{
$depuisSeances = $seances->map(fn (Seance $s) => [
'date' => $s->prevue_a,
'type' => 'seance',
'titre' => $s->lab->titre,
'classe' => $s->classe->nom,
]);
$depuisDevoirs = $devoirs->map(fn (Devoir $d) => [
'date' => $d->echeance,
'type' => 'devoir',
'titre' => $d->titre,
'classe' => $d->classe->nom,
]);
return $depuisSeances->concat($depuisDevoirs)->sortBy('date')->values();
}
}