xref: /plugin/publish/action/approve.php (revision 1794c5facebc8ae31437fc55d2d73a19fef4f734)
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