1c4f02a6eSJaap de Haan<?php 2d4abf4f0SJaap de Haan 3c4f02a6eSJaap de Haan/** 4c4f02a6eSJaap de Haan * @license See LICENSE file 5c4f02a6eSJaap de Haan * @author Jaap de Haan <jaap.dehaan@color-of-code.de> 6c4f02a6eSJaap de Haan */ 7c4f02a6eSJaap de Haan 8c4f02a6eSJaap de Haan// See help: 9c4f02a6eSJaap de Haan// * https://www.dokuwiki.org/devel:section_editor 10c4f02a6eSJaap de Haan// * https://www.dokuwiki.org/devel:releases:refactor2021 11c4f02a6eSJaap de Haan 12d4abf4f0SJaap de Haanuse dokuwiki\Form\Form; 13d4abf4f0SJaap de Haanuse dokuwiki\Utf8; 14d4abf4f0SJaap de Haan 15c4f02a6eSJaap de Haanclass action_plugin_bpmnio_editor extends DokuWiki_Action_Plugin 16c4f02a6eSJaap de Haan{ 17c4f02a6eSJaap de Haan public function register(Doku_Event_Handler $controller) 18c4f02a6eSJaap de Haan { 19c4f02a6eSJaap de Haan $controller->register_hook('HTML_SECEDIT_BUTTON', 'BEFORE', $this, 'secedit_button'); 20d4abf4f0SJaap de Haan 21d4abf4f0SJaap de Haan $controller->register_hook('EDIT_FORM_ADDTEXTAREA', 'BEFORE', $this, 'handle_form'); 22d4abf4f0SJaap de Haan $controller->register_hook('HTML_EDIT_FORMSELECTION', 'BEFORE', $this, 'handle_form'); 23d4abf4f0SJaap de Haan 24d4abf4f0SJaap de Haan $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handle_post'); 25c4f02a6eSJaap de Haan } 26c4f02a6eSJaap de Haan 27c4f02a6eSJaap de Haan function secedit_button(Doku_Event $event) 28c4f02a6eSJaap de Haan { 29c4f02a6eSJaap de Haan if ($this->_shall_ignore($event)) return; 30c4f02a6eSJaap de Haan 31c4f02a6eSJaap de Haan $event->data['name'] = $this->getLang('edit_diagram'); 32c4f02a6eSJaap de Haan } 33c4f02a6eSJaap de Haan 34d4abf4f0SJaap de Haan function handle_form(Doku_Event $event) 35d4abf4f0SJaap de Haan { 36d4abf4f0SJaap de Haan if ($this->_shall_ignore($event)) return; 37d4abf4f0SJaap de Haan 38d4abf4f0SJaap de Haan global $TEXT; 39d4abf4f0SJaap de Haan global $RANGE; 40d4abf4f0SJaap de Haan global $INPUT; 41d4abf4f0SJaap de Haan 42d4abf4f0SJaap de Haan if (!$RANGE) { 43d4abf4f0SJaap de Haan // section editing failed, use default editor instead 44d4abf4f0SJaap de Haan $event->data['target'] = 'section'; 45d4abf4f0SJaap de Haan return; 46d4abf4f0SJaap de Haan } 47d4abf4f0SJaap de Haan 48d4abf4f0SJaap de Haan $event->stopPropagation(); 49d4abf4f0SJaap de Haan $event->preventDefault(); 50d4abf4f0SJaap de Haan 51d4abf4f0SJaap de Haan $form = &$event->data['form']; 52d4abf4f0SJaap de Haan $data = base64_encode($TEXT); 53d4abf4f0SJaap de Haan 54*f0ae282cSJaap de Haan $type = 'bpmn'; 55*f0ae282cSJaap de Haan if ($event->data['target'] === 'plugin_bpmnio_dmn') 56*f0ae282cSJaap de Haan $type = 'dmn'; 57*f0ae282cSJaap de Haan 58d4abf4f0SJaap de Haan $this->_addHidden($form, 'plugin_bpmnio_data', $data); 59d4abf4f0SJaap de Haan $this->_addHTML($form, <<<HTML 60*f0ae282cSJaap de Haan <div class="plugin-bpmnio" id="plugin_bpmnio__{$type}_editor"> 61*f0ae282cSJaap de Haan <div class="{$type}_js_data">{$data}</div> 62*f0ae282cSJaap de Haan <div class="{$type}_js_canvas"> 63*f0ae282cSJaap de Haan <div class="{$type}_js_container"></div> 64d4abf4f0SJaap de Haan </div> 65d4abf4f0SJaap de Haan </div> 66d4abf4f0SJaap de Haan </div> 67d4abf4f0SJaap de Haan HTML); 68d4abf4f0SJaap de Haan 69d4abf4f0SJaap de Haan // used during previews 70*f0ae282cSJaap de Haan $this->_addHidden($form, 'target', "plugin_bpmnio_{$type}"); 71d4abf4f0SJaap de Haan $this->_addHidden($form, 'range', $RANGE); 72d4abf4f0SJaap de Haan } 73d4abf4f0SJaap de Haan 74d4abf4f0SJaap de Haan function handle_post(Doku_Event $event) 75d4abf4f0SJaap de Haan { 76d4abf4f0SJaap de Haan global $TEXT; 77d4abf4f0SJaap de Haan global $INPUT; 78d4abf4f0SJaap de Haan 79d4abf4f0SJaap de Haan if (!$INPUT->post->has('plugin_bpmnio_data')) return; 80d4abf4f0SJaap de Haan 81d4abf4f0SJaap de Haan $TEXT = base64_decode($INPUT->post->str('plugin_bpmnio_data')); 82d4abf4f0SJaap de Haan } 83d4abf4f0SJaap de Haan 84d4abf4f0SJaap de Haan private function _addHidden($form, $field, $data) 85d4abf4f0SJaap de Haan { 86d4abf4f0SJaap de Haan if (is_a($form, Form::class)) { // $event->name is EDIT_FORM_ADDTEXTAREA 87d4abf4f0SJaap de Haan $form->setHiddenField($field, $data); 88d4abf4f0SJaap de Haan } else { // $event->name is HTML_EDIT_FORMSELECTION 89d4abf4f0SJaap de Haan $form->addHidden($field, $data); 90d4abf4f0SJaap de Haan } 91d4abf4f0SJaap de Haan } 92d4abf4f0SJaap de Haan 93d4abf4f0SJaap de Haan private function _addHTML($form, $data) 94d4abf4f0SJaap de Haan { 95d4abf4f0SJaap de Haan $form->addHTML($data); 96d4abf4f0SJaap de Haan } 97d4abf4f0SJaap de Haan 98c4f02a6eSJaap de Haan private function _shall_ignore(Doku_Event $event) 99c4f02a6eSJaap de Haan { 100*f0ae282cSJaap de Haan if ($event->data['target'] === 'plugin_bpmnio_bpmn') 101c4f02a6eSJaap de Haan return false; 102*f0ae282cSJaap de Haan if ($event->data['target'] === 'plugin_bpmnio_dmn') 103*f0ae282cSJaap de Haan return false; 104*f0ae282cSJaap de Haan return true; 105c4f02a6eSJaap de Haan } 106c4f02a6eSJaap de Haan} 107