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