[gelöst] Node-Zustimmung eines gesamten Teams
am 05.01.2010 - 13:44 Uhr in
Hallo zusammen,
ich stehe zur Zeit vor einem strukturellen Problem mit den Modulen Workflow, Trigger (bzw. AJAX Trigger) und Aktionen.
Konkret ist das Ziel, dass über das Modul event ein "Termin-Node" erstellt wird, dem aber alle Nutzer einer bestimmten Rolle zustimmen müssen, bevor dieser Termin in den Kalender eingetragen wird.
Das mag nun etwas kompliziert klingen, deswegen beschreibe ich den Workflow an einem Beispiel:
Es gibt eine Benutzerrolle "Kernteam" mit 3 Benutzern. Ein "normaler" User oder ein Benutzer des Kernteams soll nun ein Event erstellen können, das aber noch nicht im Kalender eingetragen wird, sondern als "Terminvorschlag" gilt.
Alle Mitglieder des Kernteams sollen nun benachrichtigt werden (oder die Terminvorschläge in einer Übersicht sehen) und die Möglichkeit haben, diesen Termin anzunehmen oder abzulehnen.
Erst wenn alle Mitglieder des Kernteams dem Termin zugestimmt bzw. zugesagt haben, soll dieser im Kalender veröffentlicht werden.
Lehnt ein Mitglied des Kernteams den Terminvorschlag ab, sollen die anderen Kernteam-Mitglieder benachrichtigt und der Terminvorschlag verworfen werden.
So können teamintern Termine gefunden werden, bei denen alle Kernteam-Mitglieder Zeit haben und die automatisch (für alle anderen Nutzer sichtbar) im Kalender eingetragen werden, wenn jedes Teammitglied zugesagt hat.
Entfernt erinnert mich dieses Szenario an den oft besprochenen Fall der "Redakteur"-Benutzerrolle, die einem eingereichten Artikel erst zustimmen muss, bevor er veröffentlicht wird. Der Unterschied ist allerdings, dass in meinem Szenario alle Teammitglieder die Node freigeben (bzw. ihr zustimmen) müssen, bevor sie veröffentlicht wird.
Ich habe bereits versucht, mit dem Workflow-Modul diesen Prozess und mittels Trigger bzw. AJAX Trigger die "Zustimmung" abzubilden. Leider scheitert dies an mangelnden Trigger-Events.
Es wäre auch denkbar, dass "Terminvorschlag" und der letztlich beschlossene "Termin" zwei verschiedene Inhaltstypen sind und die Daten des "Terminvorschlags" (z.B. durch Poll realisiert) an eine Event-Node übergeben werden, wenn alle Kernteam-Mitglieder zugesagt haben.
Alternativ habe ich das MakeMeeting-Modul ausprobiert, welches die Terminfindung bereits abbildet. Doch hier fällt die Integration der Benutzerrolle "Kernteam" und das Übertragen in das Event-Modul sehr schwer.
Leider komme ich in diesem Punkt nicht weiter. Hat jemand eine Idee, wie man diesen Terminfindungsprozess des Kernteams aufziehen könnte und welche Module dafür am besten geeignet sind?
Über Hilfestellung oder Lösungshinweise würde ich mich sehr freuen und schon einmal vielen Dank für's Lesen! ;-)
- Anmelden oder Registrieren um Kommentare zu schreiben
Kleine Neuerung: Ich habe
am 16.01.2010 - 16:15 Uhr
Kleine Neuerung: Ich habe das Rules-Modul ausprobiert in Kombination mit CCK. Doch auch damit konnte ich den "Zustimmungs"-Prozess nicht umsetzen.
Eine alternative Möglichkeit scheint das Modul Availability Calendars zu sein, aber das implementiert leider gar keinen Workflow.
Kann mir da denn niemand helfen? :-(
Die Lösung rückt näher:
am 30.01.2010 - 00:35 Uhr
Die Lösung rückt näher: Eine Kombination aus "Rules" und "Flags" scheint am sinnvollsten.
Ein Terminvorschlag (z.B. eine "Event"-Node) könnte unveröffentlicht bleiben - Team-Mitglieder kriegen eine entsprechende Übersicht an unveröffentlichten Terminvorschlägen per "Views" - bis entsprechende "Flags" gesetzt wurden. Erst dann wird der Beitrag per "Rules" veröffentlicht.
Bleibt nur noch das Problem, dass *alle* Benutzer der Kernteam-Rolle ein Flag setzen müssen, damit die Veröffentlichung stattfindet - und nicht nur einer.
Versuchs doch mal mit
am 30.01.2010 - 00:53 Uhr
Versuchs doch mal mit custom_field. So ein Feld fügst Du dem Termin hinzu. Darin kannst Du zählen, wie oft die Flagge gesetzt ist. Dann hast Du eine Rule, die den Termin updated (dabei wird das custom_field berechnet), wenn die Flagge gesetzt wird. Und danach eine Rule, die überprüft, ob der Wert auf 5 steht und dann den Termin veröffentlicht. Nicht ausprobiert, aber so als Idee.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Das ist echt eine gute Idee!
am 30.01.2010 - 11:06 Uhr
Das ist echt eine gute Idee! Auf das Zählen der Flags bin ich noch nicht gekommen.
Aber könnte dann nicht ein einziger Benutzer 5 mal hintereinander die Flagge setzen und die entsprechenden Regeln auslösen?
Die Flag liegt ja beim User.
am 30.01.2010 - 15:32 Uhr
Die Flag liegt ja beim User. Du zählst also, wieviele Benutzer diese Flagge gesetzt haben. Also kann ein einzelner User das nicht beeinflussen.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Okay, das klingt echt nach
am 30.01.2010 - 17:32 Uhr
Okay, das klingt echt nach *der* Lösung! :-)
Ich habe nun ein Ganzzahl-Feld "field_bestaetigungen" mit CCK für Event-Nodes hinzugefügt.
Die erste Rule wird gefeuert "ON event A Node has been flagged, under 'Bestätigung'".
Kannst du mir vielleicht noch einen Tipp geben, wie die auszuführende Aktion dann aussieht? Der Wert von field_bestaetigung soll ja um 1 erhöht werden. Also wähle ich beim Erstellen einer neuen Regel die Aktion "CCK -> Ein Feld füllen" und das entsprechende Feld aus. Aber ich fürchte, die Erhöhung muss mittels PHP-Code ausgeführt werden, oder?
Im Prinzip also etwas wie:
return array(
0 => array('value' => value+1)
};
Aber ich bin mir sicher, dass das so nicht funktioniert. ^^"
Wie macht man das richtig?
In dem PHP-Code wirst Du
am 30.01.2010 - 20:51 Uhr
In dem PHP-Code wirst Du eine kleine Datenbankabfrage brauchen, die die Anzahl der User zählt, die eine Flag auf diesen Termin gesetzt haben. Diesen Wert mußt Du dann eintragen. Bau Dir die Abfrage mal mit Views und sieh Dir den SQL-Code an, den Views gebildet hat. So in etwa wirst Du den auch aufsetzen müssen, damit es geht.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
gelöst
am 31.01.2010 - 19:47 Uhr
Es geht auch ohne PHP-Code! :-)
Das Flags-Modul bringt ein tolles Feature mit: flag count. Also ein Flag "Bestätigung" erstellen, dem node type "event" zuordnen und mit Rules kann man den "Zustimmungsprozess" dann so abbilden:
ON event A Node has been flagged, under "Bestätigung"
IF
Flagging count >= 5, for flagged content, under "Bestätigung"
DO
Beitrag veröffentlichen
und für die Vollständigkeit die Rückrichtung:
ON event A Node has been unflagged, under "Bestätigung"
IF
Flagging count <= 5, for flagged content, under "Bestätigung"
DO
Beitragsveröffentlichung zurückziehen
So funktioniert es! :-)
Vielen Dank für die Hilfe! Ich hoffe, mich bald mal revanchieren zu können. ;-)