xref: /plugin/publish/action/revisions.php (revision 1794c5facebc8ae31437fc55d2d73a19fef4f734)
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
20        if (!$this->hlp->in_namespace($this->getConf('apr_namespaces'), $ID)) {
21            return;
22        }
23
24        $meta = p_get_metadata($ID);
25        $latest_rev = $meta['last_change']['date'];
26
27        $member = null;
28        foreach ($event->data->_content as $key => $ref) {
29            if($ref['_elem'] == 'opentag' && $ref['_tag'] == 'div' && $ref['class'] == 'li') {
30                $member = $key;
31            }
32
33            if ($member && $ref['_elem'] == 'tag' &&
34                $ref['_tag'] == 'input' && $ref['name'] == 'rev2[]'){
35                if ($meta['approval'][$ref['value']] ||
36                    ($ref['value'] == 'current' && $meta['approval'][$latest_rev])) {
37                    $event->data->_content[$member]['class'] = 'li approved_revision';
38                } else {
39                    $event->data->_content[$member]['class'] = 'li unapproved_revision';
40                }
41                $member = null;
42            }
43        }
44
45        return true;
46    }
47
48}
49