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