xref: /plugin/structpublish/action/banner.php (revision 3449f9ce9770752ac28fe0246797d80e125747d5)
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;
13c2f8a3c4SAnna Dabrowska
1487106851SAnna Dabrowska    /**
1587106851SAnna Dabrowska     * @inheritDoc
1687106851SAnna Dabrowska     */
1787106851SAnna Dabrowska    public function register(Doku_Event_Handler $controller)
1887106851SAnna Dabrowska    {
1987106851SAnna Dabrowska        $controller->register_hook('PLUGIN_STRUCT_RENDER_SCHEMA_DATA', 'AFTER', $this, 'renderBanner');
2087106851SAnna Dabrowska    }
2187106851SAnna Dabrowska
2287106851SAnna Dabrowska    /**
2387106851SAnna Dabrowska     * Add banner to struct data of a page
2487106851SAnna Dabrowska     *
2587106851SAnna Dabrowska     * @return bool
2687106851SAnna Dabrowska     */
2787106851SAnna Dabrowska    public function renderBanner(Doku_Event $event)
2887106851SAnna Dabrowska    {
29c2f8a3c4SAnna Dabrowska        global $ID;
30*3449f9ceSAnna Dabrowska        global $INFO;
3187106851SAnna Dabrowska        $data = $event->data;
3287106851SAnna Dabrowska        if (!$data['hasdata'] || $data['format'] !== 'xhtml') return true;
3387106851SAnna Dabrowska
34*3449f9ceSAnna Dabrowska        /** @var Doku_Renderer_xhtml $renderer */
35*3449f9ceSAnna Dabrowska        $renderer = $data['renderer'];
36*3449f9ceSAnna Dabrowska        $renderer->nocache();
37*3449f9ceSAnna Dabrowska
38c2f8a3c4SAnna Dabrowska        $this->permissionsHelper = plugin_load('helper', 'structpublish_permissions');
39c2f8a3c4SAnna Dabrowska        if (!$this->permissionsHelper->isPublishable()) return true;
40c2f8a3c4SAnna Dabrowska
41*3449f9ceSAnna Dabrowska        $revision = new Revision($this->permissionsHelper->getDb(), $ID, $INFO['currentrev']);
42c2f8a3c4SAnna Dabrowska
43c2f8a3c4SAnna Dabrowska        $html = $this->getBannerHtml($revision);
4487106851SAnna Dabrowska        $renderer->doc .= $html;
4587106851SAnna Dabrowska
4687106851SAnna Dabrowska        return true;
4787106851SAnna Dabrowska    }
4887106851SAnna Dabrowska
4987106851SAnna Dabrowska    /**
50c2f8a3c4SAnna Dabrowska     * @param Revision $revision
5187106851SAnna Dabrowska     * @return string
5287106851SAnna Dabrowska     */
53c2f8a3c4SAnna Dabrowska    protected function getBannerHtml($revision)
5487106851SAnna Dabrowska    {
5587106851SAnna Dabrowska        global $ID;
56c2f8a3c4SAnna Dabrowska        // FIXME use $INFO?
5787106851SAnna Dabrowska        $user = $_SERVER['REMOTE_USER'];
5887106851SAnna Dabrowska        $html = '';
5987106851SAnna Dabrowska
60c2f8a3c4SAnna Dabrowska        if ($this->permissionsHelper->isPublisher($ID, $user)) {
61*3449f9ceSAnna Dabrowska
62*3449f9ceSAnna Dabrowska            $actionLinks = $this->linksToHtml($this->permissionsHelper->getActionLinks($revision));
63*3449f9ceSAnna Dabrowska
64c2f8a3c4SAnna Dabrowska            $html = sprintf(
65c2f8a3c4SAnna Dabrowska                $this->getBannerTemplate(),
66c2f8a3c4SAnna Dabrowska                $revision->getStatus(),
67c2f8a3c4SAnna Dabrowska                $revision->getVersion(),
68c2f8a3c4SAnna Dabrowska                $revision->getStatus(),
69*3449f9ceSAnna Dabrowska                $actionLinks
70c2f8a3c4SAnna Dabrowska            );
7187106851SAnna Dabrowska        }
7287106851SAnna Dabrowska
7387106851SAnna Dabrowska        return $html;
7487106851SAnna Dabrowska    }
75c2f8a3c4SAnna Dabrowska
76c2f8a3c4SAnna Dabrowska    protected function linksToHtml($links)
77c2f8a3c4SAnna Dabrowska    {
78c2f8a3c4SAnna Dabrowska        $html = '';
79c2f8a3c4SAnna Dabrowska        if (empty($links)) return $html;
80c2f8a3c4SAnna Dabrowska        foreach ($links as $action => $link) {
81c2f8a3c4SAnna Dabrowska            $html .= '<a href="' . $link . '">'. $action .'</a>';
82c2f8a3c4SAnna Dabrowska        }
83c2f8a3c4SAnna Dabrowska        return $html;
84c2f8a3c4SAnna Dabrowska    }
85c2f8a3c4SAnna Dabrowska
86c2f8a3c4SAnna Dabrowska    protected function getBannerTemplate()
87c2f8a3c4SAnna Dabrowska    {
88c2f8a3c4SAnna Dabrowska        $template = '<div class="plugin-structpublish-banner banner-%s">';
89c2f8a3c4SAnna Dabrowska        $template .= '<div class="plugin-structpublish-version">' . $this->getLang('version') . ': %s</div>';
90c2f8a3c4SAnna Dabrowska        $template .= '<div class="plugin-structpublish-status">' . $this->getLang('status') . ': %s</div>';
91c2f8a3c4SAnna Dabrowska        $template .= '<div class="plugin-structpublish-actions">' . $this->getLang('actions') . ': %s</div>';
92c2f8a3c4SAnna Dabrowska        $template .= '</div>';
93c2f8a3c4SAnna Dabrowska
94c2f8a3c4SAnna Dabrowska        return $template;
95c2f8a3c4SAnna Dabrowska    }
9687106851SAnna Dabrowska}
97