11aeb2b4dSghi<?php 21aeb2b4dSghi 3*1989ee26SSzymon Olewniczakuse dokuwiki\Extension\ActionPlugin; 4*1989ee26SSzymon Olewniczakuse dokuwiki\Extension\EventHandler; 5*1989ee26SSzymon Olewniczakuse dokuwiki\Extension\Event; 6234375e2SSzymon Olewniczakuse dokuwiki\Form\TagOpenElement; 7234375e2SSzymon Olewniczakuse dokuwiki\Form\CheckableElement; 8234375e2SSzymon Olewniczak 9*1989ee26SSzymon Olewniczakclass action_plugin_approve_revisions extends ActionPlugin { 101aeb2b4dSghi 11*1989ee26SSzymon Olewniczak function register(EventHandler $controller) { 12234375e2SSzymon Olewniczak $controller->register_hook('FORM_REVISIONS_OUTPUT', 'BEFORE', $this, 'handle_revisions', array()); 131aeb2b4dSghi } 141aeb2b4dSghi 15*1989ee26SSzymon Olewniczak function handle_revisions(Event $event, $param) { 16d8ede060SSzymon Olewniczak global $INFO; 171aeb2b4dSghi 18*1989ee26SSzymon Olewniczak /** @var helper_plugin_approve_data $db */ 19*1989ee26SSzymon Olewniczak $db = $this->loadHelper('approve_data'); 20*1989ee26SSzymon Olewniczak /** @var helper_plugin_approve_acl $acl */ 21*1989ee26SSzymon Olewniczak $acl = $this->loadHelper('approve_acl'); 2250481663SSzymon Olewniczak 23*1989ee26SSzymon Olewniczak if (!$acl->useApproveHere($INFO['id'])) return; 240c60a293SSzymon Olewniczak 25*1989ee26SSzymon Olewniczak $approve_revisions = $db->getPageRevisions($INFO['id']); 26*1989ee26SSzymon 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