Dépôt de fichier en plus du texte libre pour les devoirs maison, stocké sur Hetzner Object Storage (jamais sur le disque du serveur), masqué côté élève tant que le bucket n'est pas configuré. Purge RGPD étendue pour supprimer aussi les fichiers d'Object Storage. Ansible lit les identifiants depuis un fichier que seul Adam peut créer sur le serveur (runbook docs/runbooks/stockage-s3.md) ; le bloc B du CLAUDE.md est maintenant complet. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
53 lines
3.5 KiB
PHP
53 lines
3.5 KiB
PHP
@extends('layouts.app')
|
|
|
|
@section('titre', $devoir->titre)
|
|
|
|
@section('contenu')
|
|
<div class="mx-auto max-w-3xl px-5 py-14 lg:px-10">
|
|
<p class="font-mono text-sm font-semibold"><a href="{{ route('eleve') }}" class="underline underline-offset-4">Mon espace</a></p>
|
|
<h1 class="mt-1 text-4xl font-extrabold tracking-tight">{{ $devoir->titre }}</h1>
|
|
<p class="mt-2 font-mono text-sm font-semibold {{ $devoir->echeanceDepassee() ? 'text-[#A63D2A]' : '' }}">{{ $devoir->echeanceDepassee() ? 'Échéance dépassée le' : 'À rendre avant le' }} {{ $devoir->echeance->timezone(config('app.fuseau_utilisateurs'))->translatedFormat('d/m/Y H:i') }}</p>
|
|
<p class="mt-4 whitespace-pre-wrap rounded-2xl border border-[#e3e5e8] bg-white p-5 font-semibold">{{ $devoir->consigne }}</p>
|
|
|
|
@if (session('rendu_envoye'))
|
|
<p class="mt-4 rounded-2xl border border-[#e3e5e8] bg-[#e6f4ea] p-4 font-semibold">Rendu envoyé.</p>
|
|
@endif
|
|
|
|
@if ($rendu && $rendu->note !== null)
|
|
<p class="mt-6 font-mono text-2xl font-extrabold">Note : {{ $rendu->note }}/20</p>
|
|
@endif
|
|
|
|
@if ($devoir->echeanceDepassee() && ! $rendu)
|
|
<p class="mt-6 rounded-2xl border border-[#A63D2A] bg-[#fce8e6] p-5 font-bold text-[#A63D2A]">Échéance dépassée : tu n'as pas rendu ce devoir.</p>
|
|
@else
|
|
<section class="mt-6 rounded-2xl border border-[#e3e5e8] bg-white p-6" aria-labelledby="t-rendre">
|
|
<h2 id="t-rendre" class="text-xl font-extrabold">{{ $rendu ? 'Modifier mon rendu' : 'Rendre ce devoir' }}</h2>
|
|
@if ($rendu)
|
|
<p class="mt-2 font-semibold text-[#5f6368]">Rendu le {{ $rendu->rendu_a->timezone(config('app.fuseau_utilisateurs'))->translatedFormat('d/m/Y H:i') }}. Un nouvel envoi remplace celui-ci{{ $devoir->echeanceDepassee() ? '' : ', jusqu\'à l\'échéance' }}.</p>
|
|
@endif
|
|
@error('reponse')<p class="mt-2 font-bold text-[#A63D2A]">{{ $message }}</p>@enderror
|
|
@error('fichier')<p class="mt-2 font-bold text-[#A63D2A]">{{ $message }}</p>@enderror
|
|
@if ($rendu && $rendu->aUnFichier())
|
|
<p class="mt-2 font-semibold text-[#5f6368]">Fichier déjà envoyé : {{ $rendu->fichier_nom_original }}</p>
|
|
@endif
|
|
@if (! $devoir->echeanceDepassee())
|
|
<form action="{{ route('devoirs.eleve.rendre', $devoir) }}" method="post" enctype="multipart/form-data" class="mt-4 grid gap-3">
|
|
@csrf
|
|
<textarea name="reponse" rows="8" class="rounded-xl border border-[#c4c7c5] bg-white px-3 py-2 font-semibold" placeholder="Ta réponse (facultatif si tu joins un fichier)">{{ old('reponse', $rendu->reponse ?? '') }}</textarea>
|
|
@if ($depotFichierDisponible)
|
|
<label class="font-bold">
|
|
Joindre un fichier (facultatif)
|
|
<input type="file" name="fichier" class="mt-1 block font-semibold">
|
|
</label>
|
|
@endif
|
|
<button type="submit" class="mt-2 inline-flex h-11 w-fit items-center rounded-full bg-black px-5 font-bold text-white">Envoyer</button>
|
|
</form>
|
|
@elseif ($rendu)
|
|
@if ($rendu->reponse)
|
|
<p class="mt-4 whitespace-pre-wrap font-semibold">{{ $rendu->reponse }}</p>
|
|
@endif
|
|
@endif
|
|
</section>
|
|
@endif
|
|
</div>
|
|
@endsection
|