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