xref: /plugin/publish/action/approve.php (revision 5ccce1abe5d4395948048b536637fee019081e71)
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
16*5ccce1abSMichael Große    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;
2551621a57SChristopher Smith        global $INPUT;
261794c5faSDominik Eckelmann
271794c5faSDominik Eckelmann        if ($ACT != 'show') {
281794c5faSDominik Eckelmann            return;
291794c5faSDominik Eckelmann        }
301794c5faSDominik Eckelmann
318fc40594SChristopher 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