xref: /plugin/publish/action/revisions.php (revision adc7dac8f697b0c268241a8d2a45f02db2bb800c)
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) {
17*adc7dac8SHenk-B        $controller->register_hook('FORM_REVISIONS_OUTPUT', 'AFTER', $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;
3181624315SHenk-B        for ($pos = 0; $pos < $event->data->elementCount(); $pos++) {
3281624315SHenk-B            $ref = $event->data->getElementAt($pos);
3381624315SHenk-B            if ($ref->getType() != 'tagclose') {
3481624315SHenk-B                if ($ref->val() == 'div' && $ref->attr('class') == 'li')
3581624315SHenk-B                    $member = $event->data->getElementAt($pos);
361794c5faSDominik Eckelmann
3781624315SHenk-B                if ($member && $ref->attr('name') == 'rev2[]'){
3881624315SHenk-B                    $revision = $ref->attr('value');
39909a4de8SDominik Eckelmann                    if ($revision == 'current') {
40e0fdb4d5SAnna Dabrowska                        // handle minor revisions and external edits
41e0fdb4d5SAnna Dabrowska                        $revision = isset($meta['last_change']['date']) ?
42e0fdb4d5SAnna Dabrowska                            $meta['last_change']['date'] :
43e0fdb4d5SAnna Dabrowska                            $INFO['meta']['date']['modified'];
44909a4de8SDominik Eckelmann                    }
45909a4de8SDominik Eckelmann                    if ($this->hlp->isRevisionApproved($revision)) {
4681624315SHenk-B                        $member->addClass('approved_revision');
471794c5faSDominik Eckelmann                    } else {
4881624315SHenk-B                        $member->addClass('unapproved_revision');
491794c5faSDominik Eckelmann                    }
501794c5faSDominik Eckelmann                    $member = null;
511794c5faSDominik Eckelmann                }
521794c5faSDominik Eckelmann            }
5381624315SHenk-B        }
541794c5faSDominik Eckelmann        return true;
551794c5faSDominik Eckelmann    }
561794c5faSDominik Eckelmann
571794c5faSDominik Eckelmann}
58