--- a/busui/common.inc.php +++ b/busui/common.inc.php @@ -3,38 +3,115 @@ $APIurl = "http://localhost:8765"; error_reporting(E_ALL ^ E_NOTICE); +// SELECT array_to_string(array(SELECT REPLACE(name_2006, ',', '\,') as name FROM suburbs order by name), ',') +$suburbs = explode(",","Acton,Ainslie,Amaroo,Aranda,Banks,Barton,Belconnen,Bonner,Bonython,Braddon,Bruce,Calwell,Campbell,Chapman,Charnwood,Chifley,Chisholm,City,Conder,Cook,Curtin,Deakin,Dickson,Downer,Duffy,Dunlop,Evatt,Fadden,Farrer,Fisher,Florey,Flynn,Forrest,Franklin,Fraser,Fyshwick,Garran,Gilmore,Giralang,Gordon,Gowrie,Greenway,Griffith,Gungahlin,Hackett,Hall,Harrison,Hawker,Higgins,Holder,Holt,Hughes,Hume,Isaacs,Isabella Plains,Kaleen,Kambah,Kingston,Latham,Lawson,Lyneham,Lyons,Macarthur,Macgregor,Macquarie,Mawson,McKellar,Melba,Mitchell,Monash,Narrabundah,Ngunnawal,Nicholls,Oaks Estate,O'Connor,O'Malley,Oxley,Page,Palmerston,Parkes,Pearce,Phillip,Pialligo,Red Hill,Reid,Richardson,Rivett,Russell,Scullin,Spence,Stirling,Symonston,Tharwa,Theodore,Torrens,Turner,Wanniassa,Waramanga,Watson,Weetangera,Weston,Yarralumla"); + + // you have to open the session to be able to modify or remove it +session_start(); + + function isDebug() { - return true; -} - + return $_SERVER['SERVER_NAME'] == "10.0.1.154" || $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || !$_SERVER['SERVER_NAME']; +} + +function debug($msg) { + if (isDebug()) echo ""; +} function isFastDevice() { return true; } function include_header($pageTitle, $opendiv = true, $geolocate = false) { + // this starts the session + session_start(); + // if (isDebug()) // set php error level high echo ' - bus.lambdacomplex.org - '.$pageTitle.' - - - - + busness time - '.$pageTitle.' + '; + if (isDebug()) echo ' + + '; + else echo ' + + '; +echo ' + + + + + + - - + '; + if ($geolocate) { +echo " "; + } +echo ' '; if ($opendiv) echo '

'.$pageTitle.'

