Phase 1: sync_locked_at auf press_releases (Importer überspringt gesperrte PMs auch bei --force), LegalRequest um Verifikation/Ausführung erweitert, verschlüsselte Vorher-Snapshots mit Löschfrist (snapshots:purge, täglich). Phase 2: AnonymizationService (Unicode-Wortgrenzen-Schwärzung, Pflicht-Diff, transaktionale Ausführung mit Snapshot, Kontakt-Detach, Bild-Löschung, Sitemap-Invalidierung, Verlauf ohne Klartext-Altwerte); Admin-Queue kann DSGVO-Anfragen anonymisieren oder depublizieren, inkl. Snapshot-Restore. Phase 3: Deflektions-Trichter „PM melden/ändern" (melden/pm) mit Kosten- Tabelle vorab; Magic-Link geht nur an die hinterlegte Pressekontaktadresse (neuer purpose press_release_report), atomare Verifikation, Anliegen-Auswahl erzeugt verifizierte Queue-Anfragen; toter-Kanal-Fallback; Owner-Einstieg. Phase 4: Panel-Abschnitt „Änderung & Korrektur" — Levenshtein-Gate (5 %, Mini-Edit-Ausnahme ≤ 2 Zeichen) stuft klein/groß ein; kleine Korrektur kostenlos sofort live (Snapshot, Sperre, Verlauf, Re-Score), größere als Change-Anfrage (Interim bis 10-€-Checkout, Phase 7). Entwicklungsplan mit Entscheidungen E1-E8 und offenen Punkten in docs/Decision-Update; 41 Pest-Tests (tests/Feature/Legal) grün. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
120 lines
6.2 KiB
PHP
120 lines
6.2 KiB
PHP
@extends('web.layouts.web-master')
|
|
|
|
@section('title', __('static.report.meta_title'))
|
|
@section('meta_description', __('static.report.meta_description'))
|
|
|
|
@php
|
|
// Meldeverfahren v0.1 (Rechtstexte-Architektur, 03.07.2026). Die Wege 1/2
|
|
// laufen über die bestehenden Formulare an jeder Mitteilung ("Inhalt
|
|
// melden"); eigenständige Formulare mit URL-Feld sowie der Depublikations-
|
|
// Checkout sind Backlog (T10/T12).
|
|
$host = request()->getHost();
|
|
$isHub = str_contains($host, 'pressekonto');
|
|
$brandKey = $isHub ? 'pressekonto' : (str_contains($host, 'presseecho') ? 'presseecho' : 'businessportal24');
|
|
$brand = config('domains.domains.'.$brandKey.'.brand', []);
|
|
$portalName = ($brand['name'] ?? '').($brand['accent'] ?? '');
|
|
$loginUrl = rtrim((string) config('domains.domain_portal_url', config('app.url')), '/').'/login';
|
|
|
|
// Statt der Melde-E-Mail-Adresse verweisen alle Wege auf das schwebende
|
|
// Kontakt-Widget (Badge unten rechts) — derselbe Trigger wie im Footer.
|
|
$contactTrigger = sprintf(
|
|
'<button type="button" x-data @click="$dispatch(\'open-contact-modal\')" class="underline underline-offset-2 cursor-pointer hover:text-ink">%s</button>',
|
|
e(__('static.report.contact_trigger_label')),
|
|
);
|
|
@endphp
|
|
|
|
@section('content')
|
|
<x-web.static-page
|
|
:eyebrow="__('static.legal.eyebrow')"
|
|
:title="__('static.report.title')"
|
|
:lead="__('static.report.lead', ['portal' => $portalName])"
|
|
:breadcrumb="__('static.report.breadcrumb')"
|
|
>
|
|
<div class="pm-body max-w-[760px]">
|
|
<p>{!! __('static.report.intro_direct') !!}</p>
|
|
<p>{!! __('static.report.intro_free') !!}</p>
|
|
|
|
{{-- Meldeverfahren v2 (Phase 3): Self-Service-Einstieg über die
|
|
hinterlegte Pressekontaktadresse. --}}
|
|
<div class="my-6 px-4 py-4 border border-bg-rule bg-bg-elev">
|
|
<p class="font-semibold text-ink mb-1">{{ __('static.pm_report.title') }}</p>
|
|
<p class="text-[13px] text-ink-2 mb-3">{{ __('static.pm_report.verification_note') }}</p>
|
|
<a href="{{ route('melden.pm') }}"
|
|
class="inline-flex items-center px-4 py-2 bg-brand text-white text-[13px] font-semibold hover:opacity-90 no-underline">
|
|
{{ __('static.pm_report.breadcrumb') }}
|
|
</a>
|
|
</div>
|
|
|
|
<h2>{{ __('static.report.way1_heading') }}</h2>
|
|
<p>{{ __('static.report.way1_intro') }}</p>
|
|
<ul>
|
|
<li>{{ __('static.report.way1_item_1') }}</li>
|
|
<li>{{ __('static.report.way1_item_2') }}</li>
|
|
<li>{{ __('static.report.way1_item_3') }}</li>
|
|
<li>{{ __('static.report.way1_item_4') }}</li>
|
|
<li>{{ __('static.report.way1_item_5') }}</li>
|
|
<li>{{ __('static.report.way1_item_6') }}</li>
|
|
</ul>
|
|
<p>{!! __('static.report.way1_how', ['form_url' => route('melden.form', ['way' => 'rechtswidrig']), 'contact' => $contactTrigger]) !!}</p>
|
|
<p>{{ __('static.report.way1_needs') }}</p>
|
|
<ul>
|
|
<li>{{ __('static.report.way1_need_1') }}</li>
|
|
<li>{{ __('static.report.way1_need_2') }}</li>
|
|
<li>{{ __('static.report.way1_need_3') }}</li>
|
|
<li>{{ __('static.report.way1_need_4') }}</li>
|
|
</ul>
|
|
<p>{{ __('static.report.way1_process') }}</p>
|
|
<p>{{ __('static.report.way1_author_note') }}</p>
|
|
|
|
<h2>{{ __('static.report.way2_heading') }}</h2>
|
|
<p>{{ __('static.report.way2_intro') }}</p>
|
|
<p>{!! __('static.report.way2_how', ['form_url' => route('melden.form', ['way' => 'kontaktdaten']), 'contact' => $contactTrigger]) !!}</p>
|
|
<p>{{ __('static.report.way2_gdpr') }}</p>
|
|
<p>{{ __('static.report.way2_verification') }}</p>
|
|
<p>{{ __('static.report.way2_result') }}</p>
|
|
<p>{{ __('static.report.way2_companies') }}</p>
|
|
|
|
<h2>{{ __('static.report.way3_heading') }}</h2>
|
|
<p>{{ __('static.report.way3_intro') }}</p>
|
|
<p>{{ __('static.report.way3_magic_link') }}</p>
|
|
<ul>
|
|
<li>{{ __('static.report.way3_item_1') }}</li>
|
|
<li>{{ __('static.report.way3_item_2') }}</li>
|
|
<li>{{ __('static.report.way3_item_3') }}</li>
|
|
<li>{{ __('static.report.way3_item_4') }}</li>
|
|
</ul>
|
|
<p>{!! __('static.report.way3_how', ['login_url' => $loginUrl, 'contact' => $contactTrigger]) !!}</p>
|
|
|
|
<h2>{{ __('static.report.way4_heading') }}</h2>
|
|
<p>{{ __('static.report.way4_intro') }}</p>
|
|
<p>{{ __('static.report.way4_authorized') }}</p>
|
|
<p>{{ __('static.report.way4_rules_intro') }}</p>
|
|
<ul>
|
|
<li>{{ __('static.report.way4_rule_1') }}</li>
|
|
<li>{{ __('static.report.way4_rule_2') }}</li>
|
|
<li>{{ __('static.report.way4_rule_3') }}</li>
|
|
<li>{{ __('static.report.way4_rule_4') }}</li>
|
|
</ul>
|
|
@php
|
|
// T12: Preis erscheint erst, wenn er konfiguriert ist (O6) —
|
|
// Doppelausweis netto/brutto, da auch Laien mitlesen (O-B).
|
|
$depublicationPriceCents = (int) config('billing.depublication_price_cents');
|
|
@endphp
|
|
@if ($depublicationPriceCents > 0)
|
|
<p>{!! __('static.report.way4_price', [
|
|
'net' => number_format($depublicationPriceCents / 100, 2, ',', '.'),
|
|
'gross' => number_format($depublicationPriceCents * (1 + (float) config('billing.vat_rate')) / 100, 2, ',', '.'),
|
|
'contact' => $contactTrigger,
|
|
]) !!}</p>
|
|
@else
|
|
<p>{!! __('static.report.way4_price_fallback', ['contact' => $contactTrigger]) !!}</p>
|
|
@endif
|
|
<p>{{ __('static.report.way4_note') }}</p>
|
|
|
|
<h2>{{ __('static.report.questions_heading') }}</h2>
|
|
<p>{{ __('static.report.questions_links') }}</p>
|
|
<p>{!! __('static.report.questions_reply', ['contact' => $contactTrigger]) !!}</p>
|
|
<p>{{ __('static.report.languages') }}</p>
|
|
</div>
|
|
</x-web.static-page>
|
|
@endsection
|