Implement admin back-pass flow and guarded admin actions

This commit is contained in:
2026-02-08 14:20:38 +01:00
parent 4ee327fb4e
commit 5595bfd3b1
25 changed files with 572 additions and 109 deletions

View File

@@ -108,7 +108,7 @@ Wenn ein Admin doppelte Spiele verknüpft:
Mit **„Finalisieren"** werden deine Bewertungen gesperrt. Deaktiviere es, um erneut zu bearbeiten.
„Finalisieren" ist nur während der Abstimmungsphase verfügbar und wird automatisch zurückgesetzt, wenn:
- Ein Joker ein neues Spiel hinzufügt
- Du mit einem Zurück-Pass zurück in die Vorschlagsphase wechselst
- Ein Admin Spiele verknüpft oder trennt
### Abstimmen nach Änderungen
@@ -119,26 +119,26 @@ Wenn neue Spiele hinzugefügt oder Verknüpfungen geändert werden:
Überprüfe deine Liste und bewerte erneut, bevor du wieder finalisierst.
## Joker (Späte Ergänzungen)
## Zurück-Pass (Einmalige Rückkehr)
### Was ist ein Joker?
### Was ist ein Zurück-Pass?
Ein **Joker** ist ein einmaliger zusätzlicher Vorschlags-Slot, der nur während der **Abstimmungsphase** verfügbar ist. Ein Admin muss ihn dir gewähren.
Ein **Zurück-Pass** ist eine einmalige Berechtigung, mit der du von der **Abstimmungsphase** zurück in die **Vorschlagsphase** wechseln kannst. Ein Admin muss ihn dir während der Abstimmung geben.
### So funktioniert es
Wenn du einen Joker erhältst:
- Erscheint ein Button in der oberen Leiste, mit dem du ein weiteres Spiel hinzufügen kannst
- Nach der Nutzung wird der Joker sofort verbraucht
- Die Finalisierung aller Abstimmungen werden automatisch zurückgesetzt, damit das neue Spiel bewertet werden kann
Wenn du einen Zurück-Pass erhältst:
- Erscheint ein **Zurück**-Button in der Abstimmungsphase für dein Konto
- Bei Nutzung wechselst du einmal in die Vorschlagsphase zurück und der Pass wird verbraucht
- Deine Finalisierung wird beim Zurückwechseln aufgehoben
Admins können bei Bedarf zusätzliche Joker vergeben.
Admins können bei Bedarf später einen weiteren Pass vergeben.
## Ergebnisse
### Wann sind die Ergebnisse sichtbar?
Die Ergebnisse bleiben verborgen, bis ein Admin sie freigibt. Danach werden alle Spieler automatisch in die **Ergebnisphase** verschoben. Falls nötig, kann ein Admin die Ergebnisse wieder schließen: Alle kehren in die Abstimmungsphase zurück und alle Abstimmungen werden zur Anpassung zurückgesetzt.
Die Ergebnisse bleiben verborgen, bis ein Admin sie freigibt. Danach werden alle Spieler automatisch in die **Ergebnisphase** verschoben. Falls nötig, kann ein Admin die Ergebnisse wieder schließen: Spieler mit mindestens einem Vorschlag kehren in die Abstimmungsphase zurück, Spieler ohne Vorschlag in die Vorschlagsphase, und Finalisierungen werden zurückgesetzt.
### Kann ich in der Ergebnisphase etwas bearbeiten?
@@ -148,13 +148,15 @@ Nein. Vorschläge und Bewertungen sind schreibgeschützt. Wende dich bei Bedarf
### Was können Admin-Konten tun?
- Joker während der Abstimmung vergeben
- Zurück-Pässe während der Abstimmung vergeben
- Doppelte Vorschläge verknüpfen oder trennen
- Vorschläge löschen
- Abstimmungsstatus einsehen (wer finalisiert hat)
- Einen Spieler löschen (inklusive dessen Vorschläge und Stimmen)
- Spieler über den Status-Dropdown von Abstimmung zurück auf Vorschlag setzen
- Die Datenbank auf Werkseinstellungen zurücksetzen
- Zu vorherigen Phasen zurückkehren
- Reset-/Löschaktionen mit dem eigenen Admin-Passwort bestätigen
### Was können Admin-Konten nicht tun?
@@ -174,7 +176,7 @@ Stelle sicher:
### „Du hast das Limit von 5 Vorschlägen erreicht."
Warte auf die Abstimmungsphase und bitte bei Bedarf um einen Joker.
Bitte einen Admin um einen Zurück-Pass, wenn du wieder in die Vorschlagsphase wechseln und deine Liste anpassen musst.
### „Füge mindestens einen Vorschlag hinzu, bevor du in die Abstimmungsphase wechselst."

