Ciclo di vita dei contenuti

In questa pagina

EmDash mantiene la versione pubblicata di una voce separata dalle modifiche non pubblicate. Il pannello di amministrazione, l’API REST, l’interfaccia a riga di comando (CLI) e gli strumenti Model Context Protocol (MCP) usano le stesse regole di ciclo di vita.

Una voce può essere draft, scheduled o published. Una voce pubblicata può anche avere una bozza e una pianificazione futura: i visitatori continuano a ricevere la revisione live finché la bozza pianificata non viene pubblicata. Il cestino è separato dallo stato. Una voce nel cestino conserva i suoi metadati di ciclo di vita ma è esclusa dalle letture ordinarie dei contenuti.

Transizioni di stato

La tabella seguente è il contratto canonico per lo stato del contenuto, i puntatori di revisione e i timestamp di pubblicazione. «Nessuna modifica» significa che l’operazione conserva il valore memorizzato.

AzioneStato inizialeRisultatoEffetto sulla revisionepublishedAtscheduledAtChiamata ripetuta
Salva modificheQualsiasi voce attivaLo stato non cambiaSu una collection con revisioni, sostituisce la revisione bozza mentre la revisione live resta pubblicaNessuna modificaNessuna modificaUn _rev fornito rifiuta un salvataggio obsoleto; ometterlo rende la scrittura REST incondizionata
PubblicaBozza, pianificata o pubblicataPubblicataPromuove la revisione bozza a live e cancella il puntatore bozzaImpostato alla prima pubblicazione; preservato nelle pubblicazioni successive salvo che un chiamante autorizzato lo sovrascrivaCancellatoConserva il contenuto live e l’ora di pubblicazione, ma restituisce un nuovo _rev
Pubblica quando dovutoPianificata, o pubblicata con una bozza pianificataPubblicataCome pubblicaUsa l’ora pianificata alla prima pubblicazione; conserva il valore esistente pubblicando una nuova bozza sul contenuto liveCancellatoUn passaggio successivo dello scheduler salta una voce la cui pianificazione è già stata cancellata
Annulla pubblicazioneQualsiasi voce attivaBozzaCancella il puntatore live; conserva la bozza esistente o ne crea una dalla revisione livePreservatoCancellatoUna voce che è già una semplice bozza non cambia
PianificaBozza, pianificata o pubblicataUna bozza diventa pianificata; una voce pubblicata resta pubblicataNessuna modificaNessuna modificaImpostato all’ora futura richiestaSostituisce la pianificazione esistente e restituisce un nuovo _rev
Annulla pianificazionePianificata, o pubblicata con una pianificazioneUna voce pianificata diventa bozza; una voce pubblicata resta pubblicataNessuna modificaNessuna modificaCancellatoUna voce senza pianificazione non cambia
Scarta bozzaQualsiasi voce attivaLo stato non cambiaCancella il puntatore bozza; la revisione live resta invariataNessuna modificaNessuna modificaUna voce senza bozza non cambia
Sposta nel cestinoQualsiasi voce attivaNel cestino e assente dalle letture ordinariePreservatoPreservatoPreservatoUna richiesta per una voce già nel cestino restituisce non trovato
Ripristina dal cestinoNel cestinoBozzaCancella il puntatore live; conserva qualsiasi puntatore bozzaPreservatoCancellatoRichiede una voce ancora nel cestino
Elimina definitivamenteNel cestinoRimossaRimuove la voce e le sue revisioniRimossoRimossoNon può essere ripetuto né annullato
Ripristina una revisioneQualsiasi voce attivaLo stato non cambiaSu una collection con revisioni, sostituisce la bozza con una copia della revisione selezionata; la revisione live resta invariataNessuna modificaNessuna modificaCrea una nuova revisione e restituisce un nuovo _rev

Su una collection senza supporto alle revisioni, salvataggi e pubblicazioni usano la riga di contenuto invece dei puntatori live e bozza. Ripristinare una revisione scrive i valori di campo selezionati direttamente in quella riga.

