187106851SAnna Dabrowska<?php 287106851SAnna Dabrowska 3*c2f8a3c4SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Revision; 4*c2f8a3c4SAnna 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{ 11*c2f8a3c4SAnna Dabrowska /** @var \helper_plugin_structpublish_permissions */ 12*c2f8a3c4SAnna Dabrowska protected $permissionsHelper; 13*c2f8a3c4SAnna 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 { 29*c2f8a3c4SAnna Dabrowska global $ID; 3087106851SAnna Dabrowska $data = $event->data; 3187106851SAnna Dabrowska if (!$data['hasdata'] || $data['format'] !== 'xhtml') return true; 3287106851SAnna Dabrowska 33*c2f8a3c4SAnna Dabrowska $this->permissionsHelper = plugin_load('helper', 'structpublish_permissions'); 34*c2f8a3c4SAnna Dabrowska if (!$this->permissionsHelper->isPublishable()) return true; 35*c2f8a3c4SAnna Dabrowska 36*c2f8a3c4SAnna Dabrowska $revision = new Revision($this->permissionsHelper->getDb(), $ID); 37*c2f8a3c4SAnna Dabrowska 3887106851SAnna Dabrowska $renderer = $data['renderer']; 39*c2f8a3c4SAnna Dabrowska $html = $this->getBannerHtml($revision); 4087106851SAnna Dabrowska $renderer->doc .= $html; 4187106851SAnna Dabrowska 4287106851SAnna Dabrowska return true; 4387106851SAnna Dabrowska } 4487106851SAnna Dabrowska 4587106851SAnna Dabrowska /** 46*c2f8a3c4SAnna Dabrowska * @param Revision $revision 4787106851SAnna Dabrowska * @return string 4887106851SAnna Dabrowska */ 49*c2f8a3c4SAnna Dabrowska protected function getBannerHtml($revision) 5087106851SAnna Dabrowska { 5187106851SAnna Dabrowska global $ID; 52*c2f8a3c4SAnna Dabrowska // FIXME use $INFO? 5387106851SAnna Dabrowska $user = $_SERVER['REMOTE_USER']; 5487106851SAnna Dabrowska $html = ''; 5587106851SAnna Dabrowska 56*c2f8a3c4SAnna Dabrowska if ($this->permissionsHelper->isPublisher($ID, $user)) { 57*c2f8a3c4SAnna Dabrowska $html = sprintf( 58*c2f8a3c4SAnna Dabrowska $this->getBannerTemplate(), 59*c2f8a3c4SAnna Dabrowska $revision->getStatus(), 60*c2f8a3c4SAnna Dabrowska $revision->getVersion(), 61*c2f8a3c4SAnna Dabrowska $revision->getStatus(), 62*c2f8a3c4SAnna Dabrowska $this->linksToHtml($this->permissionsHelper->getActionLinks()) 63*c2f8a3c4SAnna Dabrowska ); 6487106851SAnna Dabrowska } 6587106851SAnna Dabrowska 6687106851SAnna Dabrowska return $html; 6787106851SAnna Dabrowska } 68*c2f8a3c4SAnna Dabrowska 69*c2f8a3c4SAnna Dabrowska protected function linksToHtml($links) 70*c2f8a3c4SAnna Dabrowska { 71*c2f8a3c4SAnna Dabrowska $html = ''; 72*c2f8a3c4SAnna Dabrowska if (empty($links)) return $html; 73*c2f8a3c4SAnna Dabrowska foreach ($links as $action => $link) { 74*c2f8a3c4SAnna Dabrowska $html .= '<a href="' . $link . '">'. $action .'</a>'; 75*c2f8a3c4SAnna Dabrowska } 76*c2f8a3c4SAnna Dabrowska return $html; 77*c2f8a3c4SAnna Dabrowska } 78*c2f8a3c4SAnna Dabrowska 79*c2f8a3c4SAnna Dabrowska protected function getBannerTemplate() 80*c2f8a3c4SAnna Dabrowska { 81*c2f8a3c4SAnna Dabrowska $template = '<div class="plugin-structpublish-banner banner-%s">'; 82*c2f8a3c4SAnna Dabrowska $template .= '<div class="plugin-structpublish-version">' . $this->getLang('version') . ': %s</div>'; 83*c2f8a3c4SAnna Dabrowska $template .= '<div class="plugin-structpublish-status">' . $this->getLang('status') . ': %s</div>'; 84*c2f8a3c4SAnna Dabrowska $template .= '<div class="plugin-structpublish-actions">' . $this->getLang('actions') . ': %s</div>'; 85*c2f8a3c4SAnna Dabrowska $template .= '</div>'; 86*c2f8a3c4SAnna Dabrowska 87*c2f8a3c4SAnna Dabrowska return $template; 88*c2f8a3c4SAnna Dabrowska } 8987106851SAnna Dabrowska} 90