PmWiki has the capability to stage draft versions of a page prior to them becoming "official". All of the draft pages end in "-Draft" by default (this can be changed by setting $DraftSuffix
). Multiple interim edits to a page can be temporarily saved in a "-Draft" copy of a page until the draft is ready to be published to the original.
When the site administrator sets $EnableDrafts
in a local customization file, the "Save" button on the edit page is split into separate "Publish" and "Save draft" buttons.
The "Save draft" button causes any edits to be saved to a "-Draft" copy of the original page, leaving the original page intact. Subsequent requests to edit the page (either the original or -Draft) bring up the draft copy for further editing.
The "Publish" button saves back to the original non-Draft copy of the page, removing any -Draft page that may have been created.
By default, saving drafts and publishing are available to anyone with 'edit' permissions (see Passwords). However, the site administrator can also set the $EnablePublishAttr
configuration variable, which provides a separate 'publish' permission that is required to publish to the original page.
When "publishing", how the page's history is handled depends on whether the administrator has set the $EnableDraftAtomicDiff
variable.
By default, using the "Save draft" or "Save draft and edit" button will be recorded to both Site.AllRecentChanges and Group.RecentChanges. Also after "publishing" a draft version an orphaned link to the "-Draft" page will remain.
To disable on both Site.AllRecentChanges and Group.RecentChanges:
$DraftRecentChangesFmt = array();
or alternatively:
if ( @$EnableDrafts && @$_POST['postedit']>'' || @$_POST['postdraft']>'' ) unset($RecentChangesFmt);
To only disable one of these, unset it individually:
if ( @$EnableDrafts && @$_POST['postedit']>'' || @$_POST['postdraft']>'' ) { unset($RecentChangesFmt['$Group.RecentChanges']); # -and/or- unset($RecentChangesFmt['$SiteGroup.AllRecentChanges']); }
If a $DraftRecentChangesFmt array is defined, it will be used instead of $RecentChangesFmt when saving a Draft version. For example, to have all draft versions only appear on a page Site.DraftRecentChanges, you could add to config.php:
$DraftRecentChangesFmt['Site.DraftRecentChanges'] = '* [[{$Group}.{$Name}]] . . . $CurrentTime $[by] $AuthorLink: [=$ChangeSummary=]';
See also $RecentChangesFmt and $DraftRecentChangesFmt.
The drafts module also sets pagelists and searches (and thus RSS feeds) to ignore "-Draft" pages by default; one has to do list=all or similar in order to have draft pages included in a pagelist or RSS feed.
How do I moderate all postings?
Start by enabling drafts to change the "Save" button into separate "Publish" and "Save draft" buttons. Then set $EnablePublishAttr
. This adds a "publish" authorization level to distinguish editing of page drafts from publishing.