View File

@@ -82,21 +82,20 @@ Common reasons:
Check the bottom-right corner of the screen for error messages.
## Jokers (Late Additions)
## Back Pass (One-Time Return)
### What is a joker?
### What is a back pass?
A **joker** is a one-time extra suggestion slot available only during the **Vote phase**. An admin must grant it to you.
A **back pass** is a one-time permission that lets you move from **Vote** back to **Suggest**. An admin must grant it to you during Vote.
### How it works
If you receive a joker:
- A button appears in the top bar allowing you to add one more game.
- Once used, the joker is consumed immediately.
- Your ballot becomes unfinalized.
- All players are unfinalized so the new game can be scored.
If you receive a back pass:
- A **Back** button appears in Vote for your account.
- Using it moves you to Suggest once and consumes the pass.
- Your finalized flag is cleared when you move back.
Admins may grant additional jokers if necessary.
Admins may grant another pass later if needed.
## Voting
@@ -126,7 +125,7 @@ If an admin links duplicate games:
Toggling **"Finalize"** locks your scores. Toggle it off to edit again.
Finalize is only available during the Vote phase and will automatically reset if:
- A joker adds a new game
- You move back to Suggest with a granted back pass
- An admin links or unlinks games
### Voting after changes
@@ -142,7 +141,7 @@ Review your list and rescore before finalizing again.
### When are results visible?
Results are hidden until an admin opens them. When opened, all players are automatically moved to the **Results phase**.
If needed, an admin can close the Results: everyone returns to the Vote phase, and all ballots are unfinalized for adjustments.
If needed, an admin can close the Results: players with at least one suggestion return to Vote, players without suggestions return to Suggest, and finalized ballots are cleared.
### Can I edit anything in Results?
@@ -152,13 +151,15 @@ No. Suggestions and votes are read-only. Contact an admin for assistance.
### What can admin accounts do?
- Grant jokers during Vote
- Link or unlink duplicate suggestions
- Delete suggestions
- View vote readiness (who has finalized)
- Delete a player (removes their suggestions and votes)
- Move players from Vote back to Suggest from the status dropdown
- Grant one-time back passes
- Reset the database to factory defaults
- Move backward to previous phases
- Confirm reset/delete actions with their own admin password
### What can't admin accounts do?
@@ -178,7 +179,7 @@ Make sure:
### "You have reached the 5 suggestion limit."
Wait for the Vote phase and request a joker if needed.
Ask an admin to grant a back pass if you need to return to Suggest and adjust your list.
### "Add at least one suggestion before entering the Vote phase."

View File