- Home
'; } @@ -44,8 +121,12 @@ echo '
'; } +$service_periods = Array ('sunday','saturday','weekday'); + function service_period() { +if (isset($_SESSION['service_period'])) return $_SESSION['service_period']; + switch (date('w')){ case 0: @@ -57,24 +138,39 @@ } } +function remove_spaces($string) +{ + return str_replace(' ','',$string); +} + function midnight_seconds() { // from http://www.perturb.org/display/Perlfunc__Seconds_Since_Midnight.html - $secs = (date("G") * 3600) + (date("i") * 60) + date("s"); - return $secs; +if (isset($_SESSION['time'])) { + $time = mkdate($_SESSION['time']); + return (date("G",$time) * 3600) + (date("i",$time) * 60) + date("s",$time); + } + return (date("G") * 3600) + (date("i") * 60) + date("s"); } function midnight_seconds_to_time($seconds) { +if ($seconds > 0) { $midnight = mktime (0, 0, 0, date("n"), date("j"), date("Y")); return date("h:ia",$midnight+$seconds); +} else { +return ""; +} } function getPage($url) { + debug($url); $ch = curl_init($url); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( $ch, CURLOPT_HEADER, 0 ); + curl_setopt($ch,CURLOPT_TIMEOUT,30); $page = curl_exec($ch); + if(curl_errno($ch)) echo " Database temporarily unavailable: ".curl_errno($ch)." ".curl_error($ch).""; curl_close($ch); return $page; } @@ -87,31 +183,71 @@ return $f; } -function staticmap($mapPoints) +function staticmap($mapPoints, $zoom = 0, $markerImage = "iconb") { $width = 300; $height = 300; -$zoom = 0; +$metersperpixel[9]=305.492*$width; +$metersperpixel[10]=152.746*$width; +$metersperpixel[11]=76.373*$width; +$metersperpixel[12]=38.187*$width; +$metersperpixel[13]=19.093*$width; +$metersperpixel[14]=9.547*$width; +$metersperpixel[15]=4.773*$width; +$metersperpixel[16]=2.387*$width; +// $metersperpixel[17]=1.193*$width; $center = ""; $markers = ""; - - if (sizeof($mapPoints) < 1) return ""; +$minlat = 999; +$minlon = 999; +$maxlat = 0; +$maxlon = 0; + + if (sizeof($mapPoints) < 1) return "map error"; if (sizeof($mapPoints) === 1) { - $zoom = 14; - $markers .= $mapPoint[0].",".$mapPoint[1].",ol-marker"; + if ($zoom == 0) $zoom = 14; + $markers .= "{$mapPoints[0][0]},{$mapPoints[0][1]},$markerimage"; $center = "{$mapPoints[0][0]},{$mapPoints[0][1]}"; } else { foreach ($mapPoints as $index => $mapPoint) { - $markers .= $mapPoint[0].",".$mapPoint[1].",lightblue".($index+1); + $markers .= $mapPoint[0].",".$mapPoint[1].",".$markerImage.($index+1); if ($index+1 != sizeof($mapPoints)) $markers .= "|"; + if ($mapPoint[0] < $minlat) $minlat = $mapPoint[0]; + if ($mapPoint[0] > $maxlat) $maxlat = $mapPoint[0]; + if ($mapPoint[1] < $minlon) $minlon = $mapPoint[1]; + if ($mapPoint[1] > $maxlon) $maxlon = $mapPoint[1]; $totalLat += $mapPoint[0]; $totalLon += $mapPoint[1]; } - $zoom = 11; + if ($zoom == 0) { + $mapwidthinmeters = distance($minlat,$minlon,$minlat,$maxlon); + foreach (array_reverse($metersperpixel,true) as $zoomLevel => $maxdistance) + { + if ($zoom == 0 && $mapwidthinmeters < ($maxdistance + 50)) $zoom = $zoomLevel; + } + } $center = $totalLat/sizeof($mapPoints).",".$totalLon/sizeof($mapPoints); } return ''; +} + +function distance($lat1, $lng1, $lat2, $lng2) +{ + $pi80 = M_PI / 180; + $lat1 *= $pi80; + $lng1 *= $pi80; + $lat2 *= $pi80; + $lng2 *= $pi80; + + $r = 6372.797; // mean radius of Earth in km + $dlat = $lat2 - $lat1; + $dlng = $lng2 - $lng1; + $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2); + $c = 2 * atan2(sqrt($a), sqrt(1 - $a)); + $km = $r * $c; + + return $km * 1000; } function decodePolylineToArray($encoded) @@ -202,7 +338,8 @@ $url = "http://geocoding.cloudmade.com/daa03470bb8740298d4b10e3f03d63e6/geocoding/v2/find.js?query=".$query."&bbox=-35.5,149.00,-35.15,149.1930&return_location=true&bbox_only=true"; $contents = json_decode(getPage($url)); if ($giveOptions) return $contents->features; - else return $contents->features[0]->centroid->coordinates[0].",".$contents->features[0]->centroid->coordinates[1]; + elseif (isset($contents->features[0]->centroid)) return $contents->features[0]->centroid->coordinates[0].",".$contents->features[0]->centroid->coordinates[1]; + else return ""; } function reverseGeocode($lat,$lng) { @@ -210,6 +347,51 @@ $contents = json_decode(getPage($url)); return $contents->features[0]->properties->name; } + +function startsWith($haystack,$needle,$case=true) { + if($case){return (strcmp(substr($haystack, 0, strlen($needle)),$needle)===0);} + return (strcasecmp(substr($haystack, 0, strlen($needle)),$needle)===0); +} + +function endsWith($haystack,$needle,$case=true) { + if($case){return (strcmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0);} + return (strcasecmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0); +} +function bracketsMeanNewLine($input) { + return str_replace(")","",str_replace("(","
",$input)); +} + +function viaPoints($tripid,$stopid, $timingPointsOnly = false) { + global $APIurl; + $url = $APIurl."/json/tripstoptimes?trip=".$tripid; + +$json = json_decode(getPage($url)); +debug(print_r($json,true)); +$stops = $json[0]; +$times = $json[1]; +$foundStop = false; +$viaPoints = Array(); +foreach ($stops as $key => $row) +{ + if ($foundStop) { + if (!$timingPointsOnly || !startsWith($row[5],"Wj") ) { + $viaPoints[] = Array("id" => $row[0], "name" => $row[1], "time" => $times[$key]); + } + } else { + if ($row[0] == $stopid) $foundStop = true; + } +} + return $viaPoints; +} + +function viaPointNames($tripid,$stopid) { + $points = viaPoints($tripid,$stopid,true); + $pointNames = Array(); + foreach ($points as $point) { + $pointNames[] = $point['name']; + } + return implode(", ",$pointNames); +} ?>