Update: Inhalt zum Bearbeiten sperren bei konkurrierendem Zugriff

Update: Inhalt zum Bearbeiten sperren bei konkurrierendem Zugriff

Je nach Anzahl der Autoren oder Redakteure die eine Website betreuen kann es schonmal passieren, dass zwei gleichzeitig ein und den selben Beitrag bearbeiten wollen. Der übliche Drupal-Mechanismus ist in diesem Fall, dass derjenige, der zuerst seine Änderungen speichert, das Rennen gewinnt und der andere - der gerade den gleichen Inhalt bearbeitet - eine Fehlermeldung bekommt, wenn er seinerseits diesen Beitrag zu speichern. Das ist ebenso lästig wie ärgerlich, vor allem wenn dabei die mühsam eingegebenen Änderungen verloren gehen.. Besser wäre es, wenn Drupal in so einem Fall den zweiten Benutzer schon vor dem Öffnen des Beitrags darauf hinweisen würde, dass dieser zur Zeit bearbeitet wird und ihm den Zugriff verweigert.

Bei Joomla wird diese Methode angewendet und ich finde das ist die bessere Lösung.

Einen solchen  Mechanismus implementiert das Modul Checkout.

Sobald es aktiviert ist überwacht es, ob ein Benutzer einen Beitrag zum Bearbeiten aufruft. Dann wird dieser sofort für alle anderen Benutzer gesperrt. Erst wenn der erste User seine Änderungen speichert, wird der Beitrag wieder freigegeben. Allerdings gibt es einen kleinen Haken bei der Sache: Verläßt der Anwender den Bearbeiten-Modus nicht über eine Drupal-Schaltfläche, wie z.B. "Speichern" oder durch Anklicken eines anderen Menüpunktes, sondern navigiert mit dem "Zurück"-Button des Browsers von der Bearbeiten-Ansicht weg, so merkt Drupal nicht, dass der Beitrag nicht mehr bearbeitet wird und hält ihn gesperrt (das ist bei Joomla allerdings nicht anders). Ruft nun ein anderer Benutzer diesen Beitrag auf, kriegt er den Sperrvermerk angezeigt und das Bearbeiten des Artikels wird ihm verweigert. Da allerdings das Datum seitdem der Beitrag gesperrt ist und der letzte Bearbeiter dabeistehen, kann man leicht entscheiden, ob man die Sperre aufheben will (dafür gibt es einen entsprechenden Link im Sperrhinweis) oder ob man lieber mit dem Bearbeiter Rücksprache hält, um sicher zu gehen, dass er nicht mehr daran arbeitet.

Meiner Meinung nach sollte dieser Mechanismus in den Core von Drupal Eingang finden. Die "optimistische" Handhabung bei gleichzeitigem Zugriff auf eine Node die Drupal derzeit (d.h. bei der aktuellen Version 6) bietet finde ich nicht glücklich.

Update:

Da Checkout nicht weiter entwickelt wird, empfiehlt es sich stattdessen Content Lock einzusetzen. Das ist komfortabler und kann gesperrten Inhalt auch nach einer bestimmten Zeit automatisch freigeben - praktisch wenn ein Inhalt versehentlich nicht wieder freigegeben wird, z.B. weil der Bearbeiter dann doch keine Änderungen vorgenommen hat und die Seite einfach schließt. Außerdem bindent Content Lock auf der Bearbeiten-Seite einen "Abbrechen"-Link zur Verfügung. Manche User finden es verwirrend, dass dieses Knopf in Drupal normalerweise fehlt. Hier kann er nachgerüstet werden. So wirkt das Bearbetien-Formular nicht nur vollständiger, ein Klick auf "Abbrechen" hebt auch ordnungsgemäß die Sperre auf.