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