From 4f07104239cb85fc8c7022f8d4737d2cd654ff43 Mon Sep 17 00:00:00 2001 From: Kevin Adametz Date: Mon, 6 Jul 2026 08:32:59 +0000 Subject: [PATCH] Zentrale Rechts-E-Mail info@pressekonto.com fuer alle Rechtstexte User-Entscheidung 06.07.: info@pressekonto.com ist die Haupt-E-Mail fuer alle rechtlichen Anliegen. Zentral in config/legal.php (LEGAL_CONTACT_EMAIL), verwendet von Impressum, AGB, Datenschutz, /melden und /richtlinien auf allen drei Domains. Support-Kontakt bleibt je Brand (CONTACT_EMAIL_*), REPORT_EMAIL_* ist nur noch optionales separates DSA-Postfach. Nebenbei den verunglueckten Enterprise-Hinweis auf der Buchungsseite repariert (E-Mail war ohne Trennung angeklebt). Co-Authored-By: Claude Fable 5 --- .env.example | 10 +++++++--- config/legal.php | 14 ++++++++++++++ dev/release/entwicklungsplan-release.md | 3 ++- .../views/livewire/customer/bookings.blade.php | 2 +- resources/views/web/agb.blade.php | 2 +- resources/views/web/datenschutz.blade.php | 2 +- resources/views/web/impressum.blade.php | 4 ++-- resources/views/web/melden.blade.php | 2 +- resources/views/web/richtlinien.blade.php | 2 +- tests/Feature/Web/StaticPagesTest.php | 4 ++++ 10 files changed, 34 insertions(+), 11 deletions(-) diff --git a/.env.example b/.env.example index 351b3110..6226e36f 100644 --- a/.env.example +++ b/.env.example @@ -188,9 +188,13 @@ CONTACT_EMAIL_PRESSEKONTO= CONTACT_EMAIL_PRESSEECHO= CONTACT_EMAIL_BUSINESSPORTAL= -# DSA-Kontaktpunkt/Melde-Postfach je Brand (Impressum + /melden; Empfehlung: -# melden@… oder legal@…). Ohne Wert fällt die Anzeige auf CONTACT_EMAIL_* -# bzw. das Betreiber-Postfach zurück. [EXTERN: echte Adressen eintragen] +# Haupt-E-Mail für alle rechtlichen Anliegen (Impressum, Datenschutz, AGB, +# Meldeverfahren, Richtlinien) — auf allen drei Domains identisch. +# Ohne Wert gilt der Default info@pressekonto.com (config/legal.php). +LEGAL_CONTACT_EMAIL= + +# Optionales separates DSA-Melde-Postfach je Brand (Impressum + /melden). +# Ohne Wert fällt die Anzeige auf LEGAL_CONTACT_EMAIL zurück. REPORT_EMAIL_PRESSEKONTO= REPORT_EMAIL_PRESSEECHO= REPORT_EMAIL_BUSINESSPORTAL= diff --git a/config/legal.php b/config/legal.php index 703853ad..d3c77648 100644 --- a/config/legal.php +++ b/config/legal.php @@ -17,4 +17,18 @@ return [ 'agb_version' => '0.6', 'agb_effective_from' => '2026-07-03', + /* + |-------------------------------------------------------------------------- + | Zentrale Rechts-E-Mail + |-------------------------------------------------------------------------- + | + | Haupt-E-Mail für alle rechtlichen Anliegen (Impressum, Datenschutz, + | AGB, Meldeverfahren, Richtlinien) — auf allen drei Domains identisch. + | Support-/Redaktionskontakt bleibt je Brand konfigurierbar + | (config/domains.php, brand.contact_email). + | + */ + + 'contact_email' => env('LEGAL_CONTACT_EMAIL', 'info@pressekonto.com'), + ]; diff --git a/dev/release/entwicklungsplan-release.md b/dev/release/entwicklungsplan-release.md index 7b3bb208..cd951f76 100644 --- a/dev/release/entwicklungsplan-release.md +++ b/dev/release/entwicklungsplan-release.md @@ -16,9 +16,10 @@ R2.2+R2.3 erledigt: Hub-Landing komplett ueberarbeitet (datengetriebenes Tarif-G **Naechste Schritte:** R2.4 (Sitemap/robots/meta) ohne User-Input machbar; R3 Inhalte + R1.2 Stripe-Live [EXTERN]. **03.07. abends — Hub-Inhalts-Audit + Rechtstexte (Entscheidung E2: B2B-only!):** Alle Hub-/Web-Inhalte gegen den echten Funktionsstand geprueft und korrigiert (Startseiten-Claims, FAQ, Hilfe, Veroeffentlichen, API-Doku inkl. OpenAPI); kontakt/ueber-uns zurueckgebaut; Rechtstexte aus docs/legal eingebaut (Impressum echt, AGB v0.6, /richtlinien, /melden); Widerrufs-UI raus (E2), Submit-Modal auf Archiv-Hinweis (T2neu); Preise nach Leistungsbeschreibung v0.2. Details in R3.0–R3.2. **03.07. spaet — Rechtstexte komplett + T1neu + Mail-CI (TAGESABSCHLUSS, Suite: 935 gruen):** Datenschutzerklaerung v0.3 host-aware eingebaut (Hub-/Spoke-Bausteine, Magic-Link 15 Min., Stripe Payments Europe); Cookie-Seite zurueckgebaut (301 -> /datenschutz, Cookies stehen in Abschnitt 4, kein Banner). T1neu umgesetzt: Unternehmer-Pflicht-Checkbox im Buchungs-Modal, protokolliert in `booking_confirmations` (Timestamp/IP/AGB-Version aus `config/legal.php`), CheckoutController erzwingt zeitnahe Bestaetigung serverseitig. System-Mails auf zentrales pressekonto-CI-Layout umgestellt (components/emails/layout, inkl. Framework-Auth-Mails via toMailUsing, EmailBrandingTest). +**06.07. — Zentrale Rechts-E-Mail (User-Entscheidung):** `info@pressekonto.com` ist die Haupt-E-Mail fuer alle rechtlichen Anliegen; zentral in `config/legal.php` (`LEGAL_CONTACT_EMAIL`), alle fuenf Rechtsseiten (Impressum, AGB, Datenschutz, /melden, /richtlinien) nutzen sie domainuebergreifend. Support-/Redaktionskontakt bleibt je Brand (CONTACT_EMAIL_*), REPORT_EMAIL_* ist nur noch optionales separates DSA-Postfach. Live-Domain bestaetigt .com (Deployment-Checkliste), nicht .de. **Wiedereinstieg / naechste Schritte:** 1. **Klaerungsliste Rechtstexte abarbeiten** (User-Antworten offen, siehe Chat 03.07.): Umami installieren oder Datenschutz-Abschnitt 5 vorerst raus · Log-Frist 14 Tage + Backups 4 Wochen mit Server-Konfig abgleichen · Stripe-Entitaet im Dashboard verifizieren · Medienprivileg-Zitierung praezisieren, falls anwaltlich bestaetigt · AGB par. 1 (3): eigene /portale-Seite oder Link auf Hub-#familie ok? · O-B Depublikations-Preisdarstellung bestaetigen. -2. **[EXTERN]:** REPORT_EMAIL_*/CONTACT_EMAIL_*-Postfaecher anlegen (melden@/legal@) · R1.2 Stripe-Live · R1.4 Preisfreigabe · R5.4 Favicons · anwaltliche Freigabe AGB v0.6/Datenschutz v0.3. +2. **[EXTERN]:** Postfach `info@pressekonto.com` anlegen (Haupt-Rechts-Mail, 06.07.); CONTACT_EMAIL_*-Support-Postfaecher je Brand; REPORT_EMAIL_* optional · R1.2 Stripe-Live · R1.4 Preisfreigabe · R5.4 Favicons · anwaltliche Freigabe AGB v0.6/Datenschutz v0.3. 3. **Backlog Rechtstexte-System (R3.1-Rest):** legal_documents-Versionierung + agb_version_id an Buchungen (E3; config/legal.php ist die Uebergangsloesung) · rejection_categories-DB fuer /richtlinien · T10 eigenstaendige DSA-Meldeformulare mit URL-Feld + Vorgangsnummer · T12 Depublikations-Checkout · T13 Melde-Button prominenter an der PM. 4. **Dann:** R6.1 manuelle QA-Checkliste, R6.3 Staging-Rehearsal, R6.4 Go-Live-Kette, R6.5 Git-Hygiene (Branch fix/zeitzone-europe-berlin liegt ~125 Commits vor main — mergen, sobald freigegeben). Offen bleibt ausserdem die User-Entscheidung zu den Legacy-SQL-Dumps in `dev/migration 2026/sql/` (enttracken vor Repo-Sharing). diff --git a/resources/views/livewire/customer/bookings.blade.php b/resources/views/livewire/customer/bookings.blade.php index 4a66d58e..36a70484 100644 --- a/resources/views/livewire/customer/bookings.blade.php +++ b/resources/views/livewire/customer/bookings.blade.php @@ -637,7 +637,7 @@ new #[Layout('components.layouts.app'), Title('Buchungen & Add-ons')] class exte

