xref: /plugin/publish/action/recent.php (revision 2d472d2072c95c035b6c1cb8ff5334a058756971)
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