xref: /plugin/bpmnio/action/editor.php (revision 1041486f6af7c93397d4de37d85fc9d4a724ce25)
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{
18a494ddccSgithub-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');
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    {
28c489ffaeSJaap de Haan        /** @var Doku_Form $form */
29c489ffaeSJaap de Haan        $form = &$event->data;
30c489ffaeSJaap de Haan
31*1041486fSJaap de Haan        // TODO: commented out for now, as it seems to create trouble for users
32*1041486fSJaap de Haan        // remove the preview button, as it does not work with our editor
33*1041486fSJaap de Haan        // $previewButtonPosition = $form->findPositionByAttribute('id', 'edbtn__preview');
34*1041486fSJaap de Haan        // if ($previewButtonPosition !== false) {
35*1041486fSJaap de Haan        //     $form->removeElement($previewButtonPosition);
36*1041486fSJaap de Haan        // }
37c4f02a6eSJaap de Haan    }
38c4f02a6eSJaap de Haan
39a494ddccSgithub-actions[bot]    public function sectionEditButton(Event $event)
40c4f02a6eSJaap de Haan    {
41962d7b81SJaap de Haan        if ($this->shallIgnore($event)) return;
42c4f02a6eSJaap de Haan
43c4f02a6eSJaap de Haan        $event->data['name'] = $this->getLang('edit_diagram');
44c4f02a6eSJaap de Haan    }
45c4f02a6eSJaap de Haan
46a494ddccSgithub-actions[bot]    public function handleForm(Event $event)
47d4abf4f0SJaap de Haan    {
48962d7b81SJaap de Haan        if ($this->shallIgnore($event)) return;
49d4abf4f0SJaap de Haan
50d4abf4f0SJaap de Haan        global $TEXT;
51d4abf4f0SJaap de Haan        global $RANGE;
52d4abf4f0SJaap de Haan        global $INPUT;
53d4abf4f0SJaap de Haan
54d4abf4f0SJaap de Haan        if (!$RANGE) {
55d4abf4f0SJaap de Haan            // section editing failed, use default editor instead
56d4abf4f0SJaap de Haan            $event->data['target'] = 'section';
57d4abf4f0SJaap de Haan            return;
58d4abf4f0SJaap de Haan        }
59d4abf4f0SJaap de Haan
60d4abf4f0SJaap de Haan        $event->stopPropagation();
61d4abf4f0SJaap de Haan        $event->preventDefault();
62d4abf4f0SJaap de Haan
63962d7b81SJaap de Haan        /** @var Doku_Form $form */
64d4abf4f0SJaap de Haan        $form = &$event->data['form'];
65d4abf4f0SJaap de Haan        $data = base64_encode($TEXT);
66d4abf4f0SJaap de Haan
67f0ae282cSJaap de Haan        $type = 'bpmn';
68f0ae282cSJaap de Haan        if ($event->data['target'] === 'plugin_bpmnio_dmn')
69f0ae282cSJaap de Haan            $type = 'dmn';
70f0ae282cSJaap de Haan
71962d7b81SJaap de Haan        $form->setHiddenField('plugin_bpmnio_data', $data);
72962d7b81SJaap de Haan        $form->addHTML(<<<HTML
73f0ae282cSJaap de Haan            <div class="plugin-bpmnio" id="plugin_bpmnio__{$type}_editor">
74f0ae282cSJaap de Haan                <div class="{$type}_js_data">{$data}</div>
75f0ae282cSJaap de Haan                <div class="{$type}_js_canvas">
76f0ae282cSJaap de Haan                    <div class="{$type}_js_container"></div>
77d4abf4f0SJaap de Haan                </div>
78d4abf4f0SJaap de Haan                </div>
79d4abf4f0SJaap de Haan            </div>
80d4abf4f0SJaap de Haan            HTML);
81d4abf4f0SJaap de Haan
82d4abf4f0SJaap de Haan        // used during previews
83962d7b81SJaap de Haan        $form->setHiddenField('target', "plugin_bpmnio_{$type}");
84962d7b81SJaap de Haan        $form->setHiddenField('range', $RANGE);
85d4abf4f0SJaap de Haan    }
86d4abf4f0SJaap de Haan
87a494ddccSgithub-actions[bot]    public function handlePost(Event $event)
88d4abf4f0SJaap de Haan    {
89d4abf4f0SJaap de Haan        global $TEXT;
90d4abf4f0SJaap de Haan        global $INPUT;
91d4abf4f0SJaap de Haan
92d4abf4f0SJaap de Haan        if (!$INPUT->post->has('plugin_bpmnio_data')) return;
93d4abf4f0SJaap de Haan
94d4abf4f0SJaap de Haan        $TEXT = base64_decode($INPUT->post->str('plugin_bpmnio_data'));
95d4abf4f0SJaap de Haan    }
96d4abf4f0SJaap de Haan
97a494ddccSgithub-actions[bot]    private function shallIgnore(Event $event)
98c4f02a6eSJaap de Haan    {
99f0ae282cSJaap de Haan        if ($event->data['target'] === 'plugin_bpmnio_bpmn')
100c4f02a6eSJaap de Haan            return false;
101f0ae282cSJaap de Haan        if ($event->data['target'] === 'plugin_bpmnio_dmn')
102f0ae282cSJaap de Haan            return false;
103f0ae282cSJaap de Haan        return true;
104c4f02a6eSJaap de Haan    }
105c4f02a6eSJaap de Haan}
106