- {{ __('Mehr als 60 Pressemitteilungen pro Monat, mehrere Teams oder Sonderkonditionen? Enterprise-Konditionen erhalten Sie auf Anfrage über den Support. Inklusive KI-Prüfung und Veröffentlichung.info@pressekonto.com') }} + {{ __('Mehr als 60 Pressemitteilungen pro Monat, mehrere Teams oder Sonderkonditionen? Enterprise-Konditionen erhalten Sie auf Anfrage unter info@pressekonto.com — inklusive Inhaltsprüfung und Veröffentlichung.') }}

diff --git a/resources/views/web/agb.blade.php b/resources/views/web/agb.blade.php index 4e6b72dc..e4319fbe 100644 --- a/resources/views/web/agb.blade.php +++ b/resources/views/web/agb.blade.php @@ -11,7 +11,7 @@ $isHub = str_contains($host, 'pressekonto'); $brandKey = $isHub ? 'pressekonto' : (str_contains($host, 'presseecho') ? 'presseecho' : 'businessportal24'); $brand = config('domains.domains.'.$brandKey.'.brand', []); - $contactEmail = $brand['contact_email'] ?? 'info@businessportal24.com'; + $contactEmail = (string) config('legal.contact_email'); $hubUrl = rtrim((string) config('domains.domain_portal_url', config('app.url')), '/'); $hubLabel = str_replace(['https://', 'http://'], '', $hubUrl); diff --git a/resources/views/web/datenschutz.blade.php b/resources/views/web/datenschutz.blade.php index c5563f45..2fa5d0e5 100644 --- a/resources/views/web/datenschutz.blade.php +++ b/resources/views/web/datenschutz.blade.php @@ -13,7 +13,7 @@ $brandKey = $isHub ? 'pressekonto' : (str_contains($host, 'presseecho') ? 'presseecho' : 'businessportal24'); $brand = config('domains.domains.'.$brandKey.'.brand', []); $portalName = ($brand['name'] ?? '').($brand['accent'] ?? ''); - $contactEmail = $brand['contact_email'] ?? 'info@businessportal24.com'; + $contactEmail = (string) config('legal.contact_email'); $reportEmail = $brand['report_email'] ?? $contactEmail; $hubUrl = rtrim((string) config('domains.domain_portal_url', config('app.url')), '/'); $hubLabel = str_replace(['https://', 'http://'], '', $hubUrl); diff --git a/resources/views/web/impressum.blade.php b/resources/views/web/impressum.blade.php index 6bf88916..4610256e 100644 --- a/resources/views/web/impressum.blade.php +++ b/resources/views/web/impressum.blade.php @@ -11,7 +11,7 @@ $brandKey = $isHub ? 'pressekonto' : (str_contains($host, 'presseecho') ? 'presseecho' : 'businessportal24'); $brand = config('domains.domains.'.$brandKey.'.brand', []); $portalName = ($brand['name'] ?? '').($brand['accent'] ?? ''); - $contactEmail = $brand['contact_email'] ?? 'info@businessportal24.com'; + $contactEmail = (string) config('legal.contact_email'); $reportEmail = $brand['report_email'] ?? $contactEmail; $hubUrl = rtrim((string) config('domains.domain_portal_url', config('app.url')), '/'); @endphp @@ -32,7 +32,7 @@ Deutschland

