Legacy-Abbau Schritt 1: Dual-Write in die kl_*-Tabellen entfernt

Die Migration in participants/ledger_entries ist abgeschlossen: kein
Teilnehmer traegt noch eine legacy_mitarbeiter_id, kein Journaleintrag eine
legacy_table. Damit war der jeweils zweite Zweig ("Default-Mandant schreibt
zusaetzlich nach kl_Einzahlungen/kl_Kaffeeverbrauch/kl_Mitarbeiter") in
sechs Dateien nicht mehr erreichbar - er musste aber bei jeder Aenderung
mitgepflegt werden, zuletzt bei der Bemerkung fuer Einzahlungen.

Entfernt:
- Dual-Write beim Buchen: einzahlung.php, stricheintragen.php, index.php,
  jahresauswertung.php, app/imports.php, app/paypal-inbox.php
- Dual-Write in der Mitgliederverwaltung: ledger_create_participant,
  ledger_update_participant, ledger_set_participant_active,
  ledger_anonymize_participant
- die verwaisten Spiegelfunktionen ledger_mirror_legacy_payment,
  ledger_mirror_legacy_consumption und ledger_void_entry_by_legacy_id

Nebenbei behoben: kaffeeliste.php hat die Teilnehmer-Detailseite nur fuer
Mitglieder mit legacy_mitarbeiter_id verlinkt - die hat seit der Migration
niemand mehr, die Seite war also fuer alle unerreichbar. Verlinkt und
adressiert wird jetzt ueber participant_id; "user_id" bleibt als Alias
erhalten. Der Mandanten-Isolationstest prueft jetzt ledger_void_entry, also
den Pfad, den letzteneintraege.php tatsaechlich nutzt.

Pruefskripte unveraendert gegenueber der Baseline vor dem Umbau
(http-smoke 27/6, role-matrix 55/0); die Isolationspruefung steigt von
9 auf 11 PASS bei gleichem vorbestehendem Fehler.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-21 20:57:49 +02:00
co-authored by Claude Opus 4.8
parent dd6e1e77b0
commit eec7a2fef2
11 changed files with 98 additions and 482 deletions
+10 -5
View File
@@ -3,14 +3,19 @@
include "functions.php";
require_once __DIR__ . "/app/ledger.php";
$legacyUserId = filter_input(INPUT_GET, 'user_id', FILTER_VALIDATE_INT);
if ($legacyUserId === null) {
// Teilnehmer-ID aus dem Journal. "user_id" bleibt als Alias erhalten, damit
// aeltere Links und Lesezeichen weiter funktionieren.
$participantId = filter_input(INPUT_GET, 'participant_id', FILTER_VALIDATE_INT);
if ($participantId === null || $participantId === false) {
$participantId = filter_input(INPUT_GET, 'user_id', FILTER_VALIDATE_INT);
}
if ($participantId === null) {
http_response_code(400);
exit('Fehlender Parameter');
}
if ($legacyUserId === false || $legacyUserId <= 0) {
if ($participantId === false || $participantId <= 0) {
http_response_code(400);
exit('Ungültige Benutzer-ID');
exit('Ungültige Teilnehmer-ID');
}
$pdo = app_db_pdo();
@@ -32,7 +37,7 @@ if (!$hasAccess && $saasUser === null && checkKaffeelisteAdmin($conn, $mailadres
}
$participant = $hasAccess
? ledger_fetch_participant_summary_by_legacy_id($pdo, $tenantId, $legacyUserId)
? ledger_fetch_participant_summary($pdo, $tenantId, $participantId)
: null;
$settings = $hasAccess ? saas_fetch_tenant_settings($pdo, $tenantId) : null;
$paymentEntries = $participant !== null