17390889dSMark Prins<?php 2*a760825cSgithub-actions[bot] 3*a760825cSgithub-actions[bot]use dokuwiki\Extension\SyntaxPlugin; 4*a760825cSgithub-actions[bot] 57390889dSMark Prins/* 67390889dSMark Prins * Copyright (c) 2017-2020 Mark C. Prins <mprins@users.sf.net> 77390889dSMark Prins * 87390889dSMark Prins * Permission to use, copy, modify, and distribute this software for any 97390889dSMark Prins * purpose with or without fee is hereby granted, provided that the above 107390889dSMark Prins * copyright notice and this permission notice appear in all copies. 117390889dSMark Prins * 127390889dSMark Prins * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 137390889dSMark Prins * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 147390889dSMark Prins * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 157390889dSMark Prins * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 167390889dSMark Prins * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 177390889dSMark Prins * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 187390889dSMark Prins * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 197390889dSMark Prins * 207390889dSMark Prins * @phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps 217390889dSMark Prins */ 227390889dSMark Prins/** 237390889dSMark Prins * adds a AGS layer to your map. 247390889dSMark Prins */ 25*a760825cSgithub-actions[bot]class syntax_plugin_openlayersmap_agslayer extends SyntaxPlugin 267390889dSMark Prins{ 27*a760825cSgithub-actions[bot] private $dflt = ['id' => 'olmap', 'name' => '', 'url' => '', 'opacity' => 0.8, 'attribution' => '', 'visible' => false, 'layers' => '', 'format' => 'png', 'transparent' => 'true', 'baselayer' => 'false']; 287390889dSMark Prins 297390889dSMark Prins /** 307390889dSMark Prins * (non-PHPdoc) 317390889dSMark Prins * 327390889dSMark Prins * @see DokuWiki_Syntax_Plugin::getPType() 337390889dSMark Prins */ 347390889dSMark Prins public function getPType(): string 357390889dSMark Prins { 367390889dSMark Prins return 'block'; 377390889dSMark Prins } 387390889dSMark Prins 397390889dSMark Prins /** 407390889dSMark Prins * (non-PHPdoc) 417390889dSMark Prins * 427390889dSMark Prins * @see DokuWiki_Syntax_Plugin::getType() 437390889dSMark Prins */ 447390889dSMark Prins public function getType(): string 457390889dSMark Prins { 467390889dSMark Prins // return 'FIXME: container|baseonly|formatting|substition|protected|disabled|paragraphs'; 477390889dSMark Prins return 'baseonly'; 487390889dSMark Prins } 497390889dSMark Prins 507390889dSMark Prins /** 517390889dSMark Prins * (non-PHPdoc) 527390889dSMark Prins * 537390889dSMark Prins * @see Doku_Parser_Mode::getSort() 547390889dSMark Prins */ 557390889dSMark Prins public function getSort(): int 567390889dSMark Prins { 577390889dSMark Prins return 904; 587390889dSMark Prins } 597390889dSMark Prins 607390889dSMark Prins /** 617390889dSMark Prins * Connect to our special pattern. 627390889dSMark Prins * 637390889dSMark Prins * @see Doku_Parser_Mode::connectTo() 647390889dSMark Prins */ 657390889dSMark Prins public function connectTo($mode): void 667390889dSMark Prins { 677390889dSMark Prins // look for: <olmap_agslayer id="olmap" name="cloud" 687390889dSMark Prins // url="http://geoservices2.wallonie.be/arcgis/rest/services/APP_KAYAK/KAYAK/MapServer/export" 697390889dSMark Prins // attribution="wallonie.be" visible="true" layers="show:0,1,2,3,4,7"></olmap_agslayer> 707390889dSMark Prins // sample: 717390889dSMark 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 727390889dSMark Prins $this->Lexer->addSpecialPattern( 737390889dSMark Prins '<olmap_agslayer ?[^>\n]*>.*?</olmap_agslayer>', 747390889dSMark Prins $mode, 757390889dSMark Prins 'plugin_openlayersmap_agslayer' 767390889dSMark Prins ); 777390889dSMark Prins } 787390889dSMark Prins 797390889dSMark Prins /** 807390889dSMark Prins * (non-PHPdoc) 817390889dSMark Prins * 827390889dSMark Prins * @see DokuWiki_Syntax_Plugin::handle() 837390889dSMark Prins */ 847390889dSMark Prins public function handle($match, $state, $pos, Doku_Handler $handler): array 857390889dSMark Prins { 86*a760825cSgithub-actions[bot] $param = []; 877390889dSMark Prins $data = $this->dflt; 887390889dSMark Prins 897390889dSMark Prins preg_match_all('/(\w*)="(.*?)"/us', $match, $param, PREG_SET_ORDER); 907390889dSMark Prins 917390889dSMark Prins foreach ($param as $kvpair) { 92*a760825cSgithub-actions[bot] [$matched, $key, $val] = $kvpair; 937390889dSMark Prins if (isset($data [$key])) { 947390889dSMark Prins $key = strtolower($key); 957390889dSMark Prins $data [$key] = $val; 967390889dSMark Prins } 977390889dSMark Prins } 987390889dSMark Prins return $data; 997390889dSMark Prins } 1007390889dSMark Prins 1017390889dSMark Prins /** 1027390889dSMark Prins * (non-PHPdoc) 1037390889dSMark Prins * 1047390889dSMark Prins * @see DokuWiki_Syntax_Plugin::render() 1057390889dSMark Prins */ 1067390889dSMark Prins public function render($format, Doku_Renderer $renderer, $data): bool 1077390889dSMark Prins { 1087390889dSMark Prins if ($format !== 'xhtml') { 1097390889dSMark Prins return false; 1107390889dSMark Prins } 1117390889dSMark Prins 1127390889dSMark Prins // incremented for each olmap_agslayer tag in the page source 1137390889dSMark Prins static $overlaynumber = 0; 1147390889dSMark Prins 1157390889dSMark Prins $renderer->doc .= DOKU_LF . '<script defer="defer" src="data:text/javascript;base64,'; 1167390889dSMark Prins $str = '{'; 1177390889dSMark Prins foreach ($data as $key => $val) { 1187390889dSMark Prins $str .= "'" . $key . "' : '" . $val . "',"; 1197390889dSMark Prins } 1207390889dSMark Prins $str .= "'type':'ags'}"; 1217390889dSMark Prins $renderer->doc .= base64_encode("olMapOverlays['ags" . $overlaynumber . "'] = " . $str . ";") 1227390889dSMark Prins . '"></script>'; 1237390889dSMark Prins $overlaynumber++; 1247390889dSMark Prins return true; 1257390889dSMark Prins } 1267390889dSMark Prins} 127