11aeb2b4dSghi<?php 21aeb2b4dSghi 3234375e2SSzymon Olewniczakuse dokuwiki\Form\TagOpenElement; 4234375e2SSzymon Olewniczakuse dokuwiki\Form\CheckableElement; 5234375e2SSzymon Olewniczak 61aeb2b4dSghiif(!defined('DOKU_INC')) die(); 71aeb2b4dSghi 8234375e2SSzymon Olewniczak 91aeb2b4dSghiclass action_plugin_approve_revisions extends DokuWiki_Action_Plugin { 101aeb2b4dSghi 1150481663SSzymon Olewniczak function register(Doku_Event_Handler $controller) { 12234375e2SSzymon Olewniczak $controller->register_hook('FORM_REVISIONS_OUTPUT', 'BEFORE', $this, 'handle_revisions', array()); 131aeb2b4dSghi } 141aeb2b4dSghi 15d0c5854eSSzymon Olewniczak function handle_revisions(Doku_Event $event, $param) { 16d8ede060SSzymon Olewniczak global $INFO; 171aeb2b4dSghi 180c60a293SSzymon Olewniczak try { 190c60a293SSzymon Olewniczak /** @var \helper_plugin_approve_db $db_helper */ 200c60a293SSzymon Olewniczak $db_helper = plugin_load('helper', 'approve_db'); 210c60a293SSzymon Olewniczak $sqlite = $db_helper->getDB(); 220c60a293SSzymon Olewniczak } catch (Exception $e) { 230c60a293SSzymon Olewniczak msg($e->getMessage(), -1); 240c60a293SSzymon Olewniczak return; 250c60a293SSzymon Olewniczak } 260c60a293SSzymon Olewniczak /** @var helper_plugin_approve $helper */ 270c60a293SSzymon Olewniczak $helper = plugin_load('helper', 'approve'); 2850481663SSzymon Olewniczak 290c60a293SSzymon Olewniczak if (!$helper->use_approve_here($sqlite, $INFO['id'])) return; 300c60a293SSzymon Olewniczak 310c60a293SSzymon Olewniczak $res = $sqlite->query('SELECT rev, approved, ready_for_approval 32d8ede060SSzymon Olewniczak FROM revision 33d8ede060SSzymon Olewniczak WHERE page=?', $INFO['id']); 34234375e2SSzymon Olewniczak $approve_revisions = $sqlite->res2arr($res); 35*15e5c2ddSSzymon Olewniczak $last_approved_rev = max(array_column(array_filter($approve_revisions, function ($v) { 36*15e5c2ddSSzymon Olewniczak return $v['approved'] != null; 37*15e5c2ddSSzymon Olewniczak }), 'rev')); 38234375e2SSzymon Olewniczak $approve_revisions = array_combine(array_column($approve_revisions, 'rev'), $approve_revisions); 39d8ede060SSzymon Olewniczak 40*15e5c2ddSSzymon Olewniczak 41234375e2SSzymon Olewniczak $parent_div_position = -1; 42234375e2SSzymon Olewniczak for ($i = 0; $i < $event->data->elementCount(); $i++) { 43234375e2SSzymon Olewniczak $element = $event->data->getElementAt($i); 44234375e2SSzymon Olewniczak if ($element instanceof TagOpenElement && $element->val() == 'div' 45234375e2SSzymon Olewniczak && $element->attr('class') == 'li') { 46234375e2SSzymon Olewniczak $parent_div_position = $i; 47234375e2SSzymon Olewniczak } elseif ($parent_div_position > 0 && $element instanceof CheckableElement && 48234375e2SSzymon Olewniczak $element->attr('name') == 'rev2[]') { 49234375e2SSzymon Olewniczak $revision = $element->attr('value'); 50d8ede060SSzymon Olewniczak if ($revision == 'current') { 51d8ede060SSzymon Olewniczak $revision = $INFO['meta']['date']['modified']; 52d8ede060SSzymon Olewniczak } 53234375e2SSzymon Olewniczak if (!isset($approve_revisions[$revision])) { 54*15e5c2ddSSzymon Olewniczak $class = 'plugin__approve_draft'; 55*15e5c2ddSSzymon Olewniczak } elseif ($approve_revisions[$revision]['approved'] && $revision == $last_approved_rev) { 56*15e5c2ddSSzymon Olewniczak $class = 'plugin__approve_approved'; 57234375e2SSzymon Olewniczak } elseif ($approve_revisions[$revision]['approved']) { 58*15e5c2ddSSzymon Olewniczak $class = 'plugin__approve_old_approved'; 59234375e2SSzymon Olewniczak } elseif ($this->getConf('ready_for_approval') && $approve_revisions[$revision]['ready_for_approval']) { 60d8ede060SSzymon Olewniczak $class = 'plugin__approve_ready'; 61d8ede060SSzymon Olewniczak } else { 62*15e5c2ddSSzymon Olewniczak $class = 'plugin__approve_draft'; 63d8ede060SSzymon Olewniczak } 64d8ede060SSzymon Olewniczak 65234375e2SSzymon Olewniczak $parent_div = $event->data->getElementAt($parent_div_position); 66234375e2SSzymon Olewniczak $parent_div->addClass($class); 67234375e2SSzymon Olewniczak $parent_div_position = -1; 68d8ede060SSzymon Olewniczak } 691aeb2b4dSghi } 701aeb2b4dSghi } 711aeb2b4dSghi 721aeb2b4dSghi} 73