1<?php 2 3if(!defined('DOKU_INC')) die(); 4 5class action_plugin_approve_revisions extends DokuWiki_Action_Plugin { 6 7 /** @var helper_plugin_sqlite */ 8 protected $sqlite; 9 10 /** @var helper_plugin_approve */ 11 protected $helper; 12 13 /** 14 * @return helper_plugin_sqlite 15 */ 16 protected function sqlite() { 17 if (!$this->sqlite) { 18 /** @var helper_plugin_approve_db $db_helper */ 19 $db_helper = plugin_load('helper', 'approve_db'); 20 $this->sqlite = $db_helper->getDB(); 21 } 22 return $this->sqlite; 23 } 24 25 /** 26 * @return helper_plugin_approve 27 */ 28 protected function helper() { 29 if (!$this->helper) { 30 $helper = plugin_load('helper', 'approve'); 31 $this->helper = $helper; 32 } 33 return $this->helper; 34 } 35 36 function register(Doku_Event_Handler $controller) { 37 $controller->register_hook('HTML_REVISIONSFORM_OUTPUT', 'BEFORE', $this, 'handle_revisions', array()); 38 } 39 40 function handle_revisions(Doku_Event $event, $param) { 41 global $INFO; 42 43 if (!$this->helper()->use_approve_here($INFO['id'])) return; 44 45 $res = $this->sqlite()->query('SELECT rev, approved, ready_for_approval 46 FROM revision 47 WHERE page=?', $INFO['id']); 48 $approveRevisions = $this->sqlite()->res2arr($res); 49 $approveRevisions = array_combine(array_column($approveRevisions, 'rev'), $approveRevisions); 50 51 $member = null; 52 foreach ($event->data->_content as $key => $ref) { 53 if(isset($ref['_elem']) && $ref['_elem'] == 'opentag' && $ref['_tag'] == 'div' && $ref['class'] == 'li') { 54 $member = $key; 55 } 56 57 if ($member && $ref['_elem'] == 'tag' && 58 $ref['_tag'] == 'input' && $ref['name'] == 'rev2[]'){ 59 $revision = $ref['value']; 60 if ($revision == 'current') { 61 $revision = $INFO['meta']['date']['modified']; 62 } 63 if (!isset($approveRevisions[$revision])) { 64 $class = 'plugin__approve_red'; 65 } elseif ($approveRevisions[$revision]['approved']) { 66 $class = 'plugin__approve_green'; 67 } elseif ($this->getConf('ready_for_approval') && $approveRevisions[$revision]['ready_for_approval']) { 68 $class = 'plugin__approve_ready'; 69 } else { 70 $class = 'plugin__approve_red'; 71 } 72 73 $event->data->_content[$member]['class'] = "li $class"; 74 75 $member = null; 76 } 77 } 78 79 return true; 80 } 81 82} 83