xref: /plugin/structpublish/action/show.php (revision 0dcf68caffd50649254218c13bee06c6ca23bcf8)
1e394901aSAnna Dabrowska<?php
2e394901aSAnna Dabrowska
3e31c94d7SAndreas Gohruse dokuwiki\plugin\structpublish\meta\Constants;
4e394901aSAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Revision;
5e394901aSAnna Dabrowska
6e394901aSAnna Dabrowskaclass action_plugin_structpublish_show extends DokuWiki_Action_Plugin
7e394901aSAnna Dabrowska{
8e394901aSAnna Dabrowska    /**
9e394901aSAnna Dabrowska     * @inheritDoc
10e394901aSAnna Dabrowska     */
11e394901aSAnna Dabrowska    public function register(Doku_Event_Handler $controller)
12e394901aSAnna Dabrowska    {
1351066f27SAnna Dabrowska        $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handleShow');
14e394901aSAnna Dabrowska    }
15e394901aSAnna Dabrowska
16e394901aSAnna Dabrowska    public function handleShow(Doku_Event $event)
17e394901aSAnna Dabrowska    {
18e394901aSAnna Dabrowska        if ($event->data != 'show') return;
19e394901aSAnna Dabrowska
20e394901aSAnna Dabrowska        global $ID;
21e394901aSAnna Dabrowska        global $REV;
2251066f27SAnna Dabrowska        global $INFO;
23e394901aSAnna Dabrowska
2440f4519bSAnna Dabrowska        /** @var helper_plugin_structpublish_db $dbHelper */
2551066f27SAnna Dabrowska        $dbHelper = plugin_load('helper', 'structpublish_db');
26e394901aSAnna Dabrowska
27939e6e3cSAnna Dabrowska        if (!$dbHelper->isPublishable()) return;
2840f4519bSAnna Dabrowska
2940f4519bSAnna Dabrowska        $currentRevision = new Revision($dbHelper->getDB(), $ID, $INFO['currentrev']);
30dafa9812SAnna Dabrowska        /** @var action_plugin_structpublish_sqlitefunction $functions */
31dafa9812SAnna Dabrowska        $functions = plugin_load('action', 'structpublish_sqlitefunction');
3251066f27SAnna Dabrowska        if (
33e31c94d7SAndreas Gohr            $currentRevision->getStatus() !== Constants::STATUS_PUBLISHED
34dafa9812SAnna Dabrowska            && !$functions->IS_PUBLISHER($ID)
3551066f27SAnna Dabrowska        ) {
36*0dcf68caSAnna Dabrowska            $latestPublishedRev = $currentRevision->getLatestPublishedRevision()->getRev();
378d2065f7SAnna Dabrowska            if (!$latestPublishedRev) {
38e394901aSAnna Dabrowska                $event->data = 'denied';
3963483f20SAndreas Gohr                // FIXME we could add our own action to display a custom message instead of standard denied action
40e394901aSAnna Dabrowska            }
41e394901aSAnna Dabrowska
428d2065f7SAnna Dabrowska            $REV = $latestPublishedRev;
438d2065f7SAnna Dabrowska            $INFO['rev'] = $latestPublishedRev;
44e394901aSAnna Dabrowska        }
45e394901aSAnna Dabrowska    }
46e394901aSAnna Dabrowska}
47