112c71b56SAnna Dabrowska<?php 212c71b56SAnna Dabrowska 312c71b56SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Revision; 4*31e730e1SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Constants; 512c71b56SAnna Dabrowska 612c71b56SAnna Dabrowskaclass action_plugin_structpublish_revisions extends DokuWiki_Action_Plugin 712c71b56SAnna Dabrowska{ 812c71b56SAnna Dabrowska public function register(Doku_Event_Handler $controller) 912c71b56SAnna Dabrowska { 1012c71b56SAnna Dabrowska $controller->register_hook('FORM_REVISIONS_OUTPUT', 'BEFORE', $this, 'handleRevisions'); 1112c71b56SAnna Dabrowska } 1212c71b56SAnna Dabrowska 1312c71b56SAnna Dabrowska /** 1412c71b56SAnna Dabrowska * Adds publish info to page revisions 1512c71b56SAnna Dabrowska * 1612c71b56SAnna Dabrowska * @param Doku_Event $event 1712c71b56SAnna Dabrowska * @return void 1812c71b56SAnna Dabrowska */ 1912c71b56SAnna Dabrowska public function handleRevisions(Doku_Event $event) 2012c71b56SAnna Dabrowska { 2112c71b56SAnna Dabrowska global $INFO; 2212c71b56SAnna Dabrowska 2312c71b56SAnna Dabrowska /** @var dokuwiki\Form\Form $form */ 2412c71b56SAnna Dabrowska $form = $event->data; 2512c71b56SAnna Dabrowska 2612c71b56SAnna Dabrowska /** @var helper_plugin_structpublish_db $helper */ 2712c71b56SAnna Dabrowska $helper = plugin_load('helper', 'structpublish_db'); 2812c71b56SAnna Dabrowska 29*31e730e1SAnna Dabrowska if (!$helper->isPublishable()) { 30*31e730e1SAnna Dabrowska return; 31*31e730e1SAnna Dabrowska } 3212c71b56SAnna Dabrowska 3312c71b56SAnna Dabrowska $elCount = $form->elementCount(); 3412c71b56SAnna Dabrowska $checkName = 'rev2[]'; 3512c71b56SAnna Dabrowska 3612c71b56SAnna Dabrowska for ($i = 0; $i < $elCount; $i++) { 3712c71b56SAnna Dabrowska $el = $form->getElementAt($i); 3812c71b56SAnna Dabrowska 3912c71b56SAnna Dabrowska if (!is_a($el, \dokuwiki\Form\CheckableElement::class) && !is_a($el, \dokuwiki\Form\HTMLElement::class)) { 4012c71b56SAnna Dabrowska continue; 4112c71b56SAnna Dabrowska } 4212c71b56SAnna Dabrowska 4312c71b56SAnna Dabrowska // extract rev from checkbox info 4412c71b56SAnna Dabrowska if (is_a($el, \dokuwiki\Form\CheckableElement::class)) { 4512c71b56SAnna Dabrowska if ($el->attr('name') === $checkName) { 4612c71b56SAnna Dabrowska $rev = $el->attr('value'); 4712c71b56SAnna Dabrowska } 4812c71b56SAnna Dabrowska } 4912c71b56SAnna Dabrowska 5012c71b56SAnna Dabrowska // get most recent status for rev 51b476f81dSAnna Dabrowska $revision = new Revision($INFO['id'], $rev); 5212c71b56SAnna Dabrowska $status = $revision->getStatus(); 5312c71b56SAnna Dabrowska $version = $revision->getVersion(); 5412c71b56SAnna Dabrowska 5512c71b56SAnna Dabrowska // insert status for published revisions 56*31e730e1SAnna Dabrowska if ( 57*31e730e1SAnna Dabrowska is_a($el, \dokuwiki\Form\HTMLElement::class) && 58*31e730e1SAnna Dabrowska !empty(trim($el->val())) && 59*31e730e1SAnna Dabrowska $status === Constants::STATUS_PUBLISHED 60*31e730e1SAnna Dabrowska ) { 6112c71b56SAnna Dabrowska $val = $el->val(); 62*31e730e1SAnna Dabrowska $label = '<span class="plugin-structpublish-version">' . 63*31e730e1SAnna Dabrowska $status . ' (' . $this->getLang('version') . ' ' . $version . ')</span>'; 6412c71b56SAnna Dabrowska $el->val("$val $label"); 6512c71b56SAnna Dabrowska } 6612c71b56SAnna Dabrowska } 6712c71b56SAnna Dabrowska } 6812c71b56SAnna Dabrowska} 69