- E-Mail: info@businessportal24.com
+ E-Mail: {{ $contactEmail }}
Telefon: +49 5206 7076721 (kein telefonischer Support)

diff --git a/resources/views/web/melden.blade.php b/resources/views/web/melden.blade.php index 62570afc..62b28a34 100644 --- a/resources/views/web/melden.blade.php +++ b/resources/views/web/melden.blade.php @@ -13,7 +13,7 @@ $brandKey = $isHub ? 'pressekonto' : (str_contains($host, 'presseecho') ? 'presseecho' : 'businessportal24'); $brand = config('domains.domains.'.$brandKey.'.brand', []); $portalName = ($brand['name'] ?? '').($brand['accent'] ?? ''); - $contactEmail = $brand['contact_email'] ?? 'info@businessportal24.com'; + $contactEmail = (string) config('legal.contact_email'); $reportEmail = $brand['report_email'] ?? $contactEmail; @endphp diff --git a/resources/views/web/richtlinien.blade.php b/resources/views/web/richtlinien.blade.php index 88f34857..30249536 100644 --- a/resources/views/web/richtlinien.blade.php +++ b/resources/views/web/richtlinien.blade.php @@ -10,7 +10,7 @@ $host = request()->getHost(); $isHub = str_contains($host, 'pressekonto'); $brandKey = $isHub ? 'pressekonto' : (str_contains($host, 'presseecho') ? 'presseecho' : 'businessportal24'); - $contactEmail = config('domains.domains.'.$brandKey.'.brand.contact_email') ?? 'info@businessportal24.com'; + $contactEmail = (string) config('legal.contact_email'); $rejectionCategories = [ ['code' => 'K1', 'label' => 'Rechtswidrige Inhalte', 'desc' => 'Inhalte, die gegen geltendes Recht verstoßen — etwa strafbare Inhalte, Verstöße gegen das Wettbewerbs- oder Heilmittelwerberecht, Angebote verbotener Produkte oder Dienstleistungen.'], diff --git a/tests/Feature/Web/StaticPagesTest.php b/tests/Feature/Web/StaticPagesTest.php index afdf6a4f..f9415236 100644 --- a/tests/Feature/Web/StaticPagesTest.php +++ b/tests/Feature/Web/StaticPagesTest.php @@ -52,6 +52,9 @@ test('the imprint shows the real provider data instead of placeholders', functio ->assertSeeText('Kevin Adametz') ->assertSeeText('33739 Bielefeld') ->assertSeeText('DE298729654') + // Zentrale Rechts-E-Mail (config/legal.php) auf allen Domains. + ->assertSeeText('info@pressekonto.com') + ->assertDontSeeText('info@businessportal24.com') // DDG statt TMG; keine erfundene GmbH/Musterstraße mehr. ->assertSeeText('§ 5 DDG') ->assertDontSeeText('Business Portal GmbH') @@ -96,6 +99,7 @@ test('the privacy policy renders the real v03 content with host-specific blocks' $this->get('https://presseecho.test/de/datenschutz') ->assertSuccessful() ->assertSeeText('adametz.media') + ->assertSeeText('info@pressekonto.com') ->assertSeeText('Hetzner Online GmbH') ->assertSeeText('Medienprivileg') ->assertSeeText('Änderungslinks für Pressekontakte')