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'); 23c489ffaeSJaap de Haan $controller->register_hook('FORM_EDIT_OUTPUT', 'BEFORE', $this, 'handleFormEditOutput'); 24c489ffaeSJaap de Haan } 25c489ffaeSJaap de Haan 26c489ffaeSJaap de Haan public function handleFormEditOutput(Event $event) 27c489ffaeSJaap de Haan { 28c489ffaeSJaap de Haan /** @var Doku_Form $form */ 29c489ffaeSJaap de Haan $form = &$event->data; 30c489ffaeSJaap de Haan 31*1041486fSJaap de Haan // TODO: commented out for now, as it seems to create trouble for users 32*1041486fSJaap de Haan // remove the preview button, as it does not work with our editor 33*1041486fSJaap de Haan // $previewButtonPosition = $form->findPositionByAttribute('id', 'edbtn__preview'); 34*1041486fSJaap de Haan // if ($previewButtonPosition !== false) { 35*1041486fSJaap de Haan // $form->removeElement($previewButtonPosition); 36*1041486fSJaap de Haan // } 37c4f02a6eSJaap de Haan } 38c4f02a6eSJaap de Haan 39a494ddccSgithub-actions[bot] public function sectionEditButton(Event $event) 40c4f02a6eSJaap de Haan { 41962d7b81SJaap de Haan if ($this->shallIgnore($event)) return; 42c4f02a6eSJaap de Haan 43c4f02a6eSJaap de Haan $event->data['name'] = $this->getLang('edit_diagram'); 44c4f02a6eSJaap de Haan } 45c4f02a6eSJaap de Haan 46a494ddccSgithub-actions[bot] public function handleForm(Event $event) 47d4abf4f0SJaap de Haan { 48962d7b81SJaap de Haan if ($this->shallIgnore($event)) return; 49d4abf4f0SJaap de Haan 50d4abf4f0SJaap de Haan global $TEXT; 51d4abf4f0SJaap de Haan global $RANGE; 52d4abf4f0SJaap de Haan global $INPUT; 53d4abf4f0SJaap de Haan 54d4abf4f0SJaap de Haan if (!$RANGE) { 55d4abf4f0SJaap de Haan // section editing failed, use default editor instead 56d4abf4f0SJaap de Haan $event->data['target'] = 'section'; 57d4abf4f0SJaap de Haan return; 58d4abf4f0SJaap de Haan } 59d4abf4f0SJaap de Haan 60d4abf4f0SJaap de Haan $event->stopPropagation(); 61d4abf4f0SJaap de Haan $event->preventDefault(); 62d4abf4f0SJaap de Haan 63962d7b81SJaap de Haan /** @var Doku_Form $form */ 64d4abf4f0SJaap de Haan $form = &$event->data['form']; 65d4abf4f0SJaap de Haan $data = base64_encode($TEXT); 66d4abf4f0SJaap de Haan 67f0ae282cSJaap de Haan $type = 'bpmn'; 68f0ae282cSJaap de Haan if ($event->data['target'] === 'plugin_bpmnio_dmn') 69f0ae282cSJaap de Haan $type = 'dmn'; 70f0ae282cSJaap de Haan 71962d7b81SJaap de Haan $form->setHiddenField('plugin_bpmnio_data', $data); 72962d7b81SJaap de Haan $form->addHTML(<<<HTML 73f0ae282cSJaap de Haan <div class="plugin-bpmnio" id="plugin_bpmnio__{$type}_editor"> 74f0ae282cSJaap de Haan <div class="{$type}_js_data">{$data}</div> 75f0ae282cSJaap de Haan <div class="{$type}_js_canvas"> 76f0ae282cSJaap de Haan <div class="{$type}_js_container"></div> 77d4abf4f0SJaap de Haan </div> 78d4abf4f0SJaap de Haan </div> 79d4abf4f0SJaap de Haan </div> 80d4abf4f0SJaap de Haan HTML); 81d4abf4f0SJaap de Haan 82d4abf4f0SJaap de Haan // used during previews 83962d7b81SJaap de Haan $form->setHiddenField('target', "plugin_bpmnio_{$type}"); 84962d7b81SJaap de Haan $form->setHiddenField('range', $RANGE); 85d4abf4f0SJaap de Haan } 86d4abf4f0SJaap de Haan 87a494ddccSgithub-actions[bot] public function handlePost(Event $event) 88d4abf4f0SJaap de Haan { 89d4abf4f0SJaap de Haan global $TEXT; 90d4abf4f0SJaap de Haan global $INPUT; 91d4abf4f0SJaap de Haan 92d4abf4f0SJaap de Haan if (!$INPUT->post->has('plugin_bpmnio_data')) return; 93d4abf4f0SJaap de Haan 94d4abf4f0SJaap de Haan $TEXT = base64_decode($INPUT->post->str('plugin_bpmnio_data')); 95d4abf4f0SJaap de Haan } 96d4abf4f0SJaap de Haan 97a494ddccSgithub-actions[bot] private function shallIgnore(Event $event) 98c4f02a6eSJaap de Haan { 99f0ae282cSJaap de Haan if ($event->data['target'] === 'plugin_bpmnio_bpmn') 100c4f02a6eSJaap de Haan return false; 101f0ae282cSJaap de Haan if ($event->data['target'] === 'plugin_bpmnio_dmn') 102f0ae282cSJaap de Haan return false; 103f0ae282cSJaap de Haan return true; 104c4f02a6eSJaap de Haan } 105c4f02a6eSJaap de Haan} 106