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