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