1*7390889dSMark Prins<?php 2*7390889dSMark Prins/* 3*7390889dSMark Prins * Copyright (c) 2012-2020 Mark C. Prins <mprins@users.sf.net> 4*7390889dSMark Prins * 5*7390889dSMark Prins * Permission to use, copy, modify, and distribute this software for any 6*7390889dSMark Prins * purpose with or without fee is hereby granted, provided that the above 7*7390889dSMark Prins * copyright notice and this permission notice appear in all copies. 8*7390889dSMark Prins * 9*7390889dSMark Prins * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10*7390889dSMark Prins * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11*7390889dSMark Prins * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12*7390889dSMark Prins * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13*7390889dSMark Prins * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14*7390889dSMark Prins * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15*7390889dSMark Prins * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16*7390889dSMark Prins * 17*7390889dSMark Prins * @phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps 18*7390889dSMark Prins */ 19*7390889dSMark Prins 20*7390889dSMark Prins/** 21*7390889dSMark Prins * adds a WMS 1.3.0 layer to your map. 22*7390889dSMark Prins */ 23*7390889dSMark Prinsclass syntax_plugin_openlayersmap_wmslayer extends DokuWiki_Syntax_Plugin 24*7390889dSMark Prins{ 25*7390889dSMark Prins private $dflt = array( 26*7390889dSMark Prins 'id' => 'olmap', 27*7390889dSMark Prins 'name' => '', 28*7390889dSMark Prins 'url' => '', 29*7390889dSMark Prins 'opacity' => 0.8, 30*7390889dSMark Prins 'attribution' => '', 31*7390889dSMark Prins 'visible' => false, 32*7390889dSMark Prins 'layers' => '', 33*7390889dSMark Prins 'version' => '1.3.0', 34*7390889dSMark Prins 'format' => 'image/png', 35*7390889dSMark Prins 'transparent' => 'true' 36*7390889dSMark Prins ); 37*7390889dSMark Prins 38*7390889dSMark Prins /** 39*7390889dSMark Prins * (non-PHPdoc) 40*7390889dSMark Prins * 41*7390889dSMark Prins * @see DokuWiki_Syntax_Plugin::getPType() 42*7390889dSMark Prins */ 43*7390889dSMark Prins public function getPType(): string 44*7390889dSMark Prins { 45*7390889dSMark Prins return 'block'; 46*7390889dSMark Prins } 47*7390889dSMark Prins 48*7390889dSMark Prins /** 49*7390889dSMark Prins * (non-PHPdoc) 50*7390889dSMark Prins * 51*7390889dSMark Prins * @see DokuWiki_Syntax_Plugin::getType() 52*7390889dSMark Prins */ 53*7390889dSMark Prins public function getType(): string 54*7390889dSMark Prins { 55*7390889dSMark Prins // return 'FIXME: container|baseonly|formatting|substition|protected|disabled|paragraphs'; 56*7390889dSMark Prins return 'baseonly'; 57*7390889dSMark Prins } 58*7390889dSMark Prins 59*7390889dSMark Prins /** 60*7390889dSMark Prins * (non-PHPdoc) 61*7390889dSMark Prins * 62*7390889dSMark Prins * @see Doku_Parser_Mode::getSort() 63*7390889dSMark Prins */ 64*7390889dSMark Prins public function getSort(): int 65*7390889dSMark Prins { 66*7390889dSMark Prins return 902; 67*7390889dSMark Prins } 68*7390889dSMark Prins 69*7390889dSMark Prins /** 70*7390889dSMark Prins * Connect to our special pattern. 71*7390889dSMark Prins * 72*7390889dSMark Prins * @see Doku_Parser_Mode::connectTo() 73*7390889dSMark Prins */ 74*7390889dSMark Prins public function connectTo($mode): void 75*7390889dSMark Prins { 76*7390889dSMark Prins // look for: <olmap_wmslayer id="olmap" name="cloud" url="http://openweathermap.org/t/tile.cgi?SERVICE=WMS" 77*7390889dSMark Prins // attribution="OpenWeatherMap" visible="true" layers="GLBETA_PR"></olmap_wmslayer> 78*7390889dSMark Prins $this->Lexer->addSpecialPattern( 79*7390889dSMark Prins '<olmap_wmslayer ?[^>\n]*>.*?</olmap_wmslayer>', 80*7390889dSMark Prins $mode, 81*7390889dSMark Prins 'plugin_openlayersmap_wmslayer' 82*7390889dSMark Prins ); 83*7390889dSMark Prins } 84*7390889dSMark Prins 85*7390889dSMark Prins /** 86*7390889dSMark Prins * (non-PHPdoc) 87*7390889dSMark Prins * 88*7390889dSMark Prins * @see DokuWiki_Syntax_Plugin::handle() 89*7390889dSMark Prins */ 90*7390889dSMark Prins public function handle($match, $state, $pos, Doku_Handler $handler): array 91*7390889dSMark Prins { 92*7390889dSMark Prins $param = array(); 93*7390889dSMark Prins $data = $this->dflt; 94*7390889dSMark Prins 95*7390889dSMark Prins preg_match_all('/(\w*)="(.*?)"/us', $match, $param, PREG_SET_ORDER); 96*7390889dSMark Prins 97*7390889dSMark Prins foreach ($param as $kvpair) { 98*7390889dSMark Prins list ($matched, $key, $val) = $kvpair; 99*7390889dSMark Prins if (isset ($data [$key])) { 100*7390889dSMark Prins $key = strtolower($key); 101*7390889dSMark Prins $data [$key] = $val; 102*7390889dSMark Prins } 103*7390889dSMark Prins } 104*7390889dSMark Prins // dbglog($data,'syntax_plugin_overlayer::handle: parsed data is:'); 105*7390889dSMark Prins return $data; 106*7390889dSMark Prins } 107*7390889dSMark Prins 108*7390889dSMark Prins /** 109*7390889dSMark Prins * (non-PHPdoc) 110*7390889dSMark Prins * 111*7390889dSMark Prins * @see DokuWiki_Syntax_Plugin::render() 112*7390889dSMark Prins */ 113*7390889dSMark Prins public function render($format, Doku_Renderer $renderer, $data): bool 114*7390889dSMark Prins { 115*7390889dSMark Prins if ($format !== 'xhtml') { 116*7390889dSMark Prins return false; 117*7390889dSMark Prins } 118*7390889dSMark Prins 119*7390889dSMark Prins // incremented for each olmap_wmslayer tag in the page source 120*7390889dSMark Prins static $overlaynumber = 0; 121*7390889dSMark Prins 122*7390889dSMark Prins list ($id, $url, $name, $visible) = $data; 123*7390889dSMark Prins $renderer->doc .= DOKU_LF . '<script defer="defer" src="data:text/javascript;base64,'; 124*7390889dSMark Prins $str = '{'; 125*7390889dSMark Prins foreach ($data as $key => $val) { 126*7390889dSMark Prins $str .= "'" . $key . "' : '" . $val . "',"; 127*7390889dSMark Prins } 128*7390889dSMark Prins $str .= "'type':'wms'}"; 129*7390889dSMark Prins $renderer->doc .= base64_encode("olMapOverlays['wms" . $overlaynumber . "'] = " . $str . ";") 130*7390889dSMark Prins . '"></script>'; 131*7390889dSMark Prins $overlaynumber++; 132*7390889dSMark Prins return true; 133*7390889dSMark Prins } 134*7390889dSMark Prins}