1007225e5Sgerardnico<?php 2007225e5Sgerardnico 3007225e5Sgerardnicouse ComboStrap\LinkUtility; 4007225e5Sgerardnicouse ComboStrap\PluginUtility; 5007225e5Sgerardnico 6007225e5Sgerardnicoif (!defined('DOKU_INC')) die(); 7*37748cd8SNickeaurequire_once(__DIR__ . '/../ComboStrap/PluginUtility.php'); 8*37748cd8SNickeaurequire_once(__DIR__ . '/../ComboStrap/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 /** 18531e725cSNickeau * As explained https://www.dokuwiki.org/plugin:move#support_for_other_plugins 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 /** 515f891b7eSNickeau * The original move method 525f891b7eSNickeau * is {@link helper_plugin_move_handler::internallink()} 535f891b7eSNickeau * 54007225e5Sgerardnico */ 555f891b7eSNickeau if ($state == DOKU_LEXER_ENTER) { 565f891b7eSNickeau $ref = LinkUtility::parse($match)[LinkUtility::ATTRIBUTE_REF]; 575f891b7eSNickeau $link = new LinkUtility($ref); 585f891b7eSNickeau if ($link->getType() == LinkUtility::TYPE_INTERNAL) { 59007225e5Sgerardnico 605f891b7eSNickeau $handler->internallink($match, $state, $pos); 615f891b7eSNickeau $suffix = "]]"; 6221913ab3SNickeau if (substr($handler->calls, -strlen($suffix)) == $suffix) { 6321913ab3SNickeau $handler->calls = substr($handler->calls, 0, strlen($handler->calls) - strlen($suffix)); 645f891b7eSNickeau } 655f891b7eSNickeau 665f891b7eSNickeau } else { 675f891b7eSNickeau 685f891b7eSNickeau // Other type of links 695f891b7eSNickeau $handler->calls .= $match; 705f891b7eSNickeau 715f891b7eSNickeau } 725f891b7eSNickeau } else { 735f891b7eSNickeau 745f891b7eSNickeau // Description and ending 755f891b7eSNickeau $handler->calls .= $match; 765f891b7eSNickeau 775f891b7eSNickeau } 78007225e5Sgerardnico } 79007225e5Sgerardnico 80007225e5Sgerardnico 81007225e5Sgerardnico} 82