Revisions

Database model

Revisions are modeled with plugins in mind. A single revisions table holds information for all revisionable data in the database. Page properties and document contents are two examples of revisionable data. Inheritance is used to give revisionable objects the properties and methods needed to handle multiple versions. The only requirement for using this model is a composite foreign primary key consisting of a "content ID" (to uniquely identify the revisionable object across revisions) and a revision number.

Workflow

Confusing workflows are annoying and customizable workflows are complex and rarely needed. Organizations that delegate tasks already have real-life workflows, a content management system's should try to stay out of their way.

A revision can be in one of three workflow states. Great care has been taken to name these states after understood publishing concepts:

Draft copy
The document is being worked on (or has been saved to work on later). In either case, it is incomplete.
Review copy
The document has been submitted for publishing. The editor, webmaster, or author can roll out pending changes to many documents at once through a review interface.
Final copy
The document has been approved for publishing and may appear on the site. Any changes will require a new revision to be drafted.

Likewise, we should have appropriate verbs in the interface and avoid, for example, a select box with just the state names. Describe the transitions, not the states!

Create a new revision or Revise document
Start a new draft from a final copy (increment the revision number).
Submit for review or Submit for publishing
Freeze the contents of a draft and put it into review mode.
Approve revision or Publish revision
Make this a final copy and allow it to appear on the site.
Reject revision or Return for changes (better suggestions here welcome)
Put a review copy back into draft mode. (Or should this force a new revision instead? The resubmitted changes will technically be a new "revision", yes?)

Restoring old versions

In addition to the workflow states above, there is one status that only one particular revision of an object can have at a time: being active. The active revision is the version that will be shown on the site. Usually this will be the version in the final state with the highest revision number. However, old revisions can be restored by the content manager, making an older version the active revision. Using the verb Restore makes it clear what happens, unlike Undo which may or may not completely discard newer revisions.

Multilingual revisions

Currently all translations of a document are tied to a single revision. This means that if a translation needs to be added to an existing published document, a new revision will need to be created. It has been suggested that different translations be independently revisioned to more accurately reflect how multilingual content is managed. Citing real-world scenarios in multilingual content management would help with designing this change.

Log in as guest/pagoda to create tickets