2022-07-08 09:53:50 +00:00
< script context = "module" >
import { getWork } from '../../../lib/works';
export async function load({ params , stuff } ) {
return {
props: {
work: stuff.work,
},
};
}
< / script >
< script lang = "ts" >
import { goto } from '$app/navigation';
import { user } from '../../../stores/user';
2022-09-04 19:43:53 +00:00
import DateFormat from '../../../components/DateFormat.svelte';
import SubmissionStatus from '../../../components/SubmissionStatus.svelte';
2022-07-08 09:53:50 +00:00
import SurveyBadge from '../../../components/SurveyBadge.svelte';
import WorkAdmin from '../../../components/WorkAdmin.svelte';
2022-09-04 19:43:53 +00:00
import WorkRepository from '../../../components/WorkRepository.svelte';
2022-07-08 11:14:17 +00:00
import { getScore } from '../../../lib/users';
2022-07-08 09:53:50 +00:00
export let work = null;
2022-09-04 19:43:53 +00:00
let edit = false;
2022-09-05 08:12:39 +00:00
let my_submission = null;
work.then((w) => {
refresh_submission(w);
})
function refresh_submission(w) {
my_submission = w.getSubmission();
}
2022-07-08 09:53:50 +00:00
< / script >
{ #await work then w }
2022-09-04 19:43:53 +00:00
{ #if $user && $user . is_admin }
< button class = "btn btn-primary ms-1 float-end" on:click = {() => { edit = ! edit ; } } title="Éditer" >< i class = "bi bi-pencil" ></ i ></ button >
{ /if }
2022-07-08 09:53:50 +00:00
< div class = "d-flex align-items-center" >
< h2 >
< a href = "works/" class = "text-muted" style = "text-decoration: none" > < < / a >
{ w . title }
< / h2 >
2022-09-04 19:43:53 +00:00
< SurveyBadge class = "ms-2" survey = { w } / >
2022-07-08 09:53:50 +00:00
< / div >
2022-09-04 19:43:53 +00:00
{ #if $user && $user . is_admin && edit }
2022-07-08 09:53:50 +00:00
< WorkAdmin work = { w } on:saved= {() => edit = false } />
2022-07-08 11:14:17 +00:00
2022-09-04 19:43:53 +00:00
{ #if w . description }
< hr >
{ @html w . description }
{ /if }
2022-07-08 11:14:17 +00:00
< hr >
< h3 class = "mt-3" > Notes< / h3 >
< div class = "card mt-3 mb-5" >
{ #await w . getGrades ()}
< div class = "text-center" >
< div class = "spinner-border text-primary mx-3" role = "status" > < / div >
< span > Chargement des notes … < / span >
< / div >
{ :then grades }
< table class = "table table-hover table-striped mb-0" >
< thead >
< tr >
< th > Login< / th >
< th > Note< / th >
< th > Commentaire< / th >
< th > Date de la note< / th >
< / tr >
< / thead >
< tbody >
{ #if ! grades }
< div class = "text-center" >
Aucune note n'a encore été envoyée pour ce travail.
< / div >
{ : else }
{ #each grades as grade , gid ( grade . id )}
< tr >
< td >
< a href = "users/ { grade . id_user } " > { grade . login } </ a >
< / td >
< td > { grade . score } </ td >
< td > { #if grade . comment }{ grade . comment }{ : else } -{ /if } </ td >
< td > { grade . date } </ td >
< / tr >
{ /each }
{ /if }
< / tbody >
< / table >
{ /await }
< / div >
2022-09-04 19:43:53 +00:00
{ :else if new Date ( w . start_availability ) > new Date ()}
< div class = "alert alert-warning" >
< i class = "bi bi-stopwatch-fill" > < / i >
< strong > Ce travail n'est pas encore ouvert.< / strong > Revenez plus tard !
< / div >
2022-07-08 11:14:17 +00:00
{ : else }
2022-09-04 19:43:53 +00:00
< dl style = "columns: 3" >
< dt > Date de début< / dt >
< dd >< DateFormat date = { new Date ( w . start_availability )} dateStyle="medium" timeStyle = "medium" /></ dd >
< dt > Date de fin< / dt >
< dd >< DateFormat date = { new Date ( w . end_availability )} dateStyle="medium" timeStyle = "medium" /></ dd >
2022-09-05 08:12:39 +00:00
< dt > Rendu ?< / dt >
< dd >
{ #if w . submission_url }
< SubmissionStatus work = { w } / >
{ : else }
{ #await my_submission }
< div class = "spinner-grow spinner-grow-sm mx-1" role = "status" > < / div >
{ :then submission }
< i
class="bi bi-check-circle text-success"
title="Oui !"
>< / i >
< DateFormat date = { new Date ( submission . date )} dateStyle="medium" timeStyle = "medium" />
{ :catch }
< i
class="bi bi-x-circle text-danger"
title="Pas de rendu trouvé"
>< / i >
Non
{ /await }
{ /if }
< / dd >
2022-09-04 19:43:53 +00:00
< / dl >
2022-09-04 22:09:34 +00:00
{ #if w . description }
2022-09-04 19:43:53 +00:00
< hr >
{ @html w . description }
2022-09-04 22:09:34 +00:00
{ /if }
2022-09-04 19:43:53 +00:00
< hr >
< h3 class = "mt-3" > Rendu< / h3 >
{ #if ! w . corrected }
< p >
Pour rendre votre travail, vous devez préalablement créer un dépôt Git sur la < a href = "https://gitlab.cri.epita.fr/" target = "_blank" > forge de l'école< / a > .< br > Ce dépôt DOIT :
< / p >
< ul >
< li > être dans l'espace de nom de votre utilisateur (à la fin de la liste des < span class = "fst-italic" > namespaces< / span > ),< / li >
< li > avoir la visibilité « Privé »,< / li >
2022-09-04 19:44:20 +00:00
< li > avoir invité < a href = "https://gitlab.cri.epita.fr/nemunaire" target = "_blank" style = "font-family: monospace" > nemunaire< / a > avec le rôle < span class = "fst-italic" > Reporter< / span > une fois le dépôt créé,< / li >
2022-09-04 19:43:53 +00:00
< li > configuré un < span class = "fst-italic" > webhook< / span > pointant sur < code > https://lessons.nemunai.re/callback/trigger.json< / code > < / li >
< / ul >
{ #if w . tag }
< div class = "alert alert-info" >
< i class = "bi bi-lightbulb-fill text-info me-1" > < / i >
Vous pouvez utiliser un dépôt pour tous les travaux à effectuer, ou créer un dépôt par travail.
< / div >
{ /if }
{ /if }
2022-09-05 08:12:39 +00:00
< WorkRepository class = "mb-3" readonly = { w . corrected || new Date ( w . end_availability ) <= new Date ()} work= { w } on:update_submission = {() => refresh_submission ( w )} / >
2022-09-05 02:40:49 +00:00
< div class = "card mb-3" >
< div class = "card-body d-flex justify-content-between" >
< div >
{ #if w . submission_url }
< strong > État du rendu :</ strong > < SubmissionStatus work = { w } / >
{ : else }
Rendu :
2022-09-05 08:12:39 +00:00
{ #await my_submission }
2022-09-05 02:40:49 +00:00
< div class = "spinner-grow spinner-grow-sm mx-1" role = "status" > < / div >
{ :then submission }
< strong > { submission . commit } ({ submission . tag } )</ strong > (taille : { submission . size } o, date : < DateFormat date = { new Date ( submission . date )} dateStyle="medium" timeStyle = "medium" /> )
{ :catch }
< strong > -< / strong >
{ /await }
{ /if }
< / div >
< div class = "d-flex flex-column justify-content-center" >
2022-09-05 08:12:39 +00:00
{ #await my_submission then submission }
< a
href="/api/works/{ w . id } /download"
class="btn btn-sm btn-dark"
title="Voir la tarball de mon rendu"
>
< i class = "bi bi-download" > < / i >
< / a >
{ :catch }
< i
class="bi bi-x-circle text-danger"
title="Pas de rendu trouvé"
>< / i >
{ /await }
2022-09-05 02:40:49 +00:00
< / div >
< / div >
< / div >
2022-09-04 19:43:53 +00:00
{ #if w . corrected }
{ #await getScore ( w )}
< div class = "spinner-border spinner-border-sm" role = "status" > < / div >
{ :then grade }
< div class = "alert alert-info" >
2022-09-04 22:54:22 +00:00
< i class = "bi bi-clipboard2-check-fill text-info me-1" > < / i >
2022-09-04 19:43:53 +00:00
< strong > Note finale :</ strong > < span title = "Établie le { grade . date } " > { grade . score } </ span > { #if grade . comment } – { grade . comment }{ /if }
< / div >
{ :catch error }
< div class = "alert alert-danger" >
< i class = "bi text-warning bi-exclamation-triangle-fill" title = { error } > </i >
< strong > { error . message } </ strong >
< / div >
{ /await }
{ : else }
2022-09-05 02:40:49 +00:00
< div class = "alert alert-warning" >
Pour être reconnu, vous devez pousser un tag < strong >< a href = "keys" > signé</ a ></ strong > sur votre dépôt. { #if w . tag } Le tag attendu doit commencer par : < code > { w . tag } </ code > . Par exemple < code > { w . tag } v1.0</ code > , < code > { w . tag } v1.1</ code > , … { /if } Seul le dernier tag < strong > alphabétique</ strong > que vous envoyez avant la date du rendu sera pris en compte. Vous pouvez donc faire autant de tag que vous le souhaitez d'ici la date du rendu.
< / div >
2022-09-04 19:43:53 +00:00
{ /if }
2022-07-08 09:53:50 +00:00
{ /if }
{ /await }
2022-09-04 19:43:53 +00:00
< div class = "mb-5" > < / div >