Drafts

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.

Configuration and usage

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.

  • When set to 1, "publishing" a draft version will clear the "draft" history, leaving a single "diff" between the latest and the previous "published" versions. Note that this will delete the author names, dates and contributions of the intermediate, unpublished versions, so the change "Summary" you enter should summarize the changes.
  • Otherwise, all of the "draft" history entries are kept -- this is the default. The final "publish" history entry will show changes since the most recent "draft" version.

Drafts and (All)RecentChanges

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.

Drafts with searches, pagelists, and RSS

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.

This page may have a more recent version on pmwiki.org: PmWiki:Drafts, and a talk page: PmWiki:Drafts-Talk.