presseportale/dev/archive/frontend/hub-flux/15-PHASE-4I-ADMIN-PRESS-RELEASES.md
Kevin Adametz 6a4c4d8837 docs: dev-Doku für den Live-Betrieb neu sortiert — Archiv + Betrieb + Roadmap
Das System ist seit 20.07.2026 live; die dev-Doku spiegelt jetzt den
Betriebszustand statt der Release-Vorbereitung:

- dev/betrieb/: Deploy-Runbook (neu: §10 Betrieb nach Go-Live mit
  SFTP-Deploy-Checkliste inkl. queue:restart-Pflicht und den
  Betriebs-Erkenntnissen der Go-Live-Woche), Legacy-API-Parität, Umami.
- dev/roadmap.md: offene Nachlauf-Punkte (Go-Live-Mails, Merge nach main,
  Stripe-Test-Artefakte, Key-Rotation, Alt-System-Abschaltung) und
  Ideen-Backlog.
- dev/archive/: abgeschlossene Phasen — Migration-2026-Planung,
  Cutover-Runbook (mit Erledigt-Vermerk), Release-Plan/QA-Checkliste,
  Optimierungsphasen, Frontend-Konzepte + Responsive-Audits vom 16.07.,
  Altsystem-Reste.
- dev/README.md als Wegweiser; gitignore-Pfad der SQL-Dumps mitgezogen
  (dev/archive/migration-2026/sql/ bleibt untracked, ebenso dev/migration/
  und dev/api/).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 07:52:38 +00:00

4.5 KiB
Raw Blame History

Phase 4I — Admin „Pressemitteilungen" Mockup-Patterns

Folgepäckchen zu 4H. Überträgt die in der Customer-PM-Liste entwickelten Mockup-Patterns auf die Admin-Seite. Die CSS-Komponenten existieren bereits.

Status: ✅ abgeschlossen · Aufwand: ~½ Tag · Risiko: niedrig


Anlass

Nach 4H matched customer/press-releases/index.blade.php das Mockup zu ~90 %. Die gleichen Patterns gehören in die Admin-Liste — das ist der zentrale Editorial-Workflow.

Aktueller Stand

admin/press-releases/index.blade.php ist bei ~60 % Match:

  • ✅ Page-Header (Hub-Stil)
  • ✅ 4-KPI-Reihe (<x-portal.stat-card>)
  • ✅ Filter-Panel (search/status/portal/language/category + 3 entity-comboboxes)
  • ✅ Tabellen-Panel + Empty-State (Hub-styled)
  • ✅ Modals (publish/reject/archive) — test-kritisch
  • ❌ Saved-Views-Tabs
  • ❌ Active-Chips für aktive Filter
  • ❌ Portal-Pills (statt Text)
  • ❌ Row-Tinting (review/rejected)
  • ❌ Inline-Actions („Veröffentlichen →", „Ablehnen →" neben Status)
  • ❌ Reichere Sub-Zeilen (PM-{id} + Datum + Status-Kontext)

Scope

1. Saved-Views-Tabs

Tab-Leiste zwischen KPI-Reihe und Filter:

Alle · Veröffentlicht · In Prüfung · Entwürfe · Abgelehnt · Archiv

Counter-Pille pro Tab basierend auf erweiterten stats.

2. Active-Chips

Sichtbarkeit aller aktiven Filter (Status, Portal, Sprache, Kategorie, User, Firma, Kontakt, Suche), jeweils mit ×.

3. Portal-Pills

Statt „Presseecho"/„Businessportal24"/„Beide" als Text: Portal-Pills mit farbigem Dot. Bei Portal::Both zwei Pills nebeneinander.

4. Row-Tinting

is-row-warn für review, is-row-err für rejected.

5. Inline-Actions

Zusätzlich zu den bestehenden Action-Buttons + Modals:

Status Inline-Action
Review Freigeben → + Ablehnen → (öffnet die Modals)
Published Archivieren → (öffnet Modal)

Die Inline-Actions sind nur Trigger für die bestehenden Modals (keine direkte Wire-Methode), damit die existierenden Test-Modal-Strings („Pressemitteilung veröffentlichen?") weiter angezeigt werden. Action-Buttons in der Aktionen- Spalte bleiben als Backup für Power-User.

6. Reichere Sub-Zeilen

In Titel-Zelle: PM-{id} als Sub. In Datum-Zelle: Hauptdatum

  • Status-Kontext (erstellt · 11:02, veröffentlicht · 14:30, …).

7. Counter-Strip ausgelassen

KPI-Reihe ist bereits 4-spaltig (Gesamt, Veröffentlicht, In Prüfung, Entwürfe) und voll funktional. Counter-Strip wäre redundant. Bleibt bei KPI-Cards.

Was bleibt unangetastet

  • Volt-Methoden (publish, reject, archive, sort, with, clearUserFilter, …)
  • Bestehende Modals mit Strings „Pressemitteilung veröffentlichen?", „Pressemitteilung ablehnen?", „Pressemitteilung archivieren?" (Test-kritisch)
  • Filter-Panel-Struktur (Entity-Comboboxes erhalten, kein Reduktionsexperiment)
  • stats-Cache-Methode (AdminPerformanceCache)

Erweiterung

  • pressReleaseStats() erweitert um rejected und archived Counter, damit alle 6 Saved-Views-Tabs ihre Counter haben

Tests

  • AdminPressReleaseActionsTest (3 Tests, prüft auf Modal-Strings)
  • PressReleaseWorkflowTest (mehrere Tests, prüft auf publish/reject-Methoden + Audit-Logs)
  • Volle Suite muss weiter sauber laufen (modulo pre-existing ApiDocumentationTest)

Akzeptanzkriterien

  • Plan
  • Volt: stats um rejected + archived erweitert
  • Volt: setView() + resetFilters() ergänzt
  • Saved-Views-Tabs eingebaut (6 Stück inkl. Counter)
  • Active-Chips eingebaut (8 Filter-Typen)
  • Portal-Pills statt Text (incl. Both → 2 Pills)
  • Row-Tinting (review → warn, rejected → err)
  • Inline-Actions als Modal-Trigger (Freigeben/Ablehnen/Archivieren) zusätzlich neben Badge
  • Sub-Zeilen: PM-ID + Firma + Sprache, Datum + Status-Kontext
  • Empty-State 2-stufig (mit/ohne Filter)
  • Build + Pint + Tests grün (16/16 PR + 230/231 voll)
  • PROGRESS.md + 03-WEITERE-PHASEN.md aktualisiert

Lessons Learned

  • @php(...) Inline-Form führte beim Compile zu einem Syntax-Fehler im kompilierten View (führte zu <?php($var = ...) ohne Whitespace), obwohl alle Klammern balanced waren. Vermutung: Konflikt der Klammer-Zählung mit Methoden-Calls. Lösung: alle drei @php(...) Statements zu @php ... @endphp umgewandelt.
  • Tabellen-Spalten reduziert (8 → 7), weil die rechte „Aktionen"-Spalte mit den Status-Icons inhaltlich redundant zur neuen Inline-Action in der Status-Spalte war. Die linke „Aktionen"-Spalte (view/edit) blieb.