xref: /plugin/bpmnio/action/editor.php (revision a494ddcc62e5b9ad640d30acec0360d3b24cbd8a)
1c4f02a6eSJaap de Haan<?php
2d4abf4f0SJaap de Haan
3c4f02a6eSJaap de Haan/**
4c4f02a6eSJaap de Haan * @license    See LICENSE file
5c4f02a6eSJaap de Haan */
6c4f02a6eSJaap de Haan
7c4f02a6eSJaap de Haan// See help:
8c4f02a6eSJaap de Haan// * https://www.dokuwiki.org/devel:section_editor
9c4f02a6eSJaap de Haan// * https://www.dokuwiki.org/devel:releases:refactor2021
10*a494ddccSgithub-actions[bot]use dokuwiki\Extension\ActionPlugin;
11*a494ddccSgithub-actions[bot]use dokuwiki\Extension\EventHandler;
12*a494ddccSgithub-actions[bot]use dokuwiki\Extension\Event;
13d4abf4f0SJaap de Haanuse dokuwiki\Form\Form;
14d4abf4f0SJaap de Haanuse dokuwiki\Utf8;
15d4abf4f0SJaap de Haan
16*a494ddccSgithub-actions[bot]class action_plugin_bpmnio_editor extends ActionPlugin
17c4f02a6eSJaap de Haan{
18*a494ddccSgithub-actions[bot]    public function register(EventHandler $controller)
19c4f02a6eSJaap de Haan    {
20962d7b81SJaap de Haan        $controller->register_hook('HTML_SECEDIT_BUTTON', 'BEFORE', $this, 'sectionEditButton');
21962d7b81SJaap de Haan        $controller->register_hook('EDIT_FORM_ADDTEXTAREA', 'BEFORE', $this, 'handleForm');
22962d7b81SJaap de Haan        $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handlePost');
23c4f02a6eSJaap de Haan    }
24c4f02a6eSJaap de Haan
25*a494ddccSgithub-actions[bot]    public function sectionEditButton(Event $event)
26c4f02a6eSJaap de Haan    {
27962d7b81SJaap de Haan        if ($this->shallIgnore($event)) return;
28c4f02a6eSJaap de Haan
29c4f02a6eSJaap de Haan        $event->data['name'] = $this->getLang('edit_diagram');
30c4f02a6eSJaap de Haan    }
31c4f02a6eSJaap de Haan
32*a494ddccSgithub-actions[bot]    public function handleForm(Event $event)
33d4abf4f0SJaap de Haan    {
34962d7b81SJaap de Haan        if ($this->shallIgnore($event)) return;
35d4abf4f0SJaap de Haan
36d4abf4f0SJaap de Haan        global $TEXT;
37d4abf4f0SJaap de Haan        global $RANGE;
38d4abf4f0SJaap de Haan        global $INPUT;
39d4abf4f0SJaap de Haan
40d4abf4f0SJaap de Haan        if (!$RANGE) {
41d4abf4f0SJaap de Haan            // section editing failed, use default editor instead
42d4abf4f0SJaap de Haan            $event->data['target'] = 'section';
43d4abf4f0SJaap de Haan            return;
44d4abf4f0SJaap de Haan        }
45d4abf4f0SJaap de Haan
46d4abf4f0SJaap de Haan        $event->stopPropagation();
47d4abf4f0SJaap de Haan        $event->preventDefault();
48d4abf4f0SJaap de Haan
49962d7b81SJaap de Haan        /** @var Doku_Form $form */
50d4abf4f0SJaap de Haan        $form = &$event->data['form'];
51d4abf4f0SJaap de Haan        $data = base64_encode($TEXT);
52d4abf4f0SJaap de Haan
53f0ae282cSJaap de Haan        $type = 'bpmn';
54f0ae282cSJaap de Haan        if ($event->data['target'] === 'plugin_bpmnio_dmn')
55f0ae282cSJaap de Haan            $type = 'dmn';
56f0ae282cSJaap de Haan
57962d7b81SJaap de Haan        $form->setHiddenField('plugin_bpmnio_data', $data);
58962d7b81SJaap de Haan        $form->addHTML(<<<HTML
59f0ae282cSJaap de Haan            <div class="plugin-bpmnio" id="plugin_bpmnio__{$type}_editor">
60f0ae282cSJaap de Haan                <div class="{$type}_js_data">{$data}</div>
61f0ae282cSJaap de Haan                <div class="{$type}_js_canvas">
62f0ae282cSJaap de Haan                    <div class="{$type}_js_container"></div>
63d4abf4f0SJaap de Haan                </div>
64d4abf4f0SJaap de Haan                </div>
65d4abf4f0SJaap de Haan            </div>
66d4abf4f0SJaap de Haan            HTML);
67d4abf4f0SJaap de Haan
68d4abf4f0SJaap de Haan        // used during previews
69962d7b81SJaap de Haan        $form->setHiddenField('target', "plugin_bpmnio_{$type}");
70962d7b81SJaap de Haan        $form->setHiddenField('range', $RANGE);
71d4abf4f0SJaap de Haan    }
72d4abf4f0SJaap de Haan
73*a494ddccSgithub-actions[bot]    public function handlePost(Event $event)
74d4abf4f0SJaap de Haan    {
75d4abf4f0SJaap de Haan        global $TEXT;
76d4abf4f0SJaap de Haan        global $INPUT;
77d4abf4f0SJaap de Haan
78d4abf4f0SJaap de Haan        if (!$INPUT->post->has('plugin_bpmnio_data')) return;
79d4abf4f0SJaap de Haan
80d4abf4f0SJaap de Haan        $TEXT = base64_decode($INPUT->post->str('plugin_bpmnio_data'));
81d4abf4f0SJaap de Haan    }
82d4abf4f0SJaap de Haan
83*a494ddccSgithub-actions[bot]    private function shallIgnore(Event $event)
84c4f02a6eSJaap de Haan    {
85f0ae282cSJaap de Haan        if ($event->data['target'] === 'plugin_bpmnio_bpmn')
86c4f02a6eSJaap de Haan            return false;
87f0ae282cSJaap de Haan        if ($event->data['target'] === 'plugin_bpmnio_dmn')
88f0ae282cSJaap de Haan            return false;
89f0ae282cSJaap de Haan        return true;
90c4f02a6eSJaap de Haan    }
91c4f02a6eSJaap de Haan}
92