X-Git-Url: https://git.toastfreeware.priv.at/philipp/winterrodeln/mediawiki_extensions/wrmap.git/blobdiff_plain/e9f44145f3de7445280102ed4d83fc4ffd08ea8a..b5cadae61249b1b09a304d748f94c1e28c79ada9:/wrmap.body.php diff --git a/wrmap.body.php b/wrmap.body.php index b380e9b..7b1f33c 100644 --- a/wrmap.body.php +++ b/wrmap.body.php @@ -3,11 +3,148 @@ 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"; + return wrMapReplaceByMarker($output); + } + + // returns a string that creates a map object called 'map' + private function addMap($mapName) { + return "\tmap = new GMap2(document.getElementById($mapName));\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_SATELLITE_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: /// ///