xref: /plugin/bpmnio/action/editor.php (revision 9ff8d41c7727ff9fa896ee8f49e170f6b8272716)
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
10a494ddccSgithub-actions[bot]use dokuwiki\Extension\ActionPlugin;
11a494ddccSgithub-actions[bot]use dokuwiki\Extension\EventHandler;
12a494ddccSgithub-actions[bot]use dokuwiki\Extension\Event;
13d4abf4f0SJaap de Haanuse dokuwiki\Form\Form;
14d4abf4f0SJaap de Haanuse dokuwiki\Utf8;
15d4abf4f0SJaap de Haan
16a494ddccSgithub-actions[bot]class action_plugin_bpmnio_editor extends ActionPlugin
17c4f02a6eSJaap de Haan{
18*9ff8d41cSJaap de Haan    public function register(EventHandler $controller): void
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');
23c489ffaeSJaap de Haan        $controller->register_hook('FORM_EDIT_OUTPUT', 'BEFORE', $this, 'handleFormEditOutput');
24c489ffaeSJaap de Haan    }
25c489ffaeSJaap de Haan
26c489ffaeSJaap de Haan    public function handleFormEditOutput(Event $event)
27c489ffaeSJaap de Haan    {
28c4f02a6eSJaap de Haan    }
29c4f02a6eSJaap de Haan
30a494ddccSgithub-actions[bot]    public function sectionEditButton(Event $event)
31c4f02a6eSJaap de Haan    {
32*9ff8d41cSJaap de Haan        if ($this->shallIgnore($event)) {
33*9ff8d41cSJaap de Haan            return;
34*9ff8d41cSJaap de Haan        }
35c4f02a6eSJaap de Haan
36c4f02a6eSJaap de Haan        $event->data['name'] = $this->getLang('edit_diagram');
37c4f02a6eSJaap de Haan    }
38c4f02a6eSJaap de Haan
39a494ddccSgithub-actions[bot]    public function handleForm(Event $event)
40d4abf4f0SJaap de Haan    {
41*9ff8d41cSJaap de Haan        if ($this->shallIgnore($event)) {
42*9ff8d41cSJaap de Haan            return;
43*9ff8d41cSJaap de Haan        }
44d4abf4f0SJaap de Haan
45d4abf4f0SJaap de Haan        global $TEXT;
46d4abf4f0SJaap de Haan        global $RANGE;
47d4abf4f0SJaap de Haan        global $INPUT;
48d4abf4f0SJaap de Haan
49d4abf4f0SJaap de Haan        if (!$RANGE) {
50d4abf4f0SJaap de Haan            // section editing failed, use default editor instead
51d4abf4f0SJaap de Haan            $event->data['target'] = 'section';
52d4abf4f0SJaap de Haan            return;
53d4abf4f0SJaap de Haan        }
54d4abf4f0SJaap de Haan
55d4abf4f0SJaap de Haan        $event->stopPropagation();
56d4abf4f0SJaap de Haan        $event->preventDefault();
57d4abf4f0SJaap de Haan
58962d7b81SJaap de Haan        /** @var Doku_Form $form */
59d4abf4f0SJaap de Haan        $form = &$event->data['form'];
60d4abf4f0SJaap de Haan        $data = base64_encode($TEXT);
61d4abf4f0SJaap de Haan
62f0ae282cSJaap de Haan        $type = 'bpmn';
63*9ff8d41cSJaap de Haan        if ($event->data['target'] === 'plugin_bpmnio_dmn') {
64f0ae282cSJaap de Haan            $type = 'dmn';
65*9ff8d41cSJaap de Haan        }
66f0ae282cSJaap de Haan
67962d7b81SJaap de Haan        $form->setHiddenField('plugin_bpmnio_data', $data);
68962d7b81SJaap de Haan        $form->addHTML(<<<HTML
69f0ae282cSJaap de Haan            <div class="plugin-bpmnio" id="plugin_bpmnio__{$type}_editor">
70f0ae282cSJaap de Haan                <div class="{$type}_js_data">{$data}</div>
71f0ae282cSJaap de Haan                <div class="{$type}_js_canvas">
72f0ae282cSJaap de Haan                    <div class="{$type}_js_container"></div>
73d4abf4f0SJaap de Haan                </div>
74d4abf4f0SJaap de Haan                </div>
75d4abf4f0SJaap de Haan            </div>
76d4abf4f0SJaap de Haan            HTML);
77d4abf4f0SJaap de Haan
78d4abf4f0SJaap de Haan        // used during previews
79962d7b81SJaap de Haan        $form->setHiddenField('target', "plugin_bpmnio_{$type}");
80962d7b81SJaap de Haan        $form->setHiddenField('range', $RANGE);
81d4abf4f0SJaap de Haan    }
82d4abf4f0SJaap de Haan
83a494ddccSgithub-actions[bot]    public function handlePost(Event $event)
84d4abf4f0SJaap de Haan    {
85d4abf4f0SJaap de Haan        global $TEXT;
86d4abf4f0SJaap de Haan        global $INPUT;
87d4abf4f0SJaap de Haan
88*9ff8d41cSJaap de Haan        if (!$INPUT->post->has('plugin_bpmnio_data')) {
89*9ff8d41cSJaap de Haan            return;
90*9ff8d41cSJaap de Haan        }
91d4abf4f0SJaap de Haan
92d4abf4f0SJaap de Haan        $TEXT = base64_decode($INPUT->post->str('plugin_bpmnio_data'));
93d4abf4f0SJaap de Haan    }
94d4abf4f0SJaap de Haan
95a494ddccSgithub-actions[bot]    private function shallIgnore(Event $event)
96c4f02a6eSJaap de Haan    {
97*9ff8d41cSJaap de Haan        if ($event->data['target'] === 'plugin_bpmnio_bpmn') {
98c4f02a6eSJaap de Haan            return false;
99*9ff8d41cSJaap de Haan        }
100*9ff8d41cSJaap de Haan        if ($event->data['target'] === 'plugin_bpmnio_dmn') {
101f0ae282cSJaap de Haan            return false;
102*9ff8d41cSJaap de Haan        }
103f0ae282cSJaap de Haan        return true;
104c4f02a6eSJaap de Haan    }
105c4f02a6eSJaap de Haan}
106