T10: DSA-Meldeformulare mit URL-Feld, Vorgangsnummer und Eingangsbestaetigung

Zwei eigenstaendige Formulare unter /melden/rechtswidrig (DSA Art. 16:
URL, Name, E-Mail, Begruendung, Wahrheitsversicherung) und
/melden/kontaktdaten (DSGVO-Antrag) auf allen drei Domains. Gemeldete
URLs werden automatisch der passenden veroeffentlichten PM zugeordnet;
ohne Treffer bleibt die URL im payload. Jede Meldung erhaelt eine
Vorgangsnummer (M-{id}, analog K-{id} der Kuendigung), die meldende
Person unverzueglich eine Eingangsbestaetigung (DSA Art. 16 Abs. 4) und
das Melde-Postfach einen internen Hinweis — auch im bestehenden
Per-PM-Flow. Admin-Queue zeigt Vorgangsnummer, Name und gemeldete URL;
/melden verlinkt die neuen Formulare als ersten Weg.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-07-06 09:35:30 +00:00
parent 61a677aa0b
commit 2a9be7a9af
14 changed files with 673 additions and 12 deletions

View file

@ -9,6 +9,7 @@ use App\Http\Controllers\Web\NewsroomDetailController;
use App\Http\Controllers\Web\NewsroomsController;
use App\Http\Controllers\Web\PreiseController;
use App\Http\Controllers\Web\ReleaseDetailController;
use App\Http\Controllers\Web\ReportFormController;
use App\Http\Controllers\Web\SitemapController;
use App\Http\Controllers\Web\SucheController;
use App\Http\Controllers\Web\TerminationController;
@ -232,6 +233,16 @@ Route::prefix('{edition}')->whereIn('edition', SetEdition::EDITIONS)->group(func
// drei Domains ausgeliefert.
Route::view('richtlinien', 'web.richtlinien')->name('richtlinien');
Route::view('melden', 'web.melden')->name('melden');
// T10: Eigenständige Meldeformulare mit URL-Feld (Meldeverfahren Weg 1/2)
// — Vorgangsnummer + Eingangsbestätigung per E-Mail (DSA Art. 16).
Route::get('melden/{way}', [ReportFormController::class, 'show'])
->whereIn('way', ReportFormController::WAYS)
->name('melden.form');
Route::post('melden/{way}', [ReportFormController::class, 'store'])
->middleware('throttle:10,1')
->whereIn('way', ReportFormController::WAYS)
->name('melden.form.store');
});
// ---------------------------------------------------------------------------