1c4f02a6eSJaap de Haan<?php 2*d4abf4f0SJaap 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 12*d4abf4f0SJaap de Haanuse dokuwiki\Form\Form; 13*d4abf4f0SJaap de Haanuse dokuwiki\Utf8; 14*d4abf4f0SJaap 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'); 20*d4abf4f0SJaap de Haan 21*d4abf4f0SJaap de Haan $controller->register_hook('EDIT_FORM_ADDTEXTAREA', 'BEFORE', $this, 'handle_form'); 22*d4abf4f0SJaap de Haan $controller->register_hook('HTML_EDIT_FORMSELECTION', 'BEFORE', $this, 'handle_form'); 23*d4abf4f0SJaap de Haan 24*d4abf4f0SJaap 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 34*d4abf4f0SJaap de Haan function handle_form(Doku_Event $event) 35*d4abf4f0SJaap de Haan { 36*d4abf4f0SJaap de Haan if ($this->_shall_ignore($event)) return; 37*d4abf4f0SJaap de Haan 38*d4abf4f0SJaap de Haan global $TEXT; 39*d4abf4f0SJaap de Haan global $RANGE; 40*d4abf4f0SJaap de Haan global $INPUT; 41*d4abf4f0SJaap de Haan 42*d4abf4f0SJaap de Haan if (!$RANGE) { 43*d4abf4f0SJaap de Haan // section editing failed, use default editor instead 44*d4abf4f0SJaap de Haan $event->data['target'] = 'section'; 45*d4abf4f0SJaap de Haan return; 46*d4abf4f0SJaap de Haan } 47*d4abf4f0SJaap de Haan 48*d4abf4f0SJaap de Haan $event->stopPropagation(); 49*d4abf4f0SJaap de Haan $event->preventDefault(); 50*d4abf4f0SJaap de Haan 51*d4abf4f0SJaap de Haan $form = &$event->data['form']; 52*d4abf4f0SJaap de Haan $data = base64_encode($TEXT); 53*d4abf4f0SJaap de Haan 54*d4abf4f0SJaap de Haan $this->_addHidden($form, 'plugin_bpmnio_data', $data); 55*d4abf4f0SJaap de Haan $this->_addHTML($form, <<<HTML 56*d4abf4f0SJaap de Haan <div class="plugin-bpmnio" id="plugin_bpmnio__editor"> 57*d4abf4f0SJaap de Haan <div class="bpmn_js_data">{$data}</div> 58*d4abf4f0SJaap de Haan <div class="bpmn_js_canvas"> 59*d4abf4f0SJaap de Haan <div class="bpmn_js_container"></div> 60*d4abf4f0SJaap de Haan </div> 61*d4abf4f0SJaap de Haan </div> 62*d4abf4f0SJaap de Haan </div> 63*d4abf4f0SJaap de Haan HTML); 64*d4abf4f0SJaap de Haan 65*d4abf4f0SJaap de Haan // used during previews 66*d4abf4f0SJaap de Haan $this->_addHidden($form, 'target', 'plugin_bpmnio'); 67*d4abf4f0SJaap de Haan $this->_addHidden($form, 'range', $RANGE); 68*d4abf4f0SJaap de Haan } 69*d4abf4f0SJaap de Haan 70*d4abf4f0SJaap de Haan function handle_post(Doku_Event $event) 71*d4abf4f0SJaap de Haan { 72*d4abf4f0SJaap de Haan global $TEXT; 73*d4abf4f0SJaap de Haan global $INPUT; 74*d4abf4f0SJaap de Haan 75*d4abf4f0SJaap de Haan if (!$INPUT->post->has('plugin_bpmnio_data')) return; 76*d4abf4f0SJaap de Haan 77*d4abf4f0SJaap de Haan $TEXT = base64_decode($INPUT->post->str('plugin_bpmnio_data')); 78*d4abf4f0SJaap de Haan } 79*d4abf4f0SJaap de Haan 80*d4abf4f0SJaap de Haan private function _addHidden($form, $field, $data) 81*d4abf4f0SJaap de Haan { 82*d4abf4f0SJaap de Haan if (is_a($form, Form::class)) { // $event->name is EDIT_FORM_ADDTEXTAREA 83*d4abf4f0SJaap de Haan $form->setHiddenField($field, $data); 84*d4abf4f0SJaap de Haan } else { // $event->name is HTML_EDIT_FORMSELECTION 85*d4abf4f0SJaap de Haan $form->addHidden($field, $data); 86*d4abf4f0SJaap de Haan } 87*d4abf4f0SJaap de Haan } 88*d4abf4f0SJaap de Haan 89*d4abf4f0SJaap de Haan private function _addHTML($form, $data) 90*d4abf4f0SJaap de Haan { 91*d4abf4f0SJaap de Haan $form->addHTML($data); 92*d4abf4f0SJaap de Haan } 93*d4abf4f0SJaap de Haan 94c4f02a6eSJaap de Haan private function _shall_ignore(Doku_Event $event) 95c4f02a6eSJaap de Haan { 96c4f02a6eSJaap de Haan if ($event->data['target'] !== 'plugin_bpmnio') 97c4f02a6eSJaap de Haan return true; 98c4f02a6eSJaap de Haan return false; 99c4f02a6eSJaap de Haan } 100c4f02a6eSJaap de Haan} 101