xref: /plugin/bpmnio/action/editor.php (revision 962d7b81eacf3a5589ab5a5379dff53898ee8445)
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
10c4f02a6eSJaap de Haan
11d4abf4f0SJaap de Haanuse dokuwiki\Form\Form;
12d4abf4f0SJaap de Haanuse dokuwiki\Utf8;
13d4abf4f0SJaap de Haan
14c4f02a6eSJaap de Haanclass action_plugin_bpmnio_editor extends DokuWiki_Action_Plugin
15c4f02a6eSJaap de Haan{
16c4f02a6eSJaap de Haan    public function register(Doku_Event_Handler $controller)
17c4f02a6eSJaap de Haan    {
18*962d7b81SJaap de Haan        $controller->register_hook('HTML_SECEDIT_BUTTON', 'BEFORE', $this, 'sectionEditButton');
19*962d7b81SJaap de Haan        $controller->register_hook('EDIT_FORM_ADDTEXTAREA', 'BEFORE', $this, 'handleForm');
20*962d7b81SJaap de Haan        $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handlePost');
21c4f02a6eSJaap de Haan    }
22c4f02a6eSJaap de Haan
23*962d7b81SJaap de Haan    public function sectionEditButton(Doku_Event $event)
24c4f02a6eSJaap de Haan    {
25*962d7b81SJaap de Haan        if ($this->shallIgnore($event)) return;
26c4f02a6eSJaap de Haan
27c4f02a6eSJaap de Haan        $event->data['name'] = $this->getLang('edit_diagram');
28c4f02a6eSJaap de Haan    }
29c4f02a6eSJaap de Haan
30*962d7b81SJaap de Haan    public function handleForm(Doku_Event $event)
31d4abf4f0SJaap de Haan    {
32*962d7b81SJaap de Haan        if ($this->shallIgnore($event)) return;
33d4abf4f0SJaap de Haan
34d4abf4f0SJaap de Haan        global $TEXT;
35d4abf4f0SJaap de Haan        global $RANGE;
36d4abf4f0SJaap de Haan        global $INPUT;
37d4abf4f0SJaap de Haan
38d4abf4f0SJaap de Haan        if (!$RANGE) {
39d4abf4f0SJaap de Haan            // section editing failed, use default editor instead
40d4abf4f0SJaap de Haan            $event->data['target'] = 'section';
41d4abf4f0SJaap de Haan            return;
42d4abf4f0SJaap de Haan        }
43d4abf4f0SJaap de Haan
44d4abf4f0SJaap de Haan        $event->stopPropagation();
45d4abf4f0SJaap de Haan        $event->preventDefault();
46d4abf4f0SJaap de Haan
47*962d7b81SJaap de Haan        /** @var Doku_Form $form */
48d4abf4f0SJaap de Haan        $form = &$event->data['form'];
49d4abf4f0SJaap de Haan        $data = base64_encode($TEXT);
50d4abf4f0SJaap de Haan
51f0ae282cSJaap de Haan        $type = 'bpmn';
52f0ae282cSJaap de Haan        if ($event->data['target'] === 'plugin_bpmnio_dmn')
53f0ae282cSJaap de Haan            $type = 'dmn';
54f0ae282cSJaap de Haan
55*962d7b81SJaap de Haan        $form->setHiddenField('plugin_bpmnio_data', $data);
56*962d7b81SJaap de Haan        $form->addHTML(<<<HTML
57f0ae282cSJaap de Haan            <div class="plugin-bpmnio" id="plugin_bpmnio__{$type}_editor">
58f0ae282cSJaap de Haan                <div class="{$type}_js_data">{$data}</div>
59f0ae282cSJaap de Haan                <div class="{$type}_js_canvas">
60f0ae282cSJaap de Haan                    <div class="{$type}_js_container"></div>
61d4abf4f0SJaap de Haan                </div>
62d4abf4f0SJaap de Haan                </div>
63d4abf4f0SJaap de Haan            </div>
64d4abf4f0SJaap de Haan            HTML);
65d4abf4f0SJaap de Haan
66d4abf4f0SJaap de Haan        // used during previews
67*962d7b81SJaap de Haan        $form->setHiddenField('target', "plugin_bpmnio_{$type}");
68*962d7b81SJaap de Haan        $form->setHiddenField('range', $RANGE);
69d4abf4f0SJaap de Haan    }
70d4abf4f0SJaap de Haan
71*962d7b81SJaap de Haan    public function handlePost(Doku_Event $event)
72d4abf4f0SJaap de Haan    {
73d4abf4f0SJaap de Haan        global $TEXT;
74d4abf4f0SJaap de Haan        global $INPUT;
75d4abf4f0SJaap de Haan
76d4abf4f0SJaap de Haan        if (!$INPUT->post->has('plugin_bpmnio_data')) return;
77d4abf4f0SJaap de Haan
78d4abf4f0SJaap de Haan        $TEXT = base64_decode($INPUT->post->str('plugin_bpmnio_data'));
79d4abf4f0SJaap de Haan    }
80d4abf4f0SJaap de Haan
81*962d7b81SJaap de Haan    private function shallIgnore(Doku_Event $event)
82c4f02a6eSJaap de Haan    {
83f0ae282cSJaap de Haan        if ($event->data['target'] === 'plugin_bpmnio_bpmn')
84c4f02a6eSJaap de Haan            return false;
85f0ae282cSJaap de Haan        if ($event->data['target'] === 'plugin_bpmnio_dmn')
86f0ae282cSJaap de Haan            return false;
87f0ae282cSJaap de Haan        return true;
88c4f02a6eSJaap de Haan    }
89c4f02a6eSJaap de Haan}
90