PRD · P2503-105 · Konfigurationen

Publishing Workflows Konfiguration

Scope. Einführung eines Hard-Review-Editorial-Workflows für node.blog und node.page: vier Zustände (Draft → In Review → Published / Unpublished), neue Rolle content_manager als Freigeber, zeitgesteuerte Veröffentlichung via Scheduler aus dem Zustand in_review. node.vacancy bleibt ausgeschlossen (ADR-0026). Reine Drupal-Konfiguration — kein Custom-PHP.

Problem Statement

Redakteure können aktuell Inhalte direkt publizieren — ohne zweite Kontrollinstanz. Es gibt keinen strukturierten Review-Prozess, kein Vier-Augen-Prinzip und keine Möglichkeit, Inhalte zu einem geplanten Zeitpunkt automatisch live zu schalten. Fehlerhafte oder ungekürzte Inhalte gelangen direkt auf die öffentliche Website.

Zusätzlich fehlt ein klarer Pfad für Soft-Delete: unerwünschte Inhalte können nur vollständig gelöscht werden, nicht in einen Papierkorb verschoben werden, aus dem eine Wiederherstellung möglich wäre.

Solution

Einführung eines vierstufigen Hard-Review-Workflows auf Basis von Drupal Content Moderation. Inhalte durchlaufen zwingend die Stufe in_review bevor sie publiziert werden können. Eine neue Rolle content_manager trägt die Freigabe-Verantwortung. Der Scheduler erlaubt zeitgesteuerte Veröffentlichung aus der Review-Stufe heraus. Das Trash-Modul bleibt aktiv für Soft-Delete mit rollenbasierter Löschbefugnis.

Die Lösung ist vollständig konfigurationsbasiert — kein Custom-Code nötig. Bestehende publizierte Inhalte erhalten automatisch den Moderation-Status published.

User Stories

  1. Als content_editor möchte ich einen neuen Inhalt als Entwurf (draft) anlegen, damit ich ihn ohne sofortige Veröffentlichung bearbeiten kann.
  2. Als content_editor möchte ich einen fertigen Entwurf zur Review einreichen (submit_for_review), damit ein Freigeber ihn prüfen kann.
  3. Als content_editor möchte ich eigene Drafts löschen (Soft-Delete in den Papierkorb), damit ich Fehlversuche bereinigen kann, ohne andere Inhalte zu gefährden.
  4. Als content_editor möchte ich keinen direkten Publish-Button sehen, damit die Versuchung entfällt, den Review-Prozess zu umgehen.
  5. Als content_manager möchte ich eingereichte Inhalte (in_review) prüfen und entweder freigeben (publish) oder zur Überarbeitung zurückschicken (request_changes).
  6. Als content_manager möchte ich beim Freigeben ein zukünftiges Publish-Datum setzen können, damit Inhalte zeitgesteuert ohne manuelles Eingreifen live gehen.
  7. Als content_manager möchte ich einen publizierten Inhalt auf unpublished setzen können, damit ich ihn kurzfristig aus dem öffentlichen Auftritt nehmen kann.
  8. Als content_manager möchte ich unpublished Inhalte wieder zur Bearbeitung freigeben (create_new_draft), damit sie den vollen Review-Zyklus erneut durchlaufen.
  9. Als content_manager möchte ich beliebige Inhalte löschen (Soft-Delete), damit ich als Freigeber auch Inhalte anderer Redakteure bereinigen kann.
  10. Als administrator möchte ich alle Transitionen ausführen können, damit ich im Notfall eingreifen kann ohne Rollenwechsel.
  11. Als Redakteur möchte ich eine klare Übersicht der Inhalte im Status in_review sehen, damit ich weiß, was auf Freigabe wartet.
  12. Als Redakteur möchte ich eine Übersicht geplanter Veröffentlichungen sehen (Scheduler-Views), damit ich den Redaktionskalender überblicken kann.
  13. Als Redakteur möchte ich, dass Stellenanzeigen (vacancy) weiterhin automatisch importiert und direkt publiziert werden, damit der Recruiting-Prozess nicht durch den Editorial-Workflow blockiert wird.

Implementation Decisions

Modul 1 — Editorial Workflow Config

Die bestehende Konfiguration workflows.workflow.basic_editorial wird um den Zustand in_review erweitert. Bestehende Zustände (draft, published, unpublished) bleiben erhalten. Der Default-Zustand bleibt draft.

Zustandpublisheddefault_revision
draftfalsefalse
in_reviewfalsefalse
publishedtruetrue
unpublishedfalsetrue
TransitionVonNachRollen
submit_for_reviewdraftin_reviewcontent_editor, content_manager, administrator
request_changesin_reviewdraftcontent_manager, administrator
publishin_reviewpublishedcontent_manager, administrator
unpublishpublishedunpublishedcontent_manager, administrator
create_new_draftunpublished, published, draftdraftcontent_editor (eigene), content_manager, administrator

Entity-Types im Workflow: node.blog, node.page. node.vacancy bleibt ausgeschlossen (siehe ADR-0026).

Modul 2 — Neue Rolle content_manager

Neue Drupal-Rolle content_manager mit folgenden Berechtigungen: Ausführen aller Workflow-Transitionen (publish, request_changes, unpublish, create_new_draft), Zugriff auf Scheduler-Datumsfeld, Löschen beliebiger Nodes (Trash). Die Rolle ist nicht privilegiert für User-Management oder Site-Konfiguration.

Modul 3 — Scheduler Integration

Modul scheduler_content_moderation_integration muss aktiv sein. Scheduler wird für node.blog und node.page aktiviert (default_publish_enable: true). Das Scheduler-Datumsfeld wird nur für Rollen mit Publish-Berechtigung angezeigt — content_editor sieht es nicht (via Field-Permissions oder Form-Display-Konfiguration). Scheduling ist konzeptuell nur aus in_review sinnvoll, da nur content_manager Publish-Zugang hat.

Modul 4 — Trash-Berechtigungen

content_editor erhält die Berechtigung, eigene Nodes zu löschen (Soft-Delete in den Papierkorb). content_manager und administrator können beliebige Nodes löschen. Auto-Purge bleibt deaktiviert.

Bestandsinhalt

Beim Hinzufügen von node.blog und node.page zum Workflow setzt Drupal automatisch moderation_state: published für alle bereits publizierten Inhalte. Kein manueller Migrations-Aufwand.

i
Alle vier Module sind reine Drupal-Konfiguration (YAML). Kein Custom-PHP, keine Modul-Entwicklung. Die Konfiguration wird über config/sync/ versioniert und via drush cim deployed.

Testing Decisions

Ein guter Test prüft ausschließlich das externe Verhalten — welche Transitionen welche Rollen ausführen können — nicht die interne YAML-Struktur. Tests sollen gegen eine laufende Drupal-Instanz laufen (kein Mock des Workflow-Systems).

Zu testende Module

Prior Art

Im Repo existieren keine bestehenden Workflow-Tests. Referenz: Drupal Core Content Moderation Tests (core/modules/content_moderation/tests/) als Muster für rollenbasierte Transition-Tests.

Out of Scope

Further Notes