@@ -26,6 +26,7 @@
"counts.format": "Players: {players} • Suggestions: {suggestions} • Votes: {votes}",
"nav.prev": "Back",
"nav.next": "Next",
"nav.backToSuggestOnce": "Use pass: back to suggest",
"nav.addSuggestionFirst": "Add a game first",
"nav.waitingForResults": "Waiting…",
"nav.freezeTitle": "Ready to reveal?",
@@ -102,11 +103,16 @@
"vote.listUpdatedConfirm": "OK",
"admin.title": "Admin",
"admin.tools": "Admin tools",
"admin.resultsOpenToggle": "Allow results phase",
"admin.resultsOpenButtonEnable": "Allow results phase",
"admin.resultsOpenButtonDisable": "Lock results phase",
"admin.resultsLocked": "Results locked by admin",
"admin.resultsUpdated": "Results availability updated",
"admin.reset": "Reset (keep players)",
"admin.factoryReset": "Factory reset",
"admin.resetConfirmBody": "Enter your admin password to reset all games and votes while keeping player accounts.",
"admin.factoryResetConfirmBody": "Enter your admin password to permanently delete all accounts, games, votes, and state.",
"admin.passwordLabel": "Admin password",
"admin.passwordRequired": "Admin password is required.",
"admin.resetDone": "Reset complete",
"admin.factoryResetDone": "Factory reset complete",
"admin.readyForResults": "Ready for results",
@@ -115,9 +121,10 @@
"admin.playerUsername": "Username",
"admin.playerStatus": "Status",
"admin.playerGames": "Games",
"admin.playerJoker": "Joker",
"admin.playerJoker": "Back pass",
"admin.playerDelete": "Delete",
"admin.grantJokerChip": "Grant",
"admin.grantJokerChip": "Grant back",
"admin.statusUpdated": "Player status updated",
"admin.statusSuggesting": "Suggesting",
"admin.statusVoting": "Voting",
"admin.statusFinished": "Finished",
@@ -125,7 +132,7 @@
"admin.deleteBody": "Delete player \"{name}\" and all their games and votes? This cannot be undone.",
"admin.deleteConfirm": "Delete",
"admin.deleteDone": "Player deleted",
"admin.jokerGranted": "Joker granted",
"admin.jokerGranted": "Back pass granted",
"admin.linkTitle": "Link games",
"admin.linkSource": "Game to link",
"admin.linkTarget": "Link to (parent)",
@@ -186,6 +193,7 @@
"counts.format": "Spieler: {players} • Vorschläge: {suggestions} • Stimmen: {votes}",
"nav.prev": "Zurück",
"nav.next": "Weiter",
"nav.backToSuggestOnce": "Pass nutzen: zurück zu Vorschlag",
"nav.addSuggestionFirst": "Zuerst ein Spiel vorschlagen",
"nav.waitingForResults": "Warten…",
"nav.freezeTitle": "Bereit zum Aufdecken?",
@@ -262,11 +270,16 @@
"vote.listUpdatedConfirm": "OK",
"admin.title": "Admin",
"admin.tools": "Admin-Werkzeuge",
"admin.resultsOpenToggle": "Ergebnisse freigeben",
"admin.resultsOpenButtonEnable": "Ergebnisse freigeben",
"admin.resultsOpenButtonDisable": "Ergebnisse sperren",
"admin.resultsLocked": "Ergebnisse vom Admin gesperrt",
"admin.resultsUpdated": "Ergebnisfreigabe aktualisiert",
"admin.reset": "Zurücksetzen (Spieler behalten)",
"admin.factoryReset": "Werkseinstellung",
"admin.resetConfirmBody": "Gib dein Admin-Passwort ein, um alle Spiele und Stimmen zurückzusetzen, aber die Konten zu behalten.",
"admin.factoryResetConfirmBody": "Gib dein Admin-Passwort ein, um alle Konten, Spiele, Stimmen und den Zustand dauerhaft zu löschen.",
"admin.passwordLabel": "Admin-Passwort",
"admin.passwordRequired": "Admin-Passwort ist erforderlich.",
"admin.resetDone": "Zurücksetzen abgeschlossen",
"admin.factoryResetDone": "Werkseinstellung abgeschlossen",
"admin.readyForResults": "Bereit für Ergebnisse",
@@ -275,9 +288,10 @@
"admin.playerUsername": "Benutzername",
"admin.playerStatus": "Status",
"admin.playerGames": "Spiele",
"admin.playerJoker": "Joker",
"admin.playerJoker": "Zurück-Pass",
"admin.playerDelete": "Löschen",
"admin.grantJokerChip": "Joker",
"admin.grantJokerChip": "Pass geben",
"admin.statusUpdated": "Status aktualisiert",
"admin.statusSuggesting": "Vorschlagen",
"admin.statusVoting": "Bewerten",
"admin.statusFinished": "Fertig",
@@ -285,7 +299,7 @@
"admin.deleteBody": "Spieler \"{name}\" samt Spielen und Stimmen löschen? Dies kann nicht rückgängig gemacht werden.",
"admin.deleteConfirm": "Löschen",
"admin.deleteDone": "Spieler gelöscht",
"admin.jokerGranted": "Joker vergeben",
"admin.jokerGranted": "Zurück-Pass vergeben",
"admin.linkTitle": "Spiele verknüpfen",
"admin.linkSource": "Spiel verknüpfen",
"admin.linkTarget": "Verknüpfen mit",