xref: /template/strap/action/linkmove.php (revision 5f891b7e09648e05e78f5882f3fdde1e9df9b0f1)
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