Howto: configurazione del modulo workflow per la moderazione del contenuto creato dagli utenti

Forum:

Problema: gli articoli creati/modificati dagli utenti devono essere approvati da un editor prima di essere pubblicati.
Come spesso accade Drupal permette di ottenere lo stesso risultato seguendo approcci e soluzioni diverse; in questo caso integriamo il modulo workflow con il sistema di revisione dei contenuti e le azioni di Drupal.
Soluzione:
l'autore crea o modifica un contenuto; può salvarlo come bozza (impostandone lo stato = bozza), oppure inviarlo per revisione (stato = revisione). il contenuto non viene pubblicato.
Quando lo stato di un contenuto è impostato come revisione, l'editor viene avvertito con una email e allo stesso tempo l'autore non ha più il permesso di modificarne il contenuto.
L'editor rivede il contenuto e se lo reputa idoneo, lo pubblica (stato = approvato), altrimenti lo rimanda per revisione all'autore (stato = bozza) ed il ciclo ricomincia. In entrambi i casi l'autore può essere avvertito con una email.

Il flusso di lavoro si può schematizzare più o meno così:

PASSAGGIO DI STATO       AUTORE        TRIGGER         EDITOR
                       (permessi)      (email)       (permessi)
--------------------------------------------------------------
(creazione)->bozza         X
bozza->revisione           X     "avverti editor"->
                                 <-"avverti autore"
revisione->bozza                 <-"richiedi revisione"   X
revisione->approvato             <-"conferma autore"      X
--------------------------------------------------------------

Supponiamo che si voglia applicare questo workflow al tipo di contenuto story:

  1. creare 2 ruoli: editor (permesso:administer nodes) e autore (permessi: crea story e modifica own story)
  2. Contenuto->content types->story->edit (/admin/content/node-type/story): "workflow settings"->togliere la spunta a "pubblicato"; salvare
  3. Attivare il modulo "trigger" (core - optional)
  4. Configurazione del sito->Azioni (/admin/settings/actions)->"crea una nuova azione avanzata"->"invia una email"
    • Descrizione: "avverti editor" (avverte l'editor che è stato creato nuovo contenuto)
    • Destinatario: inserire indirizzo email dell'editor
    • Definire oggetto e corpo dell'email ricordando che è possibile usare i seguenti placeholders:
      • %username = nome utente dell'autore
      • %node_type = tipo di contenuto
      • %title = campo titolo del contenuto
      • %site_name = nome del sito
      • %node = full node e %teaser = teaser
  5. ->"crea una nuova azione avanzata"->"invia una email"
    • Descrizione: "avverti autore" (avverte l'autore che il suo contenuto è in fase di moderazione)
    • Destinatario: inserire indirizzo email dell'autore utilizzando il placeholder %author*
    • Definire oggetto e corpo dell'email come già descritto
  6. ->"crea una nuova azione avanzata"->"invia una email"
    • Descrizione: "richiedi revisione" (avverte l'autore che il suo contenuto deve essere rivisto)
    • Destinatario: inserire indirizzo email dell'autore utilizzando il placeholder %author*
    • Definire oggetto e corpo dell'email
  7. volendo si può aggiungere un'ulteriore azione "conferma autore" per segnalare all'autore che il suo contenuto è stato pubblicato
  8. Attivare il modulo workflow
  9. Site building->workflow (/admin/build/workflow) -> Creare un nuovo workflow ed applicarlo al content type story
  10. Creare gli stati BOZZA, REVISIONE, APPROVATO all'interno del nuovo workflow ed assegnare i permessi per i passaggi da uno stato all'altro secondo la tabella in alto
  11. Site building->workflow->actions (/admin/build/workflow/actions); assegnare le azioni ai rispettivi triggers (vedi anche tabella):
    • da (creazione) a BOZZA-> nessuna azione
    • da (creazione) a REVISIONE-> "avverti editor" (e "avverti autore")
    • da BOZZA a REVISIONE-> "avverti editor" (e "avverti autore")
    • da REVISIONE a BOZZA-> "richiedi revisione"
    • da REVISIONE a APPROVATO-> "conferma autore", "pubblica contenuto" e "salva contenuto"

A questo punto, quando il ruolo "autore" crea una story dovrebbe poter impostare lo stato di BOZZA o REVISIONE, mentre il ruolo "editor" ha in aggiunta una opzione APPROVATO

*) NOTA: in alcuni casi il placeholder %author non funziona, probabilmente perchè il modulo trigger viene chiamato troppo presto. La soluzione (non sempre) può essere di aumentare il peso (weight) del modulo trigger (ad esempio da "0" a "2") nella tabella {system} del database.
Un'altra possibilità è usare l'azione avanzata "send a tokenized email" fornita dai moduli token e token_actions:
- abilitare i moduli token e token_ actions (incluso in token)
- andare su admin/settings/actions
- nel form "Rendi disponibile una nuova azione avanzata", scegliere "Send tokenized e-mail"
- nel campo "Destinatario" della nuova azione creata, scrivere il token [author-mail]
- configurare e sostituire due azioni di questo tipo a quelle impostate per "richiedi revisione" e "avverti autore"

NOTA: questo workflow ha un limite importante: una volta che un contenuto è stato pubblicato gli autori non possono più modificarlo (o possono modificarlo live in base ai permessi). i moduli revisioning+module_grants possono essere aggiunti a questo workflow permettendo la modifica "in revisione" dei contenuti, ovvero l'autore può modificare un contenuto pubblicato ma solo creando una nuova revisione che verrà pubblicata (e sostituirà la vecchia versione) solo dopo l'approvazione dell'editor. Questi moduli permettono anche configurazioni molto più complesse di questa.

Alcuni altri moduli per la moderazione dei contenuti:
http://drupal.org/project/content_moderation
http://drupal.org/project/revision_moderation
http://drupal.org/project/modr8
http://drupal.org/project/publishcontent
http://drupal.org/project/comment_moderation
Bonus: http://drupal.org/project/diff