diff --git a/backend/locked.go b/backend/locked.go new file mode 100644 index 00000000..697754d8 --- /dev/null +++ b/backend/locked.go @@ -0,0 +1,30 @@ +package main + +import ( + "encoding/json" + "log" + "os" + + "srs.epita.fr/fic-server/libfic" +) + +var TeamLockedExercices = map[int64]map[string]bool{} + +func treatLocked(pathname string, team *fic.Team) { + fd, err := os.Open(pathname) + if err != nil { + log.Printf("[ERR] Unable to open %q: %s", pathname, err) + return + } + + var locked map[string]bool + + jdec := json.NewDecoder(fd) + if err := jdec.Decode(&locked); err != nil { + log.Printf("[ERR] Unable to parse JSON %q: %s", pathname, err) + return + } + + TeamLockedExercices[team.Id] = locked + log.Printf("Team %q (tid=%d) has locked %d exercices", team.Name, team.Id, len(locked)) +} diff --git a/frontend/ui/src/lib/components/ExerciceFlags.svelte b/frontend/ui/src/lib/components/ExerciceFlags.svelte index 6aae5cfa..5d306d3e 100644 --- a/frontend/ui/src/lib/components/ExerciceFlags.svelte +++ b/frontend/ui/src/lib/components/ExerciceFlags.svelte @@ -25,6 +25,7 @@ export let exercice = { }; export let flags = []; + export let readonly = false; function waitDiff(i) { my.refresh((my) => { @@ -224,7 +225,7 @@ type="submit" color="danger" id="submission-{exercice.id}" - disabled={submitInProgress || $settings.disablesubmitbutton} + disabled={submitInProgress || $settings.disablesubmitbutton || readonly} > {#if submitInProgress} @@ -233,6 +234,8 @@ {#if $settings.disablesubmitbutton} {$settings.disablesubmitbutton} + {:else if readonly} + Ce défi est désactivé {/if} diff --git a/frontend/ui/src/routes/[theme]/[exercice]/+page.svelte b/frontend/ui/src/routes/[theme]/[exercice]/+page.svelte index d2461c6d..c7663314 100644 --- a/frontend/ui/src/routes/[theme]/[exercice]/+page.svelte +++ b/frontend/ui/src/routes/[theme]/[exercice]/+page.svelte @@ -218,6 +218,7 @@ exercice={$my.exercices[$current_exercice.id]} bind:forcesolved={solved[$current_exercice.id]} flags={$my.exercices[$current_exercice.id].flags} + readonly={$current_exercice.disabled} /> {/if} {/if} diff --git a/libfic/team_my.go b/libfic/team_my.go index 507ca97a..42912df3 100644 --- a/libfic/team_my.go +++ b/libfic/team_my.go @@ -66,6 +66,7 @@ type myTeamMCQJustifiedChoice struct { } type myTeamExercice struct { ThemeId int64 `json:"theme_id"` + Disabled bool `json:"disabled,omitempty"` WIP bool `json:"wip,omitempty"` Statement string `json:"statement"` Overview string `json:"overview,omitempty"` @@ -123,6 +124,7 @@ func MyJSONTeam(t *Team, started bool) (interface{}, error) { for _, e := range exos { if t == nil || (!e.Disabled && t.HasAccess(e)) { exercice := myTeamExercice{} + exercice.Disabled = e.Disabled exercice.WIP = e.WIP exercice.ThemeId = e.IdTheme