È possibile creare a livello di codice una nuova revisione del nodo, senza che la nuova revisione diventi quella "corrente"?


9

Ogni volta che l'importazione dei miei feed trova una nuova versione di un contenuto esistente, crea una nuova revisione di questo nodo invece di sovrascrivere i dati.

Normalmente la nuova revisione diventa subito quella "attuale". Vorrei tuttavia che la revisione attualmente visualizzata rimanga la stessa e lasciare che un moderatore decida in seguito se pubblicare la nuova.


1
Hai provato a utilizzare Moderazione Workbench, Workflow o uno qualsiasi dei moduli che fanno la stessa cosa?
mpdonadio

Non ho Inizialmente supponevo che, poiché creavo il nodo nel codice, non si applicavano. Forse non è così.
Letharion,

Risposte:


13

Un'installazione standard di Drupal non ti consente di creare una revisione "In sospeso". Hai due opzioni:

  1. Crea a livello di codice una nuova revisione ma ripristina a livello di codice la revisione originale (che crea una revisione ancora più recente, ma ha il contenuto originale)
  2. (Consigliato) Utilizzare Workbench Moderation, Revisioning o Workflow che sono soluzioni ben concepite per il controllo della versione e / o del controllo degli accessi.

Per l'opzione 1: è possibile aggiungere questo codice come nuova regola o utilizzarlo in un nuovo modulo

<?php
  // Programatically load the existing revision and save it
  // Taken from http://api.drupal.org/api/drupal/modules!node!node.module/function/node_save/7
  // Load the revision
  $original_revision = node_load($nid);
  $original_revision->revision = 1;
  $original_revision->log = t('Copy of the revision from %date.', array('%date' => format_date($original_revision->revision_timestamp)));

  $new_revision = node_load($nid);
  // Make any changes to the new revision here...
  $new_revision->revision = 1;
  $new_revision->log = t('Summarize your changes here');

  // Save the new revision first
  node_save($new_revision);

  // Save the original one again so that it is still the current revision
  node_save($original_revision);

  watchdog('content', '@type: reverted %title revision %revision.', array('@type' => $node_revision->type, '%title' => $node_revision->title, '%revision' => $node_revision->vid));
  drupal_set_message(t('@type %title was saved with a new revision, but reverting to original revision from %revision-date.', array('@type' => node_type_get_name($node_revision), '%title' => $node_revision->title, '%revision-date' => format_date($node_revision->revision_timestamp))));
  drupal_goto('node/' . $node_revision->nid . '/revisions');
?>

Per l'opzione 2: consiglierei Workbench su Revisioning o Workflow, ma ognuno è diverso a seconda delle tue esigenze. Workbench è in qualche modo il successore di Revisioning e Workflow è molto più di un semplice controllo di versione, quindi potrebbe essere o meno adatto alle tue esigenze.

Ecco una rapida ripartizione delle differenze tra Workbench e Workflow.


La prima opzione sarebbe ottima, ma come posso fare il ripristino?
Letharion,

Aggiunto il codice per l'opzione 1, ma in realtà l'opzione 2 è probabilmente la soluzione migliore perché aggiunge funzionalità per gestire la versione corrente, invece di duplicare ancora e ancora l'originale
Johnathan Elmore

il collegamento è interrotto
digitgopher

Dove scrivere in hook_form_alter?
KTM,

collegamento fisso. @IcecreamJelly, prova hook_node_update.
Johnathan Elmore,

2

Questa è un'ipotesi, ma darei una possibilità al sottomodulo Moderazione Workbench nel modulo Workbench . L'ho trovato molto più facile da configurare rispetto a Workflow .

Il fatto che si stiano creando nodi nel codice non dovrebbe avere importanza, a condizione che venga node_save()eseguito come utente con le impostazioni appropriate per il tipo di contenuto (gli stati di moderazione vengono gestiti con l'API del nodo). Ciò può significare, tuttavia, che è necessario eseguire alcuni shenanigans di sessione per eseguire le operazioni come l'utente corretto durante l'esecuzione di Feed.


2
La moderazione del banco di lavoro +1 è un modulo eccezionale che sto usando da un po 'di tempo ormai
Clive
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.