- Decision-Update Preisstruktur & Veroeffentlichungs-Flow aufgenommen (Launch-Tarife, Slot-Verbrauch bei Veroeffentlichung, Submit-Gate, Launch-Credits) inkl. Klarstellung 12.06.: Gelb geht direkt live, keine manuelle Pruef-Queue, nur Rot wird abgelehnt - Alle Status-Dokumente auf den Code-Stand gezogen: README-Index, STATUS-ABGLEICH (KI-Pipeline, Bilder/Lizenzen, Pricing), Checkliste (KI- und Titelbild-Bloecke, Launch-To-dos), Admin-User, user-zusammenhaenge (Datenmodell-Delta), Entwicklungsplan KI-Pruefung (Phase 0 abgehakt, Decision-Abgleich) - Ueberschriebene Tarif-Abschnitte in Konzept-Update 1/2 und Relaunch-Konzept mit Superseded-/IST-Hinweisen markiert - Neues Plan-Dokument PHASE-9-FLOW-UND-TARIFE-PLAN.md (9A-9J) - Phase-8-Roadmap-Doku (20-PHASE-8-USER-PANEL.md) + PROGRESS-Eintraege Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4.8 KiB
4.8 KiB
Phase 8 · User-Panel-Konsolidierung & PM-Lifecycle
Stand: 2026-05-29 · abgeschlossen
Plan-Doc: docs/PHASE-8-USER-PANEL-PLAN.md
Abgleich: docs/STATUS-ABGLEICH-USER-PANEL.md
Folge-Initiative nach Phase 7 (PM-Form-Refactor). Ziel: das User-Panel produktionsreif abrunden — Show-Page-Lücken, Firmen-Liste auf Mockup-Niveau, durchgängige PM-Titelbilder, rechtssichere Bild-Lizenzen und ein bewusster Veröffentlichungs-Flow mit Kontingent-Vorbereitung.
Päckchen-Übersicht
| ID | Thema | Status |
|---|---|---|
| 8A | Show-Page-Lücken (subtitle, scheduling, embargo, boilerplate_override) — Customer + Admin | ✅ |
| 8B | Listen-Indikatoren für Scheduling/Embargo | ✅ |
| 8C | Pressekontakt-Warn-Box in der Form-Sidebar | ✅ |
| 8D | Doku-Sync (docs/user-admin/*, STATUS-ABGLEICH) |
✅ |
| 8E | Firmen-Liste auf Mockup-Niveau (Counter-Strip, Saved-Views, Filter-Chips, Toggle, Rollen-Legende) | ✅ |
| 8F | SVG-Titelbild-Platzhalter-Set + Anzeige-Komponente + Picker-Modal | ✅ |
| 8G | Titelbild-Schema (placeholder_variant) + Cover-Resolver |
✅ |
| 8H | Bild-Upload mit Lizenz-Pflichtfeldern | ✅ |
| 8I | Veröffentlichungs-Modal (Rechtshinweis + Kontingent) | ✅ |
| 8J | Quota-Stub im Datenmodell + monatlicher Reset-Command | ✅ |
| 8K | Tests, Pint, Build, Doku-Abschluss | ✅ |
Wichtigste Code-Artefakte (8F–8J, neu in dieser Phase)
Enums
app/Enums/PressReleasePlaceholder.php— 9 SVG-Varianten (Default, Seed-deterministisch, Labels, Asset-Pfad).app/Enums/ImageLicenseType.php— 5 Lizenztypen,requiresLicenseUrl().
Assets / Komponenten
public/images/press-release-placeholders/01..09-*.svg(1600×900, 3 Muster × 3 Hub-Farben).resources/views/components/portal/press-release-placeholder.blade.php— rendert Bild/Platzhalter mit optionalem Titel-Overlay.resources/views/livewire/components/press-release-placeholder-picker.blade.php— FluxUI-Modal mit 3×3-Grid, dispatchtplaceholder-selected.
Services
app/Services/PressRelease/PressReleaseCoverImage.php—coverUrl(),coverIsPlaceholder(),placeholder(). Bevorzugtis_preview-Bild, fällt sonst auf den SVG-Platzhalter zurück.
Schema (additive, nullable/Default-Migrationen)
press_releases.placeholder_variant(string 32, nullable).press_release_images:author,license_type,license_url,persons_consent(default false),rights_confirmed_at.users:press_release_quota(default 3),press_release_quota_used_this_month(default 0).
Models
PressRelease: Cast +creating-Hook setzt deterministisch eine Platzhalter-Variante, wenn keine gesetzt ist.PressReleaseImage: Lizenz-Felder +license_type-Enum-Cast.User:pressReleaseQuotaRemaining().
Service-Hook & Command
PressReleaseService::submitForReview()zähltpress_release_quota_used_this_monthdes Autors hoch (Stub).app/Console/Commands/ResetMonthlyPressReleaseQuota.php+ Scheduler-Eintrag (monthlyOn(1, '00:05')) inroutes/console.php.
Views
- Customer-Show + Admin-Show: Hero-Titelbild via Cover-Resolver.
- Customer Create/Edit: Platzhalter-Vorschau + Picker-Einbindung
(
#[On('placeholder-selected')]). - Customer-Show: Veröffentlichungs-Modal (
confirm-submit-review) mit Rechts-Platzhalter, Kontingent-Badge und 3 Bestätigungs-Checkboxen (Submit-Button via Alpine disabled bis alle gesetzt). - Image-Manager: Lizenz-Felder + Anzeige in der Bild-Kachel.
Tests (neu)
tests/Feature/PressReleasePlaceholderTest.php(8) — Enum, Assets, Picker, Cover-Resolver (Platzhalter + echtes Bild).tests/Feature/PressReleaseImageLicenseTest.php(3) — Pflichtfelder, CC-ohne-URL, vollständiger Upload +rights_confirmed_at.tests/Feature/PressReleaseQuotaTest.php(3) — Remaining-Berechnung, Increment bei Submit, monatlicher Reset.tests/Feature/PressReleasePublishModalPhase8iTest.php(2) — Modal-Inhalt (Rechtshinweis + Kontingent), Submit-Flow.
Gesamt-Suite nach Phase 8: 375 passed, 4 skipped. Pint clean,
npm run build:portal clean.
Bewusste Abweichungen / offene Folge-Themen
- 8H — Upload-Control:
flux:input type=filestattflux:file-upload(Pro-Dropzone mit aufwändigem Slot-Aufbau). Funktion identisch, kein Risiko für den Upload-Flow. Dropzone-Optik ggf. separat nachziehen. - 8I — Rechtstext ist ein Platzhalter und vor Go-Live anwaltlich zu prüfen.
- 8J — Quota ist ein Stub. Die Schnittstelle
User::pressReleaseQuotaRemaining()bleibt stabil; das echte Tarif-/Credit-Modul löst Spalten + Decrement-Logik später ab. - Offen (Phase 2/3): Stock-/KI-Bildquellen, Wasserzeichen-Check, Magic-Link-Flow für Pressekontakte, Statistik-/Abrechnungs-Tabs, Anhänge-Reaktivierung (Security-Audit).