CreaCaptcha

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.


        
On this page

Search results