18824339dSAndreas Gohr<?php 2d6d97f60SAnna Dabrowska 38824339dSAndreas Gohr/** 48824339dSAndreas Gohr * DokuWiki Plugin struct (Action Component) 58824339dSAndreas Gohr * 68824339dSAndreas Gohr * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 78824339dSAndreas Gohr * @author Andreas Gohr, Michael Große <dokuwiki@cosmocode.de> 88824339dSAndreas Gohr */ 98824339dSAndreas Gohr 107234bfb1Ssplitbrainuse dokuwiki\Extension\ActionPlugin; 117234bfb1Ssplitbrainuse dokuwiki\Extension\EventHandler; 127234bfb1Ssplitbrainuse dokuwiki\Extension\Event; 1318902e76SMichael Großeuse dokuwiki\plugin\struct\meta\Column; 148824339dSAndreas Gohruse dokuwiki\plugin\struct\types\AbstractBaseType; 158824339dSAndreas Gohr 167234bfb1Ssplitbrainclass action_plugin_struct_config extends ActionPlugin 17d6d97f60SAnna Dabrowska{ 188824339dSAndreas Gohr /** 198824339dSAndreas Gohr * Registers a callback function for a given event 208824339dSAndreas Gohr * 21*5e29103aSannda * @param EventHandler $controller DokuWiki's event controller object 228824339dSAndreas Gohr * @return void 238824339dSAndreas Gohr */ 247234bfb1Ssplitbrain public function register(EventHandler $controller) 25d6d97f60SAnna Dabrowska { 26748e747fSAnna Dabrowska $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handleAjax'); 27709d7a58SAnna Dabrowska $controller->register_hook('DOKUWIKI_STARTED', 'AFTER', $this, 'addJsinfo'); 288824339dSAndreas Gohr } 298824339dSAndreas Gohr 308824339dSAndreas Gohr /** 318824339dSAndreas Gohr * Reconfigure config for a given type 328824339dSAndreas Gohr * 33*5e29103aSannda * @param Event $event event object by reference 348824339dSAndreas Gohr * @param mixed $param [the parameters passed as fifth argument to register_hook() when this 358824339dSAndreas Gohr * handler was registered] 368824339dSAndreas Gohr */ 377234bfb1Ssplitbrain public function handleAjax(Event $event, $param) 38d6d97f60SAnna Dabrowska { 398824339dSAndreas Gohr if ($event->data != 'plugin_struct_config') return; 408824339dSAndreas Gohr $event->preventDefault(); 418824339dSAndreas Gohr $event->stopPropagation(); 428824339dSAndreas Gohr global $INPUT; 438824339dSAndreas Gohr 44*5e29103aSannda $conf = json_decode($INPUT->str('conf'), true, 512, JSON_THROW_ON_ERROR); 4518902e76SMichael Große $typeclasses = Column::allTypes(); 4618902e76SMichael Große $class = $typeclasses[$INPUT->str('type', 'Text')]; 478824339dSAndreas Gohr /** @var AbstractBaseType $type */ 488824339dSAndreas Gohr $type = new $class($conf); 498824339dSAndreas Gohr 508824339dSAndreas Gohr header('Content-Type: text/plain'); // we need the encoded string, not decoded by jQuery 51*5e29103aSannda echo json_encode($type->getConfig(), JSON_THROW_ON_ERROR); 528824339dSAndreas Gohr } 53709d7a58SAnna Dabrowska 54709d7a58SAnna Dabrowska /** 55709d7a58SAnna Dabrowska * Add config options to JSINFO 56709d7a58SAnna Dabrowska * 57*5e29103aSannda * @param Event $event 58709d7a58SAnna Dabrowska */ 597234bfb1Ssplitbrain public function addJsinfo(Event $event) 60709d7a58SAnna Dabrowska { 61709d7a58SAnna Dabrowska global $JSINFO; 62709d7a58SAnna Dabrowska $JSINFO['plugins']['struct']['disableDeleteSerial'] = $this->getConf('disableDeleteSerial'); 63709d7a58SAnna Dabrowska } 648824339dSAndreas Gohr} 65