Add survey question drag-sort and backend assets
- Frontend editor: drag-to-sort questions with dedicated sort assets/JS - Backend list/search refinements for tl_survey and tl_survey_content - Repository helpers for survey/question/editor queries - Translations and AI handover notes update
This commit is contained in:
@@ -63,6 +63,7 @@ Diese Entscheidung ist absichtlich so getroffen und kein Bug.
|
||||
|
||||
- `tl_survey`
|
||||
- Umfrage-Stammdaten und Statusfelder
|
||||
- Enthält zusätzlich die backend-only gepflegte `internalNote`
|
||||
- `tl_survey_content`
|
||||
- Fragen der Umfrage
|
||||
- `tl_survey_condition`
|
||||
@@ -115,10 +116,19 @@ Aktuelle Button- und Sichtbarkeitslogik pro Umfrage:
|
||||
- `Umfrage veröffentlichen`
|
||||
- Eigene Aktion in der Liste
|
||||
- Nach Veröffentlichung disabled und textlich als veröffentlicht markiert
|
||||
- `Duplizieren`
|
||||
- Legt eine Kopie der Umfrage für den Redakteur an
|
||||
- Titelvergabe ist fortlaufend: `Titel - Kopie`, danach `Titel - Kopie 2`, `Titel - Kopie 3` usw.
|
||||
- Bestehende `- Kopie`-Suffixe werden fachlich normalisiert, damit keine Titel wie `... - Kopie - Kopie` mehr neu entstehen
|
||||
- Kreis grau/grün
|
||||
- Schaltet `isActive`
|
||||
- Ist bewusst kein Auge mehr
|
||||
|
||||
Wichtiger technischer Punkt:
|
||||
|
||||
- Die Frontend-Listenaktionen arbeiten nur noch mit dem Contao-`REQUEST_TOKEN` plus Berechtigungsprüfung.
|
||||
- Die zusätzliche Symfony-Aktions-CSRF-Prüfung wurde bewusst entfernt, weil sie in diesem Frontend-Flow zu ungültigen Tokens führte.
|
||||
|
||||
### 2. Frontend-Editor
|
||||
|
||||
Controller:
|
||||
@@ -154,6 +164,9 @@ Wichtige Entscheidung:
|
||||
- Typ, Pflicht usw. sollen nicht schon im Header gezeigt werden.
|
||||
- Die Details sieht man erst nach dem Aufklappen.
|
||||
|
||||
- Die Sprungziel-Dropdowns im Frontend zeigen Positionsnummern der Umfrage (`1. ...`, `2. ...`) statt globaler Datenbank-IDs.
|
||||
- Die aktuell bearbeitete Frage wird dort nicht als eigenes Sprungziel angeboten.
|
||||
|
||||
### 3. Öffentliche Umfrageansicht
|
||||
|
||||
Controller:
|
||||
@@ -232,6 +245,13 @@ Reihenfolge der Navigation:
|
||||
Wichtiger Detailpunkt:
|
||||
|
||||
- In der Sprungregelübersicht im Frontend-Editor werden bewusst die Positionsnummern innerhalb der Umfrage angezeigt, nicht die globalen Datenbank-IDs der Fragen.
|
||||
- Gleiches gilt für die Sprungziel-Dropdowns in Backend und Frontend.
|
||||
|
||||
Wichtige technische Eigenschaft:
|
||||
|
||||
- `jumpOnYes`, `jumpOnNo` und generische Bedingungen referenzieren Ziel-Fragen intern immer über die Frage-ID, nicht über die Position.
|
||||
- Dadurch bleiben Sprünge bei einer reinen Umordnung der Fragen fachlich stabil an dieselbe Frage gebunden.
|
||||
- Wenn eine Ziel-Frage an eine andere Position verschoben wird, zeigt die Oberfläche danach automatisch die neue Positionsnummer an.
|
||||
|
||||
## Excel-Export
|
||||
|
||||
@@ -315,6 +335,26 @@ Wichtige Listenoperationen:
|
||||
- `Link kopieren`
|
||||
- `Ergebnisse anzeigen`
|
||||
|
||||
Aktuelle Listen- und Filterlogik:
|
||||
|
||||
- Die mehrspaltige Umfragenliste zeigt aktuell:
|
||||
- `Titel`
|
||||
- `Zugewiesene Benutzer`
|
||||
- `Vorlage`
|
||||
- `Interne Notiz`
|
||||
- `Kategorien` wurden bewusst aus der mehrspaltigen Liste und aus der rechten Filterspalte entfernt.
|
||||
- Die Spalte `Zugewiesene Benutzer` wird in der Listenmetadatenlogik gekürzt:
|
||||
- maximal 3 Namen direkt sichtbar
|
||||
- danach Zusatz wie `... und X weitere`
|
||||
- `internalNote`
|
||||
- backend-only Feld in `tl_survey`
|
||||
- nur im Backend bearbeitbar
|
||||
- in der mehrspaltigen Liste sichtbar
|
||||
- bei Duplikaten wird der Wert mitkopiert
|
||||
- In der rechten Suchspalte ist `Interne Notiz` suchbar.
|
||||
- `ID` wurde für die Umfragenliste bewusst aus dem Suchfeld entfernt.
|
||||
- Das geschieht über einen kleinen backend-spezifischen JS-Workaround, weil Contao `id` im Core für `DC_Table` hart ergänzt.
|
||||
|
||||
Aktuelle Backend-Entscheidung:
|
||||
|
||||
- Das Warnsymbol genügt als Hinweis bei veröffentlichten Umfragen
|
||||
@@ -329,6 +369,21 @@ Aktuelle Backend-Entscheidung:
|
||||
Hinweis:
|
||||
|
||||
- `isLocked` wird in den Child-Headerfeldern nicht mehr angezeigt, weil der Backend-Lock bewusst keine führende Benutzerfunktion mehr ist.
|
||||
- In `tl_survey_content` ist der Fragenlisten-Header zusätzlich reduziert:
|
||||
- nur noch `Titel` und `Veröffentlicht`
|
||||
- kein öffentlicher Link-Schlüssel mehr
|
||||
- die rechte Header-Leiste mit Aktionen ist im Normalzustand ausgeblendet
|
||||
- im aktiven Verschiebe-/Clipboard-Modus wird sie wieder eingeblendet, damit `Neu oben` bzw. die Einfügepositionen erreichbar bleiben
|
||||
|
||||
Fragenliste `tl_survey_content`:
|
||||
|
||||
- Direkt sichtbare Primäraktion pro Frage:
|
||||
- `Bearbeiten`-Stift
|
||||
- Verschieben:
|
||||
- erfolgt im Backend über den normalen Contao-Paste-/Move-Flow
|
||||
- die Aktion `Verschieben` liegt bewusst nur unter den drei Punkten
|
||||
- dort wird der Contao-Pfeil `mover.svg` verwendet, nicht die blaue Schere
|
||||
- nach Aktivierung des Clipboard-Zustands erscheinen die üblichen Einfügeziele wie `Nach dem Element ... einfügen`
|
||||
|
||||
### Systemeinstellungen
|
||||
|
||||
@@ -356,6 +411,7 @@ Wichtige Settings:
|
||||
- `published` reversibel erlaubt
|
||||
- `isActive` per Standard-Contao-Toggle
|
||||
- nur Warnsymbol statt Backend-Sperre
|
||||
- Admin darf Fragen auch nach Veröffentlichung oder nach vorhandenen Antworten umsortieren
|
||||
|
||||
## Wichtige Dateien nach Themengebiet
|
||||
|
||||
@@ -398,12 +454,35 @@ Backend:
|
||||
- `ddev exec php bin/console lint:yaml ...`
|
||||
- `ddev exec php bin/console cache:clear`
|
||||
|
||||
## Offene technische Punkte / Deployment-Hinweise
|
||||
|
||||
- Neue DB-Spalte in `tl_survey`:
|
||||
- `internalNote`
|
||||
- Typ aktuell: `varchar(255) NOT NULL default ''`
|
||||
- Für andere Umgebungen muss diese Spalte per Migration/SQL vorhanden sein, sonst fehlen Backend-Feld, Listenanzeige und Suchfunktion fachlich bzw. führen zu Inkonsistenzen.
|
||||
|
||||
- Nach Änderungen an DCA, Backend-CSS oder Backend-JS ist in dieser Installation typischerweise nötig:
|
||||
- `php vendor/bin/contao-console assets:install public --symlink --relative`
|
||||
- `php vendor/bin/contao-console cache:clear --env=prod`
|
||||
|
||||
- Es gibt aktuell zwei bewusst eingebaute backend-spezifische UI-Workarounds über Bundle-Assets:
|
||||
- In der Umfragenliste wird `ID` aus dem Suchfeld per JS entfernt, weil Contao das Feld im Core von `DC_Table` hart ergänzt.
|
||||
- In der Fragenliste (`table=tl_survey_content`) wird die rechte Parent-Header-Leiste per CSS/JS im Normalzustand ausgeblendet und nur im aktiven Clipboard-/Verschiebe-Modus wieder eingeblendet.
|
||||
|
||||
- Lokale DDEV-Besonderheit, die bei Fehleranalyse relevant sein kann:
|
||||
- Das Bundle läuft hier als Path-Repository/Symlink.
|
||||
- Wenn Backend-Übersetzungen oder Assets trotz korrektem Code unerwartet fehlen, zuerst Bundle-Pfad, veröffentlichte Assets und Prod-Cache prüfen.
|
||||
|
||||
## Bekannte bewusste Trade-offs
|
||||
|
||||
- Backend kann veröffentlichte Umfragen technisch weiterhin verändern.
|
||||
- Das ist bewusst akzeptiert, weil nur ein Admin arbeitet.
|
||||
- `isLocked` bleibt als internes Logikfeld bestehen, obwohl der Backend-Lock nicht mehr durchgesetzt wird.
|
||||
- PDF-Export hängt von Gotenberg ab und ist absichtlich optional.
|
||||
- Eine reine Umordnung von Fragen ist für Sprungziele logisch unkritisch, weil Sprünge an Frage-IDs hängen.
|
||||
- Ergebnisse vorhandener, weiterhin existierender Fragen folgen bei der Anzeige jedoch der aktuellen Sortierung der Frage.
|
||||
- Historische Antwort-Snapshots speichern zwar `questionSorting`, die Ergebnisansicht sortiert vorhandene Fragen aber primär nach der aktuellen Frage-Sortierung.
|
||||
- Das ist im toleranten Backend-Modell ein bewusst akzeptierter Side-Effect.
|
||||
|
||||
## Empfohlene Einstiegspunkte für künftige Änderungen
|
||||
|
||||
|
||||
Reference in New Issue
Block a user