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 10*a494ddccSgithub-actions[bot]use dokuwiki\Extension\ActionPlugin; 11*a494ddccSgithub-actions[bot]use dokuwiki\Extension\EventHandler; 12*a494ddccSgithub-actions[bot]use dokuwiki\Extension\Event; 13d4abf4f0SJaap de Haanuse dokuwiki\Form\Form; 14d4abf4f0SJaap de Haanuse dokuwiki\Utf8; 15d4abf4f0SJaap de Haan 16*a494ddccSgithub-actions[bot]class action_plugin_bpmnio_editor extends ActionPlugin 17c4f02a6eSJaap de Haan{ 18*a494ddccSgithub-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'); 23c4f02a6eSJaap de Haan } 24c4f02a6eSJaap de Haan 25*a494ddccSgithub-actions[bot] public function sectionEditButton(Event $event) 26c4f02a6eSJaap de Haan { 27962d7b81SJaap de Haan if ($this->shallIgnore($event)) return; 28c4f02a6eSJaap de Haan 29c4f02a6eSJaap de Haan $event->data['name'] = $this->getLang('edit_diagram'); 30c4f02a6eSJaap de Haan } 31c4f02a6eSJaap de Haan 32*a494ddccSgithub-actions[bot] public function handleForm(Event $event) 33d4abf4f0SJaap de Haan { 34962d7b81SJaap de Haan if ($this->shallIgnore($event)) return; 35d4abf4f0SJaap de Haan 36d4abf4f0SJaap de Haan global $TEXT; 37d4abf4f0SJaap de Haan global $RANGE; 38d4abf4f0SJaap de Haan global $INPUT; 39d4abf4f0SJaap de Haan 40d4abf4f0SJaap de Haan if (!$RANGE) { 41d4abf4f0SJaap de Haan // section editing failed, use default editor instead 42d4abf4f0SJaap de Haan $event->data['target'] = 'section'; 43d4abf4f0SJaap de Haan return; 44d4abf4f0SJaap de Haan } 45d4abf4f0SJaap de Haan 46d4abf4f0SJaap de Haan $event->stopPropagation(); 47d4abf4f0SJaap de Haan $event->preventDefault(); 48d4abf4f0SJaap de Haan 49962d7b81SJaap de Haan /** @var Doku_Form $form */ 50d4abf4f0SJaap de Haan $form = &$event->data['form']; 51d4abf4f0SJaap de Haan $data = base64_encode($TEXT); 52d4abf4f0SJaap de Haan 53f0ae282cSJaap de Haan $type = 'bpmn'; 54f0ae282cSJaap de Haan if ($event->data['target'] === 'plugin_bpmnio_dmn') 55f0ae282cSJaap de Haan $type = 'dmn'; 56f0ae282cSJaap de Haan 57962d7b81SJaap de Haan $form->setHiddenField('plugin_bpmnio_data', $data); 58962d7b81SJaap de Haan $form->addHTML(<<<HTML 59f0ae282cSJaap de Haan <div class="plugin-bpmnio" id="plugin_bpmnio__{$type}_editor"> 60f0ae282cSJaap de Haan <div class="{$type}_js_data">{$data}</div> 61f0ae282cSJaap de Haan <div class="{$type}_js_canvas"> 62f0ae282cSJaap de Haan <div class="{$type}_js_container"></div> 63d4abf4f0SJaap de Haan </div> 64d4abf4f0SJaap de Haan </div> 65d4abf4f0SJaap de Haan </div> 66d4abf4f0SJaap de Haan HTML); 67d4abf4f0SJaap de Haan 68d4abf4f0SJaap de Haan // used during previews 69962d7b81SJaap de Haan $form->setHiddenField('target', "plugin_bpmnio_{$type}"); 70962d7b81SJaap de Haan $form->setHiddenField('range', $RANGE); 71d4abf4f0SJaap de Haan } 72d4abf4f0SJaap de Haan 73*a494ddccSgithub-actions[bot] public function handlePost(Event $event) 74d4abf4f0SJaap de Haan { 75d4abf4f0SJaap de Haan global $TEXT; 76d4abf4f0SJaap de Haan global $INPUT; 77d4abf4f0SJaap de Haan 78d4abf4f0SJaap de Haan if (!$INPUT->post->has('plugin_bpmnio_data')) return; 79d4abf4f0SJaap de Haan 80d4abf4f0SJaap de Haan $TEXT = base64_decode($INPUT->post->str('plugin_bpmnio_data')); 81d4abf4f0SJaap de Haan } 82d4abf4f0SJaap de Haan 83*a494ddccSgithub-actions[bot] private function shallIgnore(Event $event) 84c4f02a6eSJaap de Haan { 85f0ae282cSJaap de Haan if ($event->data['target'] === 'plugin_bpmnio_bpmn') 86c4f02a6eSJaap de Haan return false; 87f0ae282cSJaap de Haan if ($event->data['target'] === 'plugin_bpmnio_dmn') 88f0ae282cSJaap de Haan return false; 89f0ae282cSJaap de Haan return true; 90c4f02a6eSJaap de Haan } 91c4f02a6eSJaap de Haan} 92