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{ 11e394901aSAnna Dabrowska /** @var \helper_plugin_structpublish_db */ 12e394901aSAnna Dabrowska protected $dbHelper; 13c2f8a3c4SAnna Dabrowska 1487106851SAnna Dabrowska /** 1587106851SAnna Dabrowska * @inheritDoc 1687106851SAnna Dabrowska */ 1787106851SAnna Dabrowska public function register(Doku_Event_Handler $controller) 1887106851SAnna Dabrowska { 19e394901aSAnna Dabrowska $controller->register_hook('TPL_ACT_RENDER', 'BEFORE', $this, 'renderBanner'); 2087106851SAnna Dabrowska } 2187106851SAnna Dabrowska 2287106851SAnna Dabrowska /** 23e394901aSAnna Dabrowska * Add banner to pages under structpublish control 2487106851SAnna Dabrowska */ 2587106851SAnna Dabrowska public function renderBanner(Doku_Event $event) 2687106851SAnna Dabrowska { 27c2f8a3c4SAnna Dabrowska global $ID; 288d2065f7SAnna Dabrowska global $INFO; 2940f4519bSAnna Dabrowska global $REV; 3087106851SAnna Dabrowska 31e394901aSAnna Dabrowska if ($event->data !== 'show') return; 323449f9ceSAnna Dabrowska 338d2065f7SAnna Dabrowska $this->dbHelper = plugin_load('helper', 'structpublish_db'); 34*939e6e3cSAnna Dabrowska 35*939e6e3cSAnna Dabrowska if (!$this->dbHelper->isPublishable()) return; 36*939e6e3cSAnna Dabrowska 378d2065f7SAnna Dabrowska $revision = new Revision($this->dbHelper->getDB(), $ID, $REV ?: $INFO['currentrev']); 38c2f8a3c4SAnna Dabrowska 39e394901aSAnna Dabrowska echo $this->getBannerHtml($revision); 4087106851SAnna Dabrowska } 4187106851SAnna Dabrowska 4287106851SAnna Dabrowska /** 43e394901aSAnna Dabrowska * @param Revision $revision latest publish data 4487106851SAnna Dabrowska * @return string 4587106851SAnna Dabrowska */ 46c2f8a3c4SAnna Dabrowska protected function getBannerHtml($revision) 4787106851SAnna Dabrowska { 4887106851SAnna Dabrowska global $ID; 493449f9ceSAnna Dabrowska 50e394901aSAnna Dabrowska $status = $revision->getStatus() ?: Revision::STATUS_DRAFT; 518d2065f7SAnna Dabrowska if ($status === Revision::STATUS_PUBLISHED) { 52e7259784SAnna Dabrowska $publisher = userlink($revision->getUser(), true); 53e7259784SAnna Dabrowska $publishDate = $revision->getDate(); 548d2065f7SAnna Dabrowska } else { 558d2065f7SAnna Dabrowska $publisher = userlink($revision->getLatestPublished('user'), true); 568d2065f7SAnna Dabrowska $publishDate = $revision->getLatestPublished('date'); 578d2065f7SAnna Dabrowska } 58e7259784SAnna Dabrowska 59e7259784SAnna Dabrowska $version = ''; 60e7259784SAnna Dabrowska if ($revision->getVersion()) { 618d2065f7SAnna Dabrowska $version = $revision->getVersion() . " ($publishDate, $publisher)"; 628d2065f7SAnna Dabrowska 638d2065f7SAnna Dabrowska if ($status !== Revision::STATUS_PUBLISHED) { 648d2065f7SAnna Dabrowska $version = sprintf( 658d2065f7SAnna Dabrowska '<a href="'. wl($ID, ['rev' => $revision->getLatestPublished('revision')]) . ' ">%s</a>', 668d2065f7SAnna Dabrowska $version 678d2065f7SAnna Dabrowska ); 688d2065f7SAnna Dabrowska } 69e7259784SAnna Dabrowska } 70e7259784SAnna Dabrowska 711b063be2SAnna Dabrowska $actionForm = $this->formHtml($status); 72e7259784SAnna Dabrowska 73c2f8a3c4SAnna Dabrowska $html = sprintf( 74c2f8a3c4SAnna Dabrowska $this->getBannerTemplate(), 75e394901aSAnna Dabrowska $status, 76e394901aSAnna Dabrowska $status, 77e7259784SAnna Dabrowska $version, 783231ebaeSAnna Dabrowska $actionForm 79c2f8a3c4SAnna Dabrowska ); 8087106851SAnna Dabrowska 8187106851SAnna Dabrowska return $html; 8287106851SAnna Dabrowska } 83c2f8a3c4SAnna Dabrowska 841b063be2SAnna Dabrowska protected function formHtml($status) 85c2f8a3c4SAnna Dabrowska { 861b063be2SAnna Dabrowska if ($status === Revision::STATUS_PUBLISHED) return ''; 871b063be2SAnna Dabrowska 88e394901aSAnna Dabrowska $form = new dokuwiki\Form\Form(); 891b063be2SAnna Dabrowska 901b063be2SAnna Dabrowska if ($status !== Revision::STATUS_APPROVED) { 913231ebaeSAnna Dabrowska $form->addButton('structpublish[approve]', 'APPROVE')->attr('type', 'submit'); 921b063be2SAnna Dabrowska } 933231ebaeSAnna Dabrowska $form->addButton('structpublish[publish]', 'PUBLISH')->attr('type', 'submit'); 94e394901aSAnna Dabrowska 95e394901aSAnna Dabrowska return $form->toHTML(); 96c2f8a3c4SAnna Dabrowska } 97c2f8a3c4SAnna Dabrowska 98c2f8a3c4SAnna Dabrowska protected function getBannerTemplate() 99c2f8a3c4SAnna Dabrowska { 100c2f8a3c4SAnna Dabrowska $template = '<div class="plugin-structpublish-banner banner-%s">'; 101c2f8a3c4SAnna Dabrowska $template .= '<div class="plugin-structpublish-status">' . $this->getLang('status') . ': %s</div>'; 102e7259784SAnna Dabrowska $template .= '<div class="plugin-structpublish-version">' . $this->getLang('version') . ': %s</div>'; 1033231ebaeSAnna Dabrowska $template .= '<div class="plugin-structpublish-actions">%s</div>'; 104c2f8a3c4SAnna Dabrowska $template .= '</div>'; 105c2f8a3c4SAnna Dabrowska 106c2f8a3c4SAnna Dabrowska return $template; 107c2f8a3c4SAnna Dabrowska } 10887106851SAnna Dabrowska} 109