1*7390889dSMark Prins<?php 2*7390889dSMark Prins/* 3*7390889dSMark Prins * Copyright (c) 2017-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 AGS layer to your map. 22*7390889dSMark Prins */ 23*7390889dSMark Prinsclass syntax_plugin_openlayersmap_agslayer 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 'format' => 'png', 34*7390889dSMark Prins 'transparent' => 'true' 35*7390889dSMark Prins ); 36*7390889dSMark Prins 37*7390889dSMark Prins /** 38*7390889dSMark Prins * (non-PHPdoc) 39*7390889dSMark Prins * 40*7390889dSMark Prins * @see DokuWiki_Syntax_Plugin::getPType() 41*7390889dSMark Prins */ 42*7390889dSMark Prins public function getPType(): string 43*7390889dSMark Prins { 44*7390889dSMark Prins return 'block'; 45*7390889dSMark Prins } 46*7390889dSMark Prins 47*7390889dSMark Prins /** 48*7390889dSMark Prins * (non-PHPdoc) 49*7390889dSMark Prins * 50*7390889dSMark Prins * @see DokuWiki_Syntax_Plugin::getType() 51*7390889dSMark Prins */ 52*7390889dSMark Prins public function getType(): string 53*7390889dSMark Prins { 54*7390889dSMark Prins // return 'FIXME: container|baseonly|formatting|substition|protected|disabled|paragraphs'; 55*7390889dSMark Prins return 'baseonly'; 56*7390889dSMark Prins } 57*7390889dSMark Prins 58*7390889dSMark Prins /** 59*7390889dSMark Prins * (non-PHPdoc) 60*7390889dSMark Prins * 61*7390889dSMark Prins * @see Doku_Parser_Mode::getSort() 62*7390889dSMark Prins */ 63*7390889dSMark Prins public function getSort(): int 64*7390889dSMark Prins { 65*7390889dSMark Prins return 904; 66*7390889dSMark Prins } 67*7390889dSMark Prins 68*7390889dSMark Prins /** 69*7390889dSMark Prins * Connect to our special pattern. 70*7390889dSMark Prins * 71*7390889dSMark Prins * @see Doku_Parser_Mode::connectTo() 72*7390889dSMark Prins */ 73*7390889dSMark Prins public function connectTo($mode): void 74*7390889dSMark Prins { 75*7390889dSMark Prins // look for: <olmap_agslayer id="olmap" name="cloud" 76*7390889dSMark Prins // url="http://geoservices2.wallonie.be/arcgis/rest/services/APP_KAYAK/KAYAK/MapServer/export" 77*7390889dSMark Prins // attribution="wallonie.be" visible="true" layers="show:0,1,2,3,4,7"></olmap_agslayer> 78*7390889dSMark Prins // sample: 79*7390889dSMark Prins // http://geoservices2.wallonie.be/arcgis/rest/services/APP_KAYAK/KAYAK/MapServer/export?LAYERS=show%3A0%2C1%2C2%2C3%2C4%2C7&TRANSPARENT=true&FORMAT=png&BBOX=643294.029959%2C6467184.088252%2C645740.014863%2C6469630.073157&SIZE=256%2C256&F=html&BBOXSR=3857&IMAGESR=3857 80*7390889dSMark Prins $this->Lexer->addSpecialPattern( 81*7390889dSMark Prins '<olmap_agslayer ?[^>\n]*>.*?</olmap_agslayer>', 82*7390889dSMark Prins $mode, 83*7390889dSMark Prins 'plugin_openlayersmap_agslayer' 84*7390889dSMark Prins ); 85*7390889dSMark Prins } 86*7390889dSMark Prins 87*7390889dSMark Prins /** 88*7390889dSMark Prins * (non-PHPdoc) 89*7390889dSMark Prins * 90*7390889dSMark Prins * @see DokuWiki_Syntax_Plugin::handle() 91*7390889dSMark Prins */ 92*7390889dSMark Prins public function handle($match, $state, $pos, Doku_Handler $handler): array 93*7390889dSMark Prins { 94*7390889dSMark Prins $param = array(); 95*7390889dSMark Prins $data = $this->dflt; 96*7390889dSMark Prins 97*7390889dSMark Prins preg_match_all('/(\w*)="(.*?)"/us', $match, $param, PREG_SET_ORDER); 98*7390889dSMark Prins 99*7390889dSMark Prins foreach ($param as $kvpair) { 100*7390889dSMark Prins list ($matched, $key, $val) = $kvpair; 101*7390889dSMark Prins if (isset ($data [$key])) { 102*7390889dSMark Prins $key = strtolower($key); 103*7390889dSMark Prins $data [$key] = $val; 104*7390889dSMark Prins } 105*7390889dSMark Prins } 106*7390889dSMark Prins return $data; 107*7390889dSMark Prins } 108*7390889dSMark Prins 109*7390889dSMark Prins /** 110*7390889dSMark Prins * (non-PHPdoc) 111*7390889dSMark Prins * 112*7390889dSMark Prins * @see DokuWiki_Syntax_Plugin::render() 113*7390889dSMark Prins */ 114*7390889dSMark Prins public function render($format, Doku_Renderer $renderer, $data): bool 115*7390889dSMark Prins { 116*7390889dSMark Prins if ($format !== 'xhtml') { 117*7390889dSMark Prins return false; 118*7390889dSMark Prins } 119*7390889dSMark Prins 120*7390889dSMark Prins // incremented for each olmap_agslayer tag in the page source 121*7390889dSMark Prins static $overlaynumber = 0; 122*7390889dSMark Prins 123*7390889dSMark Prins list ($id, $url, $name, $visible) = $data; 124*7390889dSMark Prins $renderer->doc .= DOKU_LF . '<script defer="defer" src="data:text/javascript;base64,'; 125*7390889dSMark Prins $str = '{'; 126*7390889dSMark Prins foreach ($data as $key => $val) { 127*7390889dSMark Prins $str .= "'" . $key . "' : '" . $val . "',"; 128*7390889dSMark Prins } 129*7390889dSMark Prins $str .= "'type':'ags'}"; 130*7390889dSMark Prins $renderer->doc .= base64_encode("olMapOverlays['ags" . $overlaynumber . "'] = " . $str . ";") 131*7390889dSMark Prins . '"></script>'; 132*7390889dSMark Prins $overlaynumber++; 133*7390889dSMark Prins return true; 134*7390889dSMark Prins } 135*7390889dSMark Prins} 136