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