11794c5faSDominik Eckelmann<?php 21794c5faSDominik Eckelmann 31794c5faSDominik Eckelmannif(!defined('DOKU_INC')) die(); 41794c5faSDominik Eckelmann 51794c5faSDominik Eckelmannclass action_plugin_publish_approve extends DokuWiki_Action_Plugin { 61794c5faSDominik Eckelmann 7248339c4SDominik Eckelmann /** 8248339c4SDominik Eckelmann * @var helper_plugin_publish 9248339c4SDominik Eckelmann */ 101794c5faSDominik Eckelmann private $helper; 111794c5faSDominik Eckelmann 121794c5faSDominik Eckelmann function __construct() { 131794c5faSDominik Eckelmann $this->helper = plugin_load('helper', 'publish'); 141794c5faSDominik Eckelmann } 151794c5faSDominik Eckelmann 16d9258364SDominik Eckelmann function register(Doku_Event_Handler &$controller) { 171794c5faSDominik Eckelmann $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handle_io_write', array()); 181794c5faSDominik Eckelmann } 191794c5faSDominik Eckelmann 20d9258364SDominik Eckelmann function handle_io_write(Doku_Event &$event, $param) { 211794c5faSDominik Eckelmann # This is the only hook I could find which runs on save, 221794c5faSDominik Eckelmann # but late enough to have lastmod set (ACTION_ACT_PREPROCESS 231794c5faSDominik Eckelmann # is too early) 241794c5faSDominik Eckelmann global $ACT; 25*51621a57SChristopher Smith global $INPUT; 261794c5faSDominik Eckelmann 271794c5faSDominik Eckelmann if ($ACT != 'show') { 281794c5faSDominik Eckelmann return; 291794c5faSDominik Eckelmann } 301794c5faSDominik Eckelmann 31*51621a57SChristopher Smith if ($INPUT->has('publish_approve')) { 321794c5faSDominik Eckelmann return; 331794c5faSDominik Eckelmann } 341794c5faSDominik Eckelmann 351794c5faSDominik Eckelmann if (!$this->helper->canApprove()) { 361794c5faSDominik Eckelmann msg($this->getLang('wrong permissions to approve'), -1); 371794c5faSDominik Eckelmann return; 381794c5faSDominik Eckelmann } 391794c5faSDominik Eckelmann 401794c5faSDominik Eckelmann $this->addApproval(); 411794c5faSDominik Eckelmann return; 421794c5faSDominik Eckelmann } 431794c5faSDominik Eckelmann 441794c5faSDominik Eckelmann function addApproval() { 451794c5faSDominik Eckelmann global $USERINFO; 461794c5faSDominik Eckelmann global $ID; 471794c5faSDominik Eckelmann global $INFO; 481794c5faSDominik Eckelmann 491794c5faSDominik Eckelmann if (!$INFO['exists']) { 501794c5faSDominik Eckelmann msg($this->getLang('cannot approve a non-existing revision'), -1); 511794c5faSDominik Eckelmann return; 521794c5faSDominik Eckelmann } 531794c5faSDominik Eckelmann 541794c5faSDominik Eckelmann $approvalRevision = $this->helper->getRevision(); 551794c5faSDominik Eckelmann $approvals = $this->helper->getApprovals(); 561794c5faSDominik Eckelmann 571794c5faSDominik Eckelmann if (!isset($approvals[$approvalRevision])) { 581794c5faSDominik Eckelmann $approvals[$approvalRevision] = array(); 591794c5faSDominik Eckelmann } 601794c5faSDominik Eckelmann 611794c5faSDominik Eckelmann $approvals[$approvalRevision][$INFO['client']] = array( 621794c5faSDominik Eckelmann $INFO['client'], 631794c5faSDominik Eckelmann $_SERVER['REMOTE_USER'], 641794c5faSDominik Eckelmann $USERINFO['mail'], 651794c5faSDominik Eckelmann time() 661794c5faSDominik Eckelmann ); 671794c5faSDominik Eckelmann 681794c5faSDominik Eckelmann $success = p_set_metadata($ID, array('approval' => $approvals), true, true); 691794c5faSDominik Eckelmann if ($success) { 701794c5faSDominik Eckelmann msg($this->getLang('version approved'), 1); 71facaff5bSDominik Eckelmann 72facaff5bSDominik Eckelmann $data = array(); 73facaff5bSDominik Eckelmann $data['rev'] = $approvalRevision; 74facaff5bSDominik Eckelmann $data['id'] = $ID; 75facaff5bSDominik Eckelmann $data['approver'] = $_SERVER['REMOTE_USER']; 76facaff5bSDominik Eckelmann $data['approver_info'] = $USERINFO; 77facaff5bSDominik Eckelmann trigger_event('PLUGIN_PUBLISH_APPROVE', $data); 781794c5faSDominik Eckelmann } else { 791794c5faSDominik Eckelmann msg($this->getLang('cannot approve error'), -1); 801794c5faSDominik Eckelmann } 811794c5faSDominik Eckelmann 8218515038SDominik Eckelmann send_redirect(wl($ID, array('rev' => $this->helper->getRevision()), true, '&')); 831794c5faSDominik Eckelmann } 841794c5faSDominik Eckelmann 851794c5faSDominik Eckelmann} 86