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