xref: /plugin/structpublish/action/banner.php (revision 40f4519b316f8d5316baab41bc31c713611b3179)
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;
13e394901aSAnna Dabrowska    /** @var \helper_plugin_structpublish_db */
14e394901aSAnna Dabrowska    protected $dbHelper;
15c2f8a3c4SAnna Dabrowska
1687106851SAnna Dabrowska    /**
1787106851SAnna Dabrowska     * @inheritDoc
1887106851SAnna Dabrowska     */
1987106851SAnna Dabrowska    public function register(Doku_Event_Handler $controller)
2087106851SAnna Dabrowska    {
21e394901aSAnna Dabrowska        $controller->register_hook('TPL_ACT_RENDER', 'BEFORE', $this, 'renderBanner');
2287106851SAnna Dabrowska    }
2387106851SAnna Dabrowska
2487106851SAnna Dabrowska    /**
25e394901aSAnna Dabrowska     * Add banner to pages under structpublish control
2687106851SAnna Dabrowska     */
2787106851SAnna Dabrowska    public function renderBanner(Doku_Event $event)
2887106851SAnna Dabrowska    {
29c2f8a3c4SAnna Dabrowska        global $ID;
30*40f4519bSAnna Dabrowska        global $REV;
3187106851SAnna Dabrowska
32e394901aSAnna Dabrowska        if ($event->data !== 'show') return;
333449f9ceSAnna Dabrowska
34c2f8a3c4SAnna Dabrowska        $this->permissionsHelper = plugin_load('helper', 'structpublish_permissions');
35910e7e15SAnna Dabrowska        $this->dbHelper = plugin_load('helper', 'structpublish_db');
36*40f4519bSAnna Dabrowska        if (!$this->permissionsHelper->isPublishable()) return;
37c2f8a3c4SAnna Dabrowska
38*40f4519bSAnna Dabrowska        $revision = new Revision($this->dbHelper->getDB(), $ID, $REV);
39c2f8a3c4SAnna Dabrowska
40e394901aSAnna Dabrowska        echo $this->getBannerHtml($revision);
4187106851SAnna Dabrowska    }
4287106851SAnna Dabrowska
4387106851SAnna Dabrowska    /**
44e394901aSAnna 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;
503449f9ceSAnna Dabrowska
51e394901aSAnna Dabrowska        $status = $revision->getStatus() ?: Revision::STATUS_DRAFT;
52e7259784SAnna Dabrowska        $publisher = userlink($revision->getUser(), true);
53e7259784SAnna Dabrowska        $publishDate = $revision->getDate();
54e7259784SAnna Dabrowska
55e7259784SAnna Dabrowska        $version =  '';
56e7259784SAnna Dabrowska        if ($revision->getVersion()) {
57e7259784SAnna Dabrowska            $version = '<a href="'. wl($ID, ['rev' => $revision->getLatestPublishedRev()]) . ' ">';
58e7259784SAnna Dabrowska            $version .= $revision->getVersion() . " ($publishDate, $publisher)";
59e7259784SAnna Dabrowska            $version .= '</a>';
60e7259784SAnna Dabrowska        }
61e7259784SAnna Dabrowska
621b063be2SAnna Dabrowska        $actionForm = $this->formHtml($status);
63e7259784SAnna Dabrowska
64c2f8a3c4SAnna Dabrowska        $html = sprintf(
65c2f8a3c4SAnna Dabrowska            $this->getBannerTemplate(),
66e394901aSAnna Dabrowska            $status,
67e394901aSAnna Dabrowska            $status,
68e7259784SAnna Dabrowska            $version,
693231ebaeSAnna Dabrowska            $actionForm
70c2f8a3c4SAnna Dabrowska        );
7187106851SAnna Dabrowska
7287106851SAnna Dabrowska        return $html;
7387106851SAnna Dabrowska    }
74c2f8a3c4SAnna Dabrowska
751b063be2SAnna Dabrowska    protected function formHtml($status)
76c2f8a3c4SAnna Dabrowska    {
771b063be2SAnna Dabrowska        if ($status === Revision::STATUS_PUBLISHED) return '';
781b063be2SAnna Dabrowska
79e394901aSAnna Dabrowska        $form = new dokuwiki\Form\Form();
801b063be2SAnna Dabrowska
811b063be2SAnna Dabrowska        if ($status !== Revision::STATUS_APPROVED) {
823231ebaeSAnna Dabrowska            $form->addButton('structpublish[approve]', 'APPROVE')->attr('type', 'submit');
831b063be2SAnna Dabrowska        }
843231ebaeSAnna Dabrowska        $form->addButton('structpublish[publish]', 'PUBLISH')->attr('type', 'submit');
85e394901aSAnna Dabrowska
86e394901aSAnna Dabrowska        return $form->toHTML();
87c2f8a3c4SAnna Dabrowska    }
88c2f8a3c4SAnna Dabrowska
89c2f8a3c4SAnna Dabrowska    protected function getBannerTemplate()
90c2f8a3c4SAnna Dabrowska    {
91c2f8a3c4SAnna Dabrowska        $template = '<div class="plugin-structpublish-banner banner-%s">';
92c2f8a3c4SAnna Dabrowska        $template .= '<div class="plugin-structpublish-status">' . $this->getLang('status') . ': %s</div>';
93e7259784SAnna Dabrowska        $template .= '<div class="plugin-structpublish-version">' . $this->getLang('version') . ': %s</div>';
943231ebaeSAnna Dabrowska        $template .= '<div class="plugin-structpublish-actions">%s</div>';
95c2f8a3c4SAnna Dabrowska        $template .= '</div>';
96c2f8a3c4SAnna Dabrowska
97c2f8a3c4SAnna Dabrowska        return $template;
98c2f8a3c4SAnna Dabrowska    }
9987106851SAnna Dabrowska}
100