Architecture Decision Record · 0027

Thin Custom-PHP Adapter solcom_editorial für State-abhängige Form-Sichtbarkeit

Entscheidung. Die ursprüngliche PRD-Vorgabe „kein Custom-PHP, alle vier Module rein YAML" wird für P2503-105 durch ein dünnes Adapter-Modul solcom_editorial aufgeweicht. Das Modul enthält ausschließlich hook_form_alter und versteckt Scheduler-Felder (publish_state, unpublish_state, publish_on, unpublish_on) je nach Moderation-State und User-Permission. Eine reine Drupal-Config-Lösung deckt diese State-abhängige UI-Logik nicht ab.

Kontext

Das PRD Publishing Workflows Konfiguration (2026-05-13) hält fest: „Alle vier Implementierungsmodule sind reine Drupal-Konfiguration (YAML). Kein Custom-PHP, keine Modul-Entwicklung." Im Zuge der Umsetzung sind zwei UI-Anforderungen aufgetaucht, die diese Vorgabe brechen würden, wenn man sie wörtlich nimmt:

  1. Moderation-State-Dropdown zeigt unzulässige Zielzustände. Der Scheduler-Felder publish_state und unpublish_state listet per default alle Workflow-States, auch solche, in die der aktuelle User aus dem aktuellen State nicht transitionieren darf. Das ist verwirrend und führt zu Validation-Errors beim Speichern.
  2. Scheduler-Datumsfeld publish_on / unpublish_on nur für berechtigte Rollen. PRD §Modul 3: „Das Scheduler-Datumsfeld wird nur für Rollen mit Publish-Berechtigung angezeigt — content_editor sieht es nicht." Drupal kennt dafür keine native Permission-pro-Field-Lösung im Standard-Form-Display. Das field_permissions-Contrib-Modul wäre die Alternative, würde aber ein zusätzliches Modul mit größerem Footprint einführen.

Beide Punkte sind Spec-Anforderungen, nicht Goldplating. Eine pure Config-Lösung existiert nicht.

Entscheidung

Wir bauen ein Custom-Modul web/modules/custom/solcom_editorial/ mit genau einem Hook (hook_form_alter) und einer Helper-Funktion. Das Modul:

Die PRD-Vorgabe „kein Custom-PHP" wird damit zu „kein Custom-PHP außer einem dünnen Form-Adapter" abgeschwächt. Begründung: Die Spec selbst (PRD §Modul 3) verlangt Permission-gesteuertes Form-Verhalten, das in Drupal ohne Custom-PHP nicht zu erreichen ist.

Rejected alternatives

Consequences