1007225e5Sgerardnico<?php 2007225e5Sgerardnico 3007225e5Sgerardnicouse ComboStrap\LinkUtility; 4007225e5Sgerardnicouse ComboStrap\PluginUtility; 5007225e5Sgerardnico 6007225e5Sgerardnicoif (!defined('DOKU_INC')) die(); 7007225e5Sgerardnicorequire_once(__DIR__ . '/../class/PluginUtility.php'); 8007225e5Sgerardnicorequire_once(__DIR__ . '/../class/LinkUtility.php'); 9007225e5Sgerardnico 10007225e5Sgerardnico/** 11007225e5Sgerardnico * Class action_plugin_combo_move 12007225e5Sgerardnico * Handle the move of a page in order to update the link 13007225e5Sgerardnico */ 14007225e5Sgerardnicoclass action_plugin_combo_linkmove extends DokuWiki_Action_Plugin 15007225e5Sgerardnico{ 16007225e5Sgerardnico 17007225e5Sgerardnico /** 18007225e5Sgerardnico * As explained https://www.dokuwiki.org/plugin:move 19007225e5Sgerardnico * @param Doku_Event_Handler $controller 20007225e5Sgerardnico */ 21007225e5Sgerardnico function register(Doku_Event_Handler $controller) 22007225e5Sgerardnico { 23007225e5Sgerardnico $controller->register_hook('PLUGIN_MOVE_HANDLERS_REGISTER', 'BEFORE', $this, 'handle_move', array()); 24007225e5Sgerardnico } 25007225e5Sgerardnico 26007225e5Sgerardnico /** 27007225e5Sgerardnico * Handle the move of a page 28007225e5Sgerardnico * @param Doku_Event $event 29007225e5Sgerardnico * @param $params 30007225e5Sgerardnico */ 31007225e5Sgerardnico function handle_move(Doku_Event $event, $params) 32007225e5Sgerardnico { 33007225e5Sgerardnico /** 34ef295d81Sgerardnico * The handlers is the name of the component (ie refers to the {@link syntax_plugin_combo_link} handler) 35ef295d81Sgerardnico * and 'rewrite_combo' to the below method 36007225e5Sgerardnico */ 37ef295d81Sgerardnico $event->data['handlers'][syntax_plugin_combo_link::COMPONENT] = array($this, 'rewrite_combo'); 38007225e5Sgerardnico } 39007225e5Sgerardnico 40007225e5Sgerardnico /** 41007225e5Sgerardnico * 42007225e5Sgerardnico * @param $match 43007225e5Sgerardnico * @param $state 44007225e5Sgerardnico * @param $pos 45007225e5Sgerardnico * @param $plugin 46007225e5Sgerardnico * @param helper_plugin_move_handler $handler 47007225e5Sgerardnico */ 48007225e5Sgerardnico public function rewrite_combo($match, $state, $pos, $plugin, helper_plugin_move_handler $handler) 49007225e5Sgerardnico { 50007225e5Sgerardnico /** 51*5f891b7eSNickeau * The original move method 52*5f891b7eSNickeau * is {@link helper_plugin_move_handler::internallink()} 53*5f891b7eSNickeau * 54007225e5Sgerardnico */ 55*5f891b7eSNickeau if ($state == DOKU_LEXER_ENTER) { 56*5f891b7eSNickeau $ref = LinkUtility::parse($match)[LinkUtility::ATTRIBUTE_REF]; 57*5f891b7eSNickeau $link = new LinkUtility($ref); 58*5f891b7eSNickeau if ($link->getType() == LinkUtility::TYPE_INTERNAL) { 59007225e5Sgerardnico 60*5f891b7eSNickeau $handler->internallink($match, $state, $pos); 61*5f891b7eSNickeau $suffix = "]]"; 62*5f891b7eSNickeau $suffixStartPosition = strlen($handler->calls) - strlen($suffix); 63*5f891b7eSNickeau if (strpos($handler->calls, $suffix) === $suffixStartPosition) { 64*5f891b7eSNickeau $handler->calls = substr($handler->calls ,0,$suffixStartPosition); 65*5f891b7eSNickeau } 66*5f891b7eSNickeau 67*5f891b7eSNickeau } else { 68*5f891b7eSNickeau 69*5f891b7eSNickeau // Other type of links 70*5f891b7eSNickeau $handler->calls .= $match; 71*5f891b7eSNickeau 72*5f891b7eSNickeau } 73*5f891b7eSNickeau } else { 74*5f891b7eSNickeau 75*5f891b7eSNickeau // Description and ending 76*5f891b7eSNickeau $handler->calls .= $match; 77*5f891b7eSNickeau 78*5f891b7eSNickeau } 79007225e5Sgerardnico } 80007225e5Sgerardnico 81007225e5Sgerardnico 82007225e5Sgerardnico} 83