1<?php 2 3if(!defined('DOKU_INC')) die(); 4 5class action_plugin_publish_revisions extends DokuWiki_Action_Plugin { 6 7 /** 8 * @var helper_plugin_publish 9 */ 10 private $hlp; 11 12 function __construct() { 13 $this->hlp = plugin_load('helper','publish'); 14 } 15 16 function register(Doku_Event_Handler $controller) { 17 $controller->register_hook('HTML_REVISIONSFORM_OUTPUT', 'BEFORE', $this, 'handle_revisions', array()); 18 } 19 20 function handle_revisions(Doku_Event &$event, $param) { 21 global $ID; 22 global $INFO; 23 24 if (!$this->hlp->isActive()) { 25 return; 26 } 27 28 $meta = p_get_metadata($ID); 29 30 $member = null; 31 foreach ($event->data->_content as $key => $ref) { 32 if(isset($ref['_elem']) && $ref['_elem'] == 'opentag' && $ref['_tag'] == 'div' && $ref['class'] == 'li') { 33 $member = $key; 34 } 35 36 if ($member && isset($ref['_elem']) && $ref['_elem'] == 'tag' && 37 $ref['_tag'] == 'input' && $ref['name'] == 'rev2[]'){ 38 39 $revision = $ref['value']; 40 if ($revision == 'current') { 41 // handle minor revisions and external edits 42 $revision = isset($meta['last_change']['date']) ? 43 $meta['last_change']['date'] : 44 $INFO['meta']['date']['modified']; 45 } 46 if ($this->hlp->isRevisionApproved($revision)) { 47 $event->data->_content[$member]['class'] = 'li approved_revision'; 48 } else { 49 $event->data->_content[$member]['class'] = 'li unapproved_revision'; 50 } 51 $member = null; 52 } 53 } 54 55 return true; 56 } 57 58} 59