1<?php
2
3if(!defined('DOKU_INC')) die();
4
5class action_plugin_publish_revisions extends DokuWiki_Action_Plugin {
6
7    /**
8     * @var helper_plugin_publish
9     */
10    private $hlp;
11
12    function __construct() {
13        $this->hlp = plugin_load('helper','publish');
14    }
15
16    function register(Doku_Event_Handler $controller) {
17        $controller->register_hook('HTML_REVISIONSFORM_OUTPUT', 'BEFORE', $this, 'handle_revisions', array());
18    }
19
20    function handle_revisions(Doku_Event &$event, $param) {
21        global $ID;
22        global $INFO;
23
24        if (!$this->hlp->isActive()) {
25            return;
26        }
27
28        $meta = p_get_metadata($ID);
29
30        $member = null;
31        foreach ($event->data->_content as $key => $ref) {
32            if(isset($ref['_elem']) && $ref['_elem'] == 'opentag' && $ref['_tag'] == 'div' && $ref['class'] == 'li') {
33                $member = $key;
34            }
35
36            if ($member && isset($ref['_elem']) && $ref['_elem'] == 'tag' &&
37                $ref['_tag'] == 'input' && $ref['name'] == 'rev2[]'){
38
39                $revision = $ref['value'];
40                if ($revision == 'current') {
41                    // handle minor revisions and external edits
42                    $revision = isset($meta['last_change']['date']) ?
43                        $meta['last_change']['date'] :
44                        $INFO['meta']['date']['modified'];
45                }
46                if ($this->hlp->isRevisionApproved($revision)) {
47                    $event->data->_content[$member]['class'] = 'li approved_revision';
48                } else {
49                    $event->data->_content[$member]['class'] = 'li unapproved_revision';
50                }
51                $member = null;
52            }
53        }
54
55        return true;
56    }
57
58}
59