<?php | <?php |
// you have to open the session to be able to modify or remove it | // you have to open the session to be able to modify or remove it |
session_start(); | session_start(); |
if (isset($_REQUEST['service_period'])) { | if (isset($_REQUEST['service_period'])) { |
$_SESSION['service_period'] = filter_var($_REQUEST['service_period'], FILTER_SANITIZE_STRING); | $_SESSION['service_period'] = filter_var($_REQUEST['service_period'], FILTER_SANITIZE_STRING); |
sessionUpdated(); | sessionUpdated(); |
} | } |
if (isset($_REQUEST['time'])) { | if (isset($_REQUEST['time'])) { |
$_SESSION['time'] = filter_var($_REQUEST['time'], FILTER_SANITIZE_STRING); | $_SESSION['time'] = filter_var($_REQUEST['time'], FILTER_SANITIZE_STRING); |
sessionUpdated(); | sessionUpdated(); |
} | } |
if (isset($_REQUEST['geolocate']) && $_REQUEST['geolocate'] != "Enter co-ordinates or address here") { | if (isset($_REQUEST['geolocate']) && $_REQUEST['geolocate'] != "Enter co-ordinates or address here") { |
$geocoded = false; | $geocoded = false; |
if (isset($_REQUEST['lat']) && isset($_REQUEST['lon'])) { | if (isset($_REQUEST['lat']) && isset($_REQUEST['lon'])) { |
$_SESSION['lat'] = trim(filter_var($_REQUEST['lat'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)); | $_SESSION['lat'] = trim(filter_var($_REQUEST['lat'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)); |
$_SESSION['lon'] = trim(filter_var($_REQUEST['lon'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)); | $_SESSION['lon'] = trim(filter_var($_REQUEST['lon'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION)); |
} | } |
else { | else { |
$geolocate = filter_var($_REQUEST['geolocate'], FILTER_SANITIZE_URL); | $geolocate = filter_var($_REQUEST['geolocate'], FILTER_SANITIZE_URL); |
if (startsWith($geolocate, "-")) { | if (startsWith($geolocate, "-")) { |
$locateparts = explode(",", $geolocate); | $locateparts = explode(",", $geolocate); |
$_SESSION['lat'] = $locateparts[0]; | $_SESSION['lat'] = $locateparts[0]; |
$_SESSION['lon'] = $locateparts[1]; | $_SESSION['lon'] = $locateparts[1]; |
} | } |
else { | else { |
$contents = geocode($geolocate, true); | $contents = geocode($geolocate, true); |
print_r($contents); | print_r($contents); |
if (isset($contents[0]->centroid)) { | if (isset($contents[0]->centroid)) { |
$geocoded = true; | $geocoded = true; |
$_SESSION['lat'] = $contents[0]->centroid->coordinates[0]; | $_SESSION['lat'] = $contents[0]->centroid->coordinates[0]; |
$_SESSION['lon'] = $contents[0]->centroid->coordinates[1]; | $_SESSION['lon'] = $contents[0]->centroid->coordinates[1]; |
} | } |
else { | else { |
$_SESSION['lat'] = ""; | $_SESSION['lat'] = ""; |
$_SESSION['lon'] = ""; | $_SESSION['lon'] = ""; |
} | } |
} | } |
} | } |
if ($_SESSION['lat'] != "" && isAnalyticsOn()) { | if ($_SESSION['lat'] != "" && isAnalyticsOn()) { |
trackEvent("Geolocation","Updated Location", "Geocoded - ".($geocoded ? "Yes" : "No")); | trackEvent("Geolocation","Updated Location", "Geocoded - ".($geocoded ? "Yes" : "No")); |
} | } |
sessionUpdated(); | sessionUpdated(); |
} | } |
function sessionUpdated() { | function sessionUpdated() { |
$_SESSION['lastUpdated'] = time(); | $_SESSION['lastUpdated'] = time(); |
} | } |
// timeoutSession | // timeoutSession |
$TIMEOUT_LIMIT = 60*5; // 5 minutes | $TIMEOUT_LIMIT = 60*5; // 5 minutes |
if (isset($_SESSION['lastUpdated']) && $_SESSION['lastUpdated']+$TIMEOUT_LIMIT < time()) { | if (isset($_SESSION['lastUpdated']) && $_SESSION['lastUpdated']+$TIMEOUT_LIMIT < time()) { |
debug ("Session timeout ".($_SESSION['lastUpdated']+$TIMEOUT_LIMIT).">".time(),"session"); | debug ("Session timeout ".($_SESSION['lastUpdated']+$TIMEOUT_LIMIT).">".time(),"session"); |
session_destroy(); | session_destroy(); |
session_start(); | session_start(); |
} | } |
debug(print_r($_SESSION, true) , "session"); | debug(print_r($_SESSION, true) , "session"); |
function current_time() { | |
return ($_SESSION['time']? $_SESSION['time'] : date("H:i:s")); | |
} | |
?> | ?> |
<?php | <?php |
// Copyright 2009 Google Inc. All Rights Reserved. | // Copyright 2009 Google Inc. All Rights Reserved. |
$GA_ACCOUNT = "MO-22173039-1"; | $GA_ACCOUNT = "MO-22173039-1"; |
$GA_PIXEL = "/lib/ga.php"; | $GA_PIXEL = "/lib/ga.php"; |
function googleAnalyticsGetImageUrl() | function googleAnalyticsGetImageUrl() |
{ | { |
global $GA_ACCOUNT, $GA_PIXEL; | global $GA_ACCOUNT, $GA_PIXEL; |
$url = ""; | $url = ""; |
$url.= $GA_PIXEL . "?"; | $url.= $GA_PIXEL . "?"; |
$url.= "utmac=" . $GA_ACCOUNT; | $url.= "utmac=" . $GA_ACCOUNT; |
$url.= "&utmn=" . rand(0, 0x7fffffff); | $url.= "&utmn=" . rand(0, 0x7fffffff); |
$referer = $_SERVER["HTTP_REFERER"]; | $referer = $_SERVER["HTTP_REFERER"]; |
$query = $_SERVER["QUERY_STRING"]; | $query = $_SERVER["QUERY_STRING"]; |
$path = $_SERVER["REQUEST_URI"]; | $path = $_SERVER["REQUEST_URI"]; |
if (empty($referer)) { | if (empty($referer)) { |
$referer = "-"; | $referer = "-"; |
} | } |
$url.= "&utmr=" . urlencode($referer); | $url.= "&utmr=" . urlencode($referer); |
if (!empty($path)) { | if (!empty($path)) { |
$url.= "&utmp=" . urlencode($path); | $url.= "&utmp=" . urlencode($path); |
} | } |
$url.= "&guid=ON"; | $url.= "&guid=ON"; |
return str_replace("&", "&", $url); | return str_replace("&", "&", $url); |
} | } |
function include_header($pageTitle, $pageType, $opendiv = true, $geolocate = false, $datepicker = false) | function include_header($pageTitle, $pageType, $opendiv = true, $geolocate = false, $datepicker = false) |
{ | { |
echo ' | echo ' |
<!DOCTYPE html> | <!DOCTYPE html> |
<html lang="en"> | <html lang="en"> |
<head> | <head> |
<meta charset="UTF-8"> | <meta charset="UTF-8"> |
<title>' . $pageTitle . '</title> | <title>' . $pageTitle . '</title> |
<meta name="google-site-verification" | <meta name="google-site-verification" |
content="-53T5Qn4TB_de1NyfR_ZZkEVdUNcNFSaYKSFkWKx-sY" />'; | content="-53T5Qn4TB_de1NyfR_ZZkEVdUNcNFSaYKSFkWKx-sY" />'; |
if ($datepicker) echo '<link rel="stylesheet" href="css/jquery.ui.datepicker.mobile.css" />'; | if ($datepicker) echo '<link rel="stylesheet" href="css/jquery.ui.datepicker.mobile.css" />'; |
if (isDebugServer()) { | if (isDebugServer()) { |
echo '<link rel="stylesheet" href="css/jquery.mobile-1.0a4.css" /> | echo '<link rel="stylesheet" href="css/jquery.mobile-1.0a4.css" /> |
<script type="text/javascript" src="js/jquery-1.5.js"></script> | <script type="text/javascript" src="js/jquery-1.5.js"></script> |
<script>$(document).bind("mobileinit", function(){ | <script>$(document).bind("mobileinit", function(){ |
$.mobile.ajaxEnabled = false; | $.mobile.ajaxEnabled = false; |
}); | }); |
</script> | </script> |
<script type="text/javascript" src="js/jquery.mobile-1.0a4.js"></script>'; | <script type="text/javascript" src="js/jquery.mobile-1.0a4.js"></script>'; |
} | } |
else { | else { |
echo '<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.css" /> | echo '<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.css" /> |
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script> | <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script> |
<script>$(document).bind("mobileinit", function(){ | <script>$(document).bind("mobileinit", function(){ |
$.mobile.ajaxEnabled = false; | $.mobile.ajaxEnabled = false; |
}); | }); |
</script> | </script> |
<script type="text/javascript" src="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.js"></script>'; | <script type="text/javascript" src="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.js"></script>'; |
} | } |
if ($datepicker) { | if ($datepicker) { |
echo '<script> | echo '<script> |
//reset type=date inputs to text | //reset type=date inputs to text |
$( document ).bind( "mobileinit", function(){ | $( document ).bind( "mobileinit", function(){ |
$.mobile.page.prototype.options.degradeInputs.date = true; | $.mobile.page.prototype.options.degradeInputs.date = true; |
}); | }); |
</script> | </script> |
<script src="js/jQuery.ui.datepicker.js"></script>'; | <script src="js/jQuery.ui.datepicker.js"></script>'; |
} | } |
echo '<style type="text/css"> | echo '<style type="text/css"> |
.ui-navbar { | .ui-navbar { |
width: 100%; | width: 100%; |
} | } |
.ui-btn-inner { | .ui-btn-inner { |
white-space: normal !important; | white-space: normal !important; |
} | } |
.ui-li-heading { | .ui-li-heading { |
white-space: normal !important; | white-space: normal !important; |
} | } |
.ui-listview-filter { | .ui-listview-filter { |
margin: 0 !important; | margin: 0 !important; |
} | } |
.ui-icon-navigation { | .ui-icon-navigation { |
background-image: url(css/images/113-navigation.png); | background-image: url(css/images/113-navigation.png); |
background-position: 1px 0; | background-position: 1px 0; |
} | } |
.ui-icon-beaker { | .ui-icon-beaker { |
background-image: url(css/images/91-beaker-2.png); | background-image: url(css/images/91-beaker-2.png); |
background-position: 1px 0; | background-position: 1px 0; |
} | } |
#footer { | #footer { |
text-size: 0.75em; | text-size: 0.75em; |
text-align: center; | text-align: center; |
} | } |
body { | body { |
background-color: #F0F0F0; | background-color: #F0F0F0; |
} | } |
#jqm-homeheader { | #jqm-homeheader { |
text-align: center; | text-align: center; |
} | } |
.viaPoints { | .viaPoints { |
display: none; | display: none; |
text-size: 0.2em; | text-size: 0.2em; |
} | } |
.min-width-480px .viaPoints { | .min-width-480px .viaPoints { |
display: inline; | display: inline; |
} | } |
#extrainfo { | #extrainfo { |
visibility: hidden; | visibility: hidden; |
display: none; | display: none; |
} | } |
// source http://webaim.org/techniques/skipnav/ | // source http://webaim.org/techniques/skipnav/ |
#skip a, #skip a:hover, #skip a:visited | #skip a, #skip a:hover, #skip a:visited |
{ | { |
position:absolute; | position:absolute; |
left:0px; | left:0px; |
top:-500px; | top:-500px; |
width:1px; | width:1px; |
height:1px; | height:1px; |
overflow:hidden; | overflow:hidden; |
} | } |
#skip a:active, #skip a:focus | #skip a:active, #skip a:focus |
{ | { |
position:static; | position:static; |
width:auto; | width:auto; |
height:auto; | height:auto; |
} | } |
</style>'; | </style>'; |
if (strstr($_SERVER['HTTP_USER_AGENT'], 'iPhone') || strstr($_SERVER['HTTP_USER_AGENT'], 'iPod')) { | if (strstr($_SERVER['HTTP_USER_AGENT'], 'iPhone') || strstr($_SERVER['HTTP_USER_AGENT'], 'iPod')) { |
echo '<meta name="apple-mobile-web-app-capable" content="yes" /> | echo '<meta name="apple-mobile-web-app-capable" content="yes" /> |
<meta name="apple-mobile-web-app-status-bar-style" content="black" /> | <meta name="apple-mobile-web-app-status-bar-style" content="black" /> |
<link rel="apple-touch-startup-image" href="startup.png" /> | <link rel="apple-touch-startup-image" href="startup.png" /> |
<link rel="apple-touch-icon" href="apple-touch-icon.png" />'; | <link rel="apple-touch-icon" href="apple-touch-icon.png" />'; |
} | } |
if ($geolocate) { | if ($geolocate) { |
echo "<script> | echo "<script> |
function success(position) { | function success(position) { |
$('#error').val('Location now detected. Please wait for data to load.'); | $('#error').val('Location now detected. Please wait for data to load.'); |
$('#geolocate').val(position.coords.latitude+','+position.coords.longitude); | $('#geolocate').val(position.coords.latitude+','+position.coords.longitude); |
$.ajax({ url: \"include/common.inc.php?geolocate=yes&lat=\"+position.coords.latitude+\"&lon=\"+position.coords.longitude }); | $.ajax({ url: \"include/common.inc.php?geolocate=yes&lat=\"+position.coords.latitude+\"&lon=\"+position.coords.longitude }); |
location.reload(true); | location.reload(true); |
} | } |
function error(msg) { | function error(msg) { |
$('#error').val('Error: '+msg); | $('#error').val('Error: '+msg); |
} | } |
function geolocate() { | function geolocate() { |
if (navigator.geolocation) { | if (navigator.geolocation) { |
var options = { | var options = { |
enableHighAccuracy: true, | enableHighAccuracy: true, |
timeout: 60000, | timeout: 60000, |
maximumAge: 10000 | maximumAge: 10000 |
} | } |
navigator.geolocation.getCurrentPosition(success, error, options); | navigator.geolocation.getCurrentPosition(success, error, options); |
} | } |
} | } |
$(document).ready(function() { | $(document).ready(function() { |
$('#here').click(function(event) { $('#geolocate').val(geolocate()); return false;}); | $('#here').click(function(event) { $('#geolocate').val(geolocate()); return false;}); |
$('#here').show(); | $('#here').show(); |
}); | }); |
"; | "; |
if (!isset($_SESSION['lat']) || $_SESSION['lat'] == "") echo "geolocate();"; | if (!isset($_SESSION['lat']) || $_SESSION['lat'] == "") echo "geolocate();"; |
echo "</script> "; | echo "</script> "; |
} | } |
if (isAnalyticsOn()) echo ' | if (isAnalyticsOn()) echo ' |
<script type="text/javascript">' . " | <script type="text/javascript">' . " |
var _gaq = _gaq || []; | var _gaq = _gaq || []; |
_gaq.push(['_setAccount', 'UA-22173039-1']); | _gaq.push(['_setAccount', 'UA-22173039-1']); |
_gaq.push(['_trackPageview']); | _gaq.push(['_trackPageview']); |
</script>"; | </script>"; |
echo '</head> | echo '</head> |
<body> | <body> |
<div id="skip"> | <div id="skip"> |
<a href="#maincontent">Skip to content</a> | <a href="#maincontent">Skip to content</a> |
</div> | </div> |
'; | '; |
if ($opendiv) { | if ($opendiv) { |
echo '<div data-role="page"> | echo '<div data-role="page"> |
<div data-role="header" data-position="inline"> | <div data-role="header" data-position="inline"> |
<a href="' . $_SERVER["HTTP_REFERER"] . '" data-icon="arrow-l" data-rel="back" class="ui-btn-left">Back</a> | <a href="' . $_SERVER["HTTP_REFERER"] . '" data-icon="arrow-l" data-rel="back" class="ui-btn-left">Back</a> |
<h1>' . $pageTitle . '</h1> | <h1>' . $pageTitle . '</h1> |
<a href="/index.php" data-icon="home" class="ui-btn-right">Home</a> | <a href="/index.php" data-icon="home" class="ui-btn-right">Home</a> |
</div><!-- /header --> | </div><!-- /header --> |
<a name="maincontent" id="maincontent"></a> | <a name="maincontent" id="maincontent"></a> |
<div data-role="content"> '; | <div data-role="content"> '; |
} | } |
} | } |
function include_footer() | function include_footer() |
{ | { |
echo '<div id="footer"><a href="about.php">About/Contact Us</a> <a href="feedback.php">Feedback/Bug Report</a></a>'; | echo '<div id="footer"><a href="about.php">About/Contact Us</a> <a href="feedback.php">Feedback/Bug Report</a></a>'; |
echo '</div>'; | echo '</div>'; |
if (isAnalyticsOn()) { | if (isAnalyticsOn()) { |
echo "<script> (function() { | echo "<script> (function() { |
var ga = document.createElement('script'); ga.type = | var ga = document.createElement('script'); ga.type = |
'text/javascript'; ga.async = true; | 'text/javascript'; ga.async = true; |
ga.src = ('https:' == document.location.protocol ? | ga.src = ('https:' == document.location.protocol ? |
'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; | 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; |
var s = document.getElementsByTagName('script')[0]; | var s = document.getElementsByTagName('script')[0]; |
s.parentNode.insertBefore(ga, s); | s.parentNode.insertBefore(ga, s); |
})();</script>"; | })();</script>"; |
$googleAnalyticsImageUrl = googleAnalyticsGetImageUrl(); | $googleAnalyticsImageUrl = googleAnalyticsGetImageUrl(); |
echo '<noscript><img src="' . $googleAnalyticsImageUrl . '" /></noscript>'; | echo '<noscript><img src="' . $googleAnalyticsImageUrl . '" /></noscript>'; |
} | } |
} | } |
function timePlaceSettings($geolocate = false) | function timePlaceSettings($geolocate = false) |
{ | { |
global $service_periods; | global $service_periods; |
$geoerror = false; | $geoerror = false; |
if ($geolocate == true) { | if ($geolocate == true) { |
$geoerror = !isset($_SESSION['lat']) || !isset($_SESSION['lat']) || $_SESSION['lat'] == "" || $_SESSION['lon'] == ""; | $geoerror = !isset($_SESSION['lat']) || !isset($_SESSION['lat']) || $_SESSION['lat'] == "" || $_SESSION['lon'] == ""; |
} | } |
if ($geoerror) { | if ($geoerror) { |
echo '<div id="error">Sorry, but your location could not currently be detected. | echo '<div id="error">Sorry, but your location could not currently be detected. |
Please allow location permission, wait for your location to be detected, | Please allow location permission, wait for your location to be detected, |
or enter an address/co-ordinates in the box below.</div>'; | or enter an address/co-ordinates in the box below.</div>'; |
} | } |
echo '<div data-role="collapsible" data-collapsed="' . !$geoerror . '"> | echo '<div data-role="collapsible" data-collapsed="' . !$geoerror . '"> |
<h3>Change Time/Place (' . (isset($_SESSION['time']) ? $_SESSION['time'] : "Current Time,") . ' ' . ucwords(service_period()) . ')...</h3> | <h3>Change Time/Place (' . (isset($_SESSION['time']) ? $_SESSION['time'] : "Current Time,") . ' ' . ucwords(service_period()) . ')...</h3> |
<form action="' . basename($_SERVER['PHP_SELF']) . "?" . $_SERVER['QUERY_STRING'] . '" method="post"> | <form action="' . basename($_SERVER['PHP_SELF']) . "?" . $_SERVER['QUERY_STRING'] . '" method="post"> |
<div class="ui-body"> | <div class="ui-body"> |
<div data-role="fieldcontain"> | <div data-role="fieldcontain"> |
<label for="geolocate"> Current Location: </label> | <label for="geolocate"> Current Location: </label> |
<input type="text" id="geolocate" name="geolocate" value="' . (isset($_SESSION['lat']) && isset($_SESSION['lon']) ? $_SESSION['lat'] . "," . $_SESSION['lon'] : "Enter co-ordinates or address here") . '"/> <a href="#" style="display:none" name="here" id="here">Here?</a> | <input type="text" id="geolocate" name="geolocate" value="' . (isset($_SESSION['lat']) && isset($_SESSION['lon']) ? $_SESSION['lat'] . "," . $_SESSION['lon'] : "Enter co-ordinates or address here") . '"/> <a href="#" style="display:none" name="here" id="here">Here?</a> |
</div> | </div> |
<div data-role="fieldcontain"> | <div data-role="fieldcontain"> |
<label for="time"> Time: </label> | <label for="time"> Time: </label> |
<input type="time" name="time" id="time" value="' . (isset($_SESSION['time']) ? $_SESSION['time'] : date("H:i")) . '"/> | <input type="time" name="time" id="time" value="' . (isset($_SESSION['time']) ? $_SESSION['time'] : date("H:i")) . '"/> |
<a href="#" name="currentTime" id="currentTime" onClick="var d = new Date();' . "$('#time').val(d.getHours() +':'+ (d.getMinutes().toString().length = 1 ? '0'+ d.getMinutes(): d.getMinutes()));" . '">Current Time?</a> | <a href="#" name="currentTime" id="currentTime" onClick="var d = new Date();' . "$('#time').val(d.getHours() +':'+ (d.getMinutes().toString().length == 1 ? '0'+ d.getMinutes(): d.getMinutes()));" . '">Current Time?</a> |
</div> | </div> |
<div data-role="fieldcontain"> | <div data-role="fieldcontain"> |
<label for="service_period"> Service Period: </label> | <label for="service_period"> Service Period: </label> |
<select name="service_period" id="service_period">'; | <select name="service_period" id="service_period">'; |
foreach ($service_periods as $service_period) { | foreach ($service_periods as $service_period) { |
echo "<option value=\"$service_period\"" . (service_period() === $service_period ? " SELECTED" : "") . '>' . ucwords($service_period) . '</option>'; | echo "<option value=\"$service_period\"" . (service_period() === $service_period ? " SELECTED" : "") . '>' . ucwords($service_period) . '</option>'; |
} | } |
echo '</select> | echo '</select> |
<a href="#" style="display:none" name="currentPeriod" id="currentPeriod"/>Current Period?</a> | <a href="#" style="display:none" name="currentPeriod" id="currentPeriod"/>Current Period?</a> |
</div> | </div> |
<input type="submit" value="Update"/> | <input type="submit" value="Update"/> |
</form> | </form> |
</div></div>'; | </div></div>'; |
} | } |
function trackEvent($category, $action, $label = "", $value = - 1) | function trackEvent($category, $action, $label = "", $value = - 1) |
{ | { |
if (isAnalyticsOn()) { | if (isAnalyticsOn()) { |
echo "\n<script> _gaq.push(['_trackEvent', '$category', '$action'" . ($label != "" ? ", '$label'" : "") . ($value != - 1 ? ", $value" : "") . "]);</script>"; | echo "\n<script> _gaq.push(['_trackEvent', '$category', '$action'" . ($label != "" ? ", '$label'" : "") . ($value != - 1 ? ", $value" : "") . "]);</script>"; |
} | } |
} | } |
?> | ?> |
<?php | <?php |
function getRoute($routeID) { | function getRoute($routeID) { |
$query = "Select * from routes where route_id = '$routeID' LIMIT 1"; | $query = "Select * from routes where route_id = '$routeID' LIMIT 1"; |
debug($query,"database"); | debug($query,"database"); |
$result = pg_query($conn, $query); | $result = pg_query($conn, $query); |
if (!$result) { | if (!$result) { |
databaseError(pg_result_error($result)); | databaseError(pg_result_error($result)); |
return Array(); | return Array(); |
} | } |
return pg_fetch_assoc($result); | return pg_fetch_assoc($result); |
} | } |
function getRoutes() { | function getRoutes() { |
global $conn; | global $conn; |
$query = "Select * from routes order by route_short_name;"; | $query = "Select * from routes order by route_short_name;"; |
debug($query,"database"); | debug($query,"database"); |
$result = pg_query($conn, $query); | $result = pg_query($conn, $query); |
if (!$result) { | if (!$result) { |
databaseError(pg_result_error($result)); | databaseError(pg_result_error($result)); |
return Array(); | return Array(); |
} | } |
return pg_fetch_all($result); | return pg_fetch_all($result); |
} | } |
function getRoutesByNumber($routeNumber = "") { | function getRoutesByNumber($routeNumber = "") { |
global $conn; | global $conn; |
if ($routeNumber != "") { | if ($routeNumber != "") { |
$query = "Select distinct routes.route_id,routes.route_short_name,routes.route_long_name,service_id from routes join trips on trips.route_id = | $query = "Select distinct routes.route_id,routes.route_short_name,routes.route_long_name,service_id from routes join trips on trips.route_id = |
routes.route_id join stop_times on stop_times.trip_id = trips.trip_id where route_short_name = '$routeNumber' order by route_short_name;"; | routes.route_id join stop_times on stop_times.trip_id = trips.trip_id where route_short_name = '$routeNumber' order by route_short_name;"; |
} else { | } else { |
$query = "SELECT DISTINCT route_short_name from routes order by route_short_name"; | $query = "SELECT DISTINCT route_short_name from routes order by route_short_name"; |
} | } |
debug($query,"database"); | debug($query,"database"); |
$result = pg_query($conn, $query); | $result = pg_query($conn, $query); |
if (!$result) { | if (!$result) { |
databaseError(pg_result_error($result)); | databaseError(pg_result_error($result)); |
return Array(); | return Array(); |
} | } |
return pg_fetch_all($result); | return pg_fetch_all($result); |
} | } |
function getRouteNextTrip($routeID) { | function getRouteNextTrip($routeID) { |
global $conn; | global $conn; |
$query = "select * from routes join trips on trips.route_id = routes.route_id | $query = "select * from routes join trips on trips.route_id = routes.route_id |
join stop_times on stop_times.trip_id = trips.trip_id where | join stop_times on stop_times.trip_id = trips.trip_id where |
arrival_time > CURRENT_TIME and routes.route_id = '$routeID' order by | arrival_time > '".current_time()."' and routes.route_id = '$routeID' order by |
arrival_time limit 1"; | arrival_time limit 1"; |
debug($query,"database"); | debug($query,"database"); |
$result = pg_query($conn, $query); | $result = pg_query($conn, $query); |
if (!$result) { | if (!$result) { |
databaseError(pg_result_error($result)); | databaseError(pg_result_error($result)); |
return Array(); | return Array(); |
} | } |
return pg_fetch_assoc($result); | return pg_fetch_assoc($result); |
} | } |
function getTimeInterpolatedRouteAtStop($routeID, $stop_id) | |
{ | |
$nextTrip = getRouteNextTrip($routeID); | |
if ($nextTrip['trip_id']){ | |
foreach (getTimeInterpolatedTrip($nextTrip['trip_id']) as $tripStop) { | |
if ($tripStop['stop_id'] == $stop_id) return $tripStop; | |
} | |
} | |
return Array(); | |
} | |
function getRouteTrips($routeID) { | function getRouteTrips($routeID) { |
global $conn; | global $conn; |
$query = "select * from routes join trips on trips.route_id = routes.route_id | $query = "select * from routes join trips on trips.route_id = routes.route_id |
join stop_times on stop_times.trip_id = trips.trip_id where routes.route_id = '$routeID' order by | join stop_times on stop_times.trip_id = trips.trip_id where routes.route_id = '$routeID' order by |
arrival_time "; | arrival_time "; |
debug($query,"database"); | debug($query,"database"); |
$result = pg_query($conn, $query); | $result = pg_query($conn, $query); |
if (!$result) { | if (!$result) { |
databaseError(pg_result_error($result)); | databaseError(pg_result_error($result)); |
return Array(); | return Array(); |
} | } |
return pg_fetch_all($result); | return pg_fetch_all($result); |
} | } |
function getRoutesByDestination($destination = "", $service_period = "") { | function getRoutesByDestination($destination = "", $service_period = "") { |
global $conn; | global $conn; |
if ($service_period == "") $service_period = service_period(); | if ($service_period == "") $service_period = service_period(); |
if ($destination != "") { | if ($destination != "") { |
$query = "SELECT DISTINCT trips.route_id,route_short_name,route_long_name, service_id | $query = "SELECT DISTINCT trips.route_id,route_short_name,route_long_name, service_id |
FROM stop_times join trips on trips.trip_id = | FROM stop_times join trips on trips.trip_id = |
stop_times.trip_id join routes on trips.route_id = routes.route_id | stop_times.trip_id join routes on trips.route_id = routes.route_id |
WHERE route_long_name = '$destination' AND service_id='$service_period' order by route_short_name"; | WHERE route_long_name = '$destination' AND service_id='$service_period' order by route_short_name"; |
} else { | } else { |
$query = "SELECT DISTINCT route_long_name | $query = "SELECT DISTINCT route_long_name |
FROM stop_times join trips on trips.trip_id = | FROM stop_times join trips on trips.trip_id = |
stop_times.trip_id join routes on trips.route_id = routes.route_id | stop_times.trip_id join routes on trips.route_id = routes.route_id |
WHERE service_id='$service_period' order by route_long_name"; | WHERE service_id='$service_period' order by route_long_name"; |
} | } |
debug($query,"database"); | debug($query,"database"); |
$result = pg_query($conn, $query); | $result = pg_query($conn, $query); |
if (!$result) { | if (!$result) { |
databaseError(pg_result_error($result)); | databaseError(pg_result_error($result)); |
return Array(); | return Array(); |
} | } |
return pg_fetch_all($result); | return pg_fetch_all($result); |
} | } |
function getRoutesBySuburb($suburb, $service_period = "") { | function getRoutesBySuburb($suburb, $service_period = "") { |
if ($service_period == "") $service_period = service_period(); | if ($service_period == "") $service_period = service_period(); |
global $conn; | global $conn; |
$query = "SELECT DISTINCT service_id,trips.route_id,route_short_name,route_long_name | $query = "SELECT DISTINCT service_id,trips.route_id,route_short_name,route_long_name |
FROM stop_times join trips on trips.trip_id = stop_times.trip_id | FROM stop_times join trips on trips.trip_id = stop_times.trip_id |
join routes on trips.route_id = routes.route_id | join routes on trips.route_id = routes.route_id |
join stops on stops.stop_id = stop_times.stop_id | join stops on stops.stop_id = stop_times.stop_id |
WHERE zone_id LIKE '%$suburb;%' AND service_id='$service_period' ORDER BY route_short_name"; | WHERE zone_id LIKE '%$suburb;%' AND service_id='$service_period' ORDER BY route_short_name"; |
debug($query,"database"); | debug($query,"database"); |
$result = pg_query($conn, $query); | $result = pg_query($conn, $query); |
if (!$result) { | if (!$result) { |
databaseError(pg_result_error($result)); | databaseError(pg_result_error($result)); |
return Array(); | return Array(); |
} | } |
return pg_fetch_all($result); | return pg_fetch_all($result); |
} | } |
function getRoutesNearby($lat, $lng, $limit = "", $distance = 500) { | function getRoutesNearby($lat, $lng, $limit = "", $distance = 500) { |
if ($service_period == "") $service_period = service_period(); | if ($service_period == "") $service_period = service_period(); |
if ($limit != "") $limit = " LIMIT $limit "; | if ($limit != "") $limit = " LIMIT $limit "; |
global $conn; | global $conn; |
$query = "SELECT service_id,trips.route_id,route_short_name,route_long_name, | $query = "SELECT service_id,trips.route_id,route_short_name,route_long_name,min(stops.stop_id) as stop_id, |
min(ST_Distance(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), FALSE)) as distance | min(ST_Distance(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), FALSE)) as distance |
FROM stop_times | FROM stop_times |
join trips on trips.trip_id = stop_times.trip_id | join trips on trips.trip_id = stop_times.trip_id |
join routes on trips.route_id = routes.route_id | join routes on trips.route_id = routes.route_id |
join stops on stops.stop_id = stop_times.stop_id | join stops on stops.stop_id = stop_times.stop_id |
WHERE service_id='$service_period' | WHERE service_id='$service_period' |
AND ST_DWithin(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), $distance, FALSE) | AND ST_DWithin(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), $distance, FALSE) |
group by service_id,trips.route_id,route_short_name,route_long_name | group by service_id,trips.route_id,route_short_name,route_long_name |
order by distance $limit"; | order by distance $limit"; |
debug($query,"database"); | debug($query,"database"); |
$result = pg_query($conn, $query); | $result = pg_query($conn, $query); |
if (!$result) { | if (!$result) { |
databaseError(pg_result_error($result)); | databaseError(pg_result_error($result)); |
return Array(); | return Array(); |
} | } |
return pg_fetch_all($result); | return pg_fetch_all($result); |
} | } |
?> | ?> |
<?php | <?php |
function getStop($stopID) | function getStop($stopID) |
{ | { |
global $conn; | global $conn; |
$query = "Select * from stops where stop_id = '$stopID' LIMIT 1"; | $query = "Select * from stops where stop_id = '$stopID' LIMIT 1"; |
debug($query, "database"); | debug($query, "database"); |
$result = pg_query($conn, $query); | $result = pg_query($conn, $query); |
if (!$result) { | if (!$result) { |
databaseError(pg_result_error($result)); | databaseError(pg_result_error($result)); |
return Array(); | return Array(); |
} | } |
return pg_fetch_assoc($result); | return pg_fetch_assoc($result); |
} | } |
function getStops($timingPointsOnly = false, $firstLetter = "") | function getStops($timingPointsOnly = false, $firstLetter = "") |
{ | { |
global $conn; | global $conn; |
$conditions = Array(); | $conditions = Array(); |
if ($timingPointsOnly) $conditions[] = "substr(stop_code,1,2) != 'Wj'"; | if ($timingPointsOnly) $conditions[] = "substr(stop_code,1,2) != 'Wj'"; |
if ($firstLetter != "") $conditions[] = "substr(stop_name,1,1) = '$firstLetter'"; | if ($firstLetter != "") $conditions[] = "substr(stop_name,1,1) = '$firstLetter'"; |
$query = "Select * from stops"; | $query = "Select * from stops"; |
if (sizeof($conditions) > 0) { | if (sizeof($conditions) > 0) { |
if (sizeof($conditions) > 1) { | if (sizeof($conditions) > 1) { |
$query.= " Where " . implode(" AND ", $conditions) . " "; | $query.= " Where " . implode(" AND ", $conditions) . " "; |
} | } |
else { | else { |
$query.= " Where " . $conditions[0] . " "; | $query.= " Where " . $conditions[0] . " "; |
} | } |
} | } |
$query.= " order by stop_name;"; | $query.= " order by stop_name;"; |
debug($query, "database"); | debug($query, "database"); |
$result = pg_query($conn, $query); | $result = pg_query($conn, $query); |
if (!$result) { | if (!$result) { |
databaseError(pg_result_error($result)); | databaseError(pg_result_error($result)); |
return Array(); | return Array(); |
} | } |
return pg_fetch_all($result); | return pg_fetch_all($result); |
} | } |
function getNearbyStops($lat, $lng, $limit = "", $distance = 1000) | function getNearbyStops($lat, $lng, $limit = "", $distance = 1000) |
{ | { |
if ($lat == null || $lng == null) return Array(); | if ($lat == null || $lng == null) return Array(); |
if ($limit != "") $limit = " LIMIT $limit "; | if ($limit != "") $limit = " LIMIT $limit "; |
global $conn; | global $conn; |
$query = "Select *, ST_Distance(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), FALSE) as distance | $query = "Select *, ST_Distance(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), FALSE) as distance |
from stops WHERE ST_DWithin(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), $distance, FALSE) | from stops WHERE ST_DWithin(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), $distance, FALSE) |
order by distance $limit;"; | order by distance $limit;"; |
debug($query, "database"); | debug($query, "database"); |
$result = pg_query($conn, $query); | $result = pg_query($conn, $query); |
if (!$result) { | if (!$result) { |
databaseError(pg_result_error($result)); | databaseError(pg_result_error($result)); |
return Array(); | return Array(); |
} | } |
return pg_fetch_all($result); | return pg_fetch_all($result); |
} | } |
function getStopsBySuburb($suburb) | function getStopsBySuburb($suburb) |
{ | { |
global $conn; | global $conn; |
$query = "Select * from stops where zone_id LIKE '%$suburb;%' order by stop_name;"; | $query = "Select * from stops where zone_id LIKE '%$suburb;%' order by stop_name;"; |
debug($query, "database"); | debug($query, "database"); |
$result = pg_query($conn, $query); | $result = pg_query($conn, $query); |
if (!$result) { | if (!$result) { |
databaseError(pg_result_error($result)); | databaseError(pg_result_error($result)); |
return Array(); | return Array(); |
} | } |
return pg_fetch_all($result); | return pg_fetch_all($result); |
} | } |
function getStopRoutes($stopID, $service_period) | function getStopRoutes($stopID, $service_period) |
{ | { |
if ($service_period == "") $service_period = service_period(); | if ($service_period == "") $service_period = service_period(); |
global $conn; | global $conn; |
$query = "SELECT service_id,trips.route_id,route_short_name,route_long_name | $query = "SELECT service_id,trips.route_id,route_short_name,route_long_name |
FROM stop_times join trips on trips.trip_id = | FROM stop_times join trips on trips.trip_id = |
stop_times.trip_id join routes on trips.route_id = routes.route_id WHERE stop_id = '$stopID' AND service_id='$service_period'"; | stop_times.trip_id join routes on trips.route_id = routes.route_id WHERE stop_id = '$stopID' AND service_id='$service_period'"; |
debug($query, "database"); | debug($query, "database"); |
$result = pg_query($conn, $query); | $result = pg_query($conn, $query); |
if (!$result) { | if (!$result) { |
databaseError(pg_result_error($result)); | databaseError(pg_result_error($result)); |
return Array(); | return Array(); |
} | } |
return pg_fetch_all($result); | return pg_fetch_all($result); |
} | } |
function getStopTrips($stopID, $service_period = "", $afterTime = "") | function getStopTrips($stopID, $service_period = "", $afterTime = "") |
{ | { |
if ($service_period == "") $service_period = service_period(); | if ($service_period == "") $service_period = service_period(); |
$afterCondition = "AND arrival_time > '$afterTime'"; | $afterCondition = "AND arrival_time > '$afterTime'"; |
global $conn; | global $conn; |
if ($afterTime != "") { | if ($afterTime != "") { |
$query = " SELECT stop_times.trip_id,stop_times.arrival_time,stop_times.stop_id,stop_sequence,service_id,trips.route_id,route_short_name,route_long_name, start_times.arrival_time as start_time | $query = " SELECT stop_times.trip_id,stop_times.arrival_time,stop_times.stop_id,stop_sequence,service_id,trips.route_id,route_short_name,route_long_name, end_times.arrival_time as end_time |
FROM stop_times | FROM stop_times |
join trips on trips.trip_id = | join trips on trips.trip_id = |
stop_times.trip_id | stop_times.trip_id |
join routes on trips.route_id = routes.route_id , (SELECT trip_id,arrival_time from stop_times | join routes on trips.route_id = routes.route_id , (SELECT trip_id,max(arrival_time) as arrival_time from stop_times |
WHERE stop_times.arrival_time IS NOT NULL | WHERE stop_times.arrival_time IS NOT NULL group by trip_id) as end_times |
AND stop_sequence = '1') as start_times | |
WHERE stop_times.stop_id = '$stopID' | WHERE stop_times.stop_id = '$stopID' |
AND stop_times.trip_id = start_times.trip_id | AND stop_times.trip_id = end_times.trip_id |
AND service_id='$service_period' | AND service_id='$service_period' |
AND start_times.arrival_time > '$afterTime' | AND end_times.arrival_time > '$afterTime' |
ORDER BY start_time"; | ORDER BY end_time"; |
} | } |
else { | else { |
$query = "SELECT stop_times.trip_id,arrival_time,stop_times.stop_id,stop_sequence,service_id,trips.route_id,route_short_name,route_long_name | $query = "SELECT stop_times.trip_id,arrival_time,stop_times.stop_id,stop_sequence,service_id,trips.route_id,route_short_name,route_long_name |
FROM stop_times | FROM stop_times |
join trips on trips.trip_id = | join trips on trips.trip_id = |
stop_times.trip_id | stop_times.trip_id |
join routes on trips.route_id = routes.route_id | join routes on trips.route_id = routes.route_id |
WHERE stop_times.stop_id = '$stopID' | WHERE stop_times.stop_id = '$stopID' |
AND service_id='$service_period' | AND service_id='$service_period' |
ORDER BY arrival_time"; | ORDER BY arrival_time"; |
} | } |
debug($query, "database"); | debug($query, "database"); |
$result = pg_query($conn, $query); | $result = pg_query($conn, $query); |
if (!$result) { | if (!$result) { |
databaseError(pg_result_error($result)); | databaseError(pg_result_error($result)); |
return Array(); | return Array(); |
} | } |
return pg_fetch_all($result); | return pg_fetch_all($result); |
} | } |
function getStopTripsWithTimes($stopID, $time = "", $service_period = "", $time_range = "") | function getStopTripsWithTimes($stopID, $time = "", $service_period = "", $time_range = "", $limit = "") |
{ | { |
if ($service_period == "") $service_period = service_period(); | if ($service_period == "") $service_period = service_period(); |
if ($time_range == "") $time_range = (24 * 60 * 60); | if ($time_range == "") $time_range = (24 * 60 * 60); |
if ($time == "") $time = ($_SESSION['time'] ? $_SESSION['time'] : date("H:i:s")); | if ($time == "") $time = current_time(); |
if ($limit == "") $limit = 10; | if ($limit == "") $limit = 10; |
$trips = getStopTrips($stopID, $service_period, $time); | $trips = getStopTrips($stopID, $service_period, $time); |
$timedTrips = Array(); | $timedTrips = Array(); |
foreach ($trips as $trip) { | if ($trips && sizeof($trips) > 0) { |
foreach ($trips as $trip) { | |
if ($trip['arrival_time'] != "") { | if ($trip['arrival_time'] != "") { |
if (strtotime($trip['arrival_time']) > strtotime($time) and strtotime($trip['arrival_time']) < (strtotime($time) + $time_range)) { | if (strtotime($trip['arrival_time']) > strtotime($time) and strtotime($trip['arrival_time']) < (strtotime($time) + $time_range)) { |
$timedTrips[] = $trip; | $timedTrips[] = $trip; |
} | } |
} | } |
else { | else { |
$timedTrip = getTimeInterpolatedTripAtStop($trip['trip_id'], $trip['stop_sequence']); | $timedTrip = getTimeInterpolatedTripAtStop($trip['trip_id'], $trip['stop_sequence']); |
if ($timedTrip['arrival_time'] > $time and strtotime($timedTrip['arrival_time']) < (strtotime($time) + $time_range)) { | if ($timedTrip['arrival_time'] > $time and strtotime($timedTrip['arrival_time']) < (strtotime($time) + $time_range)) { |
$timedTrips[] = $timedTrip; | $timedTrips[] = $timedTrip; |
} | } |
} | } |
if (sizeof($timedTrips) > $limit) break; | if (sizeof($timedTrips) > $limit) break; |
} | } |
sktimesort($timedTrips, "arrival_time", true); | sktimesort($timedTrips, "arrival_time", true); |
} | |
return $timedTrips; | return $timedTrips; |
} | } |
?> | ?> |
<?php | <?php |
function getTrip($tripID) | function getTrip($tripID) |
{ | { |
global $conn; | global $conn; |
$query = "Select * from trips | $query = "Select * from trips |
join routes on trips.route_id = routes.route_id | join routes on trips.route_id = routes.route_id |
where trip_id = '$tripID' | where trip_id = '$tripID' |
LIMIT 1"; | LIMIT 1"; |
debug($query, "database"); | debug($query, "database"); |
$result = pg_query($conn, $query); | $result = pg_query($conn, $query); |
if (!$result) { | if (!$result) { |
databaseError(pg_result_error($result)); | databaseError(pg_result_error($result)); |
return Array(); | return Array(); |
} | } |
return pg_fetch_assoc($result); | return pg_fetch_assoc($result); |
} | } |
function getTripShape() | function getTripShape() |
{ | { |
/* def handle_json_GET_tripstopTimes(self, params): | /* def handle_json_GET_tripstopTimes(self, params): |
schedule = self.server.schedule | schedule = self.server.schedule |
try: | try: |
trip = schedule.GetTrip(params.get('trip')) | trip = schedule.GetTrip(params.get('trip')) |
except KeyError: | except KeyError: |
# if a non-existent trip is searched for, the return nothing | # if a non-existent trip is searched for, the return nothing |
return | return |
time_stops = trip.GetTimeInterpolatedStops() | time_stops = trip.GetTimeInterpolatedStops() |
stops = [] | stops = [] |
times = [] | times = [] |
for arr,ts,is_timingpoint in time_stops: | for arr,ts,is_timingpoint in time_stops: |
stops.append(StopToTuple(ts.stop)) | stops.append(StopToTuple(ts.stop)) |
times.append(arr) | times.append(arr) |
return [stops, times] | return [stops, times] |
def handle_json_GET_tripshape(self, params): | def handle_json_GET_tripshape(self, params): |
schedule = self.server.schedule | schedule = self.server.schedule |
try: | try: |
trip = schedule.GetTrip(params.get('trip')) | trip = schedule.GetTrip(params.get('trip')) |
except KeyError: | except KeyError: |
# if a non-existent trip is searched for, the return nothing | # if a non-existent trip is searched for, the return nothing |
return | return |
points = [] | points = [] |
if trip.shape_id: | if trip.shape_id: |
shape = schedule.GetShape(trip.shape_id) | shape = schedule.GetShape(trip.shape_id) |
for (lat, lon, dist) in shape.points: | for (lat, lon, dist) in shape.points: |
points.append((lat, lon)) | points.append((lat, lon)) |
else: | else: |
time_stops = trip.GetTimeStops() | time_stops = trip.GetTimeStops() |
for arr,dep,stop in time_stops: | for arr,dep,stop in time_stops: |
points.append((stop.stop_lat, stop.stop_lon)) | points.append((stop.stop_lat, stop.stop_lon)) |
return points*/ | return points*/ |
} | } |
function getTimeInterpolatedTrip($tripID) | function getTimeInterpolatedTrip($tripID, $range = "") |
{ | { |
global $conn; | global $conn; |
$query = "SELECT stop_times.trip_id,arrival_time,stop_times.stop_id,stop_lat,stop_lon,stop_name,stop_code, | $query = "SELECT stop_times.trip_id,arrival_time,stop_times.stop_id,stop_lat,stop_lon,stop_name,stop_code, |
stop_sequence,service_id,trips.route_id,route_short_name,route_long_name | stop_sequence,service_id,trips.route_id,route_short_name,route_long_name |
FROM stop_times | FROM stop_times |
join trips on trips.trip_id = stop_times.trip_id | join trips on trips.trip_id = stop_times.trip_id |
join routes on trips.route_id = routes.route_id | join routes on trips.route_id = routes.route_id |
join stops on stops.stop_id = stop_times.stop_id | join stops on stops.stop_id = stop_times.stop_id |
WHERE trips.trip_id = '$tripID' ORDER BY stop_sequence"; | WHERE trips.trip_id = '$tripID' $range ORDER BY stop_sequence"; |
debug($query, "database"); | debug($query, "database"); |
$result = pg_query($conn, $query); | $result = pg_query($conn, $query); |
if (!$result) { | if (!$result) { |
databaseError(pg_result_error($result)); | databaseError(pg_result_error($result)); |
return Array(); | return Array(); |
} | } |
$stopTimes = pg_fetch_all($result); | $stopTimes = pg_fetch_all($result); |
$cur_timepoint = Array(); | $cur_timepoint = Array(); |
$next_timepoint = Array(); | $next_timepoint = Array(); |
$distance_between_timepoints = 0.0; | $distance_between_timepoints = 0.0; |
$distance_traveled_between_timepoints = 0.0; | $distance_traveled_between_timepoints = 0.0; |
$rv = Array(); | $rv = Array(); |
foreach ($stopTimes as $i => $stopTime) { | foreach ($stopTimes as $i => $stopTime) { |
if ($stopTime['arrival_time'] != "") { | if ($stopTime['arrival_time'] != "") { |
// is timepoint | // is timepoint |
$cur_timepoint = $stopTime; | $cur_timepoint = $stopTime; |
$distance_between_timepoints = 0.0; | $distance_between_timepoints = 0.0; |
$distance_traveled_between_timepoints = 0.0; | $distance_traveled_between_timepoints = 0.0; |
if ($i + 1 < sizeof($stopTimes)) { | if ($i + 1 < sizeof($stopTimes)) { |
$k = $i + 1; | $k = $i + 1; |
$distance_between_timepoints += distance($stopTimes[$k - 1]["stop_lat"], $stopTimes[$k - 1]["stop_lon"], $stopTimes[$k]["stop_lat"], $stopTimes[$k]["stop_lon"]); | $distance_between_timepoints += distance($stopTimes[$k - 1]["stop_lat"], $stopTimes[$k - 1]["stop_lon"], $stopTimes[$k]["stop_lat"], $stopTimes[$k]["stop_lon"]); |
while ($stopTimes[$k]["arrival_time"] == "" && $k + 1 < sizeof($stopTimes)) { | while ($stopTimes[$k]["arrival_time"] == "" && $k + 1 < sizeof($stopTimes)) { |
$k += 1; | $k += 1; |
//echo "k".$k; | //echo "k".$k; |
$distance_between_timepoints += distance($stopTimes[$k - 1]["stop_lat"], $stopTimes[$k - 1]["stop_lon"], $stopTimes[$k]["stop_lat"], $stopTimes[$k]["stop_lon"]); | $distance_between_timepoints += distance($stopTimes[$k - 1]["stop_lat"], $stopTimes[$k - 1]["stop_lon"], $stopTimes[$k]["stop_lat"], $stopTimes[$k]["stop_lon"]); |
} | } |
$next_timepoint = $stopTimes[$k]; | $next_timepoint = $stopTimes[$k]; |
$rv[] = $stopTime; | $rv[] = $stopTime; |
} | } |
} | } |
else { | else { |
// is untimed point | // is untimed point |
//echo "i".$i; | //echo "i".$i; |
$distance_traveled_between_timepoints += distance($stopTimes[$i - 1]["stop_lat"], $stopTimes[$i - 1]["stop_lon"], $stopTimes[$i]["stop_lat"], $stopTimes[$i]["stop_lon"]); | $distance_traveled_between_timepoints += distance($stopTimes[$i - 1]["stop_lat"], $stopTimes[$i - 1]["stop_lon"], $stopTimes[$i]["stop_lat"], $stopTimes[$i]["stop_lon"]); |
//echo "$distance_traveled_between_timepoints / $distance_between_timepoints<br>"; | //echo "$distance_traveled_between_timepoints / $distance_between_timepoints<br>"; |
$distance_percent = $distance_traveled_between_timepoints / $distance_between_timepoints; | $distance_percent = $distance_traveled_between_timepoints / $distance_between_timepoints; |
if ($next_timepoint["arrival_time"] != "") { | if ($next_timepoint["arrival_time"] != "") { |
$total_time = strtotime($next_timepoint["arrival_time"]) - strtotime($cur_timepoint["arrival_time"]); | $total_time = strtotime($next_timepoint["arrival_time"]) - strtotime($cur_timepoint["arrival_time"]); |
//echo strtotime($next_timepoint["arrival_time"])." - ".strtotime($cur_timepoint["arrival_time"])."<br>"; | //echo strtotime($next_timepoint["arrival_time"])." - ".strtotime($cur_timepoint["arrival_time"])."<br>"; |
$time_estimate = ($distance_percent * $total_time) + strtotime($cur_timepoint["arrival_time"]); | $time_estimate = ($distance_percent * $total_time) + strtotime($cur_timepoint["arrival_time"]); |
$stopTime["arrival_time"] = date("H:i:s", $time_estimate); | $stopTime["arrival_time"] = date("H:i:s", $time_estimate); |
} else { | } else { |
$stopTime["arrival_time"] = $cur_timepoint["arrival_time"]; | $stopTime["arrival_time"] = $cur_timepoint["arrival_time"]; |
} | } |
$rv[] = $stopTime; | $rv[] = $stopTime; |
//var_dump($rv); | //var_dump($rv); |
} | } |
} | } |
return $rv; | return $rv; |
} | } |
function getTimeInterpolatedTripAtStop($tripID, $stop_sequence) | function getTimeInterpolatedTripAtStop($tripID, $stop_sequence) |
{ | { |
foreach (getTimeInterpolatedTrip($tripID) as $tripStop) { | global $conn; |
// limit interpolation to between nearest actual points. | |
$prevTimePoint = pg_fetch_assoc(pg_query($conn," SELECT trip_id,stop_id, | |
stop_sequence | |
FROM stop_times | |
WHERE trip_id = '$tripID' and stop_sequence < $stop_sequence and stop_times.arrival_time IS NOT NULL ORDER BY stop_sequence DESC LIMIT 1")); | |
$nextTimePoint = pg_fetch_assoc(pg_query($conn," SELECT trip_id,stop_id, | |
stop_sequence | |
FROM stop_times | |
WHERE trip_id = '$tripID' and stop_sequence > $stop_sequence and stop_times.arrival_time IS NOT NULL ORDER BY stop_sequence LIMIT 1")); | |
$range = "AND stop_sequence >= '{$prevTimePoint['stop_sequence']}' AND stop_sequence <= '{$nextTimePoint['stop_sequence']}'"; | |
foreach (getTimeInterpolatedTrip($tripID,$range) as $tripStop) { | |
if ($tripStop['stop_sequence'] == $stop_sequence) return $tripStop; | if ($tripStop['stop_sequence'] == $stop_sequence) return $tripStop; |
} | } |
return Array(); | return Array(); |
} | } |
function getTripStartTime($tripID) | function getTripStartTime($tripID) |
{ | { |
global $conn; | global $conn; |
$query = "Select * from stop_times | $query = "Select * from stop_times |
where trip_id = '$tripID' | where trip_id = '$tripID' |
AND arrival_time IS NOT NULL | AND arrival_time IS NOT NULL |
AND stop_sequence = '1'"; | AND stop_sequence = '1'"; |
debug($query, "database"); | debug($query, "database"); |
$result = pg_query($conn, $query); | $result = pg_query($conn, $query); |
if (!$result) { | if (!$result) { |
databaseError(pg_result_error($result)); | databaseError(pg_result_error($result)); |
return Array(); | return Array(); |
} | } |
$r = pg_fetch_assoc($result); | $r = pg_fetch_assoc($result); |
return $r['arrival_time']; | return $r['arrival_time']; |
} | } |
function getActiveTrips($time) | |
{ | |
global $conn; | |
if ($time == "") $time = current_time(); | |
$query = "Select distinct stop_times.trip_id, start_times.arrival_time as start_time, end_times.arrival_time as end_time from stop_times, (SELECT trip_id,arrival_time from stop_times WHERE stop_times.arrival_time IS NOT NULL | |
AND stop_sequence = '1') as start_times, (SELECT trip_id,max(arrival_time) as arrival_time from stop_times WHERE stop_times.arrival_time IS NOT NULL group by trip_id) as end_times | |
WHERE start_times.trip_id = end_times.trip_id AND stop_times.trip_id = end_times.trip_id AND $time > start_times.arrival_time AND $time < end_times.arrival_time"; | |
debug($query, "database"); | |
$result = pg_query($conn, $query); | |
if (!$result) { | |
databaseError(pg_result_error($result)); | |
return Array(); | |
} | |
return pg_fetch_all($result); | |
} | |
function viaPointNames($tripid, $stop_sequence = "") | function viaPointNames($tripid, $stop_sequence = "") |
{ | { |
global $conn; | global $conn; |
$query = "SELECT stop_name | $query = "SELECT stop_name |
FROM stop_times join stops on stops.stop_id = stop_times.stop_id | FROM stop_times join stops on stops.stop_id = stop_times.stop_id |
WHERE stop_times.trip_id = '$tripid' | WHERE stop_times.trip_id = '$tripid' |
".($stop_sequence != "" ? "AND stop_sequence > '$stop_sequence'" : ""). | ".($stop_sequence != "" ? "AND stop_sequence > '$stop_sequence'" : ""). |
"AND substr(stop_code,1,2) != 'Wj' ORDER BY stop_sequence"; | "AND substr(stop_code,1,2) != 'Wj' ORDER BY stop_sequence"; |
debug($query, "database"); | debug($query, "database"); |
$result = pg_query($conn, $query); | $result = pg_query($conn, $query); |
if (!$result) { | if (!$result) { |
databaseError(pg_result_error($result)); | databaseError(pg_result_error($result)); |
return Array(); | return Array(); |
} | } |
$pointNames = pg_fetch_all($result); | $pointNames = pg_fetch_all($result); |
return r_implode(", ", $pointNames); | return r_implode(", ", $pointNames); |
} | } |
?> | ?> |
<?php | <?php |
include ('include/common.inc.php'); | include ('include/common.inc.php'); |
$output = Array(); | $output = Array(); |
$output['hotspots'] = Array(); | $output['hotspots'] = Array(); |
$output['layer'] = "canberrabusstops"; | $output['layer'] = "canberrabusstops"; |
$max_page = 10; | $max_page = 10; |
$max_results = 50; | $max_results = 50; |
$page_start = 0 + filter_var($_REQUEST['pageKey'], FILTER_SANITIZE_NUMBER_INT); | $page_start = 0 + filter_var($_REQUEST['pageKey'], FILTER_SANITIZE_NUMBER_INT); |
$page_end = $max_page + filter_var($_REQUEST['pageKey'], FILTER_SANITIZE_NUMBER_INT); | $page_end = $max_page + filter_var($_REQUEST['pageKey'], FILTER_SANITIZE_NUMBER_INT); |
$lat = filter_var($_REQUEST['lat'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); | $lat = filter_var($_REQUEST['lat'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); |
$lon = filter_var($_REQUEST['lon'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); | $lon = filter_var($_REQUEST['lon'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); |
$max_distance = filter_var($_REQUEST['radius'], FILTER_SANITIZE_NUMBER_INT); | |
$contents = getStopsNearby($lat, $lon, 50); | $contents = getNearbyStops($lat, $lon, 50, $max_distance); |
$stopNum = 0; | $stopNum = 0; |
foreach ($contents as $stop) { | foreach ($contents as $stop) { |
$stopNum++; | $stopNum++; |
if ($stopNum > $page_start && $stopNum <= $page_end) { | if ($stopNum > $page_start && $stopNum <= $page_end) { |
$hotspot = Array(); | $hotspot = Array(); |
$hotspot['id'] = $stop[id]; | $hotspot['id'] = $stop['stop_id']; |
$hotspot['title'] = $stop[name]; | $hotspot['title'] = $stop['stop_name']; |
$hotspot['type'] = 0; | $hotspot['type'] = 0; |
$hotspot['lat'] = floor($stop[lat] * 1000000); | $hotspot['lat'] = floor($stop['stop_lat'] * 1000000); |
$hotspot['lon'] = floor($stop[lon] * 1000000); | $hotspot['lon'] = floor($stop['stop_lon'] * 1000000); |
$hotspot['distance'] = distance($stop[lat], $stop[lon], $_REQUEST['lat'], $_REQUEST['lon']); | $hotspot['distance'] = floor($stop['distance']); |
$hotspot['attribution'] = "ACTION Buses"; | |
$hotspot['actions'] = Array( | $hotspot['actions'] = Array( |
Array( | Array( |
"label" => 'View more trips/information', | "label" => 'View more trips/information', |
'uri' => 'http://bus.lambdacomplex.org/' . 'stop.php?stopid=' . $stop[id] | 'uri' => 'http://bus.lambdacomplex.org/' . 'stop.php?stopid=' . $stop['stop_id'] |
) | ) |
); | ); |
$trips = getStopTripsWithTimes($stop['stop_id'], "", "", "", 3); | |
$url = $APIurl . "/json/stoptrips?stop=" . $row[0] . "&time=" . midnight_seconds() . "&service_period=" . service_period() . "&limit=4&time_range=" . strval(90 * 60); | |
$trips = getStopTrips($stopID); | |
foreach ($trips as $key => $row) { | foreach ($trips as $key => $row) { |
if ($key < 3) { | if ($key < 3) { |
$hotspot['line' . strval($key + 2) ] = $row[1][1] . ' @ ' . midnight_seconds_to_time($row[0]); | $hotspot['line' . strval($key + 2) ] = $row['route_short_name'] . ' ' . $row['route_long_name'] . ' @ ' . $row['arrival_time']; |
} | } |
} | } |
if (sizeof($trips) == 0) $hotspot['line2'] = 'No trips in the near future.'; | if (sizeof($trips) == 0) $hotspot['line2'] = 'No trips in the near future.'; |
$output['hotspots'][] = $hotspot; | $output['hotspots'][] = $hotspot; |
} | } |
} | } |
if (sizeof($hotspot) > 0) { | if (sizeof($hotspot) > 0) { |
$output['errorString'] = 'ok'; | $output['errorString'] = 'ok'; |
$output['errorCode'] = 0; | $output['errorCode'] = 0; |
} | } |
else { | else { |
$output['errorString'] = 'no results, try increasing range'; | $output['errorString'] = 'no results, try increasing range'; |
$output['errorCode'] = 21; | $output['errorCode'] = 21; |
} | } |
if ($page_end >= $max_results || sizeof($hotspot) < $max_page) { | if ($page_end >= $max_results || sizeof($contents) < $page_start+$max_page) { |
$output["morePages"] = false; | $output["morePages"] = false; |
$output["nextPageKey"] = null; | $output["nextPageKey"] = null; |
} | } |
else { | else { |
$output["morePages"] = true; | $output["morePages"] = true; |
$output["nextPageKey"] = $page_end; | $output["nextPageKey"] = $page_end; |
} | } |
echo json_encode($output); | echo json_encode($output); |
?> | ?> |
<?php | <?php |
include ('include/common.inc.php'); | include ('include/common.inc.php'); |
function navbar() | function navbar() |
{ | { |
echo ' | echo ' |
<div data-role="navbar"> | <div data-role="navbar"> |
<ul> | <ul> |
<li><a href="routeList.php">By Final Destination...</a></li> | <li><a href="routeList.php">By Final Destination...</a></li> |
<li><a href="routeList.php?bynumber=yes">By Number... </a></li> | <li><a href="routeList.php?bynumber=yes">By Number... </a></li> |
<li><a href="routeList.php?bysuburb=yes">By Suburb... </a></li> | <li><a href="routeList.php?bysuburb=yes">By Suburb... </a></li> |
<li><a href="routeList.php?nearby=yes">Nearby... </a></li> | <li><a href="routeList.php?nearby=yes">Nearby... </a></li> |
</ul> | </ul> |
</div> | </div> |
'; | '; |
} | } |
if ($_REQUEST['bysuburb']) { | if ($_REQUEST['bysuburb']) { |
include_header("Routes by Suburb", "routeList"); | include_header("Routes by Suburb", "routeList"); |
navbar(); | navbar(); |
echo ' <ul data-role="listview" data-filter="true" data-inset="true" >'; | echo ' <ul data-role="listview" data-filter="true" data-inset="true" >'; |
if (!isset($_REQUEST['firstLetter'])) { | if (!isset($_REQUEST['firstLetter'])) { |
foreach (range('A', 'Z') as $letter) { | foreach (range('A', 'Z') as $letter) { |
echo "<li><a href=\"routeList.php?firstLetter=$letter&bysuburb=yes\">$letter...</a></li>\n"; | echo "<li><a href=\"routeList.php?firstLetter=$letter&bysuburb=yes\">$letter...</a></li>\n"; |
} | } |
} | } |
else { | else { |
foreach ($suburbs as $suburb) { | foreach ($suburbs as $suburb) { |
if (startsWith($suburb, $_REQUEST['firstLetter'])) { | if (startsWith($suburb, $_REQUEST['firstLetter'])) { |
echo '<li><a href="routeList.php?suburb=' . urlencode($suburb) . '">' . $suburb . '</a></li>'; | echo '<li><a href="routeList.php?suburb=' . urlencode($suburb) . '">' . $suburb . '</a></li>'; |
} | } |
} | } |
} | } |
echo '</ul>'; | echo '</ul>'; |
} | } |
else if ($_REQUEST['nearby'] || $_REQUEST['suburb']) { | else if ($_REQUEST['nearby'] || $_REQUEST['suburb']) { |
$routes = Array(); | $routes = Array(); |
if ($_REQUEST['suburb']) { | if ($_REQUEST['suburb']) { |
$suburb = filter_var($_REQUEST['suburb'], FILTER_SANITIZE_STRING); | $suburb = filter_var($_REQUEST['suburb'], FILTER_SANITIZE_STRING); |
include_header($suburb ." - ".ucwords(service_period()), "routeList"); | include_header($suburb ." - ".ucwords(service_period()), "routeList"); |
navbar(); | navbar(); |
timePlaceSettings(); | timePlaceSettings(); |
trackEvent("Route Lists", "Routes By Suburb", $suburb); | trackEvent("Route Lists", "Routes By Suburb", $suburb); |
$routes = getRoutesBySuburb($suburb); | $routes = getRoutesBySuburb($suburb); |
} | } |
if ($_REQUEST['nearby']) { | if ($_REQUEST['nearby']) { |
include_header("Routes Nearby", "routeList", true, true); | include_header("Routes Nearby", "routeList", true, true); |
trackEvent("Route Lists", "Routes Nearby", $_SESSION['lat'].",".$_SESSION['lon']); | trackEvent("Route Lists", "Routes Nearby", $_SESSION['lat'].",".$_SESSION['lon']); |
navbar(); | navbar(); |
timePlaceSettings(true); | timePlaceSettings(true); |
if (!isset($_SESSION['lat']) || !isset($_SESSION['lat']) || $_SESSION['lat'] == "" || $_SESSION['lon'] == "") { | if (!isset($_SESSION['lat']) || !isset($_SESSION['lat']) || $_SESSION['lat'] == "" || $_SESSION['lon'] == "") { |
include_footer(); | include_footer(); |
die(); | die(); |
} | } |
$routes = getRoutesNearby($_SESSION['lat'],$_SESSION['lon']); | $routes = getRoutesNearby($_SESSION['lat'],$_SESSION['lon']); |
} | } |
echo ' <ul data-role="listview" data-filter="true" data-inset="true" >'; | echo ' <ul data-role="listview" data-filter="true" data-inset="true" >'; |
foreach ($routes as $route) { | foreach ($routes as $route) { |
echo '<li><a href="trip.php?routeid=' . $route['route_id'] . '"><h3>' . $route['route_short_name'] . "</h3><p>" . $route['route_long_name'] . " (" . ucwords($route['service_id']) . ")</p>"; | echo '<li><a href="trip.php?routeid=' . $route['route_id'] . '"><h3>' . $route['route_short_name'] . "</h3><p>" . $route['route_long_name'] . " (" . ucwords($route['service_id']) . ")</p>"; |
if ($_REQUEST['nearby']) { | if ($_REQUEST['nearby']) { |
echo '<span class="ui-li-count">' .floor($route['distance']) . 'm away</span>'; | $time = getTimeInterpolatedRouteAtStop($route['route_id'], $route['stop_id']); |
echo '<span class="ui-li-count">'.($time['arrival_time']?$time['arrival_time']:"No more trips today")."<br>" .floor($route['distance']) . 'm away</span>'; | |
} | } |
echo "</a></li>\n"; | echo "</a></li>\n"; |
} | } |
} | } |
else if ($_REQUEST['bynumber'] || $_REQUEST['numberSeries']) { | else if ($_REQUEST['bynumber'] || $_REQUEST['numberSeries']) { |
include_header("Routes by Number", "routeList"); | include_header("Routes by Number", "routeList"); |
navbar(); | navbar(); |
echo ' <ul data-role="listview" data-inset="true">'; | echo ' <ul data-role="listview" data-inset="true">'; |
if ($_REQUEST['bynumber']) { | if ($_REQUEST['bynumber']) { |
$routes = getRoutesByNumber(); | $routes = getRoutesByNumber(); |
$routeSeries = Array(); | $routeSeries = Array(); |
$seriesRange = Array(); | $seriesRange = Array(); |
foreach ($routes as $key => $routeNumber) { | foreach ($routes as $key => $routeNumber) { |
foreach (explode(" ", $routeNumber['route_short_name']) as $routeNumber) { | foreach (explode(" ", $routeNumber['route_short_name']) as $routeNumber) { |
$seriesNum = substr($routeNumber, 0, -1) . "0"; | $seriesNum = substr($routeNumber, 0, -1) . "0"; |
if ($seriesNum == "0") $seriesNum = $routeNumber; | if ($seriesNum == "0") $seriesNum = $routeNumber; |
$finalDigit = substr($routeNumber, sizeof($routeNumber) - 1, 1); | $finalDigit = substr($routeNumber, sizeof($routeNumber) - 1, 1); |
if (isset($seriesRange[$seriesNum])) { | if (isset($seriesRange[$seriesNum])) { |
if ($finalDigit < $seriesRange[$seriesNum]['max']) $seriesRange[$seriesNum]['max'] = $routeNumber; | if ($finalDigit < $seriesRange[$seriesNum]['max']) $seriesRange[$seriesNum]['max'] = $routeNumber; |
if ($finalDigit > $seriesRange[$seriesNum]['min']) $seriesRange[$seriesNum]['min'] = $routeNumber; | if ($finalDigit > $seriesRange[$seriesNum]['min']) $seriesRange[$seriesNum]['min'] = $routeNumber; |
} | } |
else { | else { |
$seriesRange[$seriesNum]['max'] = $routeNumber; | $seriesRange[$seriesNum]['max'] = $routeNumber; |
$seriesRange[$seriesNum]['min'] = $routeNumber; | $seriesRange[$seriesNum]['min'] = $routeNumber; |
} | } |
$routeSeries[$seriesNum][$seriesNum . "-" . $row[1] . "-" . $row[0]] = $row; | $routeSeries[$seriesNum][$seriesNum . "-" . $row[1] . "-" . $row[0]] = $row; |
} | } |
} | } |
ksort($routeSeries); | ksort($routeSeries); |
ksort($seriesRange); | ksort($seriesRange); |
foreach ($routeSeries as $series => $routes) { | foreach ($routeSeries as $series => $routes) { |
echo '<li><a href="' . curPageURL() . '/routeList.php?numberSeries=' . $series . '">'; | echo '<li><a href="' . curPageURL() . '/routeList.php?numberSeries=' . $series . '">'; |
if ($series <= 9) echo $series; | if ($series <= 9) echo $series; |
else echo "{$seriesRange[$series]['min']}-{$seriesRange[$series]['max']}"; | else echo "{$seriesRange[$series]['min']}-{$seriesRange[$series]['max']}"; |
echo "</a></li>\n"; | echo "</a></li>\n"; |
} | } |
} | } |
else if ($_REQUEST['numberSeries']) { | else if ($_REQUEST['numberSeries']) { |
$routes = getRoutesByNumber($_REQUEST['numberSeries']); | $routes = getRoutesByNumber($_REQUEST['numberSeries']); |
foreach ($routes as $route) { | foreach ($routes as $route) { |
echo '<li> <a href="trip.php?routeid=' . $route['route_id'] . '"><h3>' . $route['route_short_name'] . "</h3><p>" . $route['route_long_name'] . " (" . ucwords($route['service_id']) . ")</p></a></li>\n"; | echo '<li> <a href="trip.php?routeid=' . $route['route_id'] . '"><h3>' . $route['route_short_name'] . "</h3><p>" . $route['route_long_name'] . " (" . ucwords($route['service_id']) . ")</p></a></li>\n"; |
} | } |
} | } |
} | } |
else { | else { |
include_header("Routes by Destination", "routeList"); | include_header("Routes by Destination", "routeList"); |
navbar(); | navbar(); |
echo ' <ul data-role="listview" data-inset="true">'; | echo ' <ul data-role="listview" data-inset="true">'; |
if ($_REQUEST['routeDestination']) { | if ($_REQUEST['routeDestination']) { |
foreach (getRoutesByDestination(urldecode($_REQUEST['routeDestination'])) as $route) { | foreach (getRoutesByDestination(urldecode($_REQUEST['routeDestination'])) as $route) { |
echo '<li><a href="trip.php?routeid=' . $route["route_id"] . '"><h3>' . $route["route_short_name"] . '</h3><p>' . $route["route_long_name"] . " (" . ucwords($route['service_id']) . ")</p></a></li>\n"; | echo '<li><a href="trip.php?routeid=' . $route["route_id"] . '"><h3>' . $route["route_short_name"] . '</h3><p>' . $route["route_long_name"] . " (" . ucwords($route['service_id']) . ")</p></a></li>\n"; |
} | } |
} | } |
else { | else { |
foreach (getRoutesByDestination() as $destination) { | foreach (getRoutesByDestination() as $destination) { |
echo '<li><a href="' . curPageURL() . '/routeList.php?routeDestination=' . urlencode($destination['route_long_name']) . '">' . $destination['route_long_name'] . "... </a></li>\n"; | echo '<li><a href="' . curPageURL() . '/routeList.php?routeDestination=' . urlencode($destination['route_long_name']) . '">' . $destination['route_long_name'] . "... </a></li>\n"; |
} | } |
} | } |
} | } |
echo "</ul>\n"; | echo "</ul>\n"; |
include_footer(); | include_footer(); |
?> | ?> |
<?php | <?php |
include ('include/common.inc.php'); | include ('include/common.inc.php'); |
$stopid = filter_var($_REQUEST['stopid'], FILTER_SANITIZE_NUMBER_INT); | $stopid = filter_var($_REQUEST['stopid'], FILTER_SANITIZE_NUMBER_INT); |
$stopcode = filter_var($_REQUEST['stopcode'], FILTER_SANITIZE_STRING); | $stopcode = filter_var($_REQUEST['stopcode'], FILTER_SANITIZE_STRING); |
if ($stopid) $stop = getStop($stopid); | if ($stopid) $stop = getStop($stopid); |
/*if ($stopcode != "" && $stop[5] != $stopcode) { | /*if ($stopcode != "" && $stop[5] != $stopcode) { |
$url = $APIurl . "/json/stopcodesearch?q=" . $stopcode; | $url = $APIurl . "/json/stopcodesearch?q=" . $stopcode; |
$stopsearch = json_decode(getPage($url)); | $stopsearch = json_decode(getPage($url)); |
$stopid = $stopsearch[0][0]; | $stopid = $stopsearch[0][0]; |
$url = $APIurl . "/json/stop?stop_id=" . $stopid; | $url = $APIurl . "/json/stop?stop_id=" . $stopid; |
$stop = json_decode(getPage($url)); | $stop = json_decode(getPage($url)); |
} | } |
if (!startsWith($stop[5], "Wj") && strpos($stop[1], "Platform") === false) { | if (!startsWith($stop[5], "Wj") && strpos($stop[1], "Platform") === false) { |
// expand out to all platforms | // expand out to all platforms |
}*/ | }*/ |
$stops = Array(); | $stops = Array(); |
$stopPositions = Array(); | $stopPositions = Array(); |
$stopNames = Array(); | $stopNames = Array(); |
$tripStopNumbers = Array(); | $tripStopNumbers = Array(); |
$allStopsTrips = Array(); | $allStopsTrips = Array(); |
$fetchedTripSequences = Array(); | $fetchedTripSequences = Array(); |
$stopLinks = ""; | $stopLinks = ""; |
if (isset($_REQUEST['stopids'])) { | if (isset($_REQUEST['stopids'])) { |
$stopids = explode(",", filter_var($_REQUEST['stopids'], FILTER_SANITIZE_STRING)); | $stopids = explode(",", filter_var($_REQUEST['stopids'], FILTER_SANITIZE_STRING)); |
foreach ($stopids as $sub_stopid) { | foreach ($stopids as $sub_stopid) { |
$stops[] = getStop($sub_stopid); | $stops[] = getStop($sub_stopid); |
} | } |
$stop = $stops[0]; | $stop = $stops[0]; |
$stopid = $stops[0]["stop_id"]; | $stopid = $stops[0]["stop_id"]; |
$stopLinks.= "Individual stop pages: "; | $stopLinks.= "Individual stop pages: "; |
foreach ($stops as $key => $sub_stop) { | foreach ($stops as $key => $sub_stop) { |
// $stopNames[$key] = $sub_stop[1] . ' Stop #' . ($key + 1); | // $stopNames[$key] = $sub_stop[1] . ' Stop #' . ($key + 1); |
if (strpos($stop["stop_name"], "Station")) { | if (strpos($stop["stop_name"], "Station")) { |
$stopNames[$key] = 'Platform ' . ($key + 1); | $stopNames[$key] = 'Platform ' . ($key + 1); |
$stopLinks.= '<a href="stop.php?stopid=' . $sub_stop["stop_id"] . '&stopcode=' . $sub_stop["stop_code"] . '">' . $sub_stop["stop_name"] . '</a> '; | $stopLinks.= '<a href="stop.php?stopid=' . $sub_stop["stop_id"] . '&stopcode=' . $sub_stop["stop_code"] . '">' . $sub_stop["stop_name"] . '</a> '; |
} | } |
else { | else { |
$stopNames[$key] = '#' . ($key + 1); | $stopNames[$key] = '#' . ($key + 1); |
$stopLinks.= '<a href="stop.php?stopid=' . $sub_stop["stop_id"] . '&stopcode=' . $sub_stop["stop_code"] . '">' . $sub_stop["stop_name"] . ' Stop #' . ($key + 1) . '</a> '; | $stopLinks.= '<a href="stop.php?stopid=' . $sub_stop["stop_id"] . '&stopcode=' . $sub_stop["stop_code"] . '">' . $sub_stop["stop_name"] . ' Stop #' . ($key + 1) . '</a> '; |
} | } |
$stopPositions[$key] = Array( | $stopPositions[$key] = Array( |
$sub_stop["stop_lat"], | $sub_stop["stop_lat"], |
$sub_stop["stop_lon"] | $sub_stop["stop_lon"] |
); | ); |
$trips = getStopTrips($sub_stop["stop_id"]); | $trips = getStopTrips($sub_stop["stop_id"]); |
$tripSequence = ""; | $tripSequence = ""; |
foreach ($trips as $trip) { | foreach ($trips as $trip) { |
$tripSequence.= "{$trip['trip_id']},"; | $tripSequence.= "{$trip['trip_id']},"; |
$tripStopNumbers[$trip['trip_id']][] = $key; | $tripStopNumbers[$trip['trip_id']][] = $key; |
} | } |
if (!in_array($tripSequence, $fetchedTripSequences)) { | if (!in_array($tripSequence, $fetchedTripSequences)) { |
// only fetch new trip sequences | // only fetch new trip sequences |
$fetchedTripSequences[] = $tripSequence; | $fetchedTripSequences[] = $tripSequence; |
$trips = getStopTripsWithTimes($sub_stop["stop_id"]); | $trips = getStopTripsWithTimes($sub_stop["stop_id"]); |
foreach ($trips as $trip) { | foreach ($trips as $trip) { |
if (!isset($allStopsTrips[$trip["trip_id"]])) $allStopsTrips[$trip["trip_id"]] = $trip; | if (!isset($allStopsTrips[$trip["trip_id"]])) $allStopsTrips[$trip["trip_id"]] = $trip; |
} | } |
} | } |
else { | //else { |
echo "skipped sequence $tripSequence"; | // echo "skipped sequence $tripSequence"; |
} | //} |
} | } |
} | } |
include_header($stop['stop_name'], "stop"); | include_header($stop['stop_name'], "stop"); |
timePlaceSettings(); | timePlaceSettings(); |
echo '<div data-role="content" class="ui-content" role="main"> <a name="maincontent" id="maincontent"></a>'; | echo '<div data-role="content" class="ui-content" role="main"> <a name="maincontent" id="maincontent"></a>'; |
echo $stopLinks; | echo $stopLinks; |
if (sizeof($stops) > 0) { | if (sizeof($stops) > 0) { |
trackEvent("View Stops", "View Combined Stops", $stop["stop_name"], $stop["stop_id"]); | trackEvent("View Stops", "View Combined Stops", $stop["stop_name"], $stop["stop_id"]); |
echo '<p>' . staticmap($stopPositions) . '</p>'; | echo '<p>' . staticmap($stopPositions) . '</p>'; |
} | } |
else { | else { |
trackEvent("View Stops", "View Single Stop", $stop["stop_name"], $stop["stop_id"]); | trackEvent("View Stops", "View Single Stop", $stop["stop_name"], $stop["stop_id"]); |
echo '<p>' . staticmap(Array( | echo '<p>' . staticmap(Array( |
0 => Array( | 0 => Array( |
$stop["stop_lat"], | $stop["stop_lat"], |
$stop["stop_lon"] | $stop["stop_lon"] |
) | ) |
)) . '</p>'; | )) . '</p>'; |
} | } |
echo ' <ul data-role="listview" data-inset="true">'; | echo ' <ul data-role="listview" data-inset="true">'; |
if (sizeof($allStopsTrips) > 0) { | if (sizeof($allStopsTrips) > 0) { |
sktimesort($allStopsTrips,"arrival_time", true); | sktimesort($allStopsTrips,"arrival_time", true); |
$trips = $allStopsTrips; | $trips = $allStopsTrips; |
} | } |
else { | else { |
$trips = getStopTripsWithTimes($stopid); | $trips = getStopTripsWithTimes($stopid); |
} | } |
if (sizeof($trips) == 0) { | if (sizeof($trips) == 0) { |
echo "<li> <center>No trips in the near future.</center> </li>"; | echo "<li> <center>No trips in the near future.</center> </li>"; |
} | } |
else { | else { |
foreach ($trips as $trip) { | foreach ($trips as $trip) { |
echo '<li>'; | echo '<li>'; |
echo '<a href="trip.php?stopid=' . $stopid . '&tripid=' . $trip['trip_id'] . '"><h3>' . $trip['route_short_name'] . " " . $trip['route_long_name'] . "</h3><p>"; | echo '<a href="trip.php?stopid=' . $stopid . '&tripid=' . $trip['trip_id'] . '"><h3>' . $trip['route_short_name'] . " " . $trip['route_long_name'] . "</h3><p>"; |
$viaPoints = viaPointNames($trip['trip_id'], $trip['stop_sequence']); | $viaPoints = viaPointNames($trip['trip_id'], $trip['stop_sequence']); |
if ($viaPoints != "") echo '<br><span class="viaPoints">Via: ' . $viaPoints . '</span>'; | if ($viaPoints != "") echo '<br><span class="viaPoints">Via: ' . $viaPoints . '</span>'; |
if (sizeof($tripStopNumbers) > 0) { | if (sizeof($tripStopNumbers) > 0) { |
echo '<br><small>Boarding At: '; | echo '<br><small>Boarding At: '; |
foreach ($tripStopNumbers[$trip['trip_id']] as $key) { | foreach ($tripStopNumbers[$trip['trip_id']] as $key) { |
echo $stopNames[$key] . ' '; | echo $stopNames[$key] . ' '; |
} | } |
echo '</small>'; | echo '</small>'; |
} | } |
echo '</p>'; | echo '</p>'; |
echo '<p class="ui-li-aside"><strong>' . $trip['arrival_time'] . '</strong></p>'; | echo '<p class="ui-li-aside"><strong>' . $trip['arrival_time'] . '</strong></p>'; |
echo '</a></li>'; | echo '</a></li>'; |
flush(); | flush(); |
@ob_flush(); | @ob_flush(); |
} | } |
} | } |
echo '</ul></div>'; | echo '</ul></div>'; |
include_footer(); | include_footer(); |
?> | ?> |
<?php | <?php |
include ('include/common.inc.php'); | include ('include/common.inc.php'); |
$tripid = filter_var($_REQUEST['tripid'], FILTER_SANITIZE_NUMBER_INT); | $tripid = filter_var($_REQUEST['tripid'], FILTER_SANITIZE_NUMBER_INT); |
$stopid = filter_var($_REQUEST['stopid'], FILTER_SANITIZE_NUMBER_INT); | $stopid = filter_var($_REQUEST['stopid'], FILTER_SANITIZE_NUMBER_INT); |
$routeid = filter_var($_REQUEST['routeid'], FILTER_SANITIZE_NUMBER_INT); | $routeid = filter_var($_REQUEST['routeid'], FILTER_SANITIZE_NUMBER_INT); |
$routetrips = Array(); | $routetrips = Array(); |
if ($_REQUEST['routeid'] && !$_REQUEST['tripid']) { | if ($_REQUEST['routeid'] && !$_REQUEST['tripid']) { |
$trip = getRouteNextTrip($routeid); | $trip = getRouteNextTrip($routeid); |
$tripid = $trip['trip_id']; | $tripid = $trip['trip_id']; |
} else { | } else { |
$trip = getTrip($tripid); | $trip = getTrip($tripid); |
$routeid = $trip["route_id"]; | $routeid = $trip["route_id"]; |
} | } |
$routetrips = getRouteTrips($routeid); | $routetrips = getRouteTrips($routeid); |
include_header("Stops on " . $trip['route_short_name'] . ' ' . $trip['route_long_name'], "trip"); | include_header("Stops on " . $trip['route_short_name'] . ' ' . $trip['route_long_name'], "trip"); |
trackEvent("Route/Trip View","View Route", $trip['route_short_name'] . ' ' . $trip['route_long_name'], $routeid); | trackEvent("Route/Trip View","View Route", $trip['route_short_name'] . ' ' . $trip['route_long_name'], $routeid); |
echo '<p><h2>Via:</h2> ' . viaPointNames($tripid) . '</small></p>'; | echo '<p><h2>Via:</h2> ' . viaPointNames($tripid) . '</small></p>'; |
echo '<p><h2>Other Trips:</h2> '; | echo '<p><h2>Other Trips:</h2> '; |
foreach (getRouteTrips($routeid) as $othertrip) { | foreach (getRouteTrips($routeid) as $othertrip) { |
echo '<a href="trip.php?tripid=' . $othertrip['trip_id'] . "&routeid=" . $routeid . '">' . str_replace(" ",":00",str_replace(":00"," ",$othertrip['arrival_time'])). '</a> '; | echo '<a href="trip.php?tripid=' . $othertrip['trip_id'] . "&routeid=" . $routeid . '">' . str_replace(" ",":00",str_replace(":00"," ",$othertrip['arrival_time'])). '</a> '; |
} | } |
flush(); @ob_flush(); | flush(); @ob_flush(); |
echo '</p><p><h2>Other directions/timing periods:</h2> '; | echo '</p><p><h2>Other directions/timing periods:</h2> '; |
foreach (getRoutesByNumber($trip['route_short_name']) as $row) { | foreach (getRoutesByNumber($trip['route_short_name']) as $row) { |
if ($row['route_id'] != $routeid) echo '<a href="trip.php?routeid=' . $row['route_id'] . '">' . $row['route_long_name'] . ' (' . ucwords($row['service_id']) . ')</a> '; | if ($row['route_id'] != $routeid) echo '<a href="trip.php?routeid=' . $row['route_id'] . '">' . $row['route_long_name'] . ' (' . ucwords($row['service_id']) . ')</a> '; |
} | } |
flush(); @ob_flush(); | flush(); @ob_flush(); |
echo ' <ul data-role="listview" data-inset="true">'; | echo ' <ul data-role="listview" data-inset="true">'; |
$stopsGrouped = Array(); | $stopsGrouped = Array(); |
$tripStopTimes = getTimeInterpolatedTrip($tripid); | $tripStopTimes = getTimeInterpolatedTrip($tripid); |
echo '<li data-role="list-divider">' . $tripStopTimes[0]['arrival_time'] . ' to ' . $tripStopTimes[sizeof($tripStopTimes) - 1]['arrival_time'] . ' ' . $trips[1]->route_long_name . '</li>'; | echo '<li data-role="list-divider">' . $tripStopTimes[0]['arrival_time'] . ' to ' . $tripStopTimes[sizeof($tripStopTimes) - 1]['arrival_time'] . ' ' . $trips[1]->route_long_name . '</li>'; |
foreach ($tripStopTimes as $key => $tripStopTime) { | foreach ($tripStopTimes as $key => $tripStopTime) { |
if (($tripStopTimes[$key]["stop_name"] != $tripStopTimes[$key + 1]["stop_name"]) || $key + 1 >= sizeof($tripStopTimes)) { | if (($tripStopTimes[$key]["stop_name"] != $tripStopTimes[$key + 1]["stop_name"]) || $key + 1 >= sizeof($tripStopTimes)) { |
echo '<li>'; | echo '<li>'; |
if (!startsWith($tripStopTime['stop_code'], "Wj")) echo '<img src="css/images/time.png" alt="Timing Point" class="ui-li-icon">'; | if (!startsWith($tripStopTime['stop_code'], "Wj")) echo '<img src="css/images/time.png" alt="Timing Point" class="ui-li-icon">'; |
if (sizeof($stopsGrouped) > 0) { | if (sizeof($stopsGrouped) > 0) { |
// print and empty grouped stops | // print and empty grouped stops |
// subsequent duplicates | // subsequent duplicates |
$stopsGrouped["stop_ids"][] = $tripStopTime['stop_id']; | $stopsGrouped["stop_ids"][] = $tripStopTime['stop_id']; |
$stopsGrouped["endTime"] = $tripStopTime['arrival_time']; | $stopsGrouped["endTime"] = $tripStopTime['arrival_time']; |
echo '<a href="stop.php?stopids=' . implode(",", $stopsGrouped['stop_ids']) . '">'; | echo '<a href="stop.php?stopids=' . implode(",", $stopsGrouped['stop_ids']) . '">'; |
echo '<p class="ui-li-aside">' . $stopsGrouped['startTime'] . ' to ' . $stopsGrouped['endTime']; | |
echo '<p class="ui-li-aside">' . $stopsGrouped['startTime'] . ' to ' . $stopsGrouped['endTime'] . '</p>'; | echo '</p>'; |
if (isset($_SESSION['lat']) && isset($_SESSION['lon'])) { | |
echo '<span class="ui-li-count">' . distance($stop['stop_lat'],$stop['stop_lon'], $_SESSION['lat'], $_SESSION['lon'], true) . 'm away</span>'; | |
} | |
echo bracketsMeanNewLine($tripStopTime["stop_name"]); | echo bracketsMeanNewLine($tripStopTime["stop_name"]); |
echo '</a></li>'; | echo '</a></li>'; |
flush(); @ob_flush(); | flush(); @ob_flush(); |
$stopsGrouped = Array(); | $stopsGrouped = Array(); |
} | } |
else { | else { |
// just a normal stop | // just a normal stop |
echo '<a href="stop.php?stopid=' . $tripStopTime['stop_id'] . (startsWith($tripStopTime['stop_code'], "Wj") ? '&stopcode=' . $tripStopTime['stop_code'] : "") . '">'; | echo '<a href="stop.php?stopid=' . $tripStopTime['stop_id'] . (startsWith($tripStopTime['stop_code'], "Wj") ? '&stopcode=' . $tripStopTime['stop_code'] : "") . '">'; |
echo '<p class="ui-li-aside">' . $tripStopTime['arrival_time'] . '</p>'; | echo '<p class="ui-li-aside">' . $tripStopTime['arrival_time'] . '</p>'; |
echo bracketsMeanNewLine($tripStopTime['stop_name']); | if (isset($_SESSION['lat']) && isset($_SESSION['lon'])) { |
echo '<span class="ui-li-count">' . distance($stop['stop_lat'],$stop['stop_lon'], $_SESSION['lat'], $_SESSION['lon'], true) . 'm away</span>'; | |
} | |
echo bracketsMeanNewLine($tripStopTime['stop_name']); | |
echo '</a></li>'; | echo '</a></li>'; |
flush(); @ob_flush(); | flush(); @ob_flush(); |
} | } |
} | } |
else { | else { |
// this is a duplicated line item | // this is a duplicated line item |
if ($key - 1 <= 0 || ($tripStopTimes[$key]['stop_name'] != $tripStopTimes[$key - 1]['stop_name'])) { | if ($key - 1 <= 0 || ($tripStopTimes[$key]['stop_name'] != $tripStopTimes[$key - 1]['stop_name'])) { |
// first duplicate | // first duplicate |
$stopsGrouped = Array( | $stopsGrouped = Array( |
"name" => $tripStopTime['stop_name'], | "name" => $tripStopTime['stop_name'], |
"startTime" => $tripStopTime['arrival_time'], | "startTime" => $tripStopTime['arrival_time'], |
"stop_ids" => Array( | "stop_ids" => Array( |
$tripStopTime['stop_id'] | $tripStopTime['stop_id'] |
) | ) |
); | ); |
} | } |
else { | else { |
// subsequent duplicates | // subsequent duplicates |
$stopsGrouped["stop_ids"][] = $tripStopTime['stop_id']; | $stopsGrouped["stop_ids"][] = $tripStopTime['stop_id']; |
$stopsGrouped["endTime"] = $tripStopTime['arrival_time']; | $stopsGrouped["endTime"] = $tripStopTime['arrival_time']; |
} | } |
} | } |
} | } |
echo '</ul>'; | echo '</ul>'; |
include_footer(); | include_footer(); |
?> | ?> |