xref: /plugin/bpmnio/action/editor.php (revision c489ffae877d45606c5a36eadc7db467de302d22)
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');
23*c489ffaeSJaap de Haan        $controller->register_hook('FORM_EDIT_OUTPUT', 'BEFORE', $this, 'handleFormEditOutput');
24*c489ffaeSJaap de Haan    }
25*c489ffaeSJaap de Haan
26*c489ffaeSJaap de Haan    public function handleFormEditOutput(Event $event)
27*c489ffaeSJaap de Haan    {
28*c489ffaeSJaap de Haan        /** @var Doku_Form $form */
29*c489ffaeSJaap de Haan        $form = &$event->data;
30*c489ffaeSJaap de Haan
31*c489ffaeSJaap de Haan        $previewButtonPosition = $form->findPositionByAttribute('id', 'edbtn__preview');
32*c489ffaeSJaap de Haan        if ($previewButtonPosition !== false) {
33*c489ffaeSJaap de Haan            $form->removeElement($previewButtonPosition);
34*c489ffaeSJaap de Haan        }
35c4f02a6eSJaap de Haan    }
36c4f02a6eSJaap de Haan
37a494ddccSgithub-actions[bot]    public function sectionEditButton(Event $event)
38c4f02a6eSJaap de Haan    {
39962d7b81SJaap de Haan        if ($this->shallIgnore($event)) return;
40c4f02a6eSJaap de Haan
41c4f02a6eSJaap de Haan        $event->data['name'] = $this->getLang('edit_diagram');
42c4f02a6eSJaap de Haan    }
43c4f02a6eSJaap de Haan
44a494ddccSgithub-actions[bot]    public function handleForm(Event $event)
45d4abf4f0SJaap de Haan    {
46962d7b81SJaap de Haan        if ($this->shallIgnore($event)) return;
47d4abf4f0SJaap de Haan
48d4abf4f0SJaap de Haan        global $TEXT;
49d4abf4f0SJaap de Haan        global $RANGE;
50d4abf4f0SJaap de Haan        global $INPUT;
51d4abf4f0SJaap de Haan
52d4abf4f0SJaap de Haan        if (!$RANGE) {
53d4abf4f0SJaap de Haan            // section editing failed, use default editor instead
54d4abf4f0SJaap de Haan            $event->data['target'] = 'section';
55d4abf4f0SJaap de Haan            return;
56d4abf4f0SJaap de Haan        }
57d4abf4f0SJaap de Haan
58d4abf4f0SJaap de Haan        $event->stopPropagation();
59d4abf4f0SJaap de Haan        $event->preventDefault();
60d4abf4f0SJaap de Haan
61962d7b81SJaap de Haan        /** @var Doku_Form $form */
62d4abf4f0SJaap de Haan        $form = &$event->data['form'];
63d4abf4f0SJaap de Haan        $data = base64_encode($TEXT);
64d4abf4f0SJaap de Haan
65f0ae282cSJaap de Haan        $type = 'bpmn';
66f0ae282cSJaap de Haan        if ($event->data['target'] === 'plugin_bpmnio_dmn')
67f0ae282cSJaap de Haan            $type = 'dmn';
68f0ae282cSJaap de Haan
69962d7b81SJaap de Haan        $form->setHiddenField('plugin_bpmnio_data', $data);
70962d7b81SJaap de Haan        $form->addHTML(<<<HTML
71f0ae282cSJaap de Haan            <div class="plugin-bpmnio" id="plugin_bpmnio__{$type}_editor">
72f0ae282cSJaap de Haan                <div class="{$type}_js_data">{$data}</div>
73f0ae282cSJaap de Haan                <div class="{$type}_js_canvas">
74f0ae282cSJaap de Haan                    <div class="{$type}_js_container"></div>
75d4abf4f0SJaap de Haan                </div>
76d4abf4f0SJaap de Haan                </div>
77d4abf4f0SJaap de Haan            </div>
78d4abf4f0SJaap de Haan            HTML);
79d4abf4f0SJaap de Haan
80d4abf4f0SJaap de Haan        // used during previews
81962d7b81SJaap de Haan        $form->setHiddenField('target', "plugin_bpmnio_{$type}");
82962d7b81SJaap de Haan        $form->setHiddenField('range', $RANGE);
83d4abf4f0SJaap de Haan    }
84d4abf4f0SJaap de Haan
85a494ddccSgithub-actions[bot]    public function handlePost(Event $event)
86d4abf4f0SJaap de Haan    {
87d4abf4f0SJaap de Haan        global $TEXT;
88d4abf4f0SJaap de Haan        global $INPUT;
89d4abf4f0SJaap de Haan
90d4abf4f0SJaap de Haan        if (!$INPUT->post->has('plugin_bpmnio_data')) return;
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    {
97f0ae282cSJaap de Haan        if ($event->data['target'] === 'plugin_bpmnio_bpmn')
98c4f02a6eSJaap de Haan            return false;
99f0ae282cSJaap de Haan        if ($event->data['target'] === 'plugin_bpmnio_dmn')
100f0ae282cSJaap de Haan            return false;
101f0ae282cSJaap de Haan        return true;
102c4f02a6eSJaap de Haan    }
103c4f02a6eSJaap de Haan}
104