Anforderungen

  • Als Betreiber der Seite möchte ich, dass Nutzer neue Inhalte erstellen dürfen, die jedoch redaktionell moderiert werden müssen.
  • Als Betreiber der Seite möchte ich, dass Nutzer bereits veröffentlichte Inhalte weiterhin bearbeiten dürfen. Die Änderungen müssen jedoch ebenfalls redaktionell moderiert werden. Bis zur Moderation bleiben die Vorgänger-Revisionen weiterhin veröffentlicht.
  • Als Redakteur möchte ich eine Liste der zu moderierenden Inhalte dargestellt bekommen.
  • Als Redakteur möchte ich auf der Revisions-Übersichtsseite Änderungen zwischen Revisionen vergleichen können.
  • Als Redakteur möchte ich darüber entscheiden können, welche Revision eines Nodes veröffentlicht wird und diese gegebenenfalls wieder ent-veröffentlichen zu können.
  • Als Nutzer möchte ich in der Liste meiner eigenen Inhalte den Zustand des Nodes angezeigt bekommen.
  • Als Nutzer möchte ich die unmoderierten Änderungen an meinen Inhalten einsehen können.

Vergleich verschiedener Revisioning-Systeme

Dieser Beitrag stellt verschiedene Konzepte zur redaktionellen Moderation nutzer-generierter Inhalte mit Drupal vor: Core Revisionierung, Workbench, Workflow und Revisioning.

Drupal Core Revisioning-System

Mit dem Drupal Core lässt sich bereits eine grundsätzliche Revisionierung erstellen:

  • Beim Speichern hat der User die Möglichkeit zu entscheiden, ob eine neue Revision erstellt werden soll.
  • Unter node/[nid]/revisions befindet sich eine Liste der Revisionen.
  • Sofern der Nutzer die Berechtigung "View content revisions" besitzt. kann er ältere Revisionen unter der URL node/[nid]/revisions/[vid]/view einsehen.
  • Unter node/[nid]/revisions/[vid]/revert lässt sich eine Revision zurücksetzen. Hierbei wird eine Kopie der ursprünglichen Revision unter einer neuen Revisions-ID ("vid") erstellt, die den Zusatz "Copy of the revision from [Zeitstempel der Revision]" erhält.

Im Core gibt es jedoch keinen Moderations-Prozess: neue Revisionen werden unmittelbar veröffentlicht. Für diesen Prozess spielt es keine Rolle, ob Nodes per Node-Type standardmäßig veröffentlicht werden.

Mit Views gibt es ebenfalls keine Möglichkeit, Inhalte von Revisionen außerhalb der current Revision zu selektieren.

Diff-Modul

Als Zusatz-Modul für sämtliche beschriebenen Ansätze gibt es das Diff-Modul. Dieses Modul stellt auf der Revisions-Übersichtsseite Checkboxen und einen Button zur Verfügung, mit dem sich Revisionen paarweise vergleichen lassen.

Workbench Moderation

Auf der Eigenschaftsseite eines Nodetypes bietet Workbench Moderation es die Option "Enable moderation of revisions".

Workbench Moderation stellt weitere Tabellen zur Verfügung, um flexible Prozesse einzurichten, innerhalb derer sich prinzipiell beliebig viele Zustände definieren lassen. Einzelne Nodetypes lassen sich mit diesen Prozessen verknüpfen.

Das Modul bringt einen vordefinierten Prozess mit den drei Zuständen "draft", needs review" and "published" mit, die sich löschen und ergänzen lassen. Die Übergänge eines Nodes von einem in einen anderen Zustand lautet "Transition".

Bei der Transition eines Nodes in den Zustand "published" wird dieser automatisch drupal-veröffentlicht.

Das Modul Workbench Moderation funktioniert übrigens unabhängig von dem Modul Workbench installieren und verwenden.

Problem mit Workbench

Wenn der Node bereits veröffentlicht wurde, erscheint eine nachträgliche Änderung nicht mehr in der Drupal Inhaltsübersicht. Möglicherweise gibt es eine Lösung, die jedoch programmatisch vorzunehmen wäre.

Transitions in Workbench

Es gibt eine Bedienoberfläche für Transitions. Ich habe nirgendwo etwas entdeckt, was sich mit diesen Transistions anstellen lässt. Ich habe ein Berechtigungssystem vermisst, welche Rollen welche Transitions ausführen dürfen.

Workflow

Das Modul Workflow habe ich mir nur kurz angesehen. Wie in Workbench werden die Prozesse dort ebenfalls über Transitions definiert, denen sich Nutzer zuweisen lassen. In meiner Installation gab es jedoch nur den Benutzer "Autor" und keine weitere Funktion "Redaktion".

Wegen dieses Verhaltens und da es sich bei den Benutzern nicht um konfigurierbare Rollen handelt, habe ich den Ausflug an dieser Stelle aus Zeitgründen abgebrochen und mir Revisioning angesehen. Ich hoffe, hier nichts Gravierendes übersehen zu haben.

Revisioning

Das Modul Revisioning bietet auf der Node-Erstellungsseite neben der Möglichkeit der "normalen" Revisionierung die Option, dass der Content bei jeder Aktualisierung den Moderationsprozess erneut durchlaufen muss. Für Moderatoren, die die Berechtigung zur Veröffentlichung von Revisionen besitzen, lassen sich Änderungen automatisch veröffentlichen.

