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