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 7d9258364SDominik Eckelmann /** 8d9258364SDominik Eckelmann * @var helper_plugin_publish 9d9258364SDominik Eckelmann */ 1081e0fa51SDominik Eckelmann private $hlp; 1181e0fa51SDominik Eckelmann 1281e0fa51SDominik Eckelmann function __construct() { 1381e0fa51SDominik Eckelmann $this->hlp = plugin_load('helper','publish'); 1481e0fa51SDominik Eckelmann } 1581e0fa51SDominik Eckelmann 16*5ccce1abSMichael Große function register(Doku_Event_Handler $controller) { 1781e0fa51SDominik Eckelmann $controller->register_hook('HTML_RECENTFORM_OUTPUT', 'BEFORE', $this, 'handle_recent', array()); 1881e0fa51SDominik Eckelmann } 1981e0fa51SDominik Eckelmann 20d9258364SDominik Eckelmann function handle_recent(Doku_Event &$event, $param) { 21d9258364SDominik Eckelmann if (!$this->hlp->isActive()) { 22d9258364SDominik Eckelmann return; 23d9258364SDominik Eckelmann } 24d9258364SDominik Eckelmann 2581e0fa51SDominik Eckelmann $render = $event->data->_content; 2681e0fa51SDominik Eckelmann 2781e0fa51SDominik Eckelmann $parent = null; 2881e0fa51SDominik Eckelmann foreach ($render as $id => $element) { 2981e0fa51SDominik Eckelmann 3081e0fa51SDominik Eckelmann if ($this->isParentTag($element)) { 3181e0fa51SDominik Eckelmann $parent = $id; 3281e0fa51SDominik Eckelmann continue; 3381e0fa51SDominik Eckelmann } 3481e0fa51SDominik Eckelmann 3581e0fa51SDominik Eckelmann if ($parent === null) { 3681e0fa51SDominik Eckelmann continue; 3781e0fa51SDominik Eckelmann } 3881e0fa51SDominik Eckelmann 3981e0fa51SDominik Eckelmann $id = $this->getPageId($element); 4081e0fa51SDominik Eckelmann if (!$id) { 4181e0fa51SDominik Eckelmann continue; 4281e0fa51SDominik Eckelmann } 4381e0fa51SDominik Eckelmann 4481e0fa51SDominik Eckelmann if ($this->hlp->isCurrentRevisionApproved($id)) { 4581e0fa51SDominik Eckelmann $event->data->_content[$parent]['class'] .= ' approved_revision'; 4681e0fa51SDominik Eckelmann } else { 4781e0fa51SDominik Eckelmann $event->data->_content[$parent]['class'] .= ' unapproved_revision'; 4881e0fa51SDominik Eckelmann } 4981e0fa51SDominik Eckelmann $parent = null; 5081e0fa51SDominik Eckelmann } 5181e0fa51SDominik Eckelmann return true; 5281e0fa51SDominik Eckelmann } 5381e0fa51SDominik Eckelmann 5481e0fa51SDominik Eckelmann function isParentTag($tag) { 55a02e1f7bSAndreas Gohr if (!isset($tag['_elem']) || $tag['_elem'] !== 'opentag') { 5681e0fa51SDominik Eckelmann return false; 5781e0fa51SDominik Eckelmann } 5881e0fa51SDominik Eckelmann 59a02e1f7bSAndreas Gohr if (!isset($tag['_tag']) || $tag['_tag'] !== 'div') { 6081e0fa51SDominik Eckelmann return false; 6181e0fa51SDominik Eckelmann } 6281e0fa51SDominik Eckelmann 632d472d20SSam Wilson return (isset($tag['class']) && $tag['class'] === 'li'); 6481e0fa51SDominik Eckelmann } 6581e0fa51SDominik Eckelmann 6681e0fa51SDominik Eckelmann function getPageId($tag) { 6781e0fa51SDominik Eckelmann if (!is_string($tag)) { 6881e0fa51SDominik Eckelmann return false; 6981e0fa51SDominik Eckelmann } 7081e0fa51SDominik Eckelmann 7181e0fa51SDominik Eckelmann $match = array(); 7281e0fa51SDominik Eckelmann if (!preg_match('/<a href=".*" class="wikilink1" title="(.*)">.*/i', $tag, $match)) { 7381e0fa51SDominik Eckelmann return false; 7481e0fa51SDominik Eckelmann } 7581e0fa51SDominik Eckelmann 7681e0fa51SDominik Eckelmann return $match[1]; 7781e0fa51SDominik Eckelmann } 7881e0fa51SDominik Eckelmann 7981e0fa51SDominik Eckelmann} 80