Ripristinare una revisione su una collection con revisioni non la pubblica. Pubblica la voce dopo aver esaminato la bozza ripristinata.

Autorizzazioni e protezione in scrittura

Le autorizzazioni dipendono dalla proprietà. Un Author può agire su una voce di cui è proprietario; un Editor può eseguire la stessa azione su qualsiasi voce. L’eliminazione definitiva richiede un Admin.

Impostare publishedAt durante la pubblicazione richiede content:publish_any, anche quando il chiamante possiede la voce.

L’API REST accetta _rev come precondizione opzionale di concorrenza ottimistica dove indicato. Gli strumenti MCP lo richiedono per le stesse operazioni, così un agente deve leggere la voce prima di modificarla. Un token obsoleto restituisce CONFLICT. Le scritture admin e REST protette da un blocco voce restituiscono ENTRY_LOCKED salvo che una richiesta autorizzata usi l’override di blocco supportato. Le scritture MCP non partecipano ai blocchi voce.

AzioneAutorizzazioneREST _revMCP _revBlocco admin e RESTHook
Salva modifichecontent:edit_own o content:edit_anyFacoltativoObbligatorioApplicatocontent:beforeSave, content:afterSave
Pubblicacontent:publish_own o content:publish_anyFacoltativoObbligatorioApplicatocontent:beforePublish, content:afterPublish
Annulla pubblicazionecontent:publish_own o content:publish_anyFacoltativoObbligatorioApplicatocontent:beforeUnpublish, content:afterUnpublish
Pianificacontent:publish_own o content:publish_anyFacoltativoObbligatorioApplicatocontent:beforeSchedule, content:afterSchedule
Annulla pianificazionecontent:publish_own o content:publish_anyNon accettatoNon accettatoApplicatocontent:afterUnschedule
Scarta bozzacontent:edit_own o content:edit_anyFacoltativoObbligatorioApplicatoNessuno
Sposta nel cestinocontent:delete_own o content:delete_anyNon accettatoNon accettatoApplicatocontent:beforeDelete, content:afterDelete
Ripristina dal cestinocontent:edit_own o content:edit_anyNon accettatoNon accettatoNon applicatocontent:afterRestore
Elimina definitivamentecontent:delete_permanentNon accettatoNon accettatoNon applicatocontent:afterDelete
Ripristina una revisionecontent:edit_own o content:edit_anyNon accettatoNon accettatoNon applicatoNessuno

L’evento content:afterDelete imposta permanent a false quando una voce viene spostata nel cestino e a true dopo l’eliminazione definitiva. Gli after-hook riusciti vengono eseguiti dopo il cambio di stato e possono essere eseguiti dopo l’invio della risposta. Un plugin può rifiutare salvataggio, pubblicazione, annullamento pubblicazione, pianificazione o spostamento nel cestino dal before-hook corrispondente.

Quando la pubblicazione pianificata raggiunge la scadenza, usa gli hook di pubblicazione. Se un hook content:beforePublish rifiuta quel tentativo pianificato, EmDash cancella la pianificazione ed esegue content:afterUnschedule.

Conflitti e nuovi tentativi

Usa il _rev restituito da ogni lettura o scrittura per la successiva operazione protetta. EmDash rifiuta un token obsoleto invece di sostituire una modifica concorrente. Rileggi la voce, esamina lo stato più recente e poi decidi se riprovare.

Una risposta di errore non dimostra sempre che nessuno stato sia cambiato. Se una connessione termina prima che il client riceva una risposta, leggi la voce prima di ripetere un’operazione di ciclo di vita. Questo evita anche che un nuovo tentativo sostituisca il lavoro completato da un altro editor.

Il ripristino di una revisione conferma insieme il contenuto ripristinato e la sua revisione di audit. Se una delle scritture fallisce, EmDash conserva il contenuto e la cronologia delle revisioni di prima della richiesta.

Vedi il riferimento API REST per gli schemi di richiesta e risposta HTTP, il riferimento del server MCP per gli input degli strumenti e il riferimento degli hook per i payload degli eventi.