1*12c71b56SAnna Dabrowska<?php 2*12c71b56SAnna Dabrowska 3*12c71b56SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Revision; 4*12c71b56SAnna Dabrowskause \dokuwiki\plugin\structpublish\meta\Constants; 5*12c71b56SAnna Dabrowska 6*12c71b56SAnna Dabrowskaclass action_plugin_structpublish_revisions extends DokuWiki_Action_Plugin 7*12c71b56SAnna Dabrowska{ 8*12c71b56SAnna Dabrowska 9*12c71b56SAnna Dabrowska public function register(Doku_Event_Handler $controller) 10*12c71b56SAnna Dabrowska { 11*12c71b56SAnna Dabrowska $controller->register_hook('FORM_REVISIONS_OUTPUT', 'BEFORE', $this, 'handleRevisions'); 12*12c71b56SAnna Dabrowska } 13*12c71b56SAnna Dabrowska 14*12c71b56SAnna Dabrowska /** 15*12c71b56SAnna Dabrowska * Adds publish info to page revisions 16*12c71b56SAnna Dabrowska * 17*12c71b56SAnna Dabrowska * @param Doku_Event $event 18*12c71b56SAnna Dabrowska * @return void 19*12c71b56SAnna Dabrowska */ 20*12c71b56SAnna Dabrowska public function handleRevisions(Doku_Event $event) 21*12c71b56SAnna Dabrowska { 22*12c71b56SAnna Dabrowska global $INFO; 23*12c71b56SAnna Dabrowska 24*12c71b56SAnna Dabrowska /** @var dokuwiki\Form\Form $form */ 25*12c71b56SAnna Dabrowska $form = $event->data; 26*12c71b56SAnna Dabrowska 27*12c71b56SAnna Dabrowska /** @var helper_plugin_structpublish_db $helper */ 28*12c71b56SAnna Dabrowska $helper = plugin_load('helper', 'structpublish_db'); 29*12c71b56SAnna Dabrowska 30*12c71b56SAnna Dabrowska if (!$helper->isPublishable()) return; 31*12c71b56SAnna Dabrowska 32*12c71b56SAnna Dabrowska $sqlite = $helper->getDB(); 33*12c71b56SAnna Dabrowska 34*12c71b56SAnna Dabrowska $elCount = $form->elementCount(); 35*12c71b56SAnna Dabrowska $checkName = 'rev2[]'; 36*12c71b56SAnna Dabrowska 37*12c71b56SAnna Dabrowska for ($i = 0; $i < $elCount; $i++) { 38*12c71b56SAnna Dabrowska $el = $form->getElementAt($i); 39*12c71b56SAnna Dabrowska 40*12c71b56SAnna Dabrowska if (!is_a($el, \dokuwiki\Form\CheckableElement::class) && !is_a($el, \dokuwiki\Form\HTMLElement::class)) { 41*12c71b56SAnna Dabrowska continue; 42*12c71b56SAnna Dabrowska } 43*12c71b56SAnna Dabrowska 44*12c71b56SAnna Dabrowska // extract rev from checkbox info 45*12c71b56SAnna Dabrowska if (is_a($el, \dokuwiki\Form\CheckableElement::class)) { 46*12c71b56SAnna Dabrowska if ($el->attr('name') === $checkName) { 47*12c71b56SAnna Dabrowska $rev = $el->attr('value'); 48*12c71b56SAnna Dabrowska } 49*12c71b56SAnna Dabrowska } 50*12c71b56SAnna Dabrowska 51*12c71b56SAnna Dabrowska // get most recent status for rev 52*12c71b56SAnna Dabrowska $revision = new Revision($sqlite, $INFO['id'], $rev); 53*12c71b56SAnna Dabrowska $status = $revision->getStatus(); 54*12c71b56SAnna Dabrowska $version = $revision->getVersion(); 55*12c71b56SAnna Dabrowska 56*12c71b56SAnna Dabrowska // insert status for published revisions 57*12c71b56SAnna Dabrowska if (is_a($el, \dokuwiki\Form\HTMLElement::class) && !empty(trim($el->val())) && $status === Constants::STATUS_PUBLISHED) { 58*12c71b56SAnna Dabrowska $val = $el->val(); 59*12c71b56SAnna Dabrowska $label = '<span class="plugin-structpublish-version">' . $status . ' (' . $this->getLang('version') . ' ' . $version . ')</span>'; 60*12c71b56SAnna Dabrowska $el->val("$val $label"); 61*12c71b56SAnna Dabrowska } 62*12c71b56SAnna Dabrowska } 63*12c71b56SAnna Dabrowska } 64*12c71b56SAnna Dabrowska} 65