xref: /plugin/approve/action/revisions.php (revision d8ede06043d02e5697f43d6d5bd3619b9ec26549)
11aeb2b4dSghi<?php
21aeb2b4dSghi
31aeb2b4dSghiif(!defined('DOKU_INC')) die();
41aeb2b4dSghi
51aeb2b4dSghiclass action_plugin_approve_revisions extends DokuWiki_Action_Plugin {
61aeb2b4dSghi
7*d8ede060SSzymon Olewniczak    /** @var helper_plugin_sqlite */
8*d8ede060SSzymon Olewniczak    protected $sqlite;
9bab76148SSzymon Olewniczak
10*d8ede060SSzymon Olewniczak    /** @var helper_plugin_approve */
11*d8ede060SSzymon Olewniczak    protected $helper;
12*d8ede060SSzymon Olewniczak
13*d8ede060SSzymon Olewniczak    /**
14*d8ede060SSzymon Olewniczak     * @return helper_plugin_sqlite
15*d8ede060SSzymon Olewniczak     */
16*d8ede060SSzymon Olewniczak    protected function sqlite() {
17*d8ede060SSzymon Olewniczak        if (!$this->sqlite) {
18*d8ede060SSzymon Olewniczak            /** @var helper_plugin_approve_db $db_helper */
19*d8ede060SSzymon Olewniczak            $db_helper = plugin_load('helper', 'approve_db');
20*d8ede060SSzymon Olewniczak            $this->sqlite = $db_helper->getDB();
21*d8ede060SSzymon Olewniczak        }
22*d8ede060SSzymon Olewniczak        return $this->sqlite;
2350481663SSzymon Olewniczak    }
2450481663SSzymon Olewniczak
25*d8ede060SSzymon Olewniczak    /**
26*d8ede060SSzymon Olewniczak     * @return helper_plugin_approve
27*d8ede060SSzymon Olewniczak     */
28*d8ede060SSzymon Olewniczak    protected function helper() {
29*d8ede060SSzymon Olewniczak        if (!$this->helper) {
30*d8ede060SSzymon Olewniczak            $helper = plugin_load('helper', 'approve');
31*d8ede060SSzymon Olewniczak            $this->helper = $helper;
32*d8ede060SSzymon Olewniczak        }
33*d8ede060SSzymon Olewniczak        return $this->helper;
34*d8ede060SSzymon Olewniczak    }
3550481663SSzymon Olewniczak
3650481663SSzymon Olewniczak    function register(Doku_Event_Handler $controller) {
371aeb2b4dSghi		$controller->register_hook('HTML_REVISIONSFORM_OUTPUT', 'BEFORE', $this, 'handle_revisions', array());
381aeb2b4dSghi	}
391aeb2b4dSghi
40d0c5854eSSzymon Olewniczak	function handle_revisions(Doku_Event $event, $param) {
41*d8ede060SSzymon Olewniczak		global $INFO;
421aeb2b4dSghi
43*d8ede060SSzymon Olewniczak        if (!$this->helper()->use_approve_here($INFO['id'])) return;
4450481663SSzymon Olewniczak
45*d8ede060SSzymon Olewniczak        $res = $this->sqlite()->query('SELECT rev, approved, ready_for_approval
46*d8ede060SSzymon Olewniczak                                FROM revision
47*d8ede060SSzymon Olewniczak                                WHERE page=?', $INFO['id']);
48*d8ede060SSzymon Olewniczak        $approveRevisions = $this->sqlite()->res2arr($res);
49*d8ede060SSzymon Olewniczak        $approveRevisions = array_combine(array_column($approveRevisions, 'rev'), $approveRevisions);
50*d8ede060SSzymon Olewniczak
51*d8ede060SSzymon Olewniczak		$member = null;
521aeb2b4dSghi		foreach ($event->data->_content as $key => $ref) {
53*d8ede060SSzymon Olewniczak            if(isset($ref['_elem']) && $ref['_elem'] == 'opentag' && $ref['_tag'] == 'div' && $ref['class'] == 'li') {
5455f447f4SSzymon Olewniczak                $member = $key;
5555f447f4SSzymon Olewniczak            }
5655f447f4SSzymon Olewniczak
57*d8ede060SSzymon Olewniczak            if ($member && $ref['_elem'] == 'tag' &&
58*d8ede060SSzymon Olewniczak                $ref['_tag'] == 'input' && $ref['name'] == 'rev2[]'){
59*d8ede060SSzymon Olewniczak                $revision = $ref['value'];
60*d8ede060SSzymon Olewniczak                if ($revision == 'current') {
61*d8ede060SSzymon Olewniczak                    $revision = $INFO['meta']['date']['modified'];
62*d8ede060SSzymon Olewniczak                }
63*d8ede060SSzymon Olewniczak                if (!isset($approveRevisions[$revision])) {
64*d8ede060SSzymon Olewniczak                    $class =  'plugin__approve_red';
65*d8ede060SSzymon Olewniczak                } elseif ($approveRevisions[$revision]['approved']) {
66*d8ede060SSzymon Olewniczak                    $class =  'plugin__approve_green';
67*d8ede060SSzymon Olewniczak                } elseif ($this->getConf('ready_for_approval') && $approveRevisions[$revision]['ready_for_approval']) {
68*d8ede060SSzymon Olewniczak                    $class =  'plugin__approve_ready';
69*d8ede060SSzymon Olewniczak                } else {
70*d8ede060SSzymon Olewniczak                    $class =  'plugin__approve_red';
71*d8ede060SSzymon Olewniczak                }
72*d8ede060SSzymon Olewniczak
73*d8ede060SSzymon Olewniczak                $event->data->_content[$member]['class'] = "li $class";
74*d8ede060SSzymon Olewniczak
75*d8ede060SSzymon Olewniczak                $member = null;
76*d8ede060SSzymon Olewniczak            }
771aeb2b4dSghi		}
781aeb2b4dSghi
791aeb2b4dSghi		return true;
801aeb2b4dSghi	}
811aeb2b4dSghi
821aeb2b4dSghi}
83