AWS fixes
[busui.git] / common.inc.php
blob:a/common.inc.php -> blob:b/common.inc.php
<?php <?php
date_default_timezone_set('Australia/ACT'); date_default_timezone_set('Australia/ACT');
$APIurl = "http://localhost:8765"; $APIurl = "http://localhost:8765";
$cloudmadeAPIkey="daa03470bb8740298d4b10e3f03d63e6"; $cloudmadeAPIkey = "daa03470bb8740298d4b10e3f03d63e6";
$googleMapsAPIkey="ABQIAAAA95XYXN0cki3Yj_Sb71CFvBTPaLd08ONybQDjcH_VdYtHHLgZvRTw2INzI_m17_IoOUqH3RNNmlTk1Q"; $googleMapsAPIkey = "ABQIAAAA95XYXN0cki3Yj_Sb71CFvBTPaLd08ONybQDjcH_VdYtHHLgZvRTw2INzI_m17_IoOUqH3RNNmlTk1Q";
$otpAPIurl = 'http://localhost:8080/opentripplanner-api-webapp/'; $otpAPIurl = 'http://localhost:8080/opentripplanner-api-webapp/';
if (isDebug()) error_reporting(E_ALL ^ E_NOTICE); $owaSiteID = 'fe5b819fa8c424a99ff0764d955d23f3';
  //$debugOkay = Array("session","json","phperror","other");
// SELECT array_to_string(array(SELECT REPLACE(name_2006, ',', '\,') as name FROM suburbs order by name), ',') $debugOkay = Array(
$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"); "session",
  "json",
// you have to open the session to be able to modify or remove it "phperror"
  );
  if (isDebug("phperror")) error_reporting(E_ALL ^ E_NOTICE);
  include_once ("common-geo.inc.php");
  include_once ("common-net.inc.php");
  include_once ("common-template.inc.php");
  include_once ("common-transit.inc.php");
  // you have to open the session to be able to modify or remove it
