xref: /plugin/publish/action/revisions.php (revision e0fdb4d57e1a260be34ae976a47fb13817e1e97a)
11794c5faSDominik Eckelmann<?php
21794c5faSDominik Eckelmann
31794c5faSDominik Eckelmannif(!defined('DOKU_INC')) die();
41794c5faSDominik Eckelmann
51794c5faSDominik Eckelmannclass action_plugin_publish_revisions extends DokuWiki_Action_Plugin {
61794c5faSDominik Eckelmann
7d9258364SDominik Eckelmann    /**
8d9258364SDominik Eckelmann     * @var helper_plugin_publish
9d9258364SDominik Eckelmann     */
101794c5faSDominik Eckelmann    private $hlp;
111794c5faSDominik Eckelmann
121794c5faSDominik Eckelmann    function __construct() {
131794c5faSDominik Eckelmann        $this->hlp = plugin_load('helper','publish');
141794c5faSDominik Eckelmann    }
151794c5faSDominik Eckelmann
165ccce1abSMichael Große    function register(Doku_Event_Handler $controller) {
171794c5faSDominik Eckelmann        $controller->register_hook('HTML_REVISIONSFORM_OUTPUT', 'BEFORE', $this, 'handle_revisions', array());
181794c5faSDominik Eckelmann    }
191794c5faSDominik Eckelmann
20d9258364SDominik Eckelmann    function handle_revisions(Doku_Event &$event, $param) {
211794c5faSDominik Eckelmann        global $ID;
22909a4de8SDominik Eckelmann        global $INFO;
231794c5faSDominik Eckelmann
24d9258364SDominik Eckelmann        if (!$this->hlp->isActive()) {
251794c5faSDominik Eckelmann            return;
261794c5faSDominik Eckelmann        }
271794c5faSDominik Eckelmann
281794c5faSDominik Eckelmann        $meta = p_get_metadata($ID);
291794c5faSDominik Eckelmann
301794c5faSDominik Eckelmann        $member = null;
311794c5faSDominik Eckelmann        foreach ($event->data->_content as $key => $ref) {
32a224d022SSam Wilson            if(isset($ref['_elem']) && $ref['_elem'] == 'opentag' && $ref['_tag'] == 'div' && $ref['class'] == 'li') {
331794c5faSDominik Eckelmann                $member = $key;
341794c5faSDominik Eckelmann            }
351794c5faSDominik Eckelmann
36fe1c2e04SPhy            if ($member && isset($ref['_elem']) && $ref['_elem'] == 'tag' &&
371794c5faSDominik Eckelmann                $ref['_tag'] == 'input' && $ref['name'] == 'rev2[]'){
38909a4de8SDominik Eckelmann
39909a4de8SDominik Eckelmann                $revision = $ref['value'];
40909a4de8SDominik Eckelmann                if ($revision == 'current') {
41*e0fdb4d5SAnna Dabrowska                    // handle minor revisions and external edits
42*e0fdb4d5SAnna Dabrowska                    $revision = isset($meta['last_change']['date']) ?
43*e0fdb4d5SAnna Dabrowska                        $meta['last_change']['date'] :
44*e0fdb4d5SAnna Dabrowska                        $INFO['meta']['date']['modified'];
45909a4de8SDominik Eckelmann                }
46909a4de8SDominik Eckelmann                if ($this->hlp->isRevisionApproved($revision)) {
471794c5faSDominik Eckelmann                    $event->data->_content[$member]['class'] = 'li approved_revision';
481794c5faSDominik Eckelmann                } else {
491794c5faSDominik Eckelmann                    $event->data->_content[$member]['class'] = 'li unapproved_revision';
501794c5faSDominik Eckelmann                }
511794c5faSDominik Eckelmann                $member = null;
521794c5faSDominik Eckelmann            }
531794c5faSDominik Eckelmann        }
541794c5faSDominik Eckelmann
551794c5faSDominik Eckelmann        return true;
561794c5faSDominik Eckelmann    }
571794c5faSDominik Eckelmann
581794c5faSDominik Eckelmann}
59