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