Schalter fuer den Hinweis auf die Kaffeeliste

Der Hinweis unten rechts laesst sich ab einem bezahlten Tarif in den
Mandant-Einstellungen abschalten (neue Spalte tenant_settings.
watermark_enabled, Standard an). Im kostenlosen Tarif bleibt er fest
eingeschaltet: das Kaestchen ist angehakt und disabled, daneben steht der
Grund. Zusaetzlich erzwingt saas_update_tenant_settings() den Wert dort noch
einmal, damit ein nachgebauter POST ihn nicht abschalten kann.

Der Titel des Wasserzeichens spricht nicht mehr vom kostenlosen Tarif -
zahlende Mandanten koennen es jetzt freiwillig zeigen.

Der Smoke-Test prueft die Einstellungsseite jetzt auch angemeldet. Sein
Muster fuer PHP-Meldungen verlangt dafuer einen Doppelpunkt, sonst haette
das Feld "negative_warning" als Warnung gezaehlt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-21 00:27:44 +02:00
co-authored by Claude Opus 5
parent 1d53b66e3f
commit b244451c42
8 changed files with 153 additions and 16 deletions
+18 -7
View File
@@ -328,27 +328,38 @@ mandant-einstellungen.php (vollständige Tarif-Vergleichstabelle mit Bestell-But
gegen einen echten Test-Mandanten durchspielen (Upgrade, Downgrade
zwischen zwei bezahlten Stufen, Downgrade auf `free`).
## Wasserzeichen im kostenlosen Tarif (umgesetzt)
## Hinweis auf die Kaffeeliste (Wasserzeichen, umgesetzt)
Stand: 2026-08-21. Mandanten im Tarif `free` (bis 10 Teilnehmer) zeigen
unten rechts eine kleine Marke mit Logo und Adresse der Kaffeeliste.
Zahlende Mandanten sehen die Oberfläche ohne fremdes Logo.
Stand: 2026-08-21. Unten rechts steht eine kleine Marke mit Logo und
Adresse der Kaffeeliste. Im Tarif `free` (bis 10 Teilnehmer) ist sie fest
eingeschaltet; ab einem bezahlten Tarif entscheidet der Mandant selbst
(Mandant-Einstellungen, Standard: an).
Umgesetzte Dateien:
```text
app/plan-watermark.php (Sichtbarkeit + Markup)
app/bootstrap.php (app_marketing_url())
app/saas-auth.php (Speichern, Zwang im kostenlosen Tarif)
mandant-einstellungen.php (Schalter + Hinweis)
database/migrations/0027_watermark_setting.sql (Spalte watermark_enabled)
footer.php (Einbindung vor den Skripten)
assets/css/app.css (.plan-watermark)
scripts/http-smoke.php (Dashboard-Check)
scripts/http-smoke.php, scripts/check-m3-settings-flow.php (Regressionstests)
```
- **Nur der Tarif entscheidet.** `plan_watermark_visible()` blendet die
Marke ein, wenn `tenant_billing.plan_code` `free` ist fehlt der
- **Kostenlos heißt fest eingeschaltet.** `plan_watermark_visible()` zeigt
die Marke immer, wenn `tenant_billing.plan_code` `free` ist fehlt der
Datensatz, gilt wie beim Anlegen `free`. Lässt sich der Tarif nicht
lesen, bleibt die Oberfläche sauber: ein Wasserzeichen bei einem
zahlenden Kunden wäre der schlimmere Fehler.
- **Ab einem bezahlten Tarif entscheidet der Mandant.** Die Einstellung
`tenant_settings.watermark_enabled` (Standard 1) steuert die Anzeige;
der Schalter steht in den Mandant-Einstellungen. Im kostenlosen Tarif
wird das Kästchen angehakt und `disabled` dargestellt, mit einem Hinweis
daneben. Verlassen kann man sich darauf nicht `saas_update_tenant_settings()`
erzwingt den Wert im Tarif `free` noch einmal, damit auch ein
nachgebauter POST ihn nicht abschalten kann.
- **Keine Schreibzugriffe im Seitenaufbau.** Bewusst nicht
`billing_fetch_or_init()`, das eine fehlende Zeile anlegen würde; die
Prüfung ist eine reine Leseabfrage und wird pro Request zwischengespeichert.