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{ 18a494ddccSgithub-actions[bot] public function register(EventHandler $controller) 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'); 23*c489ffaeSJaap de Haan $controller->register_hook('FORM_EDIT_OUTPUT', 'BEFORE', $this, 'handleFormEditOutput'); 24*c489ffaeSJaap de Haan } 25*c489ffaeSJaap de Haan 26*c489ffaeSJaap de Haan public function handleFormEditOutput(Event $event) 27*c489ffaeSJaap de Haan { 28*c489ffaeSJaap de Haan /** @var Doku_Form $form */ 29*c489ffaeSJaap de Haan $form = &$event->data; 30*c489ffaeSJaap de Haan 31*c489ffaeSJaap de Haan $previewButtonPosition = $form->findPositionByAttribute('id', 'edbtn__preview'); 32*c489ffaeSJaap de Haan if ($previewButtonPosition !== false) { 33*c489ffaeSJaap de Haan $form->removeElement($previewButtonPosition); 34*c489ffaeSJaap de Haan } 35c4f02a6eSJaap de Haan } 36c4f02a6eSJaap de Haan 37a494ddccSgithub-actions[bot] public function sectionEditButton(Event $event) 38c4f02a6eSJaap de Haan { 39962d7b81SJaap de Haan if ($this->shallIgnore($event)) return; 40c4f02a6eSJaap de Haan 41c4f02a6eSJaap de Haan $event->data['name'] = $this->getLang('edit_diagram'); 42c4f02a6eSJaap de Haan } 43c4f02a6eSJaap de Haan 44a494ddccSgithub-actions[bot] public function handleForm(Event $event) 45d4abf4f0SJaap de Haan { 46962d7b81SJaap de Haan if ($this->shallIgnore($event)) return; 47d4abf4f0SJaap de Haan 48d4abf4f0SJaap de Haan global $TEXT; 49d4abf4f0SJaap de Haan global $RANGE; 50d4abf4f0SJaap de Haan global $INPUT; 51d4abf4f0SJaap de Haan 52d4abf4f0SJaap de Haan if (!$RANGE) { 53d4abf4f0SJaap de Haan // section editing failed, use default editor instead 54d4abf4f0SJaap de Haan $event->data['target'] = 'section'; 55d4abf4f0SJaap de Haan return; 56d4abf4f0SJaap de Haan } 57d4abf4f0SJaap de Haan 58d4abf4f0SJaap de Haan $event->stopPropagation(); 59d4abf4f0SJaap de Haan $event->preventDefault(); 60d4abf4f0SJaap de Haan 61962d7b81SJaap de Haan /** @var Doku_Form $form */ 62d4abf4f0SJaap de Haan $form = &$event->data['form']; 63d4abf4f0SJaap de Haan $data = base64_encode($TEXT); 64d4abf4f0SJaap de Haan 65f0ae282cSJaap de Haan $type = 'bpmn'; 66f0ae282cSJaap de Haan if ($event->data['target'] === 'plugin_bpmnio_dmn') 67f0ae282cSJaap de Haan $type = 'dmn'; 68f0ae282cSJaap de Haan 69962d7b81SJaap de Haan $form->setHiddenField('plugin_bpmnio_data', $data); 70962d7b81SJaap de Haan $form->addHTML(<<<HTML 71f0ae282cSJaap de Haan <div class="plugin-bpmnio" id="plugin_bpmnio__{$type}_editor"> 72f0ae282cSJaap de Haan <div class="{$type}_js_data">{$data}</div> 73f0ae282cSJaap de Haan <div class="{$type}_js_canvas"> 74f0ae282cSJaap de Haan <div class="{$type}_js_container"></div> 75d4abf4f0SJaap de Haan </div> 76d4abf4f0SJaap de Haan </div> 77d4abf4f0SJaap de Haan </div> 78d4abf4f0SJaap de Haan HTML); 79d4abf4f0SJaap de Haan 80d4abf4f0SJaap de Haan // used during previews 81962d7b81SJaap de Haan $form->setHiddenField('target', "plugin_bpmnio_{$type}"); 82962d7b81SJaap de Haan $form->setHiddenField('range', $RANGE); 83d4abf4f0SJaap de Haan } 84d4abf4f0SJaap de Haan 85a494ddccSgithub-actions[bot] public function handlePost(Event $event) 86d4abf4f0SJaap de Haan { 87d4abf4f0SJaap de Haan global $TEXT; 88d4abf4f0SJaap de Haan global $INPUT; 89d4abf4f0SJaap de Haan 90d4abf4f0SJaap de Haan if (!$INPUT->post->has('plugin_bpmnio_data')) return; 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 { 97f0ae282cSJaap de Haan if ($event->data['target'] === 'plugin_bpmnio_bpmn') 98c4f02a6eSJaap de Haan return false; 99f0ae282cSJaap de Haan if ($event->data['target'] === 'plugin_bpmnio_dmn') 100f0ae282cSJaap de Haan return false; 101f0ae282cSJaap de Haan return true; 102c4f02a6eSJaap de Haan } 103c4f02a6eSJaap de Haan} 104