1<?php 2 3use dokuwiki\plugin\structpublish\meta\Revision; 4 5class action_plugin_structpublish_publish extends DokuWiki_Action_Plugin 6{ 7 /** @var \helper_plugin_structpublish_permissions */ 8 protected $permissionsHelper; 9 10 /** 11 * @inheritDoc 12 */ 13 public function register(Doku_Event_Handler $controller) 14 { 15 $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handleApprove'); 16 $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handlePublish'); 17 } 18 19 public function handlePublish(Doku_Event $event) 20 { 21 if ($event->data != 'show') return; 22 23 global $INPUT; 24 $in = $INPUT->arr('structpublish'); 25 if (!$in || !isset($in[\helper_plugin_structpublish_permissions::ACTION_PUBLISH])) { 26 return; 27 } 28 29 // FIXME prevent bumping published version 30 31 $this->permissionsHelper = plugin_load('helper', 'structpublish_permissions'); 32 33 global $ID; 34 global $INFO; 35 $sqlite = $this->permissionsHelper->getDb(); 36 $revision = new Revision($sqlite, $ID, $INFO['currentrev']); 37 // TODO do not autoincrement version, make it a string 38 $revision->setVersion($revision->getVersion() + 1); 39 $revision->setUser($_SERVER['REMOTE_USER']); 40 $revision->setStatus(Revision::STATUS_PUBLISHED); 41 $revision->setDate(time()); 42 43 $revision->save(); 44 } 45 46 public function handleApprove(Doku_Event $event) 47 { 48 if ($event->data != 'show') return; 49 50 global $INPUT; 51 $in = $INPUT->arr('structpublish'); 52 if (!$in || !isset($in[\helper_plugin_structpublish_permissions::ACTION_APPROVE])) { 53 return; 54 } 55 56 $this->permissionsHelper = plugin_load('helper', 'structpublish_permissions'); 57 58 global $ID; 59 global $INFO; 60 $sqlite = $this->permissionsHelper->getDb(); 61 $revision = new Revision($sqlite, $ID, $INFO['currentrev']); 62 $revision->setVersion($revision->getVersion()); 63 $revision->setUser($_SERVER['REMOTE_USER']); 64 $revision->setStatus(Revision::STATUS_APPROVED); 65 $revision->setDate(time()); 66 67 $revision->save(); 68 } 69} 70