upgrade.php
Version-gated upgrade routine.
Table of Contents
Functions
- creationell_captcha_maybe_upgrade() : void
- Runs schema migrations when the stored version differs from the running one.
- creationell_captcha_migrate_widget_mode() : void
- Migrates the legacy `widget_mode` setting (Modul 11a) to the new `widget_display` + `widget_auto_trigger` pair (Modul 14). Idempotent — if `widget_display` is already present in the stored option, the migration is skipped.
- creationell_captcha_store_migrated_settings() : void
- Writes a migrated settings array back — through the sanitiser, with the write context pinned.
Functions
creationell_captcha_maybe_upgrade()
Runs schema migrations when the stored version differs from the running one.
creationell_captcha_maybe_upgrade() : void
Hooked on admin_init and gated twice — see the inline notes on DS-2. When
the event-log table already exists it is re-run through dbDelta so new
columns are added; a missing table is created only when
analytics_event_log says it should exist (DS-4).
creationell_captcha_migrate_widget_mode()
Migrates the legacy `widget_mode` setting (Modul 11a) to the new `widget_display` + `widget_auto_trigger` pair (Modul 14). Idempotent — if `widget_display` is already present in the stored option, the migration is skipped.
creationell_captcha_migrate_widget_mode() : void
Mapping: visible → widget_display=standard, widget_auto_trigger=none auto → widget_display=invisible, widget_auto_trigger=onload overlay → widget_display=floating, widget_auto_trigger=onsubmit
Den Alt-Schlüssel widget_mode nimmt die Migration aus dem Wertesatz, den
sie übergibt; ab Modul 14 wird er nirgends mehr gelesen. Ob er damit aus der
Option verschwindet, entscheidet der Sanitizer: Er trägt am Ende jeden
Schlüssel nach, der zwar gespeichert ist, aber nicht in der
Feldspezifikation steht (Carry-over für den Toggle eines gerade inaktiven
Formular-Plugins) — und er liest dafür den Stand VOR diesem Schreibvorgang.
Im wp-admin, wo er zusätzlich als sanitize_option-Filter hängt, kommt
widget_mode deshalb zurück. Folgenlos: keine Codestelle wertet den
Schlüssel noch aus, und creationell_captcha_get_settings() merged ohnehin
über die Defaults. Aus demselben Grund ist der Aufräum-Zweig unten
(widget_display vorhanden, widget_mode noch da) dort ein Schreibvorgang
ohne Änderung.
creationell_captcha_store_migrated_settings()
Writes a migrated settings array back — through the sanitiser, with the write context pinned.
creationell_captcha_store_migrated_settings(array<string, mixed> $settings) : void
B-M6: Die Migration schrieb den rohen Options-Inhalt zurück. Heute ist das
folgenlos (der Pfad läuft nur im wp-admin, wo der sanitize_option-Filter
hängt, und die gesetzten Werte stammen aus einer Konstantentabelle), aber es
ist derselbe Bauart-Fehler wie in settings-manager.php: Ob sanitisiert
wird, hing am Request-Kontext statt am Aufrufer. Der Kontext ist
PROGRAMMATIC — der übergebene Wertesatz ist vollständig und bewusst gewählt,
die requires-Rückschreibung der Formular-Semantik würde eine vom Sanitizer
verworfene Eingabe wieder einsetzen.
Was diese Funktion NICHT leistet: einen Schlüssel aus der Option entfernen.
Die Nachtrags-Schleife am Ende des Sanitizers setzt jeden gespeicherten
Schlüssel wieder ein, der nicht in der Feldspezifikation steht — sie liest
dabei den Stand VOR diesem Schreibvorgang. Ein unset() hier würde nur in
einem Request ohne sanitize_option-Filter wirken und genau die
Kontextabhängigkeit wiederherstellen, die dieser Fix beseitigt. Der
Alt-Schlüssel widget_mode bleibt deshalb gegebenenfalls stehen; er wird
nirgends mehr gelesen (siehe Docblock der Migration).
Parameters
- $settings : array<string, mixed>
-
Migrierter Wertesatz.