session_start(); session_start();
if (isset($_REQUEST['service_period'])) $_SESSION['service_period'] = filter_var($_REQUEST['service_period'],FILTER_SANITIZE_STRING); if (isset($_REQUEST['service_period'])) {
if (isset($_REQUEST['time'])) $_SESSION['time'] = filter_var($_REQUEST['time'],FILTER_SANITIZE_STRING); $_SESSION['service_period'] = filter_var($_REQUEST['service_period'], FILTER_SANITIZE_STRING);
if (isset($_REQUEST['geolocate'])) { }
$contents = geocode(var_filter($_REQUEST['geolocate'],FILTER_SANITIZE_URL),true); if (isset($_REQUEST['time'])) {
if (isset($contents[0]->centroid)) { $_SESSION['time'] = filter_var($_REQUEST['time'], FILTER_SANITIZE_STRING);
$session['lat'] = $contents[0]->centroid->coordinates[0]; }
$session['lon'] = $contents[0]->centroid->coordinates[1]; if (isset($_REQUEST['geolocate'])) {
} $geocoded = false;
else { if (isset($_REQUEST['lat']) && isset($_REQUEST['lon'])) {
$session['lat'] = ""; $_SESSION['lat'] = filter_var($_REQUEST['lat'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
$session['lon'] = ""; $_SESSION['lon'] = filter_var($_REQUEST['lon'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
} }
} else {
//print_r ($_SESSION); $contents = geocode(filter_var($_REQUEST['geolocate'], FILTER_SANITIZE_URL) , true);
function isDebug() if (isset($contents[0]->centroid)) {
  $geocoded = true;
  $_SESSION['lat'] = $contents[0]->centroid->coordinates[0];
  $_SESSION['lon'] = $contents[0]->centroid->coordinates[1];
  }
  else {
  $_SESSION['lat'] = "";
  $_SESSION['lon'] = "";
  }
  }
  if ($_SESSION['lat'] != "" && isMetricsOn()) {
  // Create a new Instance of the tracker
  $owa = new owa_php($config);
  // Set the ID of the site being tracked
  $owa->setSiteId($owaSiteID);
  // Create a new event object
  $event = $owa->makeEvent();
  // Set the Event Type, in this case a "video_play"
  $event->setEventType('geolocate');
  // Set a property
  $event->set('lat', $_SESSION['lat']);
  $event->set('lon', $_SESSION['lon']);
  $event->set('geocoded', $geocoded);
  // Track the event
  $owa->trackEvent($event);
  }
  }
  debug(print_r($_SESSION, true) , "session");
  function isDebugServer()
{ {
return $_SERVER['SERVER_NAME'] == "10.0.1.154" || $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || !$_SERVER['SERVER_NAME']; return $_SERVER['SERVER_NAME'] == "10.0.1.154" || $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || !$_SERVER['SERVER_NAME'];
} }
  function isDebug($debugReason = "other")
  {
  global $debugOkay;
  return in_array($debugReason, $debugOkay, false) && isDebugServer();
  }
function isMetricsOn() function isMetricsOn()
{ {
return true; return !isDebugServer();
} }
  function debug($msg, $debugReason = "other")
function debug($msg) { {
if (isDebug()) echo "<!-- $msg -->"; if (isDebug($debugReason)) echo "\n<!-- " . date(DATE_RFC822) . "\n $msg -->\n";
} }
function isFastDevice() { function isFastDevice()
$fastDevices = Array("Mozilla/5.0 (X11;", "Mozilla/5.0 (Windows;", "Mozilla/5.0 (iP", "Mozilla/5.0 (Linux; U; Android", "Mozilla/4.0 (compatible; MSIE"); {
$slowDevices = Array("J2ME","MIDP","Opera/","Mozilla/2.0 (compatible;","Mozilla/3.0 (compatible;"); $ua = $_SERVER['HTTP_USER_AGENT'];
return true; $fastDevices = Array(
  "Mozilla/5.0 (X11;",
  "Mozilla/5.0 (Windows;",
  "Mozilla/5.0 (iP",
  "Mozilla/5.0 (Linux; U; Android",
  "Mozilla/4.0 (compatible; MSIE"
  );
  $slowDevices = Array(
  "J2ME",
  "MIDP",
  "Opera/",
  "Mozilla/2.0 (compatible;",
  "Mozilla/3.0 (compatible;"
  );
  return true;
} }
  function array_flatten($a, $f = array())
function include_header($pageTitle, $pageType, $opendiv = true, $geolocate = false) { {
echo ' if (!$a || !is_array($a)) return '';
<!DOCTYPE html> foreach ($a as $k => $v) {
<html> if (is_array($v)) $f = array_flatten($v, $f);
<head> else $f[$k] = $v;
<title>'.$pageTitle.'</title>'; }
if (isDebug()) echo '<link rel="stylesheet" href="css/jquery-mobile-1.0a3.css" /> return $f;
<script type="text/javascript" src="js/jquery-1.5.js"></script>  
<script type="text/javascript" src="js/jquery-mobile-1.0a3.js"></script>';  
else echo '<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.css" />  
<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.js"></script>  
<script type="text/javascript" src="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.js"></script>';  
echo '  
<link rel="stylesheet" href="css/jquery.ui.datepicker.mobile.css" />  
<script>  
//reset type=date inputs to text  
$( document ).bind( "mobileinit", function(){  
$.mobile.page.prototype.options.degradeInputs.date = true;  
});  
</script>  
<script src="js/jQuery.ui.datepicker.js"></script>  
<script src="js/jquery.ui.datepicker.mobile.js"></script>  
<style type="text/css">  
.ui-navbar {  
width: 100%;  
}  
.ui-btn-inner {  
white-space: normal !important;  
}  
.ui-li-heading {  
white-space: normal !important;  
}  
.ui-listview-filter {  
margin: 0 !important;  
}  
#footer {  
text-size: 0.75em;  
text-align: center;  
}  
body {  
background-color: #F0F0F0;  
}  
</style>  
<meta name="apple-mobile-web-app-capable" content="yes" />  
<meta name="apple-mobile-web-app-status-bar-style" content="black" />  
<link rel="apple-touch-startup-image" href="startup.png" />  
<link rel="apple-touch-icon" href="apple-touch-icon.png" />';  
if ($geolocate) {  
echo "<script>  
   
function success(position) {  
$('#geolocate').val(position.coords.latitude+','+position.coords.longitude);  
// setCookie('geolocate',position.coords.latitude+','+position.coords.longitude,1);  
$('#here').click(function(event) { $('#geolocate').val(doAJAXrequestForGeolocSessionHere()); return false;});  
$('#here').show();  
} }
function error(msg) {  
console.log(msg);  
}  
   
if (navigator.geolocation) {  
navigator.geolocation.getCurrentPosition(success, error);  
}  
   
</script> ";  
}  
echo '</head>  
<body>  
';  
if (isMetricsOn()) {  
require_once('owa/owa_env.php');  
require_once(OWA_DIR.'owa_php.php');  
$owa = new owa_php();  
$owa->setSiteId('bus.lambdacomplex.org');  
$owa->setPageTitle($pageTitle);  
$owa->setPageType($pageType);  
$owa->trackPageView();  
$owa->placeHelperPageTags();  
}  
   
if ($opendiv) {  
echo '<div data-role="page">  
<script>  
$(document).ready(function ()  
{  
document.title = "'.$pageTitle.'";  
});  
</script>  
<div data-role="header">  
<h1>'.$pageTitle.'</h1>  
</div><!-- /header -->  
<div data-role="content"> ';  
}  
}  
function include_footer()  
{  
if ($geolocate && isset($_SESSION['lat'])) {  
echo "<script>  
$('#here').click(function(event) { $('#geolocate').val(doAJAXrequestForGeolocSessionHere()); return false;});  
$('#here').show();  
</script>";  
}  
echo '<div id="footer"><a href="about.php">About/Contact Us</a>&nbsp;<a href="feedback.php">Feedback/Bug Report</a></a>';  
echo '</div>';  
}  
   
$service_periods = Array ('sunday','saturday','weekday');  
   
function service_period()  
{  
if (isset($_SESSION['service_period'])) return $_SESSION['service_period'];  
   
switch (date('w')){  
   
case 0:  
return 'sunday';  
case 6:  
return 'saturday';  
default:  
return 'weekday';  
}  
}  
   
function remove_spaces($string) function remove_spaces($string)
{ {
return str_replace(' ','',$string); return str_replace(' ', '', $string);
} }
  function object2array($object)
function midnight_seconds()  
{ {
// from http://www.perturb.org/display/Perlfunc__Seconds_Since_Midnight.html if (is_object($object)) {
if (isset($_SESSION['time'])) { foreach ($object as $key => $value) {
$time = strtotime($_SESSION['time']); $array[$key] = $value;
return (date("G",$time) * 3600) + (date("i",$time) * 60) + date("s",$time); }
} }
return (date("G") * 3600) + (date("i") * 60) + date("s"); else {
  $array = $object;
  }
  return $array;
} }
  function startsWith($haystack, $needle, $case = true)
function midnight_seconds_to_time($seconds)  
{ {
if ($seconds > 0) { if ($case) {
$midnight = mktime (0, 0, 0, date("n"), date("j"), date("Y")); return (strcmp(substr($haystack, 0, strlen($needle)) , $needle) === 0);
return date("h:ia",$midnight+$seconds); }
} else { return (strcasecmp(substr($haystack, 0, strlen($needle)) , $needle) === 0);
return "";  
} }
  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 getPage($url) function bracketsMeanNewLine($input)
{ {
debug($url); return str_replace(")", "</small>", str_replace("(", "<br><small>", $input));
$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 "<font color=red> Database temporarily unavailable: ".curl_errno($ch)." ".curl_error($ch)."</font>";  
curl_close($ch);  
return $page;  
}  
function array_flatten($a,$f=array()){  
if(!$a||!is_array($a))return '';  
foreach($a as $k=>$v){  
if(is_array($v))$f=array_flatten($v,$f);  
else $f[$k]=$v;  
}  
return $f;  
}  
   
function staticmap($mapPoints, $zoom = 0, $markerImage = "iconb")  
{  
$width = 300;  
$height = 300;  
$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 = "";  
$minlat = 999;  
$minlon = 999;  
$maxlat = 0;  
$maxlon = 0;  
   
if (sizeof($mapPoints) < 1) return "map error";  
if (sizeof($mapPoints) === 1) {  
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].",".$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];  
}  
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);  
}  
$output = "";  
if(basename($_SERVER['PHP_SELF']) != "tripPlanner.php") $output .= '<div data-role="collapsible" data-collapsed="true"><h3>Open Map...</h3>';  
$output .= '<center><img src="staticmaplite/staticmap.php?center='.$center.'&zoom='.$zoom.'&size='.$width.'x'.$height.'&maptype=mapnik&markers='.$markers.'" width='.$width.' height='.$height.'></center>';  
if(basename($_SERVER['PHP_SELF']) != "tripPlanner.php") $output .= '</div>';  
return $output;  
}  
   
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)  
{  
// source: http://latlongeeks.com/forum/viewtopic.php?f=4&t=5  
$length = strlen($encoded);  
$index = 0;  
$points = array();  
$lat = 0;  
$lng = 0;  
   
while ($index < $length)  
{