181e0fa51SDominik Eckelmann<?php 281e0fa51SDominik Eckelmann 381e0fa51SDominik Eckelmannif(!defined('DOKU_INC')) die(); 481e0fa51SDominik Eckelmann 581e0fa51SDominik Eckelmannclass action_plugin_publish_recent extends DokuWiki_Action_Plugin { 681e0fa51SDominik Eckelmann 781e0fa51SDominik Eckelmann private $hlp; 881e0fa51SDominik Eckelmann 981e0fa51SDominik Eckelmann function __construct() { 1081e0fa51SDominik Eckelmann $this->hlp = plugin_load('helper','publish'); 1181e0fa51SDominik Eckelmann } 1281e0fa51SDominik Eckelmann 1381e0fa51SDominik Eckelmann function register(&$controller) { 1481e0fa51SDominik Eckelmann $controller->register_hook('HTML_RECENTFORM_OUTPUT', 'BEFORE', $this, 'handle_recent', array()); 1581e0fa51SDominik Eckelmann } 1681e0fa51SDominik Eckelmann 1781e0fa51SDominik Eckelmann function handle_recent(&$event, $param) { 1881e0fa51SDominik Eckelmann $render = $event->data->_content; 1981e0fa51SDominik Eckelmann 2081e0fa51SDominik Eckelmann $parent = null; 2181e0fa51SDominik Eckelmann foreach ($render as $id => $element) { 2281e0fa51SDominik Eckelmann 2381e0fa51SDominik Eckelmann if ($this->isParentTag($element)) { 2481e0fa51SDominik Eckelmann $parent = $id; 2581e0fa51SDominik Eckelmann continue; 2681e0fa51SDominik Eckelmann } 2781e0fa51SDominik Eckelmann 2881e0fa51SDominik Eckelmann if ($parent === null) { 2981e0fa51SDominik Eckelmann continue; 3081e0fa51SDominik Eckelmann } 3181e0fa51SDominik Eckelmann 3281e0fa51SDominik Eckelmann $id = $this->getPageId($element); 3381e0fa51SDominik Eckelmann if (!$id) { 3481e0fa51SDominik Eckelmann continue; 3581e0fa51SDominik Eckelmann } 3681e0fa51SDominik Eckelmann 3781e0fa51SDominik Eckelmann if ($this->hlp->isCurrentRevisionApproved($id)) { 3881e0fa51SDominik Eckelmann $event->data->_content[$parent]['class'] .= ' approved_revision'; 3981e0fa51SDominik Eckelmann } else { 4081e0fa51SDominik Eckelmann $event->data->_content[$parent]['class'] .= ' unapproved_revision'; 4181e0fa51SDominik Eckelmann } 4281e0fa51SDominik Eckelmann $parent = null; 4381e0fa51SDominik Eckelmann } 4481e0fa51SDominik Eckelmann return true; 4581e0fa51SDominik Eckelmann } 4681e0fa51SDominik Eckelmann 4781e0fa51SDominik Eckelmann function isParentTag($tag) { 48*2d472d20SSam Wilson if (isset($tag['_elem']) && $tag['_elem'] !== 'opentag') { 4981e0fa51SDominik Eckelmann return false; 5081e0fa51SDominik Eckelmann } 5181e0fa51SDominik Eckelmann 52*2d472d20SSam Wilson if (isset($tag['_tag']) && $tag['_tag'] !== 'div') { 5381e0fa51SDominik Eckelmann return false; 5481e0fa51SDominik Eckelmann } 5581e0fa51SDominik Eckelmann 56*2d472d20SSam Wilson return (isset($tag['class']) && $tag['class'] === 'li'); 5781e0fa51SDominik Eckelmann } 5881e0fa51SDominik Eckelmann 5981e0fa51SDominik Eckelmann function getPageId($tag) { 6081e0fa51SDominik Eckelmann if (!is_string($tag)) { 6181e0fa51SDominik Eckelmann return false; 6281e0fa51SDominik Eckelmann } 6381e0fa51SDominik Eckelmann 6481e0fa51SDominik Eckelmann $match = array(); 6581e0fa51SDominik Eckelmann if (!preg_match('/<a href=".*" class="wikilink1" title="(.*)">.*/i', $tag, $match)) { 6681e0fa51SDominik Eckelmann return false; 6781e0fa51SDominik Eckelmann } 6881e0fa51SDominik Eckelmann 6981e0fa51SDominik Eckelmann return $match[1]; 7081e0fa51SDominik Eckelmann } 7181e0fa51SDominik Eckelmann 7281e0fa51SDominik Eckelmann} 73