xref: /plugin/bpmnio/action/editor.php (revision 36b712d809a9afeda77eb7dba8abf621818208c9)
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*36b712d8SJaap de Haan    private function loadLinkProcessor(): void
19*36b712d8SJaap de Haan    {
20*36b712d8SJaap de Haan        require_once __DIR__ . '/../inc/link_processor.php';
21*36b712d8SJaap de Haan    }
22*36b712d8SJaap de Haan
239ff8d41cSJaap de Haan    public function register(EventHandler $controller): void
24c4f02a6eSJaap de Haan    {
25962d7b81SJaap de Haan        $controller->register_hook('HTML_SECEDIT_BUTTON', 'BEFORE', $this, 'sectionEditButton');
26962d7b81SJaap de Haan        $controller->register_hook('EDIT_FORM_ADDTEXTAREA', 'BEFORE', $this, 'handleForm');
27962d7b81SJaap de Haan        $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handlePost');
28c489ffaeSJaap de Haan        $controller->register_hook('FORM_EDIT_OUTPUT', 'BEFORE', $this, 'handleFormEditOutput');
29c489ffaeSJaap de Haan    }
30c489ffaeSJaap de Haan
31c489ffaeSJaap de Haan    public function handleFormEditOutput(Event $event)
32c489ffaeSJaap de Haan    {
33c4f02a6eSJaap de Haan    }
34c4f02a6eSJaap de Haan
35a494ddccSgithub-actions[bot]    public function sectionEditButton(Event $event)
36c4f02a6eSJaap de Haan    {
379ff8d41cSJaap de Haan        if ($this->shallIgnore($event)) {
389ff8d41cSJaap de Haan            return;
399ff8d41cSJaap de Haan        }
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    {
469ff8d41cSJaap de Haan        if ($this->shallIgnore($event)) {
479ff8d41cSJaap de Haan            return;
489ff8d41cSJaap de Haan        }
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);
66*36b712d8SJaap de Haan        $this->loadLinkProcessor();
67*36b712d8SJaap de Haan        $payload = plugin_bpmnio_link_processor::buildPayload($TEXT);
68*36b712d8SJaap de Haan        $renderData = base64_encode($payload['xml']);
69*36b712d8SJaap de Haan        $linkData = base64_encode(json_encode($payload['links']));
70d4abf4f0SJaap de Haan
71f0ae282cSJaap de Haan        $type = 'bpmn';
729ff8d41cSJaap de Haan        if ($event->data['target'] === 'plugin_bpmnio_dmn') {
73f0ae282cSJaap de Haan            $type = 'dmn';
749ff8d41cSJaap de Haan        }
75f0ae282cSJaap de Haan
76962d7b81SJaap de Haan        $form->setHiddenField('plugin_bpmnio_data', $data);
77*36b712d8SJaap de Haan        $form->setHiddenField('plugin_bpmnio_links', $linkData);
78962d7b81SJaap de Haan        $form->addHTML(<<<HTML
79f0ae282cSJaap de Haan            <div class="plugin-bpmnio" id="plugin_bpmnio__{$type}_editor">
80*36b712d8SJaap de Haan                <div class="{$type}_js_data">{$renderData}</div>
81*36b712d8SJaap de Haan                <div class="{$type}_js_links">{$linkData}</div>
82f0ae282cSJaap de Haan                <div class="{$type}_js_canvas">
83f0ae282cSJaap de Haan                    <div class="{$type}_js_container"></div>
84d4abf4f0SJaap de Haan                </div>
85d4abf4f0SJaap de Haan            </div>
86d4abf4f0SJaap de Haan            HTML);
87d4abf4f0SJaap de Haan
88d4abf4f0SJaap de Haan        // used during previews
89962d7b81SJaap de Haan        $form->setHiddenField('target', "plugin_bpmnio_{$type}");
90962d7b81SJaap de Haan        $form->setHiddenField('range', $RANGE);
91d4abf4f0SJaap de Haan    }
92d4abf4f0SJaap de Haan
93a494ddccSgithub-actions[bot]    public function handlePost(Event $event)
94d4abf4f0SJaap de Haan    {
95d4abf4f0SJaap de Haan        global $TEXT;
96d4abf4f0SJaap de Haan        global $INPUT;
97d4abf4f0SJaap de Haan
989ff8d41cSJaap de Haan        if (!$INPUT->post->has('plugin_bpmnio_data')) {
999ff8d41cSJaap de Haan            return;
1009ff8d41cSJaap de Haan        }
101d4abf4f0SJaap de Haan
102d4abf4f0SJaap de Haan        $TEXT = base64_decode($INPUT->post->str('plugin_bpmnio_data'));
103d4abf4f0SJaap de Haan    }
104d4abf4f0SJaap de Haan
105a494ddccSgithub-actions[bot]    private function shallIgnore(Event $event)
106c4f02a6eSJaap de Haan    {
1079ff8d41cSJaap de Haan        if ($event->data['target'] === 'plugin_bpmnio_bpmn') {
108c4f02a6eSJaap de Haan            return false;
1099ff8d41cSJaap de Haan        }
1109ff8d41cSJaap de Haan        if ($event->data['target'] === 'plugin_bpmnio_dmn') {
111f0ae282cSJaap de Haan            return false;
1129ff8d41cSJaap de Haan        }
113f0ae282cSJaap de Haan        return true;
114c4f02a6eSJaap de Haan    }
115c4f02a6eSJaap de Haan}
116