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 1018902e76SMichael Großeuse dokuwiki\plugin\struct\meta\Column; 118824339dSAndreas Gohruse dokuwiki\plugin\struct\types\AbstractBaseType; 128824339dSAndreas Gohr 13d6d97f60SAnna Dabrowskaclass action_plugin_struct_config extends DokuWiki_Action_Plugin 14d6d97f60SAnna Dabrowska{ 158824339dSAndreas Gohr 168824339dSAndreas Gohr /** 178824339dSAndreas Gohr * Registers a callback function for a given event 188824339dSAndreas Gohr * 198824339dSAndreas Gohr * @param Doku_Event_Handler $controller DokuWiki's event controller object 208824339dSAndreas Gohr * @return void 218824339dSAndreas Gohr */ 22d6d97f60SAnna Dabrowska public function register(Doku_Event_Handler $controller) 23d6d97f60SAnna Dabrowska { 24748e747fSAnna Dabrowska $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handleAjax'); 25*709d7a58SAnna Dabrowska $controller->register_hook('DOKUWIKI_STARTED', 'AFTER', $this, 'addJsinfo'); 268824339dSAndreas Gohr } 278824339dSAndreas Gohr 288824339dSAndreas Gohr /** 298824339dSAndreas Gohr * Reconfigure config for a given type 308824339dSAndreas Gohr * 318824339dSAndreas Gohr * @param Doku_Event $event event object by reference 328824339dSAndreas Gohr * @param mixed $param [the parameters passed as fifth argument to register_hook() when this 338824339dSAndreas Gohr * handler was registered] 348824339dSAndreas Gohr */ 35748e747fSAnna Dabrowska public function handleAjax(Doku_Event $event, $param) 36d6d97f60SAnna Dabrowska { 378824339dSAndreas Gohr if ($event->data != 'plugin_struct_config') return; 388824339dSAndreas Gohr $event->preventDefault(); 398824339dSAndreas Gohr $event->stopPropagation(); 408824339dSAndreas Gohr global $INPUT; 418824339dSAndreas Gohr 428824339dSAndreas Gohr $conf = json_decode($INPUT->str('conf'), true); 4318902e76SMichael Große $typeclasses = Column::allTypes(); 4418902e76SMichael Große $class = $typeclasses[$INPUT->str('type', 'Text')]; 458824339dSAndreas Gohr /** @var AbstractBaseType $type */ 468824339dSAndreas Gohr $type = new $class($conf); 478824339dSAndreas Gohr 488824339dSAndreas Gohr header('Content-Type: text/plain'); // we need the encoded string, not decoded by jQuery 498824339dSAndreas Gohr echo json_encode($type->getConfig()); 508824339dSAndreas Gohr } 51*709d7a58SAnna Dabrowska 52*709d7a58SAnna Dabrowska /** 53*709d7a58SAnna Dabrowska * Add config options to JSINFO 54*709d7a58SAnna Dabrowska * 55*709d7a58SAnna Dabrowska * @param Doku_Event $event 56*709d7a58SAnna Dabrowska */ 57*709d7a58SAnna Dabrowska public function addJsinfo(Doku_Event $event) 58*709d7a58SAnna Dabrowska { 59*709d7a58SAnna Dabrowska global $JSINFO; 60*709d7a58SAnna Dabrowska $JSINFO['plugins']['struct']['disableDeleteSerial'] = $this->getConf('disableDeleteSerial'); 61*709d7a58SAnna Dabrowska } 628824339dSAndreas Gohr} 63