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