xref: /plugin/structpublish/action/banner.php (revision e394901a0f7c5b3f8d056c0f4d754d974f4f8413)
187106851SAnna Dabrowska<?php
287106851SAnna Dabrowska
3c2f8a3c4SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Revision;
4c2f8a3c4SAnna Dabrowska
587106851SAnna Dabrowska/**
687106851SAnna Dabrowska * Action component responsible for the publish banner
787106851SAnna Dabrowska * attached to struct data of a page
887106851SAnna Dabrowska */
987106851SAnna Dabrowskaclass action_plugin_structpublish_banner extends DokuWiki_Action_Plugin
1087106851SAnna Dabrowska{
11c2f8a3c4SAnna Dabrowska    /** @var \helper_plugin_structpublish_permissions */
12c2f8a3c4SAnna Dabrowska    protected $permissionsHelper;
13*e394901aSAnna Dabrowska    /** @var \helper_plugin_structpublish_db */
14*e394901aSAnna Dabrowska    protected $dbHelper;
15c2f8a3c4SAnna Dabrowska
1687106851SAnna Dabrowska    /**
1787106851SAnna Dabrowska     * @inheritDoc
1887106851SAnna Dabrowska     */
1987106851SAnna Dabrowska    public function register(Doku_Event_Handler $controller)
2087106851SAnna Dabrowska    {
21*e394901aSAnna Dabrowska        $controller->register_hook('TPL_ACT_RENDER', 'BEFORE', $this, 'renderBanner');
2287106851SAnna Dabrowska    }
2387106851SAnna Dabrowska
2487106851SAnna Dabrowska    /**
25*e394901aSAnna Dabrowska     * Add banner to pages under structpublish control
2687106851SAnna Dabrowska     */
2787106851SAnna Dabrowska    public function renderBanner(Doku_Event $event)
2887106851SAnna Dabrowska    {
29c2f8a3c4SAnna Dabrowska        global $ID;
303449f9ceSAnna Dabrowska        global $INFO;
3187106851SAnna Dabrowska
32*e394901aSAnna Dabrowska        if ($event->data !== 'show') return;
333449f9ceSAnna Dabrowska
34c2f8a3c4SAnna Dabrowska        $this->permissionsHelper = plugin_load('helper', 'structpublish_permissions');
35*e394901aSAnna Dabrowska        $this->dbHelper = plugin_load('helper', 'structpublish_permissions');
36*e394901aSAnna Dabrowska        if (!$this->permissionsHelper->isPublishable()) return;
37c2f8a3c4SAnna Dabrowska
383449f9ceSAnna Dabrowska        $revision = new Revision($this->permissionsHelper->getDb(), $ID, $INFO['currentrev']);
39c2f8a3c4SAnna Dabrowska
40*e394901aSAnna Dabrowska        echo $this->getBannerHtml($revision);
4187106851SAnna Dabrowska    }
4287106851SAnna Dabrowska
4387106851SAnna Dabrowska    /**
44*e394901aSAnna Dabrowska     * @param Revision $revision latest publish data
4587106851SAnna Dabrowska     * @return string
4687106851SAnna Dabrowska     */
47c2f8a3c4SAnna Dabrowska    protected function getBannerHtml($revision)
4887106851SAnna Dabrowska    {
4987106851SAnna Dabrowska        global $ID;
5087106851SAnna Dabrowska        $user = $_SERVER['REMOTE_USER'];
5187106851SAnna Dabrowska        $html = '';
5287106851SAnna Dabrowska
53c2f8a3c4SAnna Dabrowska        if ($this->permissionsHelper->isPublisher($ID, $user)) {
543449f9ceSAnna Dabrowska
55*e394901aSAnna Dabrowska            $status = $revision->getStatus() ?: Revision::STATUS_DRAFT;
56*e394901aSAnna Dabrowska            $version = $revision->getVersion() ?: '';
57c2f8a3c4SAnna Dabrowska            $html = sprintf(
58c2f8a3c4SAnna Dabrowska                $this->getBannerTemplate(),
59*e394901aSAnna Dabrowska                $status,
60*e394901aSAnna Dabrowska                $version,
61*e394901aSAnna Dabrowska                $status,
62*e394901aSAnna Dabrowska                $this->formHtml()
63c2f8a3c4SAnna Dabrowska            );
6487106851SAnna Dabrowska        }
6587106851SAnna Dabrowska
6687106851SAnna Dabrowska        return $html;
6787106851SAnna Dabrowska    }
68c2f8a3c4SAnna Dabrowska
69*e394901aSAnna Dabrowska    protected function formHtml()
70c2f8a3c4SAnna Dabrowska    {
71*e394901aSAnna Dabrowska        $form = new dokuwiki\Form\Form();
72*e394901aSAnna Dabrowska        $form->addButton('structpublish[review]', 'REVIEWED');
73*e394901aSAnna Dabrowska        $form->addButton('structpublish[publish]', 'PUBLISH');
74*e394901aSAnna Dabrowska
75*e394901aSAnna Dabrowska        return $form->toHTML();
76c2f8a3c4SAnna Dabrowska    }
77c2f8a3c4SAnna Dabrowska
78c2f8a3c4SAnna Dabrowska    protected function getBannerTemplate()
79c2f8a3c4SAnna Dabrowska    {
80c2f8a3c4SAnna Dabrowska        $template = '<div class="plugin-structpublish-banner banner-%s">';
81*e394901aSAnna Dabrowska        $template .= '<div class="plugin-structpublish-banner banner-header">structpublish</div>';
82c2f8a3c4SAnna Dabrowska        $template .= '<div class="plugin-structpublish-version">' . $this->getLang('version') . ': %s</div>';
83c2f8a3c4SAnna Dabrowska        $template .= '<div class="plugin-structpublish-status">' . $this->getLang('status') . ': %s</div>';
84c2f8a3c4SAnna Dabrowska        $template .= '<div class="plugin-structpublish-actions">' . $this->getLang('actions') . ': %s</div>';
85c2f8a3c4SAnna Dabrowska        $template .= '</div>';
86c2f8a3c4SAnna Dabrowska
87c2f8a3c4SAnna Dabrowska        return $template;
88c2f8a3c4SAnna Dabrowska    }
8987106851SAnna Dabrowska}
90