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; 303449f9ceSAnna Dabrowska global $INFO; 3187106851SAnna Dabrowska 32e394901aSAnna Dabrowska if ($event->data !== 'show') return; 333449f9ceSAnna Dabrowska 34c2f8a3c4SAnna Dabrowska $this->permissionsHelper = plugin_load('helper', 'structpublish_permissions'); 35*910e7e15SAnna Dabrowska $this->dbHelper = plugin_load('helper', 'structpublish_db'); 36*910e7e15SAnna Dabrowska if (!$this->dbHelper->IS_PUBLISHER($ID)) return; 37c2f8a3c4SAnna Dabrowska 383449f9ceSAnna Dabrowska $revision = new Revision($this->permissionsHelper->getDb(), $ID, $INFO['currentrev']); 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; 5087106851SAnna Dabrowska $user = $_SERVER['REMOTE_USER']; 5187106851SAnna Dabrowska $html = ''; 5287106851SAnna Dabrowska 53*910e7e15SAnna Dabrowska if ($this->dbHelper->IS_PUBLISHER($ID, $user)) { 543449f9ceSAnna Dabrowska 55e394901aSAnna Dabrowska $status = $revision->getStatus() ?: Revision::STATUS_DRAFT; 56e394901aSAnna Dabrowska $version = $revision->getVersion() ?: ''; 573231ebaeSAnna Dabrowska $actionForm = $status !== Revision::STATUS_PUBLISHED ? $this->formHtml() : ''; 58c2f8a3c4SAnna Dabrowska $html = sprintf( 59c2f8a3c4SAnna Dabrowska $this->getBannerTemplate(), 60e394901aSAnna Dabrowska $status, 61e394901aSAnna Dabrowska $version, 62e394901aSAnna Dabrowska $status, 633231ebaeSAnna Dabrowska $actionForm 64c2f8a3c4SAnna Dabrowska ); 6587106851SAnna Dabrowska } 6687106851SAnna Dabrowska 6787106851SAnna Dabrowska return $html; 6887106851SAnna Dabrowska } 69c2f8a3c4SAnna Dabrowska 70e394901aSAnna Dabrowska protected function formHtml() 71c2f8a3c4SAnna Dabrowska { 72e394901aSAnna Dabrowska $form = new dokuwiki\Form\Form(); 733231ebaeSAnna Dabrowska $form->addButton('structpublish[approve]', 'APPROVE')->attr('type', 'submit'); 743231ebaeSAnna Dabrowska $form->addButton('structpublish[publish]', 'PUBLISH')->attr('type', 'submit'); 75e394901aSAnna Dabrowska 76e394901aSAnna Dabrowska return $form->toHTML(); 77c2f8a3c4SAnna Dabrowska } 78c2f8a3c4SAnna Dabrowska 79c2f8a3c4SAnna Dabrowska protected function getBannerTemplate() 80c2f8a3c4SAnna Dabrowska { 81c2f8a3c4SAnna Dabrowska $template = '<div class="plugin-structpublish-banner banner-%s">'; 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>'; 843231ebaeSAnna Dabrowska $template .= '<div class="plugin-structpublish-actions">%s</div>'; 85c2f8a3c4SAnna Dabrowska $template .= '</div>'; 86c2f8a3c4SAnna Dabrowska 87c2f8a3c4SAnna Dabrowska return $template; 88c2f8a3c4SAnna Dabrowska } 8987106851SAnna Dabrowska} 90