xref: /plugin/structpublish/action/show.php (revision 63483f2079bf73678c41b0c5870bc6ddb1202321)
1e394901aSAnna Dabrowska<?php
2e394901aSAnna Dabrowska
3e394901aSAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Revision;
4e394901aSAnna Dabrowska
5e394901aSAnna Dabrowskaclass action_plugin_structpublish_show extends DokuWiki_Action_Plugin
6e394901aSAnna Dabrowska{
7e394901aSAnna Dabrowska    /**
8e394901aSAnna Dabrowska     * @inheritDoc
9e394901aSAnna Dabrowska     */
10e394901aSAnna Dabrowska    public function register(Doku_Event_Handler $controller)
11e394901aSAnna Dabrowska    {
1251066f27SAnna Dabrowska        $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handleShow');
13e394901aSAnna Dabrowska    }
14e394901aSAnna Dabrowska
15e394901aSAnna Dabrowska    public function handleShow(Doku_Event $event)
16e394901aSAnna Dabrowska    {
17e394901aSAnna Dabrowska        if ($event->data != 'show') return;
18e394901aSAnna Dabrowska
19e394901aSAnna Dabrowska        global $ID;
20e394901aSAnna Dabrowska        global $REV;
2151066f27SAnna Dabrowska        global $INFO;
22e394901aSAnna Dabrowska
2340f4519bSAnna Dabrowska        /** @var helper_plugin_structpublish_db $dbHelper */
2451066f27SAnna Dabrowska        $dbHelper = plugin_load('helper', 'structpublish_db');
25e394901aSAnna Dabrowska
26939e6e3cSAnna Dabrowska        if (!$dbHelper->isPublishable()) return;
2740f4519bSAnna Dabrowska
2840f4519bSAnna Dabrowska        $currentRevision = new Revision($dbHelper->getDB(), $ID, $INFO['currentrev']);
29dafa9812SAnna Dabrowska        /** @var action_plugin_structpublish_sqlitefunction $functions */
30dafa9812SAnna Dabrowska        $functions = plugin_load('action', 'structpublish_sqlitefunction');
3151066f27SAnna Dabrowska        if (
3251066f27SAnna Dabrowska            $currentRevision->getStatus() !== Revision::STATUS_PUBLISHED
33dafa9812SAnna Dabrowska            && !$functions->IS_PUBLISHER($ID)
3451066f27SAnna Dabrowska        ) {
358d2065f7SAnna Dabrowska            $latestPublishedRev = $currentRevision->getLatestPublished('revision');
368d2065f7SAnna Dabrowska            if (!$latestPublishedRev) {
37e394901aSAnna Dabrowska                $event->data = 'denied';
38*63483f20SAndreas Gohr                // FIXME we could add our own action to display a custom message instead of standard denied action
39e394901aSAnna Dabrowska            }
40e394901aSAnna Dabrowska
418d2065f7SAnna Dabrowska            $REV = $latestPublishedRev;
428d2065f7SAnna Dabrowska            $INFO['rev'] = $latestPublishedRev;
43e394901aSAnna Dabrowska        }
44e394901aSAnna Dabrowska    }
45e394901aSAnna Dabrowska}
46