xref: /plugin/struct/action/config.php (revision 5e29103a15bd9873f422f66a6a5239b6aec4651e)
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