<?php SDV($CacheDir,"$FarmD/pub/address_cache"); SDVA($MapDefaults, array( 'id' => 'map', 'style'=>'"width: 85%; height: 400px; text-align: center;"' ) ); SDVA($MarkerDefaults, array( 'id' => 'map' ) ); Markup('map', '>if', '/\(:Google-Map\s*(.*?):\)/e',"google_map('$1');"); Markup('marker', '<map', '/\(:Google-Marker\s*(.*?):\)/e',"google_marker('$1');"); function _quote($s){return "'".$s."'";} function google_map($args) { global $MarkupFrame, $MapCode,$MapDefaults; $opts = array_merge($MapDefaults,parseArgs($args)); unset($opts['#']); if (!$MarkupFrame[0]['posteval']['Google-Map']) $MarkupFrame[0]['posteval']['Google-Map'] = 'GoogleMapScript();'; $MapCode.=<<<MAPCODE var {$opts['id']} = new google.maps.Map(document.getElementById('{$opts['id']}'), { zoom: 0, center: new google.maps.LatLng(0, 0), mapTypeId: google.maps.MapTypeId.ROADMAP }); MAPCODE; $div='<div'; foreach($opts as $k=>$v) $div.=" $k=".stripslashes($v); $div.="></div>"; return(Keep($div)); } function google_marker($args) { global $MarkerCode,$MarkerDefaults; $opts = array_merge($MarkerDefaults,parseArgs($args)); $opts['text'] = preg_replace('/</','<', $opts['text']); $opts['text'] = preg_replace('/>/','>', $opts['text']); $opts['text'] = _quote($opts['text']); $opts['icon'] = stripslashes($opts['icon']); $MarkerCode.="\nAddMarker({$opts['id']},{$opts['lat']},{$opts['lon']},{$opts['text']},{$opts['icon']});"; return(''); } function GoogleMapScript() { global $HTMLHeaderFmt, $HTMLStylesFmt, $HTMLFooterFmt, $MapCode, $MarkerCode; $HTMLHeaderFmt[] = '<style type=\'text/css\'>v:* { behavior:url(#default#VML); }</style>' ."\n<script src='http://maps.google.com/maps/api/js?sensor=false' type='text/javascript'></script>"; $HTMLHeaderFmt[] = "\n<script language='javascript' src='\$FarmPubDirUrl/GoogleMapsv3.js'>" ."</script>\n"; $HTMLFooterFmt['google-maps'] =<<<SCRIPT <script type="text/javascript"> var from_htmls = []; var htmls = []; var markers = []; var to_htmls = []; var i = 0; var bounds = new google.maps.LatLngBounds(); var infowindow = new google.maps.InfoWindow(); $MapCode $MarkerCode </script> SCRIPT; } function AddressLookup($a) { if (!is_string($a) or !$a) return false; global $CacheDir; $fname = preg_replace("/\/\//", "/", "$CacheDir/".md5($a).".txt"); if ($CacheDir && file_exists($fname)) { $f = fopen($fname, 'r'); if ($f) { $_coords = unserialize(fread($f, filesize($fname))); fclose($f); return $_coords; } } $_url = sprintf('http://maps.google.com/maps?output=js&q=%s',rawurlencode($a)); $_result = false; $_coords = false; if($_result = file_get_contents($_url)) { if(strpos($_result,'errortips') > 1 || strpos($_result,'Did you mean:') !== false) return false; preg_match('!center:\s*{lat:\s*(-?\d+\.\d+),lng:\s*(-?\d+\.\d+)}!U', $_result, $_match); if($_match){ $_coords['lat'] = $_match[1]; $_coords['lon'] = $_match[2]; $f = fopen($fname, 'w'); if($f){ fwrite($f,serialize($_coords)); fclose($f); } } } return $_coords; }