I hope folk will understand that I don't really want to have to do this, but following a slight problem I've been asked to look at providing a mechanism for approval of pages on a wiki that we are running to deliver social services policy & procedures to staff.
I had set it up so that only logins in the group 'editors' could change the article text but allowed all logins to edit the talk pages, however management want me to add a system so that changes to the 'article' page are approved before they are visible to everyone. This goes against the ethos of the wiki I know, but all our users find the wiki very easy to use to find things in and appreciate the ability to add to the talk pages.
Accepting that I'm going to have to do this, or move the whole lot into something else and loose the advantages of the wiki for users, I would appreciate comments on the following approach.
I would have two special groups of users, 'editors' and 'approvers'
Mediawiki already has multiple versions of pages in the revision table, I am proposing to add a new field to the pages table pages.page_auth and would populate this with the revision.rev_id of the last authorised revision of the page, similar to pages.page_latest having the revision.rev_id of the latest version.
If a person browsing the wiki is not in either the editors or approvers groups then the page would be rendered using the rev_id in the new pages.page_auth rather than the one in pages.page_latest. This would allow users to see the latest authorised version but allow editors to continue developing the pages.
I would also add two further fields to the pages table pages.ready_auth and pages.previous_auth, as well as a new field in revision revision.authed_by, this would allow me to:-
1. add a tab on the screen (like the watch / unwatch) visible to 'editors' that would allow them to set/unset the binary flag pages.ready_auth to show a page is ready to be authorised, generating a list of approvals waiting for the appovers
2. add a tab on the screen (like the watch / unwatch) visible to approvers that would allow them to approve the page, when they do this I would get the value currently in the pages.page_auth copied to pages.previous_auth so we can roll back to the previously authorised version if needed, copy the current pages.page_latest to pages.page_auth so that normal user would now see the newly approved revision. I can also record in the revision.authed_by who authorised the the page to go live.
3. If a page is has been authorised but needs to rolled back we now have the previous revision in pages.previous_auth so we can roll back.
I know this is not what we all want wiki's for but rather than loose what we have have I missed any really salient points in what I'm trying to do.
Ta
John