1<?php 2 3if(!defined('DOKU_INC')) die(); 4 5class action_plugin_publish_approve extends DokuWiki_Action_Plugin { 6 7 /** 8 * @var helper_plugin_publish 9 */ 10 private $helper; 11 12 function __construct() { 13 $this->helper = plugin_load('helper', 'publish'); 14 } 15 16 function register(&$controller) { 17 $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handle_io_write', array()); 18 } 19 20 function handle_io_write(&$event, $param) { 21 # This is the only hook I could find which runs on save, 22 # but late enough to have lastmod set (ACTION_ACT_PREPROCESS 23 # is too early) 24 global $ACT; 25 26 if ($ACT != 'show') { 27 return; 28 } 29 30 if (!isset($_REQUEST['publish_approve'])) { 31 return; 32 } 33 34 if (!$this->helper->canApprove()) { 35 msg($this->getLang('wrong permissions to approve'), -1); 36 return; 37 } 38 39 $this->addApproval(); 40 return; 41 } 42 43 function addApproval() { 44 global $USERINFO; 45 global $ID; 46 global $INFO; 47 global $REV; 48 49 if (!$INFO['exists']) { 50 msg($this->getLang('cannot approve a non-existing revision'), -1); 51 return; 52 } 53 54 $approvalRevision = $this->helper->getRevision(); 55 $approvals = $this->helper->getApprovals(); 56 57 if (!isset($approvals[$approvalRevision])) { 58 $approvals[$approvalRevision] = array(); 59 } 60 61 $approvals[$approvalRevision][$INFO['client']] = array( 62 $INFO['client'], 63 $_SERVER['REMOTE_USER'], 64 $USERINFO['mail'], 65 time() 66 ); 67 68 $success = p_set_metadata($ID, array('approval' => $approvals), true, true); 69 if ($success) { 70 msg($this->getLang('version approved'), 1); 71 } else { 72 msg($this->getLang('cannot approve error'), -1); 73 } 74 75 send_redirect(wl($ID, array('rev' => $this->helper->getRevision()), true, '&')); 76 } 77 78} 79