Gå til indholdet

Funktioner — oprettelsesflow, planlagte grupper, slideshow, aktivitetslog

Samlet oprettelses- og redigeringsflow (ADR-001)

Oprettelse sker via ÉN indgang ("Opret forløb og grupper" — samme sted grupper blev oprettet før) med trinnene: hold → fag → emne → forløb (søgbar dropdown eller opret nyt inline) → opgavebeskrivelse (unik/delt-toggle) → filer (samme toggle) → start-/slutdato (startdatoen styrer elevsynlighed) → gruppefordeling. Fordelingen kan ske med drag-drop eller den sekventielle "vælg én ad gangen"-picker (med spring-over og automatisk skift til næste gruppe). Når "unik" er valgt, angives gruppe-specifik opgavetekst/filer pr. gruppe i sidste trin. Ét klik opretter forløb, grupper, emnet og uploader filerne.

Redigering af et emne (/assignments/:id/edit) samler alt fra oprettelsen: emne, forløb, unik/delt, fælles + pr.-gruppe-tekst, delte og gruppe-specifikke filer, frist og startdato. Checkboxen "Anvend på alle grupper med dette emne" viser først et preview ("Dette ændrer N grupper i 2.F – Matematik") og logges som BULK_UPDATE i aktivitetsloggen — den rører aldrig medlemmer eller gruppe-unikt indhold.

Lærervisningen af grupper har samme fag-/forløbs-mappestruktur som elevvisningen: hold → fag → forløb → grupper, med mapperne lukkede som default og "Uden fag"/"Uden forløb" nederst. De gamle separate indgange ("Opret aflevering") peger nu på det samlede flow; /assignments/create-ruten består for bagudkompatibilitet.

Planlagte grupper (fremtidig synlighed)

En gruppe kan få en startdato med klokkeslæt (oprettelses- og redigeringsdialogen). Ligger tidspunktet i fremtiden:

  • Elever kan ikke se gruppen — hverken i lister, detaljevisning eller via realtids-events. Backend filtrerer i group.service.ts (studentVisibleWhere), og socket-events for fremtidige grupper sendes kun til et personale-rum (class:<id>:staff i config/socket.ts).
  • Lærere/admins ser gruppen med et gult "Planlagt"-badge (gruppekort, gruppeliste og klassens gruppetabel) med tooltip der viser hvornår den bliver synlig.
  • Når tidspunktet passerer, ser eleverne gruppen ved næste opslag/reconnect (der er ingen scheduler der pusher overgangen).

Redigeringsdialogen kan nu også ændre fag (subjectId), navn, emne, frist og dokumentkrav — før kunne kun medlemmer redigeres.

Slideshow-visning af elevopgaver

Dine opgaver (elev) har en visningsknap (liste/slideshow) ved siden af fanerne. Slideshowet viser én opgave ad gangen — med fag, frist, status, gruppe og "Gå til opgave" — og respekterer de aktive faner/søgning/filtre. Navigation med pile, prikker/tæller og tastaturpile.

Afslut emne (LOCKED + PDF/ZIP)

Læreren kan afslutte et emne fra emnesiden: alle gruppernes dokumenter låses (status LOCKED) og bliver watch-only for både elever og lærer (OnlyOffice åbner i view-mode, og alle mutationer — aflever/fortryd/omdøb/ slet — afvises). Låsningen er fortrydelig ("Genåbn"), og dokumenterne gendannes til deres tidligere status (kladde/afleveret). Elever kan hverken låse eller låse op. PDF genereres server-side via OnlyOffice Document Servers conversion API, og læreren kan hente alle emnets dokumenter som én ZIP med PDF'er i mapper pr. gruppe. Alle handlinger logges i aktivitetsloggen (FINISH/REOPEN/EXPORT_ZIP).

Context-aware aflevering

Afleveringsdialogen i arbejdsrummet udleder selv opgaven: har gruppen præcis én aktiv opgave, vælges den automatisk (vist som chip, ingen dropdown); ved flere aktive forudvælges opgaven med nærmeste deadline, og dropdownen vises som fallback.

Help-flag

Elever kan bede læreren om hjælp direkte fra arbejdsrummet ("Bed om hjælp" + valgfri besked). Flaget bor på gruppen og vises som banner i arbejdsrummet og live på lærerens dashboard (socket-event group:help til personale-rummet) med "Markér håndteret". Kun gruppens medlemmer kan rejse flaget, kun læreren/admin kan markere det håndteret, og begge handlinger logges i aktivitetstidslinjen.

Aktivitetslog

  • Endpoint: GET /api/activity-logs (TEACHER/ADMIN/SUPER_ADMIN) med filtre classId, groupId, userId, category og paginering (page/limit, max 100).
  • Scoping: Lærere ser kun logs knyttet til egne forløb. Admins ser organisationens forløbs-logs plus ikke-forløbs-logs fra organisationens medlemmer. SUPER_ADMIN uden organisation ser alt.
  • Kilder: Klasse-, gruppe- og opgave-mutationer skriver til ActivityLog via logging.service.ts (log() er fire-and-forget — en fejlet audit-skrivning vælter aldrig selve operationen).
  • UI: Menupunktet Aktivitet (/activity) viser tidslinjen med filtre og paginering. Admins ser desuden en brugers aktivitet på /admin/users/:userId (erstatter den gamle mock-visning).

Build-ID under logoet

Frontend viser branch @ commit under logoet i topbaren, så man altid kan se hvilken deploy man kigger på. Værdierne bages ind ved image-build via VITE_BUILD_BRANCH/VITE_BUILD_COMMIT (sættes af CI i compose.ci.yml fra CI_COMMIT_REF_NAME/CI_COMMIT_SHORT_SHA). Lokale dev-builds viser ingenting.