xref: /plugin/structpublish/action/show.php (revision 40f4519b316f8d5316baab41bc31c713611b3179)
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    /** @var \helper_plugin_structpublish_permissions */
8e394901aSAnna Dabrowska    protected $permissionsHelper;
9e394901aSAnna Dabrowska
10e394901aSAnna Dabrowska    /**
11e394901aSAnna Dabrowska     * @inheritDoc
12e394901aSAnna Dabrowska     */
13e394901aSAnna Dabrowska    public function register(Doku_Event_Handler $controller)
14e394901aSAnna Dabrowska    {
1551066f27SAnna Dabrowska        $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handleShow');
16e394901aSAnna Dabrowska    }
17e394901aSAnna Dabrowska
18e394901aSAnna Dabrowska    public function handleShow(Doku_Event $event)
19e394901aSAnna Dabrowska    {
20e394901aSAnna Dabrowska        if ($event->data != 'show') return;
21e394901aSAnna Dabrowska
22e394901aSAnna Dabrowska
23e394901aSAnna Dabrowska        global $ID;
24e394901aSAnna Dabrowska        global $REV;
2551066f27SAnna Dabrowska        global $INFO;
26e394901aSAnna Dabrowska
2751066f27SAnna Dabrowska        $this->permissionsHelper = plugin_load('helper', 'structpublish_permissions');
28*40f4519bSAnna Dabrowska        /** @var helper_plugin_structpublish_db $dbHelper */
2951066f27SAnna Dabrowska        $dbHelper = plugin_load('helper', 'structpublish_db');
30e394901aSAnna Dabrowska
31*40f4519bSAnna Dabrowska        if (!$this->permissionsHelper->isPublishable()) return;
32*40f4519bSAnna Dabrowska
33*40f4519bSAnna Dabrowska        $currentRevision = new Revision($dbHelper->getDB(), $ID, $INFO['currentrev']);
3451066f27SAnna Dabrowska        if (
3551066f27SAnna Dabrowska            $currentRevision->getStatus() !== Revision::STATUS_PUBLISHED
3651066f27SAnna Dabrowska            && !$dbHelper->IS_PUBLISHER($ID)
3751066f27SAnna Dabrowska        ) {
38e394901aSAnna Dabrowska            /** @var Revision $latestPublished */
3951066f27SAnna Dabrowska            $latestPublished = $currentRevision->getLatestPublishedRev();
40e394901aSAnna Dabrowska            if (!$latestPublished) {
41e394901aSAnna Dabrowska                $event->data = 'denied';
42e394901aSAnna Dabrowska
43e394901aSAnna Dabrowska                $event->preventDefault();
44e394901aSAnna Dabrowska                $event->stopPropagation();
45e394901aSAnna Dabrowska
46e394901aSAnna Dabrowska                print p_locale_xhtml('denied');
47e394901aSAnna Dabrowska            }
48e394901aSAnna Dabrowska
4951066f27SAnna Dabrowska            $REV = $latestPublished;
5051066f27SAnna Dabrowska            $INFO['rev'] = $latestPublished;
51e394901aSAnna Dabrowska        }
52e394901aSAnna Dabrowska    }
53e394901aSAnna Dabrowska}
54