187106851SAnna Dabrowska<?php 287106851SAnna Dabrowska 3*e31c94d7SAndreas Gohruse dokuwiki\plugin\structpublish\meta\Constants; 4c2f8a3c4SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Revision; 5c2f8a3c4SAnna Dabrowska 687106851SAnna Dabrowska/** 787106851SAnna Dabrowska * Action component responsible for the publish banner 887106851SAnna Dabrowska * attached to struct data of a page 987106851SAnna Dabrowska */ 1087106851SAnna Dabrowskaclass action_plugin_structpublish_banner extends DokuWiki_Action_Plugin 1187106851SAnna Dabrowska{ 12e394901aSAnna Dabrowska /** @var \helper_plugin_structpublish_db */ 13e394901aSAnna Dabrowska protected $dbHelper; 14c2f8a3c4SAnna Dabrowska 1587106851SAnna Dabrowska /** 1687106851SAnna Dabrowska * @inheritDoc 1787106851SAnna Dabrowska */ 1887106851SAnna Dabrowska public function register(Doku_Event_Handler $controller) 1987106851SAnna Dabrowska { 20e394901aSAnna Dabrowska $controller->register_hook('TPL_ACT_RENDER', 'BEFORE', $this, 'renderBanner'); 2187106851SAnna Dabrowska } 2287106851SAnna Dabrowska 2387106851SAnna Dabrowska /** 24e394901aSAnna Dabrowska * Add banner to pages under structpublish control 2587106851SAnna Dabrowska */ 2687106851SAnna Dabrowska public function renderBanner(Doku_Event $event) 2787106851SAnna Dabrowska { 28c2f8a3c4SAnna Dabrowska global $ID; 298d2065f7SAnna Dabrowska global $INFO; 3040f4519bSAnna Dabrowska global $REV; 3187106851SAnna Dabrowska 32e394901aSAnna Dabrowska if ($event->data !== 'show') return; 333449f9ceSAnna Dabrowska 348d2065f7SAnna Dabrowska $this->dbHelper = plugin_load('helper', 'structpublish_db'); 35939e6e3cSAnna Dabrowska 36939e6e3cSAnna Dabrowska if (!$this->dbHelper->isPublishable()) return; 37939e6e3cSAnna Dabrowska 388d2065f7SAnna Dabrowska $revision = new Revision($this->dbHelper->getDB(), $ID, $REV ?: $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; 503449f9ceSAnna Dabrowska 51*e31c94d7SAndreas Gohr $status = $revision->getStatus() ?: Constants::STATUS_DRAFT; 52*e31c94d7SAndreas Gohr if ($status === Constants::STATUS_PUBLISHED) { 53e7259784SAnna Dabrowska $publisher = userlink($revision->getUser(), true); 54e7259784SAnna Dabrowska $publishDate = $revision->getDate(); 558d2065f7SAnna Dabrowska } else { 568d2065f7SAnna Dabrowska $publisher = userlink($revision->getLatestPublished('user'), true); 578d2065f7SAnna Dabrowska $publishDate = $revision->getLatestPublished('date'); 588d2065f7SAnna Dabrowska } 59e7259784SAnna Dabrowska 60e7259784SAnna Dabrowska $version = ''; 61e7259784SAnna Dabrowska if ($revision->getVersion()) { 628d2065f7SAnna Dabrowska $version = $revision->getVersion() . " ($publishDate, $publisher)"; 638d2065f7SAnna Dabrowska 64*e31c94d7SAndreas Gohr if ($status !== Constants::STATUS_PUBLISHED) { 658d2065f7SAnna Dabrowska $version = sprintf( 668d2065f7SAnna Dabrowska '<a href="'. wl($ID, ['rev' => $revision->getLatestPublished('revision')]) . ' ">%s</a>', 678d2065f7SAnna Dabrowska $version 688d2065f7SAnna Dabrowska ); 698d2065f7SAnna Dabrowska } 70e7259784SAnna Dabrowska } 71e7259784SAnna Dabrowska 721b063be2SAnna Dabrowska $actionForm = $this->formHtml($status); 73e7259784SAnna Dabrowska 74c2f8a3c4SAnna Dabrowska $html = sprintf( 75c2f8a3c4SAnna Dabrowska $this->getBannerTemplate(), 76e394901aSAnna Dabrowska $status, 77e394901aSAnna Dabrowska $status, 78e7259784SAnna Dabrowska $version, 793231ebaeSAnna Dabrowska $actionForm 80c2f8a3c4SAnna Dabrowska ); 8187106851SAnna Dabrowska 8287106851SAnna Dabrowska return $html; 8387106851SAnna Dabrowska } 84c2f8a3c4SAnna Dabrowska 851b063be2SAnna Dabrowska protected function formHtml($status) 86c2f8a3c4SAnna Dabrowska { 87*e31c94d7SAndreas Gohr global $ID; 88*e31c94d7SAndreas Gohr if ($status === Constants::STATUS_PUBLISHED) return ''; 891b063be2SAnna Dabrowska 90e394901aSAnna Dabrowska $form = new dokuwiki\Form\Form(); 911b063be2SAnna Dabrowska 92*e31c94d7SAndreas Gohr if ($status !== Constants::STATUS_APPROVED) { 933231ebaeSAnna Dabrowska $form->addButton('structpublish[approve]', 'APPROVE')->attr('type', 'submit'); 941b063be2SAnna Dabrowska } 95*e31c94d7SAndreas Gohr 96*e31c94d7SAndreas Gohr 973231ebaeSAnna Dabrowska $form->addButton('structpublish[publish]', 'PUBLISH')->attr('type', 'submit'); 98e394901aSAnna Dabrowska 99e394901aSAnna Dabrowska return $form->toHTML(); 100c2f8a3c4SAnna Dabrowska } 101c2f8a3c4SAnna Dabrowska 102c2f8a3c4SAnna Dabrowska protected function getBannerTemplate() 103c2f8a3c4SAnna Dabrowska { 104c2f8a3c4SAnna Dabrowska $template = '<div class="plugin-structpublish-banner banner-%s">'; 105c2f8a3c4SAnna Dabrowska $template .= '<div class="plugin-structpublish-status">' . $this->getLang('status') . ': %s</div>'; 106e7259784SAnna Dabrowska $template .= '<div class="plugin-structpublish-version">' . $this->getLang('version') . ': %s</div>'; 1073231ebaeSAnna Dabrowska $template .= '<div class="plugin-structpublish-actions">%s</div>'; 108c2f8a3c4SAnna Dabrowska $template .= '</div>'; 109c2f8a3c4SAnna Dabrowska 110c2f8a3c4SAnna Dabrowska return $template; 111c2f8a3c4SAnna Dabrowska } 11287106851SAnna Dabrowska} 113