112c71b56SAnna Dabrowska<?php 212c71b56SAnna Dabrowska 3*9ab8cbaeSanndause dokuwiki\Extension\ActionPlugin; 4*9ab8cbaeSanndause dokuwiki\Extension\EventHandler; 5*9ab8cbaeSanndause dokuwiki\Extension\Event; 6*9ab8cbaeSanndause dokuwiki\Form\CheckableElement; 7*9ab8cbaeSanndause dokuwiki\Form\HTMLElement; 812c71b56SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Revision; 931e730e1SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Constants; 1012c71b56SAnna Dabrowska 11*9ab8cbaeSanndaclass action_plugin_structpublish_revisions extends ActionPlugin 1212c71b56SAnna Dabrowska{ 13*9ab8cbaeSannda public function register(EventHandler $controller) 1412c71b56SAnna Dabrowska { 1512c71b56SAnna Dabrowska $controller->register_hook('FORM_REVISIONS_OUTPUT', 'BEFORE', $this, 'handleRevisions'); 1612c71b56SAnna Dabrowska } 1712c71b56SAnna Dabrowska 1812c71b56SAnna Dabrowska /** 1912c71b56SAnna Dabrowska * Adds publish info to page revisions 2012c71b56SAnna Dabrowska * 21*9ab8cbaeSannda * @param Event $event 2212c71b56SAnna Dabrowska * @return void 2312c71b56SAnna Dabrowska */ 24*9ab8cbaeSannda public function handleRevisions(Event $event) 2512c71b56SAnna Dabrowska { 2612c71b56SAnna Dabrowska global $INFO; 2712c71b56SAnna Dabrowska 2812c71b56SAnna Dabrowska /** @var dokuwiki\Form\Form $form */ 2912c71b56SAnna Dabrowska $form = $event->data; 3012c71b56SAnna Dabrowska 3112c71b56SAnna Dabrowska /** @var helper_plugin_structpublish_db $helper */ 3212c71b56SAnna Dabrowska $helper = plugin_load('helper', 'structpublish_db'); 3312c71b56SAnna Dabrowska 3431e730e1SAnna Dabrowska if (!$helper->isPublishable()) { 3531e730e1SAnna Dabrowska return; 3631e730e1SAnna Dabrowska } 3712c71b56SAnna Dabrowska 3812c71b56SAnna Dabrowska $elCount = $form->elementCount(); 3912c71b56SAnna Dabrowska $checkName = 'rev2[]'; 4012c71b56SAnna Dabrowska 4112c71b56SAnna Dabrowska for ($i = 0; $i < $elCount; $i++) { 4212c71b56SAnna Dabrowska $el = $form->getElementAt($i); 4312c71b56SAnna Dabrowska 44*9ab8cbaeSannda if (!$el instanceof CheckableElement && !$el instanceof HTMLElement) { 4512c71b56SAnna Dabrowska continue; 4612c71b56SAnna Dabrowska } 4712c71b56SAnna Dabrowska 4812c71b56SAnna Dabrowska // extract rev from checkbox info 49*9ab8cbaeSannda if (is_a($el, CheckableElement::class)) { 5012c71b56SAnna Dabrowska if ($el->attr('name') === $checkName) { 5112c71b56SAnna Dabrowska $rev = $el->attr('value'); 5212c71b56SAnna Dabrowska } 5312c71b56SAnna Dabrowska } 5412c71b56SAnna Dabrowska 5512c71b56SAnna Dabrowska // get most recent status for rev 56b476f81dSAnna Dabrowska $revision = new Revision($INFO['id'], $rev); 5712c71b56SAnna Dabrowska $status = $revision->getStatus(); 5812c71b56SAnna Dabrowska $version = $revision->getVersion(); 5912c71b56SAnna Dabrowska 6012c71b56SAnna Dabrowska // insert status for published revisions 6131e730e1SAnna Dabrowska if ( 62*9ab8cbaeSannda is_a($el, HTMLElement::class) && 6331e730e1SAnna Dabrowska !empty(trim($el->val())) && 6431e730e1SAnna Dabrowska $status === Constants::STATUS_PUBLISHED 6531e730e1SAnna Dabrowska ) { 6612c71b56SAnna Dabrowska $val = $el->val(); 6731e730e1SAnna Dabrowska $label = '<span class="plugin-structpublish-version">' . 6831e730e1SAnna Dabrowska $status . ' (' . $this->getLang('version') . ' ' . $version . ')</span>'; 6912c71b56SAnna Dabrowska $el->val("$val $label"); 7012c71b56SAnna Dabrowska } 7112c71b56SAnna Dabrowska } 7212c71b56SAnna Dabrowska } 7312c71b56SAnna Dabrowska} 74