xref: /plugin/imagebox/action.php (revision d376f1989b6c8ca0a561419f7253726fb5dcaab8)
1438421f5Salexdraconian<?php
2438421f5Salexdraconian/**
3438421f5Salexdraconian * ImageBox's action component for supporting Move plugin.
4438421f5Salexdraconian *
5438421f5Salexdraconian * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
6438421f5Salexdraconian * @author     FFTiger <fftiger@wikisquare.com>, myst6re <myst6re@wikisquare.com>
7438421f5Salexdraconian */
8438421f5Salexdraconian
9438421f5Salexdraconianclass action_plugin_imagebox extends DokuWiki_Action_Plugin {
10438421f5Salexdraconian
11438421f5Salexdraconian    function register(Doku_Event_handler $controller) {
12438421f5Salexdraconian        $controller->register_hook('PLUGIN_MOVE_HANDLERS_REGISTER', 'BEFORE', $this, 'handle_move_register');
13438421f5Salexdraconian    }
14438421f5Salexdraconian
15438421f5Salexdraconian    public function handle_move_register(Doku_Event $event, $params) {
16438421f5Salexdraconian        $event->data['handlers']['imagebox'] = array($this, 'rewrite_imagebox');
17438421f5Salexdraconian    }
18438421f5Salexdraconian
19438421f5Salexdraconian    public function rewrite_imagebox($match, $state, $pos, $plugin, helper_plugin_move_handler $handler) {
20438421f5Salexdraconian
21438421f5Salexdraconian        // Only work on enter pattern. (Do not change description and exit pattern.)
22438421f5Salexdraconian        if (substr($match, 0, 3) != '[{{') return $match;
23438421f5Salexdraconian
24438421f5Salexdraconian        // Get pure syntax without markup.
25438421f5Salexdraconian        if (substr($match, -1) == '|') {
26438421f5Salexdraconian            $syntax = substr($match, 3, -1);
27438421f5Salexdraconian        } else {
28438421f5Salexdraconian            $syntax = substr($match, 3);
29438421f5Salexdraconian        }
30438421f5Salexdraconian
31*d376f198Salexdraconian        $left_blank = false;
32*d376f198Salexdraconian        $right_blank = false;
33*d376f198Salexdraconian        if (substr($syntax, 0, 1) == ' ') {
34*d376f198Salexdraconian            $left_blank = true;
35*d376f198Salexdraconian            $syntax = substr($syntax, 1);
36*d376f198Salexdraconian        }
37*d376f198Salexdraconian        if (substr($syntax, -1) == ' ') {
38*d376f198Salexdraconian            $right_blank = true;
39*d376f198Salexdraconian            $syntax = substr($syntax, 0, -1);
40*d376f198Salexdraconian        }
41*d376f198Salexdraconian
42438421f5Salexdraconian        list($src, $option) = array_pad(explode('?', $syntax, 2), 2, '');
43438421f5Salexdraconian
44438421f5Salexdraconian        // Resolve new source.
45438421f5Salexdraconian        if (method_exists($handler, 'adaptRelativeId')) {
46438421f5Salexdraconian            $new_src = $handler->adaptRelativeId($src);
47438421f5Salexdraconian        } else {
48438421f5Salexdraconian            $new_src = $handler->resolveMoves($src, 'media');
49438421f5Salexdraconian            $new_src = $handler->relativeLink($src, $new_src, 'media');
50438421f5Salexdraconian        }
51438421f5Salexdraconian
52438421f5Salexdraconian        if ($src == $new_src) {
53438421f5Salexdraconian            return $match;
54438421f5Salexdraconian        } else {
55438421f5Salexdraconian            // Construct result.
56*d376f198Salexdraconian            $result = '[{{';
57*d376f198Salexdraconian            if ($left_blank) $result .= ' ';
58*d376f198Salexdraconian            $result .= $new_src;
59438421f5Salexdraconian            if ($option) $result .= "?".$option;
60*d376f198Salexdraconian            if ($right_blank) $result .= ' ';
61438421f5Salexdraconian            $result .= "|";
62438421f5Salexdraconian
63438421f5Salexdraconian            return $result;
64438421f5Salexdraconian        }
65438421f5Salexdraconian
66438421f5Salexdraconian    }
67438421f5Salexdraconian
68438421f5Salexdraconian}
69438421f5Salexdraconian?>