How to implement "Approved Revisions"?
Last modified by Vincent Massol on 2014/05/24
MediaWiki supports a notion of Approved Revision.
There are several ways in XWiki to have a similar mechanism:
- Using the Publication Workflow Application
- Creating a mini application to support it (see below)
Creating a Display Revision Application
- Create an XClass, say Revision.RevisionClass and add a String field named revision which will contain which revision to display for a given page.
- Add an XObject ClassSheetBinding to Revision.RevisionClass and fill the value with Revision.RevisionSheet. This sheet will contain the script to display a given revision.
- Create the Revision.RevisionSheet page with the following content:{{velocity}}
#if ($doc.fullName != 'Revision.RevisionSheet')
#set($revisionClass = $doc.getObject("Revision.RevisionClass"))
#if($revisionClass)
#set ($rev = $doc.getValue("revision"))
#if ("$!rev" != '')
#set ($revDoc = $xwiki.getDocument($doc, $rev))
#if ($revDoc)
$revDoc.content
#else
{{error}}Invalid revision [$rev] specified, showing latest content{{/error}}
$doc.content
#end
#else
$doc.content
#end
#else
$doc.content
#end
#end
{{/velocity}}
You're done. Now let's try it!
- Create a page, say Main.Test with the content "Original Content"
- Edit the page again to change the content to "New Content"
- Add an XObject of type Revision.RevisionClass and set the revision field to 1.1 (this is the version we want to display)
- Save!
You'll see "Original Content" displayed