1e394901aSAnna Dabrowska<?php 2e394901aSAnna Dabrowska 3e31c94d7SAndreas Gohruse dokuwiki\plugin\structpublish\meta\Constants; 4e394901aSAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Revision; 5e394901aSAnna Dabrowska 6e394901aSAnna Dabrowskaclass action_plugin_structpublish_show extends DokuWiki_Action_Plugin 7e394901aSAnna Dabrowska{ 88b0ba635SAndreas Gohr /** @inheritDoc */ 9e394901aSAnna Dabrowska public function register(Doku_Event_Handler $controller) 10e394901aSAnna Dabrowska { 1151066f27SAnna Dabrowska $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handleShow'); 12e394901aSAnna Dabrowska } 13e394901aSAnna Dabrowska 148b0ba635SAndreas Gohr /** 158b0ba635SAndreas Gohr * Decide which revision to show based on role assignments 168b0ba635SAndreas Gohr * 178b0ba635SAndreas Gohr * @param Doku_Event $event 188b0ba635SAndreas Gohr * @return void 198b0ba635SAndreas Gohr */ 20e394901aSAnna Dabrowska public function handleShow(Doku_Event $event) 21e394901aSAnna Dabrowska { 228b0ba635SAndreas Gohr if ($event->data != 'show') { 238b0ba635SAndreas Gohr return; 248b0ba635SAndreas Gohr } 25e394901aSAnna Dabrowska 26e394901aSAnna Dabrowska global $ID; 27e394901aSAnna Dabrowska global $REV; 2851066f27SAnna Dabrowska global $INFO; 29e394901aSAnna Dabrowska 3040f4519bSAnna Dabrowska /** @var helper_plugin_structpublish_db $dbHelper */ 3151066f27SAnna Dabrowska $dbHelper = plugin_load('helper', 'structpublish_db'); 32e394901aSAnna Dabrowska 33*030815a3SAnna Dabrowska if ( 34*030815a3SAnna Dabrowska !$dbHelper->isPublishable() || 35*030815a3SAnna Dabrowska (auth_isadmin() && !$this->getConf('restrict_admin')) 36*030815a3SAnna Dabrowska ) { 378b0ba635SAndreas Gohr return; 388b0ba635SAndreas Gohr } 3940f4519bSAnna Dabrowska 406d5e23d3SAnna Dabrowska $currentRevision = new Revision($dbHelper->getDB(), $ID, $REV ?: $INFO['currentrev']); 416d5e23d3SAnna Dabrowska 42dafa9812SAnna Dabrowska /** @var action_plugin_structpublish_sqlitefunction $functions */ 43dafa9812SAnna Dabrowska $functions = plugin_load('action', 'structpublish_sqlitefunction'); 4451066f27SAnna Dabrowska if ( 45e31c94d7SAndreas Gohr $currentRevision->getStatus() !== Constants::STATUS_PUBLISHED 46dafa9812SAnna Dabrowska && !$functions->IS_PUBLISHER($ID) 4751066f27SAnna Dabrowska ) { 4811580b0eSAnna Dabrowska $latestPublished = $currentRevision->getLatestPublishedRevision(); 4911580b0eSAnna Dabrowska if (is_null($latestPublished)) { 50e394901aSAnna Dabrowska $event->data = 'denied'; 5163483f20SAndreas Gohr // FIXME we could add our own action to display a custom message instead of standard denied action 5211580b0eSAnna Dabrowska return; 53e394901aSAnna Dabrowska } 54e394901aSAnna Dabrowska 5511580b0eSAnna Dabrowska $latestPublishedRev = $latestPublished->getRev(); 568d2065f7SAnna Dabrowska $REV = $latestPublishedRev; 578d2065f7SAnna Dabrowska $INFO['rev'] = $latestPublishedRev; 58e394901aSAnna Dabrowska } 59e394901aSAnna Dabrowska } 60e394901aSAnna Dabrowska} 61