Revisioning bietet zwei Optionen, dass Nutzer in Views automatisch die neueste Revision anstelle der Current Revision dargestellt bekommen und dass sie automatisch die neueste Revision bearbeiten, wenn sie dafür die erforderlichen Rechte haben. Diese Optionen werden nach meinen Beobachtungen jedoch nicht unterstützt.

Revisioning bringt zwei enorm hilfreiche Views mit, die sämtliche zu moderierenden Inhalte und deren Revisionen darstellen.

Durch die modertierte "Veröffentlichung" wird eine unveröffentlichte Revision erwartungsgemäß auch drupal-veröffentlicht. Beim zurücksetzen auf eine Vorgänger-Revision bleibt ein bereits veröffentlichter Node ebenfalls erwartungskonform drupal-veröffentlicht. Mit etwas Customizing lassen sich die vordefinierten Views hervorragend um Links mit "Revisionvs-Historie anzeigen" (node/[nid]/revisions/[vid]/list?destination=dashboard) und "Pending-Revision veröffentlichen" node/[nid]/revisions/[vid]/publish?destination=dashboard) ergänzen.

Tipp

Bei der Konfiguration der Views empfiehlt sich allgemein, die mitgelieferten Abfragen zu klonen und zu deaktivieren und statt dessen auf den Kopien weiterzuarbeiten und diese anschließend in Features zu verpacken. Auf diese Weise läuft man bei späteren Modul-Updates nicht in Gefahr, die eigenen Änderungen zu verlieren.

Vorsicht bei der Freigabe von Revisionen für Nutzer!

Die Berechtigung "Alle Revisionen anzeigen" stellt eine gefährliche Lücke dar, da Nutzer mit dieser Berechtigung sämtliche unveröffentlichen Inhalte der Seite sehen können. Erfreulicherweise bringt Revisioning jedoch eine Berechtigung "View own revisions" für jeden revisionierbaren Nodetype mit. Damit lässt sich die Revisions-Historie auf die Nodes des jeweiligen Eigentümers beschränken.

In Drupal gibt es derzeit keine globale Berechtigung um nur eigene Revisionen ansehen zu dürfen.

Als kleiner Wermutstropfen bleibt dennoch bestehen, dass sich die enorm praktische Revisions-Übersicht nicht für den User auf seine eigenen Revisionen einschränken lässt. Revisionen lassen sich üblicherweise nur im Kontext von Nodes – und dann auch nur eingeschränkt auf die "Current Revision" – abfragen.

Nach meiner Beobachtung bringt Revisioning eine eigene Views-Implementierung auf die Revisionen-Tabelle ohne Einschränkungen mit. Da in der Revision-Tabelle ("node_revision") keine Informationen über den Nodetype gespeichert sind, kann die Berechtigung "Eigene Revisionen pro Nodetype" nicht greifen. Insofern ist dieses Verhalten also kein Bug sondern "by design".

Abhilfe könnte hier m.E. eine globale Drupal-Berechtigung "Eigene Revisionen anzeigen" schaffen.

Fazit

Workbench hat mir auf Anhieb am besten gefallen. Workbench bringt vordefinierte Bedienoberflächen für Nutzer und Redakteur mit, die auf mich sehr aufgeräumt und ansprechend wirken.

Der Fehler, dass sich bereits veröffentliche und nachträglich aktualisierte Inhalte der weiteren Moderation entziehen, lässt sich möglicherweise ohne allzuviel Anstrengung programmatisch beheben. Die Oberflächen vergleichsweise statisch und lassen sich nicht gut in Panels unterbringen bzw. in dort bestehende Dashboards integrieren. Insofern bleibt hier dennoch die Arbeit, die View und Panels Seiten zu konfigurieren – was durchaus gut funktioniert, da die Abfragen alle auf Views beruhen. Der Ansatz von Workbench, das System out-of-the-Box verwenden zu können, kommt damit etwas abhanden.

Mit Workbench lassen sich flexiblere Prozesse als mit Revisioning realisieren. Allerdings bietet Workbench nicht die Möglichkeit zu erzwingen, dass sämtliche Änderungen an einem Node wieder zu einer erneuten Moderation führen müssen, wie Revisioning dies leistet.

Aus diesem Grund habe ich mich für Revisioning entschieden. Seit unseren Erfahrungen aus 2011 aus der Anfangszeit von Drupal 7 war ich sehr angenehm davon überrascht, dass Revisioning so gut funktioniert. Damals waren eine Menge Code-Pfade unvollständig und das Modul hat eine Menge Streß gemacht.

Das kann ich heute glücklicherweise nicht mehr bestätigen. Sämtliche Anforderungen haben sich mit Revisioning ohne Programmierung umsetzen lassen.

Alle vorgestellten Prozesse funktionieren übrigens nicht generisch für Entities sondern nur für Nodes. Das hängt meines Erachtens mit einer vergleichsweise schwachen Implementierung des Revisioning-Systems im Bereich der Contrib-Module zusammen. Da diese Anforderung aber auch eine klassische Node-Anforderung darstellt, tut dies den Ansätzen keinen Abbruch.