xref: /plugin/openlayersmap/syntax/wmtslayer.php (revision a760825c0aa6eee7ec491397b3516b6237e4ad78)
1bea711feSMark Prins<?php
2*a760825cSgithub-actions[bot]
3*a760825cSgithub-actions[bot]use dokuwiki\Extension\SyntaxPlugin;
4*a760825cSgithub-actions[bot]
5bea711feSMark Prins/*
6bea711feSMark Prins * Copyright (c) 2023 Mark C. Prins <mprins@users.sf.net>
7bea711feSMark Prins *
8bea711feSMark Prins * Permission to use, copy, modify, and distribute this software for any
9bea711feSMark Prins * purpose with or without fee is hereby granted, provided that the above
10bea711feSMark Prins * copyright notice and this permission notice appear in all copies.
11bea711feSMark Prins *
12bea711feSMark Prins * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13bea711feSMark Prins * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14bea711feSMark Prins * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15bea711feSMark Prins * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16bea711feSMark Prins * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17bea711feSMark Prins * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18bea711feSMark Prins * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19bea711feSMark Prins *
20bea711feSMark Prins * @phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps
21bea711feSMark Prins */
22bea711feSMark Prins/**
23bea711feSMark Prins * adds a WMTS 1.0.0 layer to your map.
24bea711feSMark Prins */
25*a760825cSgithub-actions[bot]class syntax_plugin_openlayersmap_wmtslayer extends SyntaxPlugin
26bea711feSMark Prins{
27*a760825cSgithub-actions[bot]    private $dflt = ['id' => 'olmap', 'name' => '', 'url' => '', 'opacity' => 0.8, 'attribution' => '', 'visible' => false, 'layer' => '', 'matrixSet' => '', 'transparent' => 'true', 'baselayer' => 'false'];
28bea711feSMark Prins
29bea711feSMark Prins    /**
30bea711feSMark Prins     * (non-PHPdoc)
31bea711feSMark Prins     *
32bea711feSMark Prins     * @see DokuWiki_Syntax_Plugin::getPType()
33bea711feSMark Prins     */
34bea711feSMark Prins    final public function getPType(): string
35bea711feSMark Prins    {
36bea711feSMark Prins        return 'block';
37bea711feSMark Prins    }
38bea711feSMark Prins
39bea711feSMark Prins    /**
40bea711feSMark Prins     * (non-PHPdoc)
41bea711feSMark Prins     *
42bea711feSMark Prins     * @see DokuWiki_Syntax_Plugin::getType()
43bea711feSMark Prins     */
44bea711feSMark Prins    final public function getType(): string
45bea711feSMark Prins    {
46bea711feSMark Prins        return 'baseonly';
47bea711feSMark Prins    }
48bea711feSMark Prins
49bea711feSMark Prins    /**
50bea711feSMark Prins     * (non-PHPdoc)
51bea711feSMark Prins     *
52bea711feSMark Prins     * @see Doku_Parser_Mode::getSort()
53bea711feSMark Prins     */
54bea711feSMark Prins    final public function getSort(): int
55bea711feSMark Prins    {
56bea711feSMark Prins        return 902;
57bea711feSMark Prins    }
58bea711feSMark Prins
59bea711feSMark Prins    /**
60bea711feSMark Prins     * Connect to our special pattern.
61bea711feSMark Prins     *
62bea711feSMark Prins     * @see Doku_Parser_Mode::connectTo()
63bea711feSMark Prins     */
64bea711feSMark Prins    final public function connectTo($mode): void
65bea711feSMark Prins    {
66bea711feSMark Prins        // look for: <olmap_wmstlayer id="olmap" name="geolandbasemap" url="https://mapsneu.wien.gv.at/basemapneu/1.0.0/WMTSCapabilities.xml"
67bea711feSMark Prins        // attribution="basemap.at" visible="true" layer="geolandbasemap" matrixSet=google3857></olmap_wmtslayer>
68bea711feSMark Prins        $this->Lexer->addSpecialPattern(
69bea711feSMark Prins            '<olmap_wmtslayer ?[^>\n]*>.*?</olmap_wmtslayer>',
70bea711feSMark Prins            $mode,
71bea711feSMark Prins            'plugin_openlayersmap_wmtslayer'
72bea711feSMark Prins        );
73bea711feSMark Prins    }
74bea711feSMark Prins
75bea711feSMark Prins    /**
76bea711feSMark Prins     * (non-PHPdoc)
77bea711feSMark Prins     *
78bea711feSMark Prins     * @see DokuWiki_Syntax_Plugin::handle()
79bea711feSMark Prins     */
80bea711feSMark Prins    final public function handle($match, $state, $pos, Doku_Handler $handler): array
81bea711feSMark Prins    {
82*a760825cSgithub-actions[bot]        $param = [];
83bea711feSMark Prins        $data = $this->dflt;
84bea711feSMark Prins
85bea711feSMark Prins        preg_match_all('/(\w*)="(.*?)"/us', $match, $param, PREG_SET_ORDER);
86bea711feSMark Prins
87bea711feSMark Prins        foreach ($param as $kvpair) {
88*a760825cSgithub-actions[bot]            [$matched, $key, $val] = $kvpair;
89bea711feSMark Prins            if (isset($data [$key])) {
90bea711feSMark Prins                $key = strtolower($key);
91bea711feSMark Prins                $data [$key] = $val;
92bea711feSMark Prins            }
93bea711feSMark Prins        }
94bea711feSMark Prins        return $data;
95bea711feSMark Prins    }
96bea711feSMark Prins
97bea711feSMark Prins    /**
98bea711feSMark Prins     * (non-PHPdoc)
99bea711feSMark Prins     *
100bea711feSMark Prins     * @see DokuWiki_Syntax_Plugin::render()
101bea711feSMark Prins     */
102bea711feSMark Prins    final public function render($format, Doku_Renderer $renderer, $data): bool
103bea711feSMark Prins    {
104bea711feSMark Prins        if ($format !== 'xhtml') {
105bea711feSMark Prins            return false;
106bea711feSMark Prins        }
107bea711feSMark Prins
108bea711feSMark Prins        // incremented for each olmap_wmtslayer tag in the page source
109bea711feSMark Prins        static $overlaynumber = 0;
110bea711feSMark Prins
111bea711feSMark Prins        $renderer->doc .= DOKU_LF . '<script defer="defer" src="data:text/javascript;base64,';
112bea711feSMark Prins        $str = '{';
113bea711feSMark Prins        foreach ($data as $key => $val) {
114bea711feSMark Prins            $str .= "'" . $key . "':'" . $val . "', ";
115bea711feSMark Prins        }
116bea711feSMark Prins        $str .= "'type':'wmts'}";
117bea711feSMark Prins        $renderer->doc .= base64_encode("olMapOverlays['wmts" . $overlaynumber . "'] = " . $str . ";")
118bea711feSMark Prins            . '"></script>';
119bea711feSMark Prins        $overlaynumber++;
120bea711feSMark Prins        return true;
121bea711feSMark Prins    }
122bea711feSMark Prins}
123