draft.php 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php if (!defined('PmWiki')) exit();
  2. /* Copyright 2006-2015 Patrick R. Michaud (pmichaud@pobox.com)
  3. This file is part of PmWiki; you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published
  5. by the Free Software Foundation; either version 2 of the License, or
  6. (at your option) any later version. See pmwiki.php for full details.
  7. Script maintained by Petko YOTOV www.pmwiki.org/petko
  8. */
  9. SDV($DraftSuffix, '-Draft');
  10. if ($DraftSuffix)
  11. SDV($SearchPatterns['normal']['draft'], "!$DraftSuffix\$!");
  12. ## set up a 'publish' authorization level, defaulting to 'edit' authorization
  13. SDV($DefaultPasswords['publish'], '');
  14. SDV($AuthCascade['publish'], 'edit');
  15. SDV($FmtPV['$PasswdPublish'], 'PasswdVar($pn, "publish")');
  16. if ($AuthCascade['attr'] == 'edit') $AuthCascade['attr'] = 'publish';
  17. ## Add a 'publish' page attribute if desired
  18. if (IsEnabled($EnablePublishAttr, 0))
  19. SDV($PageAttributes['passwdpublish'], '$[Set new publish password:]');
  20. $basename = preg_replace("/$DraftSuffix\$/", '', $pagename);
  21. ## if no -Draft page, switch to $basename
  22. if (!PageExists($pagename) && PageExists($basename)) $pagename = $basename;
  23. ## The section below handles specialized EditForm pages and handler.
  24. ## We don't bother to load it if we're not editing.
  25. SDV($DraftActionsPattern, 'edit');
  26. if (! preg_match("/($DraftActionsPattern)/", $action)) return;
  27. ## set edit form button labels to reflect draft prompts
  28. SDVA($InputTags['e_savebutton'], array('value' => ' '.XL('Publish').' '));
  29. SDVA($InputTags['e_saveeditbutton'], array('value' => ' '.XL('Save draft and edit').' '));
  30. SDVA($InputTags['e_savedraftbutton'], array(
  31. ':html' => "<input type='submit' \$InputFormArgs />",
  32. 'name' => 'postdraft', 'value' => ' '.XL('Save draft').' ',
  33. 'accesskey' => XL('ak_savedraft')));
  34. ## with drafts enabled, the 'post' operation requires 'publish' permissions
  35. if ($_POST['post'] && $HandleAuth['edit'] == 'edit')
  36. $HandleAuth['edit'] = 'publish';
  37. ## disable the 'publish' button if not authorized to publish
  38. if (!CondAuth($basename, 'publish'))
  39. SDVA($InputTags['e_savebutton'], array('disabled' => 'disabled'));
  40. ## add the draft handler into $EditFunctions
  41. array_unshift($EditFunctions, 'EditDraft');
  42. function EditDraft(&$pagename, &$page, &$new) {
  43. global $WikiDir, $DraftSuffix, $DeleteKeyPattern, $EnableDraftAtomicDiff,
  44. $DraftRecentChangesFmt, $RecentChangesFmt, $Now;
  45. SDV($DeleteKeyPattern, "^\\s*delete\\s*$");
  46. $basename = preg_replace("/$DraftSuffix\$/", '', $pagename);
  47. $draftname = $basename . $DraftSuffix;
  48. if ($_POST['postdraft'] || $_POST['postedit']) $pagename = $draftname;
  49. else if ($_POST['post'] && !preg_match("/$DeleteKeyPattern/", $new['text'])) {
  50. $pagename = $basename;
  51. if (IsEnabled($EnableDraftAtomicDiff, 0)) {
  52. $page = ReadPage($basename);
  53. foreach($new as $k=>$v) # delete draft history
  54. if (preg_match('/:\\d+(:\\d+:)?$/', $k) && ! preg_match("/:$Now(:\\d+:)?$/", $k)) unset($new[$k]);
  55. unset($new['rev']);
  56. SDVA($new, $page);
  57. }
  58. $WikiDir->delete($draftname);
  59. }
  60. else if (PageExists($draftname) && $pagename != $draftname)
  61. { Redirect($draftname, '$PageUrl?action=edit'); exit(); }
  62. if ($pagename == $draftname && isset($DraftRecentChangesFmt))
  63. $RecentChangesFmt = $DraftRecentChangesFmt;
  64. }