X-Git-Url: https://git.toastfreeware.priv.at/philipp/winterrodeln/mediawiki_extensions/wrmap.git/blobdiff_plain/f3b8b4b4ab76ee5a8ea7589f5f69718f8b82609d..51d88bd547d68036d79e43db3df92ff8660ff546:/wrmap.body.php diff --git a/wrmap.body.php b/wrmap.body.php index da1a7f0..05e0b11 100644 --- a/wrmap.body.php +++ b/wrmap.body.php @@ -3,11 +3,146 @@ require_once dirname(__FILE__) . '/../wrgeo/wrgeo.body.php'; # for the function function wrMapParserFirstCallInit() { global $wgParser; + // global $wrGoogleMaps; // is this necessary? + global $wgGoogleMapsKey; + $wrGoogleMaps = new WrGoogleMaps($wgGoogleMapsKey); $wgParser->setHook('wrmap', 'wrmapParserHook'); + $wgParser->setHook('wrgmap', array($wrGoogleMaps, 'render')); return true; } +// Tool functions +// -------------- + +/// List of markers - used by the functions wrMapReplaceByMarker and wrMapAfterTidy +$wrMapMarkerList = array(); + + +/// Returns a marker for a text and back-replaces the text in wrReportAfterTidy +function wrMapReplaceByMarker($text, $marker = 'wrMapMarker') { + $marker = $marker . mt_rand(1e5, 1e7); + global $wrMapMarkerList; + $wrMapMarkerList[$marker] = $text; + return $marker; +} + + +/// Replaces the markers by its contents +function wrMapParserAfterTidy(&$parser, &$text) { + // find markers in $text + // replace markers with actual output + global $wrMapMarkerList; + foreach ($wrMapMarkerList as $marker => $html) $text = str_replace($marker, $html, $text); + return true; +} + + + +// Java script +// ----------- + +// Global JavaScript functions +define(WRGMAPJSFUNCTIONS, << +//" + name + "");}); + return marker; +} +//]]> + +JAVASCRIPT +); + + +/** This class was inpired by the GoogleMaps class of the GoogleMaps extension. */ +class WrGoogleMaps { + /// the Google API key (obtained from + /// http://www.google.com/apis/maps/signup.html) + private $apiKey = null; + + /// How many tags are on the current page? + private $mapsCount = 0; + + /// Constructor + function WrGoogleMaps($apiKey) { + $this->apiKey = $apiKey; + } + + /// Renders the tag + /// @param $content string - the content of the tag + /// @param $args array - the array of attribute name/value pairs for the tag + /// @param $parser Parser - the MW Parser object for the current page + /// @param $localParser Parser - the parser for parsing local content + /// + /// @return string - the html for rendering the map + function render($content, $args, &$parser) { + ++$this->mapsCount; + + // Query database + $dbr = wfGetDB(DB_SLAVE); + $res = $dbr->select('wrsleddingcache', array('page_title', 'position_latitude', 'position_longitude')); + $sleddingRoutes = array(); + while ($sleddingRoute = $dbr->fetchRow($res)) $sleddingRoutes[] = $sleddingRoute; + $dbr->freeResult($res); + + // Load Google Maps Script and define functions + $output = ''; + if ($this->mapsCount == 1) { + $output .= '' . "\n"; + $output .= WRGMAPJSFUNCTIONS; + } + + // Create
element where the map is placed in + $mapName = 'wrgmap' . $this->mapsCount; + $output .= '
'; + + // Return output + $output .= '\n"; + return wrMapReplaceByMarker($output); + } + + // returns a string that creates a map object called 'map' + private function addMap($mapName) { + return "\tvar map = new GMap2(document.getElementById('$mapName'), {'mapTypes': [G_NORMAL_MAP, G_HYBRID_MAP, G_PHYSICAL_MAP, G_SATELLITE_MAP]});\n" . + "\tmap.addControl(new GLargeMapControl());\n" . + "\tmap.addControl(new GMapTypeControl());\n" . + "\tmap.addControl(new GScaleControl());\n" . + "\tmap.setCenter(new GLatLng(47.267648, 11.404655), 10);\n" . + "\tmap.setMapType(G_PHYSICAL_MAP);\n" . + "\tmap.enableScrollWheelZoom();\n"; + } + + // returns a string with a add marker javascript call + private function addJsMarker($latitude, $longitude, $pageTitle) { + return "\tmap.addOverlay(wrCreateMarker($latitude, $longitude, \"" . htmlspecialchars(addslashes($pageTitle)) . "\", wrSleddingIcon));\n"; + } + +} + + /// Format inside ... has to be like this: /// /// @@ -23,7 +158,7 @@ function wrMapParserFirstCallInit() { /// Die Naviser Hütte /// function wrmapParserHook($input, $args, $parser) { - $debug = (isset($args['debug'])); + $debug = (isset($args['debug']) && $args['debug'] != '0'); $output = ''; $lines = explode("\n", $input); @@ -36,6 +171,7 @@ function wrmapParserHook($input, $args, $parser) { $columns = explode('|', $line); if (count($columns) != 3) throw new Exception(sprintf(utf8_encode('Die Anzahl der Spalten ist nicht 3 sondern %d'), count($columns))); $columns = list($type, $geo, $name) = $columns; + if (strlen(trim($geo)) == 0) continue; list($latitude, $longitude) = wrGeoStringToGeo($geo); $latitudes[] = $latitude; $longitudes[] = $longitude; @@ -53,20 +189,8 @@ function wrmapParserHook($input, $args, $parser) { // TODO: Varable zoom level $output = ''. "\n" . $output . "\n"; - if ($debug) return $output = "
$output
"; - - /* - global $wgTitle, $wgUser; - $parser = new Parser(); - $parserOptions = new ParserOptions(); - $parserOptions->initialiseFromUser($wgUser); - $result = $parser->parse($output, $wgTitle, $parserOptions); // TODO: Make this call less complicated - return $result->getText(); - */ - - $output = $parser->recursiveTagParse($output); // TODO: Maybe this is already the solution? - - return $output; + if ($debug) return "
$output
\n"; + return $parser->recursiveTagParse($output); }