1*81e0fa51SDominik Eckelmann<?php 2*81e0fa51SDominik Eckelmann 3*81e0fa51SDominik Eckelmannif(!defined('DOKU_INC')) die(); 4*81e0fa51SDominik Eckelmann 5*81e0fa51SDominik Eckelmannclass action_plugin_publish_recent extends DokuWiki_Action_Plugin { 6*81e0fa51SDominik Eckelmann 7*81e0fa51SDominik Eckelmann private $hlp; 8*81e0fa51SDominik Eckelmann 9*81e0fa51SDominik Eckelmann function __construct() { 10*81e0fa51SDominik Eckelmann $this->hlp = plugin_load('helper','publish'); 11*81e0fa51SDominik Eckelmann } 12*81e0fa51SDominik Eckelmann 13*81e0fa51SDominik Eckelmann function register(&$controller) { 14*81e0fa51SDominik Eckelmann $controller->register_hook('HTML_RECENTFORM_OUTPUT', 'BEFORE', $this, 'handle_recent', array()); 15*81e0fa51SDominik Eckelmann } 16*81e0fa51SDominik Eckelmann 17*81e0fa51SDominik Eckelmann function handle_recent(&$event, $param) { 18*81e0fa51SDominik Eckelmann $render = $event->data->_content; 19*81e0fa51SDominik Eckelmann 20*81e0fa51SDominik Eckelmann $parent = null; 21*81e0fa51SDominik Eckelmann foreach ($render as $id => $element) { 22*81e0fa51SDominik Eckelmann 23*81e0fa51SDominik Eckelmann if ($this->isParentTag($element)) { 24*81e0fa51SDominik Eckelmann $parent = $id; 25*81e0fa51SDominik Eckelmann continue; 26*81e0fa51SDominik Eckelmann } 27*81e0fa51SDominik Eckelmann 28*81e0fa51SDominik Eckelmann if ($parent === null) { 29*81e0fa51SDominik Eckelmann continue; 30*81e0fa51SDominik Eckelmann } 31*81e0fa51SDominik Eckelmann 32*81e0fa51SDominik Eckelmann $id = $this->getPageId($element); 33*81e0fa51SDominik Eckelmann if (!$id) { 34*81e0fa51SDominik Eckelmann continue; 35*81e0fa51SDominik Eckelmann } 36*81e0fa51SDominik Eckelmann 37*81e0fa51SDominik Eckelmann if ($this->hlp->isCurrentRevisionApproved($id)) { 38*81e0fa51SDominik Eckelmann $event->data->_content[$parent]['class'] .= ' approved_revision'; 39*81e0fa51SDominik Eckelmann } else { 40*81e0fa51SDominik Eckelmann $event->data->_content[$parent]['class'] .= ' unapproved_revision'; 41*81e0fa51SDominik Eckelmann } 42*81e0fa51SDominik Eckelmann $parent = null; 43*81e0fa51SDominik Eckelmann } 44*81e0fa51SDominik Eckelmann return true; 45*81e0fa51SDominik Eckelmann } 46*81e0fa51SDominik Eckelmann 47*81e0fa51SDominik Eckelmann function isParentTag($tag) { 48*81e0fa51SDominik Eckelmann if ($tag['_elem'] !== 'opentag') { 49*81e0fa51SDominik Eckelmann return false; 50*81e0fa51SDominik Eckelmann } 51*81e0fa51SDominik Eckelmann 52*81e0fa51SDominik Eckelmann if ($tag['_tag'] !== 'div') { 53*81e0fa51SDominik Eckelmann return false; 54*81e0fa51SDominik Eckelmann } 55*81e0fa51SDominik Eckelmann 56*81e0fa51SDominik Eckelmann return ($tag['class'] === 'li'); 57*81e0fa51SDominik Eckelmann } 58*81e0fa51SDominik Eckelmann 59*81e0fa51SDominik Eckelmann function getPageId($tag) { 60*81e0fa51SDominik Eckelmann if (!is_string($tag)) { 61*81e0fa51SDominik Eckelmann return false; 62*81e0fa51SDominik Eckelmann } 63*81e0fa51SDominik Eckelmann 64*81e0fa51SDominik Eckelmann $match = array(); 65*81e0fa51SDominik Eckelmann if (!preg_match('/<a href=".*" class="wikilink1" title="(.*)">.*/i', $tag, $match)) { 66*81e0fa51SDominik Eckelmann return false; 67*81e0fa51SDominik Eckelmann } 68*81e0fa51SDominik Eckelmann 69*81e0fa51SDominik Eckelmann return $match[1]; 70*81e0fa51SDominik Eckelmann } 71*81e0fa51SDominik Eckelmann 72*81e0fa51SDominik Eckelmann} 73