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*9ff8d41cSJaap de Haan public function register(EventHandler $controller): void 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 { 28c4f02a6eSJaap de Haan } 29c4f02a6eSJaap de Haan 30a494ddccSgithub-actions[bot] public function sectionEditButton(Event $event) 31c4f02a6eSJaap de Haan { 32*9ff8d41cSJaap de Haan if ($this->shallIgnore($event)) { 33*9ff8d41cSJaap de Haan return; 34*9ff8d41cSJaap de Haan } 35c4f02a6eSJaap de Haan 36c4f02a6eSJaap de Haan $event->data['name'] = $this->getLang('edit_diagram'); 37c4f02a6eSJaap de Haan } 38c4f02a6eSJaap de Haan 39a494ddccSgithub-actions[bot] public function handleForm(Event $event) 40d4abf4f0SJaap de Haan { 41*9ff8d41cSJaap de Haan if ($this->shallIgnore($event)) { 42*9ff8d41cSJaap de Haan return; 43*9ff8d41cSJaap de Haan } 44d4abf4f0SJaap de Haan 45d4abf4f0SJaap de Haan global $TEXT; 46d4abf4f0SJaap de Haan global $RANGE; 47d4abf4f0SJaap de Haan global $INPUT; 48d4abf4f0SJaap de Haan 49d4abf4f0SJaap de Haan if (!$RANGE) { 50d4abf4f0SJaap de Haan // section editing failed, use default editor instead 51d4abf4f0SJaap de Haan $event->data['target'] = 'section'; 52d4abf4f0SJaap de Haan return; 53d4abf4f0SJaap de Haan } 54d4abf4f0SJaap de Haan 55d4abf4f0SJaap de Haan $event->stopPropagation(); 56d4abf4f0SJaap de Haan $event->preventDefault(); 57d4abf4f0SJaap de Haan 58962d7b81SJaap de Haan /** @var Doku_Form $form */ 59d4abf4f0SJaap de Haan $form = &$event->data['form']; 60d4abf4f0SJaap de Haan $data = base64_encode($TEXT); 61d4abf4f0SJaap de Haan 62f0ae282cSJaap de Haan $type = 'bpmn'; 63*9ff8d41cSJaap de Haan if ($event->data['target'] === 'plugin_bpmnio_dmn') { 64f0ae282cSJaap de Haan $type = 'dmn'; 65*9ff8d41cSJaap de Haan } 66f0ae282cSJaap de Haan 67962d7b81SJaap de Haan $form->setHiddenField('plugin_bpmnio_data', $data); 68962d7b81SJaap de Haan $form->addHTML(<<<HTML 69f0ae282cSJaap de Haan <div class="plugin-bpmnio" id="plugin_bpmnio__{$type}_editor"> 70f0ae282cSJaap de Haan <div class="{$type}_js_data">{$data}</div> 71f0ae282cSJaap de Haan <div class="{$type}_js_canvas"> 72f0ae282cSJaap de Haan <div class="{$type}_js_container"></div> 73d4abf4f0SJaap de Haan </div> 74d4abf4f0SJaap de Haan </div> 75d4abf4f0SJaap de Haan </div> 76d4abf4f0SJaap de Haan HTML); 77d4abf4f0SJaap de Haan 78d4abf4f0SJaap de Haan // used during previews 79962d7b81SJaap de Haan $form->setHiddenField('target', "plugin_bpmnio_{$type}"); 80962d7b81SJaap de Haan $form->setHiddenField('range', $RANGE); 81d4abf4f0SJaap de Haan } 82d4abf4f0SJaap de Haan 83a494ddccSgithub-actions[bot] public function handlePost(Event $event) 84d4abf4f0SJaap de Haan { 85d4abf4f0SJaap de Haan global $TEXT; 86d4abf4f0SJaap de Haan global $INPUT; 87d4abf4f0SJaap de Haan 88*9ff8d41cSJaap de Haan if (!$INPUT->post->has('plugin_bpmnio_data')) { 89*9ff8d41cSJaap de Haan return; 90*9ff8d41cSJaap de Haan } 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 { 97*9ff8d41cSJaap de Haan if ($event->data['target'] === 'plugin_bpmnio_bpmn') { 98c4f02a6eSJaap de Haan return false; 99*9ff8d41cSJaap de Haan } 100*9ff8d41cSJaap de Haan if ($event->data['target'] === 'plugin_bpmnio_dmn') { 101f0ae282cSJaap de Haan return false; 102*9ff8d41cSJaap de Haan } 103f0ae282cSJaap de Haan return true; 104c4f02a6eSJaap de Haan } 105c4f02a6eSJaap de Haan} 106