xref: /plugin/approve/action/revisions.php (revision b59355cdb0bc1813158c3cec643671b1fa1b3e90)
11aeb2b4dSghi<?php
21aeb2b4dSghi
31989ee26SSzymon Olewniczakuse dokuwiki\Extension\ActionPlugin;
41989ee26SSzymon Olewniczakuse dokuwiki\Extension\EventHandler;
51989ee26SSzymon Olewniczakuse dokuwiki\Extension\Event;
6234375e2SSzymon Olewniczakuse dokuwiki\Form\TagOpenElement;
7234375e2SSzymon Olewniczakuse dokuwiki\Form\CheckableElement;
8234375e2SSzymon Olewniczak
91989ee26SSzymon Olewniczakclass action_plugin_approve_revisions extends ActionPlugin {
101aeb2b4dSghi
111989ee26SSzymon Olewniczak    function register(EventHandler $controller) {
12234375e2SSzymon Olewniczak		$controller->register_hook('FORM_REVISIONS_OUTPUT', 'BEFORE', $this, 'handle_revisions', array());
131aeb2b4dSghi	}
141aeb2b4dSghi
151989ee26SSzymon Olewniczak	function handle_revisions(Event $event, $param) {
16d8ede060SSzymon Olewniczak		global $INFO;
171aeb2b4dSghi
18*b59355cdSSzymon Olewniczak        /** @var helper_plugin_approve_db $db */
19*b59355cdSSzymon Olewniczak        $db = $this->loadHelper('approve_db');
201989ee26SSzymon Olewniczak        /** @var helper_plugin_approve_acl $acl */
211989ee26SSzymon Olewniczak        $acl = $this->loadHelper('approve_acl');
2250481663SSzymon Olewniczak
231989ee26SSzymon Olewniczak        if (!$acl->useApproveHere($INFO['id'])) return;
240c60a293SSzymon Olewniczak
251989ee26SSzymon Olewniczak        $approve_revisions = $db->getPageRevisions($INFO['id']);
261989ee26SSzymon Olewniczak
27ed32c614SSzymon Olewniczak        $last_approved_rev = null;
28ed32c614SSzymon Olewniczak        if (count($approve_revisions) > 1) {
2915e5c2ddSSzymon Olewniczak            $last_approved_rev = max(array_column(array_filter($approve_revisions, function ($v) {
3015e5c2ddSSzymon Olewniczak                return $v['approved'] != null;
3115e5c2ddSSzymon Olewniczak            }), 'rev'));
32ed32c614SSzymon Olewniczak        }
33ed32c614SSzymon Olewniczak
34234375e2SSzymon Olewniczak        $approve_revisions = array_combine(array_column($approve_revisions, 'rev'), $approve_revisions);
35d8ede060SSzymon Olewniczak
3615e5c2ddSSzymon Olewniczak
37234375e2SSzymon Olewniczak		$parent_div_position = -1;
38234375e2SSzymon Olewniczak		for ($i = 0; $i < $event->data->elementCount(); $i++) {
39234375e2SSzymon Olewniczak            $element = $event->data->getElementAt($i);
40234375e2SSzymon Olewniczak            if ($element instanceof TagOpenElement && $element->val() == 'div'
41234375e2SSzymon Olewniczak                && $element->attr('class') == 'li') {
42234375e2SSzymon Olewniczak                $parent_div_position = $i;
43234375e2SSzymon Olewniczak            } elseif ($parent_div_position > 0 && $element instanceof CheckableElement &&
44234375e2SSzymon Olewniczak                $element->attr('name') == 'rev2[]') {
45234375e2SSzymon Olewniczak                $revision = $element->attr('value');
46d8ede060SSzymon Olewniczak                if ($revision == 'current') {
47d8ede060SSzymon Olewniczak                    $revision = $INFO['meta']['date']['modified'];
48d8ede060SSzymon Olewniczak                }
49234375e2SSzymon Olewniczak                if (!isset($approve_revisions[$revision])) {
5015e5c2ddSSzymon Olewniczak                    $class =  'plugin__approve_draft';
5115e5c2ddSSzymon Olewniczak                } elseif ($approve_revisions[$revision]['approved'] && $revision == $last_approved_rev) {
5215e5c2ddSSzymon Olewniczak                    $class =  'plugin__approve_approved';
53234375e2SSzymon Olewniczak                } elseif ($approve_revisions[$revision]['approved']) {
5415e5c2ddSSzymon Olewniczak                    $class =  'plugin__approve_old_approved';
55234375e2SSzymon Olewniczak                } elseif ($this->getConf('ready_for_approval') && $approve_revisions[$revision]['ready_for_approval']) {
56d8ede060SSzymon Olewniczak                    $class =  'plugin__approve_ready';
57d8ede060SSzymon Olewniczak                } else {
5815e5c2ddSSzymon Olewniczak                    $class =  'plugin__approve_draft';
59d8ede060SSzymon Olewniczak                }
60d8ede060SSzymon Olewniczak
61234375e2SSzymon Olewniczak                $parent_div = $event->data->getElementAt($parent_div_position);
62234375e2SSzymon Olewniczak                $parent_div->addClass($class);
63234375e2SSzymon Olewniczak                $parent_div_position = -1;
64d8ede060SSzymon Olewniczak            }
651aeb2b4dSghi		}
661aeb2b4dSghi	}
671aeb2b4dSghi
681aeb2b4dSghi}
69