<?php | <?php |
/* | /* |
* Copyright 2010,2011 Alexander Sadleir | * Copyright 2010,2011 Alexander Sadleir |
Licensed under the Apache License, Version 2.0 (the "License"); | Licensed under the Apache License, Version 2.0 (the "License"); |
you may not use this file except in compliance with the License. | you may not use this file except in compliance with the License. |
You may obtain a copy of the License at | You may obtain a copy of the License at |
http://www.apache.org/licenses/LICENSE-2.0 | http://www.apache.org/licenses/LICENSE-2.0 |
Unless required by applicable law or agreed to in writing, software | Unless required by applicable law or agreed to in writing, software |
distributed under the License is distributed on an "AS IS" BASIS, | distributed under the License is distributed on an "AS IS" BASIS, |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
See the License for the specific language governing permissions and | See the License for the specific language governing permissions and |
limitations under the License. | limitations under the License. |
*/ | */ |
include ('include/common.inc.php'); | include ('include/common.inc.php'); |
include_header("About", "about") | include_header("About", "about") |
?> | ?> |
<p> | <p> |
Busness Time - An ACT bus timetable webapp<br /> | Busness Time - An ACT bus timetable webapp<br /> |
Based on the maxious-canberra-transit-feed (<a | Based on the maxious-canberra-transit-feed (<a |
href="http://s3-ap-southeast-1.amazonaws.com/busresources/cbrfeed.zip">download</a>, | href="http://s3-ap-southeast-1.amazonaws.com/busresources/cbrfeed.zip">download</a>, |
last updated <?php echo date("F d Y.", @filemtime('cbrfeed.zip')); ?>)<br /> | last updated <?php echo date("F d Y.", @filemtime('cbrfeed.zip')); ?>)<br /> |
Source code for the <a | Source code for the <a |
href="https://github.com/maxious/ACTBus-data">transit | href="https://github.com/maxious/ACTBus-data">transit |
feed</a> and <a href="https://github.com/maxious/ACTBus-ui">this | feed</a> and <a href="https://github.com/maxious/ACTBus-ui">this |
site</a> available from github.<br /> | site</a> available from github.<br /> |
Uses jQuery Mobile, PHP, PostgreSQL, OpenTripPlanner, OpenLayers, OpenStreetMap, Cloudmade Geocoder and Tile Service<br /> | Uses jQuery Mobile, PHP, PostgreSQL, OpenTripPlanner, OpenLayers, OpenStreetMap, Cloudmade Geocoder and Tile Service<br /> |
Suburb Geocoding Based on <A href="http://www.abs.gov.au/AUSSTATS/abs@.nsf/Lookup/1270.0.55.003Main+Features1July%202011?OpenDocument">Australian Bureau of Statistics data.</a><br /> | Suburb Geocoding Based on <A href="http://www.abs.gov.au/AUSSTATS/abs@.nsf/Lookup/1270.0.55.003Main+Features1July%202011?OpenDocument">Australian Bureau of Statistics data.</a><br /> |
Street geocoding based on work by OpenStreetMap contributors<br> | Street geocoding based on work by OpenStreetMap contributors<br> |
<br /> | <br /> |
Feedback encouraged; contact maxious@lambdacomplex.org<br /> | Feedback encouraged; contact maxious@lambdacomplex.org<br /> |
<br /> | <br /> |
Some icons by Joseph Wain / glyphish.com<br /> | Some icons by Joseph Wain / glyphish.com<br /> |
Native clients also available for iPhone(<a href="http://itunes.apple.com/au/app/cbrtimetable/id444287349?mt=8">cbrTimetable by Sandor Kolotenko</a> | Native clients also available for iPhone(<a href="http://itunes.apple.com/au/app/cbrtimetable/id444287349?mt=8">cbrTimetable by Sandor Kolotenko</a> |
, <a href="http://itunes.apple.com/au/app/act-buses/id376634797?mt=8">ACT Buses by David Sullivan</a>) | , <a href="http://itunes.apple.com/au/app/act-buses/id376634797?mt=8">ACT Buses by David Sullivan</a>) |
, Android (<a href="https://market.android.com/details?id=com.action">MyBus 2.0 by Imagine Team</a>) | , Android (<a href="https://market.android.com/details?id=com.action">MyBus 2.0 by Imagine Team</a>, <A href="https://market.android.com/details?id=GetMe2CanberraFree.source">GetMe2 Canberra by |
Colin Thompson </a>) | |
and Windows Phone 7 (<a href="http://www.windowsphone.com/en-AU/apps/d840375e-429c-4aa4-a358-80eec6ea9e66">TransHub Canberra by Soul Solutions</a>) Other web clients include <a href="http://canberra.itranzit.com/option.html">iTranzit</a>. | and Windows Phone 7 (<a href="http://www.windowsphone.com/en-AU/apps/d840375e-429c-4aa4-a358-80eec6ea9e66">TransHub Canberra by Soul Solutions</a>) Other web clients include <a href="http://canberra.itranzit.com/option.html">iTranzit</a>. |
<br /> | <br /> |
GTFS-realtime API: | GTFS-realtime API: |
Alerts and Trip Updates (but only Cancelled or Stop Skipped) | Alerts and Trip Updates (but only Cancelled or Stop Skipped) |
Default format binary Protocol Buffer but can get JSON by adding ?ascii=yes | Default format binary Protocol Buffer but can get JSON by adding ?ascii=yes |
<br /> | <br /> |
<br /> | <br /> |
<small>Disclaimer: The content of this website is of a general and informative nature. Please check with printed timetables or those available on http://action.act.gov.au before your trip. | <small>Disclaimer: The content of this website is of a general and informative nature. Please check with printed timetables or those available on http://action.act.gov.au before your trip. |
Whilst every effort has been made to ensure the high quality and accuracy of the Site, the Author makes no warranty, | Whilst every effort has been made to ensure the high quality and accuracy of the Site, the Author makes no warranty, |
express or implied concerning the topicality, correctness, completeness or quality of the information, which is provided | express or implied concerning the topicality, correctness, completeness or quality of the information, which is provided |
"as is". The Author expressly disclaims all warranties, including but not limited to warranties of fitness for a particular purpose and warranties of merchantability. | "as is". The Author expressly disclaims all warranties, including but not limited to warranties of fitness for a particular purpose and warranties of merchantability. |
All offers are not binding and without obligation. The Author expressly reserves the right, in his discretion, to suspend, | All offers are not binding and without obligation. The Author expressly reserves the right, in his discretion, to suspend, |
change, modify, add or remove portions of the Site and to restrict or terminate the use and accessibility of the Site | change, modify, add or remove portions of the Site and to restrict or terminate the use and accessibility of the Site |
without prior notice. </small> | without prior notice. </small> |
<?php | <?php |
include_footer(); | include_footer(); |
?> | ?> |
<?php | <?php |
/* | /* |
* Copyright 2010,2011 Alexander Sadleir | * Copyright 2010,2011 Alexander Sadleir |
Licensed under the Apache License, Version 2.0 (the "License"); | Licensed under the Apache License, Version 2.0 (the "License"); |
you may not use this file except in compliance with the License. | you may not use this file except in compliance with the License. |
You may obtain a copy of the License at | You may obtain a copy of the License at |
http://www.apache.org/licenses/LICENSE-2.0 | http://www.apache.org/licenses/LICENSE-2.0 |
Unless required by applicable law or agreed to in writing, software | Unless required by applicable law or agreed to in writing, software |
distributed under the License is distributed on an "AS IS" BASIS, | distributed under the License is distributed on an "AS IS" BASIS, |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
See the License for the specific language governing permissions and | See the License for the specific language governing permissions and |
limitations under the License. | limitations under the License. |
*/ | */ |
if (isset($_REQUEST['firstLetter'])) { | if (isset($_REQUEST['firstLetter'])) { |
$firstLetter = filter_var($_REQUEST['firstLetter'], FILTER_SANITIZE_STRING); | $firstLetter = filter_var($_REQUEST['firstLetter'], FILTER_SANITIZE_STRING); |
} | } |
if (isset($_REQUEST['bysuburbs'])) { | if (isset($_REQUEST['bysuburbs'])) { |
$bysuburbs = true; | $bysuburbs = true; |
} | } |
if (isset($_REQUEST['bynumber'])) { | if (isset($_REQUEST['bynumber'])) { |
$bynumber = true; | $bynumber = true; |
} | } |
if (isset($_REQUEST['allstops'])) { | if (isset($_REQUEST['allstops'])) { |
$allstops = true; | $allstops = true; |
} | } |
if (isset($_REQUEST['nearby'])) { | if (isset($_REQUEST['nearby'])) { |
$nearby = true; | $nearby = true; |
} | } |
if (isset($_REQUEST['suburb'])) { | if (isset($_REQUEST['suburb'])) { |
$suburb = $_REQUEST['suburb']; | $suburb = $_REQUEST['suburb']; |
} | } |
if (isset($_REQUEST['pageKey'])) { | if (isset($_REQUEST['pageKey'])) { |
$pageKey = filter_var($_REQUEST['pageKey'], FILTER_SANITIZE_NUMBER_INT); | $pageKey = filter_var($_REQUEST['pageKey'], FILTER_SANITIZE_NUMBER_INT); |
} | } |
if (isset($_REQUEST['lat'])) { | if (isset($_REQUEST['lat'])) { |
$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); |
} | } |
if (isset($_REQUEST['lon'])) { | if (isset($_REQUEST['lon'])) { |
$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); |
} | } |
if (isset($_REQUEST['radius'])) { | if (isset($_REQUEST['radius'])) { |
$max_distance = filter_var($_REQUEST['radius'], FILTER_SANITIZE_NUMBER_INT); | $max_distance = filter_var($_REQUEST['radius'], FILTER_SANITIZE_NUMBER_INT); |
} | } |
if (isset($_REQUEST['numberSeries'])) { | if (isset($_REQUEST['numberSeries'])) { |
$numberSeries = filter_var($_REQUEST['numberSeries'], FILTER_SANITIZE_NUMBER_INT); | $numberSeries = filter_var($_REQUEST['numberSeries'], FILTER_SANITIZE_NUMBER_INT); |
} | } |
if (isset($_REQUEST['routeDestination'])) { | if (isset($_REQUEST['routeDestination'])) { |
$routeDestination = urldecode(filter_var($_REQUEST['routeDestination'], FILTER_SANITIZE_ENCODED)); | $routeDestination = urldecode(filter_var($_REQUEST['routeDestination'], FILTER_SANITIZE_ENCODED)); |
} | } |
if (isset($_REQUEST['stopcode'])) { | if (isset($_REQUEST['stopcode'])) { |
$stopcode = filter_var($_REQUEST['stopcode'], FILTER_SANITIZE_STRING); | $stopcode = filter_var($_REQUEST['stopcode'], FILTER_SANITIZE_STRING); |
} | } |
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)); |
} | } |
if (isset($_REQUEST['routeids'])) { | |
$routeids = explode(",", filter_var($_REQUEST['routeids'], FILTER_SANITIZE_STRING)); | |
} | |
if (isset($_REQUEST['tripid'])) { | if (isset($_REQUEST['tripid'])) { |
$tripid = filter_var($_REQUEST['tripid'], FILTER_SANITIZE_STRING); | $tripid = filter_var($_REQUEST['tripid'], FILTER_SANITIZE_STRING); |
} | |
if (isset($_REQUEST['routeid'])) { | |
$routeid = filter_var($_REQUEST['routeid'], FILTER_SANITIZE_STRING); | |
} | |
if (isset($_REQUEST['directionid'])) { | |
$directionid = filter_var($_REQUEST['directionid'], FILTER_SANITIZE_STRING); | |
} | } |
if (isset($_REQUEST['stopid'])) { | if (isset($_REQUEST['stopid'])) { |
$stopid = filter_var($_REQUEST['stopid'], FILTER_SANITIZE_NUMBER_INT); | $stopid = filter_var($_REQUEST['stopid'], FILTER_SANITIZE_NUMBER_INT); |
} | } |
if (isset($_REQUEST['geolocate'])) { | if (isset($_REQUEST['geolocate'])) { |
$geolocate = filter_var($_REQUEST['geolocate'], FILTER_SANITIZE_URL); | $geolocate = filter_var($_REQUEST['geolocate'], FILTER_SANITIZE_URL); |
} | } |
?> | ?> |
<?php | <?php |
/* | /* |
* Copyright 2010,2011 Alexander Sadleir | * Copyright 2010,2011 Alexander Sadleir |
Licensed under the Apache License, Version 2.0 (the "License"); | Licensed under the Apache License, Version 2.0 (the "License"); |
you may not use this file except in compliance with the License. | you may not use this file except in compliance with the License. |
You may obtain a copy of the License at | You may obtain a copy of the License at |
http://www.apache.org/licenses/LICENSE-2.0 | http://www.apache.org/licenses/LICENSE-2.0 |
Unless required by applicable law or agreed to in writing, software | Unless required by applicable law or agreed to in writing, software |
distributed under the License is distributed on an "AS IS" BASIS, | distributed under the License is distributed on an "AS IS" BASIS, |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
See the License for the specific language governing permissions and | See the License for the specific language governing permissions and |
limitations under the License. | limitations under the License. |
*/ | */ |
// 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['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 { |
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 if (strpos($geolocate, "(") !== false) { | } else if (strpos($geolocate, "(") !== false) { |
$geoParts = explode("(", $geolocate); | $geoParts = explode("(", $geolocate); |
$locateparts = explode(",", str_replace(")", "", $geoParts[1])); | $locateparts = explode(",", str_replace(")", "", $geoParts[1])); |
$_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'] = ""; |
} | } |
} | } |
} | } |
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() { | function current_time($time = "") { |
return ($_REQUEST['time'] ? $_REQUEST['time'] : date("H:i:s")); | if ($_REQUEST['time']) return $_REQUEST['time']; |
else if ($time != "") date("H:i:s",$time); | |
else return date("H:i:s"); | |
} | } |
?> | ?> |
<?php | <?php |
/* | /* |
* Copyright 2010,2011 Alexander Sadleir | * Copyright 2010,2011 Alexander Sadleir |
Licensed under the Apache License, Version 2.0 (the "License"); | Licensed under the Apache License, Version 2.0 (the "License"); |
you may not use this file except in compliance with the License. | you may not use this file except in compliance with the License. |
You may obtain a copy of the License at | You may obtain a copy of the License at |
http://www.apache.org/licenses/LICENSE-2.0 | http://www.apache.org/licenses/LICENSE-2.0 |
Unless required by applicable law or agreed to in writing, software | Unless required by applicable law or agreed to in writing, software |
distributed under the License is distributed on an "AS IS" BASIS, | distributed under the License is distributed on an "AS IS" BASIS, |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
See the License for the specific language governing permissions and | See the License for the specific language governing permissions and |
limitations under the License. | limitations under the License. |
*/ | */ |
// 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; |
//if (stristr($_SERVER['HTTP_USER_AGENT'], 'Googlebot') return ""; | //if (stristr($_SERVER['HTTP_USER_AGENT'], 'Googlebot') return ""; |
$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 = (isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : ""); | $referer = (isset($_SERVER["HTTP_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) { |
global $basePath, $GTFSREnabled; | global $basePath, $GTFSREnabled; |
echo ' | echo ' |
<!DOCTYPE html> | <!DOCTYPE html> |
<html lang="en"> | <html lang="en"> |
<head> | <head> |
<meta charset="UTF-8"> | <meta charset="UTF-8"> |
<meta name="viewport" content="width=device-width, initial-scale=1"> | <meta name="viewport" content="width=device-width, initial-scale=1"> |
<title>' . $pageTitle . ' - Canberra Bus Timetable</title> | <title>' . $pageTitle . ' - Canberra Bus Timetable</title> |
<meta name="google-site-verification" content="-53T5Qn4TB_de1NyfR_ZZkEVdUNcNFSaYKSFkWKx-sY" /> | <meta name="google-site-verification" content="-53T5Qn4TB_de1NyfR_ZZkEVdUNcNFSaYKSFkWKx-sY" /> |
<link rel="dns-prefetch" href="//code.jquery.com"> | <link rel="dns-prefetch" href="//code.jquery.com"> |
<link rel="dns-prefetch" href="//ajax.googleapis.com"> | <link rel="dns-prefetch" href="//ajax.googleapis.com"> |
<link rel="stylesheet" href="' . $basePath . 'css/jquery-ui-1.8.12.custom.css" />'; | <link rel="stylesheet" href="' . $basePath . 'css/jquery-ui-1.8.12.custom.css" />'; |
$jqmVersion = "1.0"; | $jqmVersion = "1.0"; |
if (isDebugServer()) { | if (isDebugServer()) { |
$jqmcss = $basePath . "css/jquery.mobile-$jqmVersion.css"; | $jqmcss = $basePath . "css/jquery.mobile-$jqmVersion.css"; |
$jqjs = $basePath . "js/jquery-1.6.4.min.js"; | $jqjs = $basePath . "js/jquery-1.6.4.min.js"; |
$jqmjs = $basePath . "js/jquery.mobile-$jqmVersion.js"; | $jqmjs = $basePath . "js/jquery.mobile-$jqmVersion.js"; |
$jqmcss = $basePath . "css/jquery.mobile-b90eab4935.css"; | $jqmcss = $basePath . "css/jquery.mobile-b90eab4935.css"; |
$jqmjs = $basePath . "js/jquery.mobile-b90eab4935.js"; | $jqmjs = $basePath . "js/jquery.mobile-b90eab4935.js"; |
} else { | } else { |
$jqmcss = "//code.jquery.com/mobile/$jqmVersion/jquery.mobile-$jqmVersion.min.css"; | $jqmcss = "//code.jquery.com/mobile/$jqmVersion/jquery.mobile-$jqmVersion.min.css"; |
$jqjs = "//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"; | $jqjs = "//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"; |
$jqmjs = "//code.jquery.com/mobile/$jqmVersion/jquery.mobile-$jqmVersion.min.js"; | $jqmjs = "//code.jquery.com/mobile/$jqmVersion/jquery.mobile-$jqmVersion.min.js"; |
} | } |
echo '<link rel="stylesheet" href="' . $jqmcss . '" /> | echo '<link rel="stylesheet" href="' . $jqmcss . '" /> |
<script src="' . $jqjs . '"></script> | <script src="' . $jqjs . '"></script> |
<script>$(document).bind("mobileinit", function(){ | <script>$(document).bind("mobileinit", function(){ |
$.mobile.ajaxEnabled = false; | $.mobile.ajaxEnabled = false; |
}); | }); |
</script> | </script> |
<script src="' . $jqmjs . '"></script> | <script src="' . $jqmjs . '"></script> |
<script src="' . $basePath . 'js/jquery.ui.core.min.js"></script> | <script src="' . $basePath . 'js/jquery.ui.core.min.js"></script> |
<script src="' . $basePath . 'js/jquery.ui.position.min.js"></script> | <script src="' . $basePath . 'js/jquery.ui.position.min.js"></script> |
<script src="' . $basePath . 'js/jquery.ui.widget.min.js"></script> | <script src="' . $basePath . 'js/jquery.ui.widget.min.js"></script> |
<script src="' . $basePath . 'js/jquery.ui.autocomplete.min.js"></script> | <script src="' . $basePath . 'js/jquery.ui.autocomplete.min.js"></script> |
<script> | <script> |
$(function() { | $(function() { |
$( "#geolocate" ).autocomplete({ | $( "#geolocate" ).autocomplete({ |
source: "lib/autocomplete.php", | source: "lib/autocomplete.php", |
minLength: 2 | minLength: 2 |
}); | }); |
$( "#from" ).autocomplete({ | $( "#from" ).autocomplete({ |
source: "lib/autocomplete.php", | source: "lib/autocomplete.php", |
minLength: 2 | minLength: 2 |
}); | }); |
$( "#to" ).autocomplete({ | $( "#to" ).autocomplete({ |
source: "lib/autocomplete.php", | source: "lib/autocomplete.php", |
minLength: 2 | minLength: 2 |
}); | }); |
}); | }); |
</script>'; | </script>'; |
echo '<style type="text/css">'; | echo '<style type="text/css">'; |
if (strstr($_SERVER['HTTP_USER_AGENT'], 'Android')) | if (strstr($_SERVER['HTTP_USER_AGENT'], 'Android')) |
echo '.ui-shadow,.ui-btn-up-a,.ui-btn-hover-a,.ui-btn-down-a,.ui-body-b,.ui-btn-up-b,.ui-btn-hover-b, | echo '.ui-shadow,.ui-btn-up-a,.ui-btn-hover-a,.ui-btn-down-a,.ui-body-b,.ui-btn-up-b,.ui-btn-hover-b, |
.ui-btn-down-b,.ui-bar-c,.ui-body-c,.ui-btn-up-c,.ui-btn-hover-c,.ui-btn-down-c,.ui-bar-c,.ui-body-d, | .ui-btn-down-b,.ui-bar-c,.ui-body-c,.ui-btn-up-c,.ui-btn-hover-c,.ui-btn-down-c,.ui-bar-c,.ui-body-d, |
.ui-btn-up-d,.ui-btn-hover-d,.ui-btn-down-d,.ui-bar-d,.ui-body-e,.ui-btn-up-e,.ui-btn-hover-e, | .ui-btn-up-d,.ui-btn-hover-d,.ui-btn-down-d,.ui-bar-d,.ui-body-e,.ui-btn-up-e,.ui-btn-hover-e, |
.ui-btn-down-e,.ui-bar-e,.ui-overlay-shadow,.ui-shadow,.ui-btn-active,.ui-body-a,.ui-bar-a { | .ui-btn-down-e,.ui-bar-e,.ui-overlay-shadow,.ui-shadow,.ui-btn-active,.ui-body-a,.ui-bar-a { |
text-shadow: none; | text-shadow: none; |
box-shadow: none; | box-shadow: none; |
-webkit-box-shadow: none; | -webkit-box-shadow: none; |
}'; | }'; |
echo '</style>'; | echo '</style>'; |
echo '<link rel="stylesheet" href="' . $basePath . 'css/local.css.php" />'; | echo '<link rel="stylesheet" href="' . $basePath . 'css/local.css.php" />'; |
if (isIOSDevice()){ | if (isIOSDevice()){ |
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({ async: false, | $.ajax({ async: false, |
success: function(){ | success: function(){ |
location.reload(true); | location.reload(true); |
}, | }, |
url: \"include/common.inc.php?geolocate=yes&lat=\"+position.coords.latitude+\"&lon=\"+position.coords.longitude }); | url: \"include/common.inc.php?geolocate=yes&lat=\"+position.coords.latitude+\"&lon=\"+position.coords.longitude }); |
} | } |
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'] == "") | if (!isset($_SESSION['lat']) || $_SESSION['lat'] == "") |
echo "geolocate();"; | echo "geolocate();"; |
echo "</script> "; | echo "</script> "; |
} | } |
if (isAnalyticsOn()) | if (isAnalyticsOn()) |
echo ' | 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']); |
_gaq.push(['_trackPageLoadTime']); | _gaq.push(['_trackPageLoadTime']); |
</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="' . (isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : "javascript:history.go(-1)") . '" data-icon="arrow-l" data-rel="back" class="ui-btn-left">Back</a> | <a href="' . (isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : "javascript:history.go(-1)") . '" data-icon="arrow-l" data-rel="back" class="ui-btn-left">Back</a> |
<h1>' . $pageTitle . '</h1> | <h1>' . $pageTitle . '</h1> |
<a href="' . $basePath . '/index.php" data-icon="home" class="ui-btn-right">Home</a> | <a href="' . $basePath . '/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"> '; |
if ($GTFSREnabled) { | if ($GTFSREnabled) { |
$overrides = getServiceOverride(); | $overrides = getServiceOverride(); |
if ($overrides['service_id']) { | if (isset($overrides['service_id'])) { |
if ($overrides['service_id'] == "noservice") { | if ($overrides['service_id'] == "noservice") { |
echo '<div id="servicewarning">Buses are <strong>not running today</strong> due to industrial action/public holiday. See <a | echo '<div id="servicewarning">Buses are <strong>not running today</strong> due to industrial action/public holiday. See <a |
href="http://www.action.act.gov.au">http://www.action.act.gov.au</a> for details.</div>'; | href="http://www.action.act.gov.au">http://www.action.act.gov.au</a> for details.</div>'; |
} else { | } else { |
echo '<div id="servicewarning">Buses are running on an altered timetable today due to industrial action/public holiday. See <a href="http://www.action.act.gov.au">http://www.action.act.gov.au</a> for details.</div>'; | echo '<div id="servicewarning">Buses are running on an altered timetable today due to industrial action/public holiday. See <a href="http://www.action.act.gov.au">http://www.action.act.gov.au</a> for details.</div>'; |
} | } |
} | } |
$serviceAlerts = getServiceAlertsAsArray("agency", "0"); | $serviceAlerts = getServiceAlertsAsArray("agency", "0"); |
if (isset($serviceAlerts['entity']) && sizeof($serviceAlerts['entity']) > 0) { | if (isset($serviceAlerts['entity']) && sizeof($serviceAlerts['entity']) > 0) { |
foreach ($serviceAlerts['entity'] as $entity) { | foreach ($serviceAlerts['entity'] as $entity) { |
echo "<div id='servicewarning'>" . date("F j, g:i a", strtotime($entity['alert']['active_period'][0]['start'])) . " to " . date("F j, g:i a", strtotime($entity['alert']['active_period'][0]['end'])) . "{$entity['alert']['header_text']['translation'][0]['text']}<br>Warning: {$entity['alert']['description_text']['translation'][0]['text']} | echo "<div id='servicewarning'>" . date("F j, g:i a", strtotime($entity['alert']['active_period'][0]['start'])) . " to " . date("F j, g:i a", strtotime($entity['alert']['active_period'][0]['end'])) . "{$entity['alert']['header_text']['translation'][0]['text']}<br>Warning: {$entity['alert']['description_text']['translation'][0]['text']} |
<br><a href='{$entity['alert']['url']['translation'][0]['text']}'>Source</a> </div>"; | <br><a href='{$entity['alert']['url']['translation'][0]['text']}'>Source</a> </div>"; |
} | } |
} | } |
} | } |
} | } |
} | } |
function include_footer() { | function include_footer() { |
global $basePath; | global $basePath; |
echo '<div id="footer"><a href="' . $basePath . 'about.php">About/Contact Us</a> <a href="' . $basePath . 'feedback.php">Feedback/Bug Report</a> <a href="' . $basePath . 'privacy.php">Privacy Policy</a>'; | echo '<div id="footer"><a href="' . $basePath . 'about.php">About/Contact Us</a> <a href="' . $basePath . 'feedback.php">Feedback/Bug Report</a> <a href="' . $basePath . 'privacy.php">Privacy Policy</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>'; |
} | } |
echo "\n</div></div></body></html>"; | echo "\n</div></div></body></html>"; |
} | } |
function timeSettings() { | function timeSettings() { |
global $service_periods; | global $service_periods; |
echo '<div id="settings" data-role="collapsible" data-collapsed="true"> | echo '<div id="settings" data-role="collapsible" data-collapsed="true"> |
<h3>Change Time (' . (isset($_REQUEST['time']) ? $_REQUEST['time'] : "Current Time,") . ' ' . ucwords(service_period()) . ')...</h3> | <h3>Change Time (' . (isset($_REQUEST['time']) ? $_REQUEST['time'] : "Current Time,") . ' ' . ucwords(service_period()) . ')...</h3> |
<form action="' . basename($_SERVER['PHP_SELF']) . '" method="GET"> | <form action="' . basename($_SERVER['PHP_SELF']) . '" method="GET"> |
<input type="hidden" name="suburb" id="suburb" value="' . (isset($_REQUEST['suburb']) ? $_REQUEST['suburb'] : "") . '"/> | <input type="hidden" name="suburb" id="suburb" value="' . (isset($_REQUEST['suburb']) ? $_REQUEST['suburb'] : "") . '"/> |
<input type="hidden" name="stopid" id="stopid" value="' . (isset($_REQUEST['stopid']) ? $_REQUEST['stopid'] : "") . '"/> | <input type="hidden" name="stopid" id="stopid" value="' . (isset($_REQUEST['stopid']) ? $_REQUEST['stopid'] : "") . '"/> |
<input type="hidden" name="stopcode" id="stopcode" value="' . (isset($_REQUEST['stopcode']) ? $_REQUEST['stopcode'] : "") . '"/> | <input type="hidden" name="stopcode" id="stopcode" value="' . (isset($_REQUEST['stopcode']) ? $_REQUEST['stopcode'] : "") . '"/> |
<div class="ui-body"> | <div class="ui-body"> |
<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($_REQUEST['time']) ? $_REQUEST['time'] : date("H:i")) . '"/> | <input type="time" name="time" id="time" value="' . (isset($_REQUEST['time']) ? $_REQUEST['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"/> |
</div></form> | </div></form> |
</div>'; | </div>'; |
} | } |
function placeSettings() { | function placeSettings() { |
$geoerror = false; | $geoerror = false; |
$geoerror = !isset($_SESSION['lat']) || !isset($_SESSION['lat']) || $_SESSION['lat'] == "" || $_SESSION['lon'] == ""; | $geoerror = !isset($_SESSION['lat']) || !isset($_SESSION['lat']) || $_SESSION['lat'] == "" || $_SESSION['lon'] == ""; |
echo '<div id="error">'; | echo '<div id="error">'; |
if ($geoerror) { | if ($geoerror) { |
echo 'Sorry, but your location could not currently be detected. | echo '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.'; | or enter an address/co-ordinates in the box below.'; |
} | } |
echo '</div>'; | echo '</div>'; |
echo '<div id="settings" data-role="collapsible" data-collapsed="' . !$geoerror . '"> | echo '<div id="settings" data-role="collapsible" data-collapsed="' . !$geoerror . '"> |
<h3>Change Location...</h3> | <h3>Change Location...</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> |
<input type="submit" value="Update"/> | <input type="submit" value="Update"/> |
</div></form> | </div></form> |
</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>"; |
} | } |
} | } |
//stop list collapsing | //stop list collapsing |
function stopCompare($stopName) { | function stopCompare($stopName) { |
return substr(trim(preg_replace("/\(Platform.*/", "", $stopName)),0,9); | return substr(trim(preg_replace("/\(Platform.*/", "", $stopName)),0,9); |
} | } |
function stopGroupTitle($stopName,$stopdesc) { | function stopGroupTitle($stopName,$stopdesc) { |
if (preg_match("/Dr |Cct |Cir |Av |St |Cr |Parade |Way |Bank /",$stopName)) { | if (preg_match("/Dr |Cct |Cir |Av |St |Cr |Parade |Way |Bank /",$stopName)) { |
$descParts = explode("<br>",$stopdesc); | $descParts = explode("<br>",$stopdesc); |
return trim(str_replace("Street: ","",$descParts[0])); | return trim(str_replace("Street: ","",$descParts[0])); |
} else { | } else { |
return trim(preg_replace("/\(Platform.*/", "",$stopName)); | return trim(preg_replace("/\(Platform.*/", "",$stopName)); |
} | } |
} | } |
function viaPointNames($tripid, $stop_sequence = "") { | function viaPointNames($tripid, $stop_sequence = "") { |
$viaPointNames = Array(); | $viaPointNames = Array(); |
foreach (viaPoints($tripid, $stop_sequence) as $point) { | foreach (viaPoints($tripid, $stop_sequence) as $point) { |
if (strstr($point['stop_name'], "Station") | if (strstr($point['stop_name'], "Station") |
|| strstr($point['stop_name'], "Shops") | || strstr($point['stop_name'], "Shops") |
|| strstr($point['stop_name'], "CIT") | || strstr($point['stop_name'], "CIT") |
|| strstr($point['stop_name'], "School") | || strstr($point['stop_name'], "School") |
|| strstr($point['stop_name'], "University") | || strstr($point['stop_name'], "University") |
) { | ) { |
$viaPointNames[] = $point['stop_name']; | $viaPointNames[] = $point['stop_name']; |
} | } |
} | } |
if (sizeof($viaPointNames) > 0) { | if (sizeof($viaPointNames) > 0) { |
return r_implode(", ", $viaPointNames); | return r_implode(", ", $viaPointNames); |
} else { | } else { |
return ""; | return ""; |
} | } |
} | } |
?> | ?> |
<?php | <?php |
/* | /* |
* Copyright 2010,2011 Alexander Sadleir | * Copyright 2010,2011 Alexander Sadleir |
Licensed under the Apache License, Version 2.0 (the "License"); | Licensed under the Apache License, Version 2.0 (the "License"); |
you may not use this file except in compliance with the License. | you may not use this file except in compliance with the License. |
You may obtain a copy of the License at | You may obtain a copy of the License at |
http://www.apache.org/licenses/LICENSE-2.0 | http://www.apache.org/licenses/LICENSE-2.0 |
Unless required by applicable law or agreed to in writing, software | Unless required by applicable law or agreed to in writing, software |
distributed under the License is distributed on an "AS IS" BASIS, | distributed under the License is distributed on an "AS IS" BASIS, |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
See the License for the specific language governing permissions and | See the License for the specific language governing permissions and |
limitations under the License. | limitations under the License. |
*/ | */ |
$service_periods = Array( | $service_periods = Array( |
'sunday', | 'sunday', |
'saturday', | 'saturday', |
'weekday' | 'weekday' |
); | ); |
function service_period_day ($spid) { | |
$idParts = explode("-",$spid); | |
return strtolower($idParts[2]); | |
} | |
function service_period($date = "") { | function service_period($date = "") { |
if (isset($_REQUEST['service_period'])) | if (isset($_REQUEST['service_period'])) { |
return $_REQUEST['service_period']; | return $_REQUEST['service_period']; |
} | |
$override = getServiceOverride($date); | $override = getServiceOverride($date); |
if ($override['service_id']) { | if (isset($override['service_id'])) { |
return service_period_day ($override['service_id']); | return strtolower($override['service_id']); |
} | } |
$date = ($date != "" ? $date : time()); | |
switch (date('w', ($date != "" ? $date : time()))) { | $dow = date('w', $date); |
case 0: | |
return 'sunday'; | switch ($dow) { |
case 6: | case 0: |
return 'saturday'; | return 'sunday'; |
default: | case 6: |
return 'weekday'; | return 'saturday'; |
} | default: |
} | return 'weekday'; |
} | |
} | |
function service_ids($service_period) { | function service_ids($service_period) { |
switch ($service_period) { | switch ($service_period) { |
case 'sunday': | case 'sunday': |
return Array("2010-TUGGSUN-Sunday-20","2010-BELCSUN-Sunday-19"); | return Array("Sunday", "Sunday"); |
case 'saturday': | case 'saturday': |
return Array("2010-BELCSAT-Saturday-19","2010-TUGGSAT-Saturday-19"); | return Array("Saturday", "Saturday"); |
default: | default: |
//return 'weekday'; | //return 'weekday'; |
return Array("2010-BELCMAST-Weekday-15","2010-TUGGMAST-Weekday-14"); | return Array("Weekday", "Weekday-SchoolVacation"); |
} | } |
} | } |
function valid_service_ids() { | function valid_service_ids() { |
return array_merge(service_ids(""),service_ids('saturday'),service_ids('sunday')); | return array_merge(service_ids(""), service_ids('saturday'), service_ids('sunday')); |
} | } |
function midnight_seconds($time = "") { | function midnight_seconds($time = "") { |
// from http://www.perturb.org/display/Perlfunc__Seconds_Since_Midnight.html | // from http://www.perturb.org/display/Perlfunc__Seconds_Since_Midnight.html |
if ($time != "") { | if ($time != "") { |
return (date("G", $time) * 3600) + (date("i", $time) * 60) + date("s", $time); | return (date("G", $time) * 3600) + (date("i", $time) * 60) + date("s", $time); |
} | } |
if (isset($_SESSION['time'])) { | if (isset($_SESSION['time'])) { |
$time = strtotime($_SESSION['time']); | $time = strtotime($_SESSION['time']); |
return (date("G", $time) * 3600) + (date("i", $time) * 60) + date("s", $time); | return (date("G", $time) * 3600) + (date("i", $time) * 60) + date("s", $time); |
} | } |
return (date("G") * 3600) + (date("i") * 60) + date("s"); | return (date("G") * 3600) + (date("i") * 60) + date("s"); |
} | } |
function midnight_seconds_to_time($seconds) { | function midnight_seconds_to_time($seconds) { |
if ($seconds > 0) { | if ($seconds > 0) { |
$midnight = mktime(0, 0, 0, date("n"), date("j"), date("Y")); | $midnight = mktime(0, 0, 0, date("n"), date("j"), date("Y")); |
return date("h:ia", $midnight + $seconds); | return date("h:ia", $midnight + $seconds); |
} else { | } else { |
return ""; | return ""; |
} | } |
} | } |
if ($GTFSREnabled) { | if ($GTFSREnabled) { |
$serviceAlertCause = Array( | $serviceAlertCause = Array( |
"UNKNOWN_CAUSE" => "Unknown cause", | "UNKNOWN_CAUSE" => "Unknown cause", |
"OTHER_CAUSE" => "Other cause", | "OTHER_CAUSE" => "Other cause", |
"TECHNICAL_PROBLEM" => "Technical problem", | "TECHNICAL_PROBLEM" => "Technical problem", |
"STRIKE" => "Strike", | "STRIKE" => "Strike", |
"DEMONSTRATION" => "Demonstration", | "DEMONSTRATION" => "Demonstration", |
"ACCIDENT" => "Accident", | "ACCIDENT" => "Accident", |
"HOLIDAY" => "Holiday", | "HOLIDAY" => "Holiday", |
"WEATHER" => "Weather", | "WEATHER" => "Weather", |
"MAINTENANCE" => "Maintenance", | "MAINTENANCE" => "Maintenance", |
"CONSTRUCTION" => "Construction", | "CONSTRUCTION" => "Construction", |
"POLICE_ACTIVITY" => "Police activity", | "POLICE_ACTIVITY" => "Police activity", |
"MEDICAL_EMERGENCY" => "Medical emergency" | "MEDICAL_EMERGENCY" => "Medical emergency" |
); | ); |
$serviceAlertEffect = Array( | $serviceAlertEffect = Array( |
"NO_SERVICE" => "No service", | "NO_SERVICE" => "No service", |
"REDUCED_SERVICE" => "Reduced service", | "REDUCED_SERVICE" => "Reduced service", |
"SIGNIFICANT_DELAYS" => "Significant delays", | "SIGNIFICANT_DELAYS" => "Significant delays", |
"DETOUR" => "Detour", | "DETOUR" => "Detour", |
"ADDITIONAL_SERVICE" => "Additional service", | "ADDITIONAL_SERVICE" => "Additional service", |
"MODIFIED_SERVICE" => "Modified service", | "MODIFIED_SERVICE" => "Modified service", |
"OTHER_EFFECT" => "Other effect", | "OTHER_EFFECT" => "Other effect", |
"UNKNOWN_EFFECT" => "Unknown effect", | "UNKNOWN_EFFECT" => "Unknown effect", |
"STOP_MOVED" => "Stop moved"); | "STOP_MOVED" => "Stop moved"); |
set_include_path(get_include_path() . PATH_SEPARATOR . ($basePath . "lib/Protobuf-PHP/library/DrSlump/")); | set_include_path(get_include_path() . PATH_SEPARATOR . ($basePath . "lib/Protobuf-PHP/library/DrSlump/")); |
include_once("Protobuf.php"); | include_once("Protobuf.php"); |
include_once("Protobuf/Message.php"); | include_once("Protobuf/Message.php"); |
include_once("Protobuf/Registry.php"); | include_once("Protobuf/Registry.php"); |
include_once("Protobuf/Descriptor.php"); | include_once("Protobuf/Descriptor.php"); |
include_once("Protobuf/Field.php"); | include_once("Protobuf/Field.php"); |
include_once($basePath . "lib/Protobuf-PHP/gtfs-realtime.php"); | include_once($basePath . "lib/Protobuf-PHP/gtfs-realtime.php"); |
include_once("Protobuf/CodecInterface.php"); | include_once("Protobuf/CodecInterface.php"); |
include_once("Protobuf/Codec/PhpArray.php"); | include_once("Protobuf/Codec/PhpArray.php"); |
include_once("Protobuf/Codec/Binary.php"); | include_once("Protobuf/Codec/Binary.php"); |
include_once("Protobuf/Codec/Binary/Writer.php"); | include_once("Protobuf/Codec/Binary/Writer.php"); |
include_once("Protobuf/Codec/Json.php"); | include_once("Protobuf/Codec/Json.php"); |
function getServiceAlerts($filter_class = "", $filter_id = "") { | function getServiceAlerts($filter_class = "", $filter_id = "") { |
/* | /* |
also need last modified epoch of client gtfs | also need last modified epoch of client gtfs |
- add,remove,patch,inform (null) | - add,remove,patch,inform (null) |
- stop | - stop |
- trip | - trip |
- network | - network |
- classes (WHERE=) | - classes (WHERE=) |
- route (short_name or route_id) | - route (short_name or route_id) |
- street | - street |
- stop | - stop |
- trip | - trip |
Currently support: | Currently support: |
network inform | network inform |
trip patch: stop remove | trip patch: stop remove |
street inform: route inform, trip inform, stop inform | street inform: route inform, trip inform, stop inform |
route patch: trip remove | route patch: trip remove |
*/ | */ |
$fm = new transit_realtime\FeedMessage(); | $fm = new transit_realtime\FeedMessage(); |
$fh = new transit_realtime\FeedHeader(); | $fh = new transit_realtime\FeedHeader(); |
$fh->setGtfsRealtimeVersion(1); | $fh->setGtfsRealtimeVersion(1); |
$fh->setTimestamp(time()); | $fh->setTimestamp(time()); |
$fm->setHeader($fh); | $fm->setHeader($fh); |
foreach (getCurrentAlerts() as $alert) { | foreach (getCurrentAlerts() as $alert) { |
$fe = new transit_realtime\FeedEntity(); | $fe = new transit_realtime\FeedEntity(); |
$fe->setId($alert['id']); | $fe->setId($alert['id']); |
$fe->setIsDeleted(false); | $fe->setIsDeleted(false); |
$alert = new transit_realtime\Alert(); | $alert = new transit_realtime\Alert(); |
$tr = new transit_realtime\TimeRange(); | $tr = new transit_realtime\TimeRange(); |
$tr->setStart($alert['start']); | $tr->setStart($alert['start']); |
$tr->setEnd($alert['end']); | $tr->setEnd($alert['end']); |
$alert->addActivePeriod($tr); | $alert->addActivePeriod($tr); |
$informedEntities = getInformedAlerts($alert['id'], $_REQUEST['filter_class'], $_REQUEST['filter_id']); | $informedEntities = getInformedAlerts($alert['id'], $_REQUEST['filter_class'], $_REQUEST['filter_id']); |
if (sizeof($informedEntities) > 0) { | if (sizeof($informedEntities) > 0) { |
$informed = Array(); | $informed = Array(); |
$es = new transit_realtime\EntitySelector(); | $es = new transit_realtime\EntitySelector(); |
if ($informedEntity['informed_class'] == "agency") { | if ($informedEntity['informed_class'] == "agency") { |
$es->setAgencyId($informedEntity['informed_id']); | $es->setAgencyId($informedEntity['informed_id']); |
} | } |
if ($informedEntity['informed_class'] == "stop") { | if ($informedEntity['informed_class'] == "stop") { |
$es->setStopId($informedEntity['informed_id']); | $es->setStopId($informedEntity['informed_id']); |
} | } |
if ($informedEntity['informed_class'] == "route") { | if ($informedEntity['informed_class'] == "route") { |
$es->setRouteId($informedEntity['informed_id']); | $es->setRouteId($informedEntity['informed_id']); |
} | } |
if ($informedEntity['informed_class'] == "trip") { | if ($informedEntity['informed_class'] == "trip") { |
$td = new transit_realtime\TripDescriptor(); | $td = new transit_realtime\TripDescriptor(); |
$td->setTripId($informedEntity['informed_id']); | $td->setTripId($informedEntity['informed_id']); |
$es->setTrip($td); | $es->setTrip($td); |
} | } |
$alert->addInformedEntity($es); | $alert->addInformedEntity($es); |
} | } |
$alert->setCause(constant("transit_realtime\Alert\Cause::" . $alert['cause'])); | $alert->setCause(constant("transit_realtime\Alert\Cause::" . $alert['cause'])); |
$alert->setEffect(constant("transit_realtime\Alert\Effect::" . $alert['effect'])); | $alert->setEffect(constant("transit_realtime\Alert\Effect::" . $alert['effect'])); |
$tsUrl = new transit_realtime\TranslatedString(); | $tsUrl = new transit_realtime\TranslatedString(); |
$tUrl = new transit_realtime\TranslatedString\Translation(); | $tUrl = new transit_realtime\TranslatedString\Translation(); |
$tUrl->setText($alert['url']); | $tUrl->setText($alert['url']); |
$tUrl->setLanguage("en"); | $tUrl->setLanguage("en"); |
$tsUrl->addTranslation($tUrl); | $tsUrl->addTranslation($tUrl); |
$alert->setUrl($tsUrl); | $alert->setUrl($tsUrl); |
$tsHeaderText = new transit_realtime\TranslatedString(); | $tsHeaderText = new transit_realtime\TranslatedString(); |
$tHeaderText = new transit_realtime\TranslatedString\Translation(); | $tHeaderText = new transit_realtime\TranslatedString\Translation(); |
$tHeaderText->setText($alert['header']); | $tHeaderText->setText($alert['header']); |
$tHeaderText->setLanguage("en"); | $tHeaderText->setLanguage("en"); |
$tsHeaderText->addTranslation($tHeaderText); | $tsHeaderText->addTranslation($tHeaderText); |
$alert->setHeaderText($tsHeaderText); | $alert->setHeaderText($tsHeaderText); |
$tsDescriptionText = new transit_realtime\TranslatedString(); | $tsDescriptionText = new transit_realtime\TranslatedString(); |
$tDescriptionText = new transit_realtime\TranslatedString\Translation(); | $tDescriptionText = new transit_realtime\TranslatedString\Translation(); |
$tDescriptionText->setText($alert['description']); | $tDescriptionText->setText($alert['description']); |
$tDescriptionText->setLanguage("en"); | $tDescriptionText->setLanguage("en"); |
$tsDescriptionText->addTranslation($tDescriptionText); | $tsDescriptionText->addTranslation($tDescriptionText); |
$alert->setDescriptionText($tsDescriptionText); | $alert->setDescriptionText($tsDescriptionText); |
$fe->setAlert($alert); | $fe->setAlert($alert); |
$fm->addEntity($fe); | $fm->addEntity($fe); |
} | } |
return $fm; | return $fm; |
} | } |
function getServiceAlertsAsArray($filter_class = "", $filter_id = "") { | function getServiceAlertsAsArray($filter_class = "", $filter_id = "") { |
$codec = new DrSlump\Protobuf\Codec\PhpArray(); | $codec = new DrSlump\Protobuf\Codec\PhpArray(); |
return $codec->encode(getServiceAlerts($filter_class, $filter_id)); | return $codec->encode(getServiceAlerts($filter_class, $filter_id)); |
} | } |
function getServiceAlertsAsBinary($filter_class = "", $filter_id = "") { | function getServiceAlertsAsBinary($filter_class = "", $filter_id = "") { |
$codec = new DrSlump\Protobuf\Codec\Binary(); | $codec = new DrSlump\Protobuf\Codec\Binary(); |
return $codec->encode(getServiceAlerts($filter_class, $filter_id)); | return $codec->encode(getServiceAlerts($filter_class, $filter_id)); |
} | } |
function getServiceAlertsAsJSON($filter_class = "", $filter_id = "") { | function getServiceAlertsAsJSON($filter_class = "", $filter_id = "") { |
$codec = new DrSlump\Protobuf\Codec\Json(); | $codec = new DrSlump\Protobuf\Codec\Json(); |
return $codec->encode(getServiceAlerts($filter_class, $filter_id)); | return $codec->encode(getServiceAlerts($filter_class, $filter_id)); |
} | } |
function getServiceAlertsByClass() { | function getServiceAlertsByClass() { |
$return = Array(); | $return = Array(); |
$alerts = getServiceAlertsAsArray("", ""); | $alerts = getServiceAlertsAsArray("", ""); |
foreach ($alerts['entities'] as $entity) { | foreach ($alerts['entities'] as $entity) { |
foreach ($entity['informed'] as $informed) { | foreach ($entity['informed'] as $informed) { |
foreach ($informed as $key => $value) { | foreach ($informed as $key => $value) { |
if (strpos("_id", $key) > 0) { | if (strpos("_id", $key) > 0) { |
$parts = explode($key); | $parts = explode($key); |
$class = $parts[0]; | $class = $parts[0]; |
$id = $value; | $id = $value; |
} | } |
} | } |
$return[$class][$id][] = $entity; | $return[$class][$id][] = $entity; |
} | } |
} | } |
} | } |
function getTripUpdates($filter_class = "", $filter_id = "") { | function getTripUpdates($filter_class = "", $filter_id = "") { |
$fm = new transit_realtime\FeedMessage(); | $fm = new transit_realtime\FeedMessage(); |
$fh = new transit_realtime\FeedHeader(); | $fh = new transit_realtime\FeedHeader(); |
$fh->setGtfsRealtimeVersion(1); | $fh->setGtfsRealtimeVersion(1); |
$fh->setTimestamp(time()); | $fh->setTimestamp(time()); |
$fm->setHeader($fh); | $fm->setHeader($fh); |
foreach (getCurrentAlerts() as $alert) { | foreach (getCurrentAlerts() as $alert) { |
$informedEntities = getInformedAlerts($alert['id'], $_REQUEST['filter_class'], $_REQUEST['filter_id']); | $informedEntities = getInformedAlerts($alert['id'], $_REQUEST['filter_class'], $_REQUEST['filter_id']); |
$stops = Array(); | $stops = Array(); |
$routestrips = Array(); | $routestrips = Array(); |
if (sizeof($informedEntities) > 0) { | if (sizeof($informedEntities) > 0) { |
if ($informedEntity['informed_class'] == "stop" && $informed["x-action"] == "remove") { | if ($informedEntity['informed_class'] == "stop" && $informed["x-action"] == "remove") { |
$stops[] = $informedEntity['informed_id']; | $stops[] = $informedEntity['informed_id']; |
} | } |
if (($informedEntity['informed_class'] == "route" || $informedEntity['informed_class'] == "trip") && $informed["x-action"] == "patch") { | if (($informedEntity['informed_class'] == "route" || $informedEntity['informed_class'] == "trip") && $informed["x-action"] == "patch") { |
$routestrips[] = Array("id" => $informedEntity['informed_id'], | $routestrips[] = Array("id" => $informedEntity['informed_id'], |
"type" => $informedEntity['informed_class']); | "type" => $informedEntity['informed_class']); |
} | } |
} | } |
foreach ($routestrips as $routetrip) { | foreach ($routestrips as $routetrip) { |
$fe = new transit_realtime\FeedEntity(); | $fe = new transit_realtime\FeedEntity(); |
$fe->setId($alert['id'] . $routetrip['id']); | $fe->setId($alert['id'] . $routetrip['id']); |
$fe->setIsDeleted(false); | $fe->setIsDeleted(false); |
$tu = new transit_realtime\TripUpdate(); | $tu = new transit_realtime\TripUpdate(); |
$td = new transit_realtime\TripDescriptor(); | $td = new transit_realtime\TripDescriptor(); |
if ($routetrip['type'] == "route") { | if ($routetrip['type'] == "route") { |
$td->setRouteId($routetrip['id']); | $td->setRouteId($routetrip['id']); |
} else if ($routetrip['type'] == "trip") { | } else if ($routetrip['type'] == "trip") { |
$td->setTripId($routetrip['id']); | $td->setTripId($routetrip['id']); |
} | } |
$tu->setTrip($td); | $tu->setTrip($td); |
foreach ($stops as $stop) { | foreach ($stops as $stop) { |
$stu = new transit_realtime\TripUpdate\StopTimeUpdate(); | $stu = new transit_realtime\TripUpdate\StopTimeUpdate(); |
$stu->setStopId($stop); | $stu->setStopId($stop); |
$stu->setScheduleRelationship(transit_realtime\TripUpdate\StopTimeUpdate\ScheduleRelationship::SKIPPED); | $stu->setScheduleRelationship(transit_realtime\TripUpdate\StopTimeUpdate\ScheduleRelationship::SKIPPED); |
$tu->addStopTimeUpdate($stu); | $tu->addStopTimeUpdate($stu); |
} | } |
$fe->setTripUpdate($tu); | $fe->setTripUpdate($tu); |
$fm->addEntity($fe); | $fm->addEntity($fe); |
} | } |
} | } |
return $fm; | return $fm; |
} | } |
function getTripUpdatesAsArray($filter_class = "", $filter_id = "") { | function getTripUpdatesAsArray($filter_class = "", $filter_id = "") { |
$codec = new DrSlump\Protobuf\Codec\PhpArray(); | $codec = new DrSlump\Protobuf\Codec\PhpArray(); |
return $codec->encode(getTripUpdates($filter_class, $filter_id)); | return $codec->encode(getTripUpdates($filter_class, $filter_id)); |
} | } |
function getTripUpdatesAsBinary($filter_class = "", $filter_id = "") { | function getTripUpdatesAsBinary($filter_class = "", $filter_id = "") { |
$codec = new DrSlump\Protobuf\Codec\Binary(); | $codec = new DrSlump\Protobuf\Codec\Binary(); |
return $codec->encode(getTripUpdates($filter_class, $filter_id)); | return $codec->encode(getTripUpdates($filter_class, $filter_id)); |
} | } |
function getTripUpdatesAsJSON($filter_class = "", $filter_id = "") { | function getTripUpdatesAsJSON($filter_class = "", $filter_id = "") { |
$codec = new DrSlump\Protobuf\Codec\Json(); | $codec = new DrSlump\Protobuf\Codec\Json(); |
return $codec->encode(getTripUpdates($filter_class, $filter_id)); | return $codec->encode(getTripUpdates($filter_class, $filter_id)); |
} | } |
} | } |
?> | ?> |
<?php | <?php |
/* | /* |
* Copyright 2010,2011 Alexander Sadleir | * Copyright 2010,2011 Alexander Sadleir |
Licensed under the Apache License, Version 2.0 (the "License"); | Licensed under the Apache License, Version 2.0 (the "License"); |
you may not use this file except in compliance with the License. | you may not use this file except in compliance with the License. |
You may obtain a copy of the License at | You may obtain a copy of the License at |
http://www.apache.org/licenses/LICENSE-2.0 | http://www.apache.org/licenses/LICENSE-2.0 |
Unless required by applicable law or agreed to in writing, software | Unless required by applicable law or agreed to in writing, software |
distributed under the License is distributed on an "AS IS" BASIS, | distributed under the License is distributed on an "AS IS" BASIS, |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
See the License for the specific language governing permissions and | See the License for the specific language governing permissions and |
limitations under the License. | limitations under the License. |
*/ | */ |
function getRoute($routeID) { | function getRoute($routeID) { |
global $conn; | global $conn; |
$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"); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":routeID", $routeID); | $query->bindParam(":routeID", $routeID); |
$query->execute(); | $query->execute(); |
if (!$query) { | if (!$query) { |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return Array(); | return Array(); |
} | } |
return $query->fetch(PDO :: FETCH_ASSOC); | return $query->fetch(PDO :: FETCH_ASSOC); |
} | } |
function getRoutesByShortName($routeShortName) { | function getRoutesByShortName($routeShortName) { |
global $conn; | global $conn; |
$query = "Select distinct route_id, route_short_name from routes where route_short_name = :routeShortName"; | $query = "Select distinct route_id, route_short_name from routes where route_short_name = :routeShortName"; |
debug($query, "database"); | debug($query, "database"); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":routeShortName", $routeShortName); | $query->bindParam(":routeShortName", $routeShortName); |
$query->execute(); | $query->execute(); |
if (!$query) { | if (!$query) { |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return Array(); | return Array(); |
} | } |
return $query->fetchAll(); | return $query->fetchAll(); |
} | } |
function getRouteHeadsigns($routeID) { | function getRouteHeadsigns($routeID) { |
global $conn; | global $conn; |
$query = "select stops.stop_name, trip_headsign, direction_id,max(service_id) as service_id, count(*) | $query = "select stops.stop_name, trip_headsign, direction_id,max(service_id) as service_id, count(*) |
from routes join trips on trips.route_id = routes.route_id | from routes join trips on trips.route_id = routes.route_id |
join stop_times on stop_times.trip_id = trips.trip_id join stops on | join stop_times on stop_times.trip_id = trips.trip_id join stops on |
stop_times.stop_id = stops.stop_id where trips.route_id = :routeID | stop_times.stop_id = stops.stop_id where trips.route_id = :routeID |
and stop_times.stop_sequence = 1 group by stops.stop_name, trip_headsign, direction_id having count(*) > 2"; | and stop_times.stop_sequence = 1 group by stops.stop_name, trip_headsign, direction_id having count(*) > 2"; |
debug($query, "database"); | debug($query, "database"); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":routeID", $routeID); | $query->bindParam(":routeID", $routeID); |
$query->execute(); | $query->execute(); |
if (!$query) { | if (!$query) { |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return Array(); | return Array(); |
} | } |
return $query->fetchAll(); | return $query->fetchAll(); |
} | } |
function getRouteDescription($routeID) { | function getRouteDescription($routeID) { |
$trip = getRouteNextTrip($routeID); | $trip = getRouteNextTrip($routeID); |
$start = getTripStartingPoint($trip['trip_id']); | $start = getTripStartingPoint($trip['trip_id']); |
$end = getTripDestination($trip['trip_id']); | $end = getTripDestination($trip['trip_id']); |
return "From ".$start['stop_name']." to ".$end['stop_name']; | return "From ".$start['stop_name']." to ".$end['stop_name']; |
} | } |
function getRouteByFullName($routeFullName) { | function getRouteByFullName($routeFullName) { |
global $conn; | global $conn; |
$query = "Select * from routes where route_short_name||route_long_name = :routeFullName LIMIT 1"; | $query = "Select * from routes where route_short_name||route_long_name = :routeFullName LIMIT 1"; |
debug($query, "database"); | debug($query, "database"); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":routeFullName", $routeFullName); | $query->bindParam(":routeFullName", $routeFullName); |
$query->execute(); | $query->execute(); |
if (!$query) { | if (!$query) { |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return Array(); | return Array(); |
} | } |
return $query->fetch(PDO :: FETCH_ASSOC); | return $query->fetch(PDO :: FETCH_ASSOC); |
} | } |
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"); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->execute(); | $query->execute(); |
if (!$query) { | if (!$query) { |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return Array(); | return Array(); |
} | } |
return $query->fetchAll(); | return $query->fetchAll(); |
} | } |
function getRoutesByNumber($routeNumber = "", $directionID = "",$service_period = "") { | |
global $conn; | |
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 = | |
routes.route_id join stop_times on stop_times.trip_id = trips.trip_id | |
where route_short_name = :routeNumber OR route_short_name LIKE :routeNumber2 order by route_short_name;"; | |
} else { | |
$query = "SELECT DISTINCT route_short_name from routes order by route_short_name"; | |
} | |
debug($query, "database"); | |
$query = $conn->prepare($query); | |
if ($routeNumber != "") { | |
$query->bindParam(":routeNumber", $routeNumber); | |
$routeNumber2 = "% " . $routeNumber; | |
$query->bindParam(":routeNumber2", $routeNumber2); | |
} | |
$query->execute(); | |
if (!$query) { | |
databaseError($conn->errorInfo()); | |
return Array(); | |
} | |
return $query->fetchAll(); | |
} | |
function getRoutesByNumberSeries($routeNumberSeries = "") { | function getRoutesByNumberSeries($routeNumberSeries = "") { |
global $conn; | global $conn; |
if (strlen($routeNumberSeries) == 1) { | if (strlen($routeNumberSeries) == 1) { |
return getRoutesByNumber($routeNumberSeries); | return getRoutesByNumber($routeNumberSeries); |
} | } |
$seriesMin = substr($routeNumberSeries, 0, -1) . "0"; | $seriesMin = substr($routeNumberSeries, 0, -1) . "0"; |
$seriesMax = substr($routeNumberSeries, 0, -1) . "9"; | $seriesMax = substr($routeNumberSeries, 0, -1) . "9"; |
$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 to_number(route_short_name, 'FM999') between :seriesMin and :seriesMax OR route_short_name LIKE :routeNumberSeries order by route_short_name;"; | routes.route_id join stop_times on stop_times.trip_id = trips.trip_id where to_number(route_short_name, 'FM999') between :seriesMin and :seriesMax OR route_short_name LIKE :routeNumberSeries order by route_short_name;"; |
debug($query, "database"); | debug($query, "database"); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":seriesMin", $seriesMin); | $query->bindParam(":seriesMin", $seriesMin); |
$query->bindParam(":seriesMax", $seriesMax); | $query->bindParam(":seriesMax", $seriesMax); |
$routeNumberSeries = "% " . substr($routeNumberSeries, 0, -1) . "%"; | $routeNumberSeries = "% " . substr($routeNumberSeries, 0, -1) . "%"; |
$query->bindParam(":routeNumberSeries", $routeNumberSeries); | $query->bindParam(":routeNumberSeries", $routeNumberSeries); |
$query->execute(); | $query->execute(); |
if (!$query) { | if (!$query) { |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return Array(); | return Array(); |
} | } |
return $query->fetchAll(); | return $query->fetchAll(); |
} | } |
function getRouteNextTrip($routeID) { | function getRouteNextTrip($routeID, $directionID) { |
global $conn; | global $conn; |
$query = "select routes.route_id,direction_id,trips.trip_id,departure_time from routes join trips on trips.route_id = routes.route_id | $query = "select routes.route_id,direction_id,trips.trip_id,departure_time from routes join trips on trips.route_id = routes.route_id |
join stop_times on stop_times.trip_id = trips.trip_id where arrival_time > :currentTime and routes.route_id = :routeID order by | join stop_times on stop_times.trip_id = trips.trip_id where arrival_time between :currentTime and :futureTime |
and routes.route_id = :routeID and trips.direction_id = :directionID order by | |
arrival_time limit 1"; | arrival_time limit 1"; |
debug($query, "database"); | debug($query, "database"); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":currentTime", current_time()); | $query->bindParam(":currentTime", current_time()); |
$query->bindParam(":futureTime", current_time(strtotime(current_time() ." +2h"))); | |
$query->bindParam(":routeID", $routeID); | $query->bindParam(":routeID", $routeID); |
$query->bindParam(":directionID", $directionID); | |
$query->execute(); | $query->execute(); |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
if (!$query) { | if (!$query) { |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return Array(); | return Array(); |
} | } |
$r = $query->fetch(PDO :: FETCH_ASSOC); | $r = $query->fetch(PDO :: FETCH_ASSOC); |
return $r; | |
// past last trip of the day special case | } |
if (sizeof($r) < 16) { | |
$query = "select * from routes join trips on trips.route_id = routes.route_id | function getRouteFirstTrip($routeID,$directionID) { |
join stop_times on stop_times.trip_id = trips.trip_id where routes.route_id = :routeID order by | global $conn; |
$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 | |
and trips.direction_id = :directionID order by | |
arrival_time DESC limit 1"; | arrival_time DESC limit 1"; |
debug($query, "database"); | debug($query, "database"); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":routeID", $routeID); | $query->bindParam(":routeID", $routeID); |
$query->bindParam(":directionID", $directionID); | |
$query->execute(); | $query->execute(); |
if (!$query) { | if (!$query) { |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return Array(); | return Array(); |
} | } |
$r = $query->fetch(PDO :: FETCH_ASSOC); | $r = $query->fetch(PDO :: FETCH_ASSOC); |
} | return $r; |
return $r; | } |
} | |
function getRouteAtStop($routeID, $directionID, $stop_id) { | |
function getRouteAtStop($routeID, $stop_id) { | $nextTrip = getRouteNextTrip($routeID, $directionID); |
$nextTrip = getRouteNextTrip($routeID); | |
if ($nextTrip['trip_id']) { | if ($nextTrip['trip_id']) { |
foreach (getTripStopTimes($nextTrip['trip_id']) as $tripStop) { | foreach (getTripStopTimes($nextTrip['trip_id']) as $tripStop) { |
if ($tripStop['stop_id'] == $stop_id) | if ($tripStop['stop_id'] == $stop_id) |
return $tripStop; | return $tripStop; |
} | } |
} | } |
return Array(); | return Array(); |
} | } |
function getRoutesTrips($routeIDs, $directionID = "", $service_period = "") { | function getRouteTrips($routeID, $directionID = "", $service_period = "") { |
global $conn; | global $conn; |
if ($service_period == "") | if ($service_period == "") |
$service_period = service_period(); | $service_period = service_period(); |
$service_ids = service_ids($service_period); | $service_ids = service_ids($service_period); |
$sidA = $service_ids[0]; | $sidA = $service_ids[0]; |
$sidB = $service_ids[1]; | $sidB = $service_ids[1]; |
$directionSQL = ""; | $directionSQL = ""; |
if ($directionID != "") | if ($directionID != "") |
$directionSQL = " and direction_id = :directionID "; | $directionSQL = " and direction_id = :directionID "; |
$query = "select routes.route_id,trips.trip_id,service_id,arrival_time, stop_id, stop_sequence from routes join trips on trips.route_id = routes.route_id | $query = "select routes.route_id,trips.trip_id,service_id,arrival_time, stop_id, stop_sequence from routes join trips on trips.route_id = routes.route_id |
join stop_times on stop_times.trip_id = trips.trip_id where (service_id=:service_periodA OR service_id=:service_periodB) | join stop_times on stop_times.trip_id = trips.trip_id where (service_id=:service_periodA OR service_id=:service_periodB) |
AND (routes.route_id = :routeIDA OR routes.route_id = :routeIDB) " . $directionSQL . " and stop_sequence = '1' order by | AND (routes.route_id = :routeID) " . $directionSQL . " and stop_sequence = '1' order by |
arrival_time "; | arrival_time "; |
debug($query, "database"); | debug($query, "database"); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":routeIDA", $routeIDs[0]); | $query->bindParam(":routeID", $routeID); |
$query->bindParam(":routeIDB", $routeIDs[1]); | |
$query->bindParam(":service_periodA", $sidA); | $query->bindParam(":service_periodA", $sidA); |
$query->bindParam(":service_periodB", $sidB); | $query->bindParam(":service_periodB", $sidB); |
if ($directionSQL != "") | if ($directionSQL != "") |
$query->bindParam(":directionID", $directionID); | $query->bindParam(":directionID", $directionID); |
$query->execute(); | $query->execute(); |
if (!$query) { | if (!$query) { |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return Array(); | return Array(); |
} | } |
return $query->fetchAll(); | return $query->fetchAll(); |
} | } |
function getRoutesByDestination($destination = "", $service_period = "") { | function getRoutesByDestination($destination = "", $service_period = "") { |
global $conn; | global $conn; |
if ($service_period == "") | if ($service_period == "") |
$service_period = service_period(); | $service_period = service_period(); |
$service_ids = service_ids($service_period); | $service_ids = service_ids($service_period); |
$sidA = $service_ids[0]; | $sidA = $service_ids[0]; |
$sidB = $service_ids[1]; | $sidB = $service_ids[1]; |
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_periodA OR service_id=:service_periodB) | WHERE route_long_name = :destination AND (service_id=:service_periodA OR service_id=:service_periodB) |
order by route_short_name"; | 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_periodA OR service_id=:service_periodB) | WHERE (service_id=:service_periodA OR service_id=:service_periodB) |
order by route_long_name"; | order by route_long_name"; |
} | } |
debug($query, "database"); | debug($query, "database"); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":service_periodA", $sidA); | $query->bindParam(":service_periodA", $sidA); |
$query->bindParam(":service_periodB", $sidB); | $query->bindParam(":service_periodB", $sidB); |
if ($destination != "") | if ($destination != "") |
$query->bindParam(":destination", $destination); | $query->bindParam(":destination", $destination); |
$query->execute(); | $query->execute(); |
if (!$query) { | if (!$query) { |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return Array(); | return Array(); |
} | } |
return $query->fetchAll(); | return $query->fetchAll(); |
} | } |
function getRoutesBySuburb($suburb, $service_period = "") { | function getRoutesBySuburb($suburb, $service_period = "") { |
if ($service_period == "") | if ($service_period == "") |
$service_period = service_period(); | $service_period = service_period(); |
$service_ids = service_ids($service_period); | $service_ids = service_ids($service_period); |
$sidA = $service_ids[0]; | $sidA = $service_ids[0]; |
$sidB = $service_ids[1]; | $sidB = $service_ids[1]; |
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 stop_desc LIKE :suburb AND (service_id=:service_periodA OR service_id=:service_periodB) | WHERE stop_desc LIKE :suburb AND (service_id=:service_periodA OR service_id=:service_periodB) |
ORDER BY route_short_name"; | ORDER BY route_short_name"; |
debug($query, "database"); | debug($query, "database"); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":service_periodA", $sidA); | $query->bindParam(":service_periodA", $sidA); |
$query->bindParam(":service_periodB", $sidB); | $query->bindParam(":service_periodB", $sidB); |
$suburb = "%Suburb: %" . $suburb . "%"; | $suburb = "%Suburb: %" . $suburb . "%"; |
$query->bindParam(":suburb", $suburb); | $query->bindParam(":suburb", $suburb); |
$query->execute(); | $query->execute(); |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return $query->fetchAll(); | return $query->fetchAll(); |
} | } |
function getRoutesNearby($lat, $lng, $limit = "", $distance = 500) { | function getRoutesNearby($lat, $lng, $limit = "", $distance = 500) { |
if ($service_period == "") | if ($service_period == "") |
$service_period = service_period(); | $service_period = service_period(); |
$service_ids = service_ids($service_period); | $service_ids = service_ids($service_period); |
$sidA = $service_ids[0]; | $sidA = $service_ids[0]; |
$sidB = $service_ids[1]; | $sidB = $service_ids[1]; |
if ($limit != "") | if ($limit != "") |
$limitSQL = " LIMIT :limit "; | $limitSQL = " LIMIT :limit "; |
global $conn; | global $conn; |
$query = "SELECT service_id,trips.route_id,route_short_name,route_long_name,min(stops.stop_id) as stop_id, | $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_periodA OR service_id=:service_periodB) | WHERE (service_id=:service_periodA OR service_id=:service_periodB) |
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 $limitSQL"; | order by distance $limitSQL"; |
debug($query, "database"); | debug($query, "database"); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":service_periodA", $sidA); | $query->bindParam(":service_periodA", $sidA); |
$query->bindParam(":service_periodB", $sidB); | $query->bindParam(":service_periodB", $sidB); |
$query->bindParam(":distance", $distance); | $query->bindParam(":distance", $distance); |
if ($limit != "") | if ($limit != "") |
$query->bindParam(":limit", $limit); | $query->bindParam(":limit", $limit); |
$query->execute(); | $query->execute(); |
if (!$query) { | if (!$query) { |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return Array(); | return Array(); |
} | } |
return $query->fetchAll(); | return $query->fetchAll(); |
} | } |
?> | ?> |
<?php | <?php |
/* | /* |
* Copyright 2010,2011 Alexander Sadleir | * Copyright 2010,2011 Alexander Sadleir |
Licensed under the Apache License, Version 2.0 (the "License"); | Licensed under the Apache License, Version 2.0 (the "License"); |
you may not use this file except in compliance with the License. | you may not use this file except in compliance with the License. |
You may obtain a copy of the License at | You may obtain a copy of the License at |
http://www.apache.org/licenses/LICENSE-2.0 | http://www.apache.org/licenses/LICENSE-2.0 |
Unless required by applicable law or agreed to in writing, software | Unless required by applicable law or agreed to in writing, software |
distributed under the License is distributed on an "AS IS" BASIS, | distributed under the License is distributed on an "AS IS" BASIS, |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
See the License for the specific language governing permissions and | See the License for the specific language governing permissions and |
limitations under the License. | limitations under the License. |
*/ | */ |
include ('include/common.inc.php'); | include ('include/common.inc.php'); |
include_header("bus.lambdacomplex.org", "index", false) | include_header("bus.lambdacomplex.org", "index", false) |
?> | ?> |
<div data-role="page"> | <div data-role="page"> |
<div data-role="content"> | <div data-role="content"> |
<div id="jqm-homeheader"> | <div id="jqm-homeheader"> |
<h1>busness time</h1><br><small>Canberra Bus Timetables and Trip Planner</small> | <h1>busness time</h1><br><small>Canberra Bus Timetables and Trip Planner</small> |
</div> | </div> |
<a name="maincontent" id="maincontent"></a> | <a name="maincontent" id="maincontent"></a> |
<a href="tripPlanner.php" data-role="button" data-icon="navigation">Launch Trip Planner...</a> | <a href="tripPlanner.php" data-role="button" data-icon="navigation">Launch Trip Planner...</a> |
<ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="b"> | <ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="b"> |
<li data-role="list-divider">Timetables - Stops</li> | <li data-role="list-divider">Timetables - Stops</li> |
<li><a href="stopList.php">Stops By Name</a></li> | <li><a href="stopList.php">Stops By Name</a></li> |
<li><a href="stopList.php?bysuburbs=yes">Stops By Suburb</a></li> | <li><a href="stopList.php?bysuburbs=yes">Stops By Suburb</a></li> |
<li><a class="nearby" href="stopList.php?nearby=yes">Nearby Stops</a></li> | <li><a class="nearby" href="stopList.php?nearby=yes">Nearby Stops</a></li> |
</ul> | </ul> |
<ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="b"> | <ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="b"> |
<li data-role="list-divider">Timetables - Routes</li> | <li data-role="list-divider">Timetables - Routes</li> |
<li><a href="routeList.php">Routes By Final Destination</a></li> | <li><a href="routeList.php">Routes By Final Destination</a></li> |
<li><a href="routeList.php?bynumber=yes">Routes By Number</a></li> | <li><a href="routeList.php?bynumber=yes">Routes By Number</a></li> |
<li><a href="routeList.php?bysuburbs=yes">Routes By Suburb</a></li> | <li><a href="routeList.php?bysuburbs=yes">Routes By Suburb</a></li> |
<li><a class="nearby" href="routeList.php?nearby=yes">Nearby Routes</a></li> | <li><a class="nearby" href="routeList.php?nearby=yes">Nearby Routes</a></li> |
</ul> | </ul> |
<a href="labs/index.php" data-role="button" data-icon="beaker">Busness R&D</a> | |
<a href="myway/index.php" data-role="button">MyWay Balance and Timeliness Survey Results</a> | |
<?php | <?php |
echo ' <a href="labs/index.php" data-role="button" data-icon="beaker">Busness R&D</a>'; | |
echo ' <a href="myway/index.php" data-role="button">MyWay Balance and Timeliness Survey Results</a>'; | |
include_footer(true) | include_footer(true) |
?> | ?> |
<?php | <?php |
/* | /* |
* Copyright 2010,2011 Alexander Sadleir | * Copyright 2010,2011 Alexander Sadleir |
Licensed under the Apache License, Version 2.0 (the "License"); | Licensed under the Apache License, Version 2.0 (the "License"); |
you may not use this file except in compliance with the License. | you may not use this file except in compliance with the License. |
You may obtain a copy of the License at | You may obtain a copy of the License at |
http://www.apache.org/licenses/LICENSE-2.0 | http://www.apache.org/licenses/LICENSE-2.0 |
Unless required by applicable law or agreed to in writing, software | Unless required by applicable law or agreed to in writing, software |
distributed under the License is distributed on an "AS IS" BASIS, | distributed under the License is distributed on an "AS IS" BASIS, |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
See the License for the specific language governing permissions and | See the License for the specific language governing permissions and |
limitations under the License. | limitations under the License. |
*/ | */ |
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?bysuburbs=yes">By Suburb... </a></li> | <li><a href="routeList.php?bysuburbs=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> |
'; | '; |
} | } |
function displayRoutes($routes) { | function displayRoutes($routes) { |
global $nearby; | global $nearby; |
echo ' <ul data-role="listview" data-filter="true" data-inset="true" >'; | echo ' <ul data-role="listview" data-filter="true" data-inset="true" >'; |
$filteredRoutes = Array(); | $filteredRoutes = Array(); |
foreach ($routes as $route) { | foreach ($routes as $route) { |
foreach (getRouteHeadsigns($route['route_id']) as $headsign) { | foreach (getRouteHeadsigns($route['route_id']) as $headsign) { |
$start = $headsign['stop_name']; | |
$serviceday = service_period_day($headsign['service_id']); | //print_r($route); |
$key = $route['route_short_name'] . "." . $headsign['direction_id']; | echo '<li> <a href="trip.php?routeid=' . $route['route_id'] . '&directionid=' . $headsign['direction_id'] . '"><h3>' . $route['route_short_name'] . "</h3> |
if (isset($filteredRoutes[$key])) { | |
$filteredRoutes[$key]['route_ids'][] = $route['route_id']; | |
$filteredRoutes[$key]['route_ids'] = array_unique($filteredRoutes[$key]['route_ids']); | |
} else { | |
$filteredRoutes[$key]['route_short_name'] = $route['route_short_name']; | |
$filteredRoutes[$key]['route_long_name'] = "starting at " . $start; | |
$filteredRoutes[$key]['service_id'] = $serviceday; | |
$filteredRoutes[$key]['trip_headsign'] = $headsign['trip_headsign'].(strstr($headsign['trip_headsign'], "bound") ===false ?"bound":""); | |
$filteredRoutes[$key]['direction_id'] = $headsign['direction_id']; | |
if (isset($nearby)) { | |
$filteredRoutes[$key]['distance'] = $route['distance']; | |
} | |
} | |
} | |
} | |
foreach ($filteredRoutes as $key => $route) { | |
echo '<li> <a href="trip.php?routeids=' . implode(",", $route['route_ids']) . '&directionid=' . $route['direction_id'] . '"><h3>' . $route['route_short_name'] . "</h3> | |
<p>" . $route['trip_headsign'].", ". $route['route_long_name'] . " (" . ucwords($route['service_id']) . ")</p>"; | <p>" . $headsign['trip_headsign'].(strstr($headsign['trip_headsign'], "bound") ===false ?"bound":"").", starting at " . $headsign['stop_name'] . " (" . ucwords($headsign['service_id']) . ")</p>"; |
if (isset($nearby)) { | if (isset($nearby)) { |
$time = getRouteAtStop($route['route_id'], $route['stop_id']); | $time = getRouteAtStop($route['route_id'], $headsign['direction_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 '<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"; |
} | } |
} | |
} | } |
if (isset($bysuburbs)) { | if (isset($bysuburbs)) { |
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($firstLetter)) { | if (!isset($firstLetter)) { |
foreach (range('A', 'Z') as $letter) { | foreach (range('A', 'Z') as $letter) { |
echo "<li><a href=\"routeList.php?firstLetter=$letter&bysuburbs=yes\">$letter...</a></li>\n"; | echo "<li><a href=\"routeList.php?firstLetter=$letter&bysuburbs=yes\">$letter...</a></li>\n"; |
} | } |
} else { | } else { |
foreach ($suburbs as $suburb) { | foreach ($suburbs as $suburb) { |
if (startsWith($suburb, $firstLetter)) { | if (startsWith($suburb, $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 (isset($suburb)) { | } else if (isset($suburb)) { |
if ($suburb) { | if ($suburb) { |
include_header($suburb . " - " . ucwords(service_period()), "routeList"); | include_header($suburb . " - " . ucwords(service_period()), "routeList"); |
navbar(); | navbar(); |
timeSettings(); | timeSettings(); |
trackEvent("Route Lists", "Routes By Suburb", $suburb); | trackEvent("Route Lists", "Routes By Suburb", $suburb); |
displayRoutes(getRoutesBySuburb($suburb)); | displayRoutes(getRoutesBySuburb($suburb)); |
} | } |
} else if (isset($nearby)) { | } else if (isset($nearby)) { |
$routes = Array(); | $routes = Array(); |
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(); |
placeSettings(); | placeSettings(); |
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']); |
if (sizeof($routes) > 0) { | if (sizeof($routes) > 0) { |
displayRoutes($routes); | displayRoutes($routes); |
} else { | } else { |
echo ' <ul data-role="listview" data-filter="true" data-inset="true" >'; | echo ' <ul data-role="listview" data-filter="true" data-inset="true" >'; |
echo "<li style='text-align: center;'> No routes nearby.</li>"; | echo "<li style='text-align: center;'> No routes nearby.</li>"; |
} | } |
} else if (isset($bynumber) || isset($numberSeries)) { | } else if (isset($bynumber) || isset($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 (isset($bynumber)) { | if (isset($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") | if ($seriesNum == "0") |
$seriesNum = $routeNumber; | $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']) | if ($finalDigit < $seriesRange[$seriesNum]['max']) |
$seriesRange[$seriesNum]['max'] = $routeNumber; | $seriesRange[$seriesNum]['max'] = $routeNumber; |
if ($finalDigit > $seriesRange[$seriesNum]['min']) | if ($finalDigit > $seriesRange[$seriesNum]['min']) |
$seriesRange[$seriesNum]['min'] = $routeNumber; | $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) | if ($series <= 9) |
echo $series; | echo $series; |
else | else |
echo "{$seriesRange[$series]['min']}-{$seriesRange[$series]['max']}"; | echo "{$seriesRange[$series]['min']}-{$seriesRange[$series]['max']}"; |
echo "</a></li>\n"; | echo "</a></li>\n"; |
} | } |
} | } |
else if ($numberSeries) { | else if ($numberSeries) { |
displayRoutes(getRoutesByNumberSeries($numberSeries)); | displayRoutes(getRoutesByNumberSeries($numberSeries)); |
} | } |
} 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 (isset($routeDestination)) { | if (isset($routeDestination)) { |
displayRoutes(getRoutesByDestination($routeDestination)); | displayRoutes(getRoutesByDestination($routeDestination)); |
} 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(); |
?> | ?> |
# info | # info |
# http://stackoverflow.com/questions/4206882/named-entity-recognition-with-preset-list-of-names-for-python-php/4207128#4207128 | # http://stackoverflow.com/questions/4206882/named-entity-recognition-with-preset-list-of-names-for-python-php/4207128#4207128 |
# http://alias-i.com/lingpipe/demos/tutorial/ne/read-me.html approximate dist | # http://alias-i.com/lingpipe/demos/tutorial/ne/read-me.html approximate dist |
# http://streamhacker.com/2008/12/29/how-to-train-a-nltk-chunker/ more training | # http://streamhacker.com/2008/12/29/how-to-train-a-nltk-chunker/ more training |
# http://www.postgresql.org/docs/9.1/static/pgtrgm.html | # http://www.postgresql.org/docs/9.1/static/pgtrgm.html |
# data sources | # data sources |
# http://twitter.com/#!/ACTEmergencyInf instant site wide | # http://twitter.com/#!/ACTEmergencyInf instant site wide |
# http://twitter.com/#!/ACTPol_Traffic | # http://twitter.com/#!/ACTPol_Traffic |
# http://esa.act.gov.au/feeds/currentincidents.xml | # http://esa.act.gov.au/feeds/currentincidents.xml |
# source: https://gist.github.com/322906/90dea659c04570757cccf0ce1e6d26c9d06f9283 | # source: https://gist.github.com/322906/90dea659c04570757cccf0ce1e6d26c9d06f9283 |
# to install python -m nltk.downloader punkt | |
import nltk | import nltk |
import twitter | |
import tweepy | import tweepy |
import psycopg2 | import psycopg2 |
import pickle | |
from iniparse import INIConfig | from iniparse import INIConfig |
def insert_service_alert_sitewide(heading, message, url): | def insert_service_alert_sitewide(heading, message, url): |
print "NaN" | print "NaN" |
def insert_service_alert_for_street(streets, heading, message, url): | def insert_service_alert_for_street(streets, heading, message, url): |
conn_string = "host='localhost' dbname='energymapper' user='postgres' password='snmc'" | conn_string = "host='localhost' dbname='energymapper' user='postgres' password='snmc'" |
# print the connection string we will use to connect | # print the connection string we will use to connect |
print "Connecting to database\n ->%s" % (conn_string) | print "Connecting to database\n ->%s" % (conn_string) |
try: | try: |
# get a connection, if a connect cannot be made an exception will be raised here | # get a connection, if a connect cannot be made an exception will be raised here |
conn = psycopg2.connect(conn_string) | conn = psycopg2.connect(conn_string) |
# conn.cursor will return a cursor object, you can use this cursor to perform queries | # conn.cursor will return a cursor object, you can use this cursor to perform queries |
cursor = conn.cursor() | cursor = conn.cursor() |
# execute our Query | # execute our Query |
cursor.execute("") | cursor.execute("") |
# retrieve the records from the database | # retrieve the records from the database |
records = cursor.fetchall() | records = cursor.fetchall() |
for record in records: | for record in records: |
ys.append(record[0]) | ys.append(record[0]) |
# >>> cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (42, 'bar')) | # >>> cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (42, 'bar')) |
#>>> cur.statusmessage | #>>> cur.statusmessage |
#'INSERT 0 1' | #'INSERT 0 1' |
except: | except: |
# Get the most recent exception | # Get the most recent exception |
exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() | exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() |
# Exit the script and print an error telling what happened. | # Exit the script and print an error telling what happened. |
sys.exit("Database connection failed!\n ->%s" % (exceptionValue)) | sys.exit("Database connection failed!\n ->%s" % (exceptionValue)) |
def extract_entity_names(t): | def extract_entity_names(t): |
entity_names = [] | entity_names = [] |
if hasattr(t, 'node') and t.node: | if hasattr(t, 'node') and t.node: |
if t.node == 'NE': | if t.node == 'NE': |
entity_names.append(' '.join([child[0] for child in t])) | entity_names.append(' '.join([child[0] for child in t])) |
else: | else: |
for child in t: | for child in t: |
entity_names.extend(extract_entity_names(child)) | entity_names.extend(extract_entity_names(child)) |
return entity_names | return entity_names |
def extract_names(sample): | def extract_names(sample): |
sentences = nltk.sent_tokenize(sample) | sentences = nltk.sent_tokenize(sample) |
tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences] | tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences] |
tagged_sentences = [nltk.pos_tag(sentence) for sentence in tokenized_sentences] | tagged_sentences = [nltk.pos_tag(sentence) for sentence in tokenized_sentences] |
chunked_sentences = nltk.batch_ne_chunk(tagged_sentences, binary=True) | chunked_sentences = nltk.batch_ne_chunk(tagged_sentences, binary=True) |
# chunked/tagged may be enough to just find and match the nouns | # chunked/tagged may be enough to just find and match the nouns |
entity_names = [] | entity_names = [] |
for tree in chunked_sentences: | for tree in chunked_sentences: |
# Print results per sentence | # Print results per sentence |
# print extract_entity_names(tree) | # print extract_entity_names(tree) |
entity_names.extend(extract_entity_names(tree)) | entity_names.extend(extract_entity_names(tree)) |
# Print all entity names | # Print all entity names |
#print entity_names | #print entity_names |
# Print unique entity names | # Print unique entity names |
print set(entity_names) | print set(entity_names) |
cfg = INIConfig(open('/tmp/aws.ini')) | cfg = INIConfig(open('/tmp/aws.ini')) |
auth = tweepy.OAuthHandler(cfg.api_keys.twitter_consumer_key, cfg.api_keys.twitter_consumer_secret) | auth = tweepy.OAuthHandler(cfg.api_keys.twitter_consumer_key, cfg.api_keys.twitter_consumer_secret) |
auth.set_access_token(cfg.api_keys.twitter_access_token, cfg.api_keys.twitter_access_token_secret) | auth.set_access_token(cfg.api_keys.twitter_access_token, cfg.api_keys.twitter_access_token_secret) |
api = tweepy.API(auth) | #api = tweepy.API(auth) |
api = tweepy.API() | |
# If the authentication was successful, you should | # If the authentication was successful, you should |
# see the name of the account print out | # see the name of the account print out |
print api.me().name | #print api.me().name |
# https://github.com/tweepy/tweepy/blob/master/tweepy/api.py | # https://github.com/tweepy/tweepy/blob/master/tweepy/api.py |
print api.user_timeline(screen_name="ACTPol_Traffic") | for status in api.user_timeline(screen_name="ACTPol_Traffic",exclude_replies='true'): |
print api.update_status(status="test") | print status.text |
print status.created_at | |
print extract_names(status.text) | |
# print api.update_status(status="test") | |
last_tweet_ids = { "lion": "111", "kitty": "2222" } | |
pickle.dump( last_tweet_ids, open( "save.p", "wb" ) ) | |
last_tweet_ids = pickle.load( open( "save.p", "rb" ) ) |
<?php | <?php |
/* | /* |
* Copyright 2010,2011 Alexander Sadleir | * Copyright 2010,2011 Alexander Sadleir |
Licensed under the Apache License, Version 2.0 (the "License"); | Licensed under the Apache License, Version 2.0 (the "License"); |
you may not use this file except in compliance with the License. | you may not use this file except in compliance with the License. |
You may obtain a copy of the License at | You may obtain a copy of the License at |
http://www.apache.org/licenses/LICENSE-2.0 | http://www.apache.org/licenses/LICENSE-2.0 |
Unless required by applicable law or agreed to in writing, software | Unless required by applicable law or agreed to in writing, software |
distributed under the License is distributed on an "AS IS" BASIS, | distributed under the License is distributed on an "AS IS" BASIS, |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
See the License for the specific language governing permissions and | See the License for the specific language governing permissions and |
limitations under the License. | limitations under the License. |
*/ | */ |
include ('include/common.inc.php'); | include ('include/common.inc.php'); |
if ($stopid) | if ($stopid) |
$stop = getStop($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($stopids)) { | if (isset($stopids)) { |
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: <br>"; | $stopLinks.= "Individual stop pages: <br>"; |
foreach ($stops as $key => $sub_stop) { | foreach ($stops as $key => $sub_stop) { |
$stopNames[$key] = $sub_stop["stop_name"]; | $stopNames[$key] = $sub_stop["stop_name"]; |
$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> '; |
$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"]])) | if (!isset($allStopsTrips[$trip["trip_id"]])) |
$allStopsTrips[$trip["trip_id"]] = $trip; | $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"); |
/* $serviceAlerts = json_decode(getPage(curPageURL() . "/servicealerts_api.php?filter_class=stop&filter_id=".$stopid) , true); | /* $serviceAlerts = json_decode(getPage(curPageURL() . "/servicealerts_api.php?filter_class=stop&filter_id=".$stopid) , true); |
foreach($serviceAlerts['entities'] as $serviceAlert) { | foreach($serviceAlerts['entities'] as $serviceAlert) { |
echo '<div id="servicewarning">'.$serviceAlert['alert']['description']['translation'].'</div>'; | echo '<div id="servicewarning">'.$serviceAlert['alert']['description']['translation'].'</div>'; |
} */ | } */ |
echo '<span class="content-secondary">'; | echo '<span class="content-secondary">'; |
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 staticmap($stopPositions); | echo staticmap($stopPositions); |
} 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 staticmap(Array( | echo staticmap(Array( |
0 => Array( | 0 => Array( |
$stop["stop_lat"], | $stop["stop_lat"], |
$stop["stop_lon"] | $stop["stop_lon"] |
) | ) |
)); | )); |
} | } |
timeSettings(); | timeSettings(); |
echo '</span><span class="content-primary">'; | echo '</span><span class="content-primary">'; |
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); |
} | } |
echo "<div class='ui-header' style='overflow: visible; height: 2.5em'>"; | echo "<div class='ui-header' style='overflow: visible; height: 2.5em'>"; |
// if we have too many trips, cut down to size. | |
if (sizeof($trips) > 10) { | |
$trips = array_splice($trips, 0,10); | |
} | |
// later/earlier button setup | // later/earlier button setup |
if (sizeof($trips) == 0) { | if (sizeof($trips) == 0) { |
$time = isset($_REQUEST['time']) ? strtotime($_REQUEST['time']) : time(); | $time = isset($_REQUEST['time']) ? strtotime($_REQUEST['time']) : time(); |
$earlierTime = $time - (90 * 60); | $earlierTime = $time - (90 * 60); |
$laterTime = $time + (90 * 60); | $laterTime = $time + (90 * 60); |
} else { | } else { |
$earlierTime = strtotime($trips[0]['arrival_time']) - (90 * 60); | $tripsKeys = array_keys($trips); |
$laterTime = strtotime($trips[sizeof($trips) - 1]['arrival_time']) - 60; | $earlierTime = strtotime($trips[$tripsKeys[0]]['arrival_time']) - (90 * 60); |
$laterTime = strtotime($trips[$tripsKeys[sizeof($trips) - 1]]['arrival_time']) - 60; | |
} | } |
if (sizeof($stopids) > 0) { | if (sizeof($stopids) > 0) { |
$stopidurl = "stopids=" . implode(",", $stopids); | $stopidurl = "stopids=" . implode(",", $stopids); |
} else { | } else { |
$stopidurl = "stopid=$stopid"; | $stopidurl = "stopid=$stopid"; |
} | } |
if (sizeof($trips) > 10) { | if (sizeof($trips) >= 10) { |
echo '<a href="stop.php?' . $stopidurl . '&service_period=' . service_period() . '&time=' . date("H:i", $laterTime) . '" data-icon="arrow-r" class="ui-btn-right">Later Trips</a>'; | echo '<a href="stop.php?' . $stopidurl . '&service_period=' . service_period() . '&time=' . date("H:i", $laterTime) . '" data-icon="arrow-r" class="ui-btn-right">Later Trips</a>'; |
} | } |
echo '<a href="stop.php?' . $stopidurl . '&service_period=' . service_period() . '&time=' . date("H:i", $earlierTime) . '" data-icon="arrow-l" class="ui-btn-left">Earlier Trips</a>'; | echo '<a href="stop.php?' . $stopidurl . '&service_period=' . service_period() . '&time=' . date("H:i", $earlierTime) . '" data-icon="arrow-l" class="ui-btn-left">Earlier Trips</a>'; |
echo "</div>"; | echo "</div>"; |
if (sizeof($trips) == 0) { | if (sizeof($trips) == 0) { |
echo "<li style='text-align: center;'>No trips in the near future.</li>"; | echo "<li style='text-align: center;'>No trips in the near future.</li>"; |
} else { | } else { |
foreach ($trips as $trip) { | foreach ($trips as $trip) { |
echo '<li>'; | echo '<li>'; |
$destination = getTripDestination($trip['trip_id']); | $destination = getTripDestination($trip['trip_id']); |
echo '<a href="trip.php?stopid=' . $stopid . '&tripid=' . $trip['trip_id'] . '"><h3>' . $trip['route_short_name'] . " towards " . $destination['stop_name'] . "</h3><p>"; | echo '<a href="trip.php?stopid=' . $stopid . '&tripid=' . $trip['trip_id'] . '"><h3>'. $trip['route_short_name'] . " towards " . $destination['stop_name'] . "</h3><p>"; |
$viaPoints = viaPointNames($trip['trip_id'], $trip['stop_sequence']); | $viaPoints = viaPointNames($trip['trip_id'], $trip['stop_sequence']); |
if ($viaPoints != "") | if ($viaPoints != "") |
echo '<br><span class="viaPoints">Via: ' . $viaPoints . '</span>'; | 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: '; |
if (sizeof($tripStopNumbers[$trip['trip_id']]) == sizeof($stopids)) { | if (sizeof($tripStopNumbers[$trip['trip_id']]) == sizeof($stopids)) { |
echo "All Stops"; | echo "All Stops"; |
} else { | } else { |
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>'; | echo '</ul>'; |
echo '</span>'; | echo '</span>'; |
include_footer(); | include_footer(); |
?> | ?> |
<?php | <?php |
/* | /* |
* Copyright 2010,2011 Alexander Sadleir | * Copyright 2010,2011 Alexander Sadleir |
Licensed under the Apache License, Version 2.0 (the "License"); | Licensed under the Apache License, Version 2.0 (the "License"); |
you may not use this file except in compliance with the License. | you may not use this file except in compliance with the License. |
You may obtain a copy of the License at | You may obtain a copy of the License at |
http://www.apache.org/licenses/LICENSE-2.0 | http://www.apache.org/licenses/LICENSE-2.0 |
Unless required by applicable law or agreed to in writing, software | Unless required by applicable law or agreed to in writing, software |
distributed under the License is distributed on an "AS IS" BASIS, | distributed under the License is distributed on an "AS IS" BASIS, |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
See the License for the specific language governing permissions and | See the License for the specific language governing permissions and |
limitations under the License. | limitations under the License. |
*/ | */ |
include ('include/common.inc.php'); | include ('include/common.inc.php'); |
$routetrips = Array(); | $routetrips = Array(); |
if (isset($routeids) && !isset($tripid)) { | if (isset($routeid) && !isset($tripid)) { |
foreach ($routeids as $routeid) { | $trip = getRouteNextTrip($routeid,$directionid); |
$possibleTrip = getRouteNextTrip($routeid); | |
if (!isset($trip) || strtotime($possibleTrip['departure_time']) < strtotime($trip['departure_time'])) { | if (!($trip)) { |
$trip = getRouteNextTrip($routeid); | $trip = getRouteFirstTrip($routeid,$directionid); |
} | |
} | } |
$tripid = $trip['trip_id']; | $tripid = $trip['trip_id']; |
} else { | } else { |
$trip = getTrip($tripid); | $trip = getTrip($tripid); |
$similarRoutes = getRoutesByNumber($trip['route_short_name'], $trip['direction_id'], service_period_day($trip["service_id"])); | $routeid = $trip['route_id']; |
$routeids = Array(); | |
foreach ($similarRoutes as $similarRoute) { | |
$routeids[] = $similarRoute['route_id']; | |
} | |
$routeids = array_unique($routeids); | |
} | } |
$directionid = $trip['direction_id']; | $directionid = $trip['direction_id']; |
$service_period = service_period_day($trip["service_id"]); | $service_period = strtolower($trip["service_id"]); |
$destination = getTripDestination($trip['trip_id']); | $destination = getTripDestination($trip['trip_id']); |
include_header("Stops on " . $trip['route_short_name'] . ' ' . $destination['stop_name'], "trip"); | include_header("Stops on " . $trip['route_short_name'] . ' ' . $destination['stop_name'], "trip"); |
trackEvent("Route/Trip View", "View Route", $trip['route_short_name'] . ' ' . $destination['stop_name'], $routeid); | trackEvent("Route/Trip View", "View Route", $trip['route_short_name'] . ' ' . $destination['stop_name'], $routeid); |
echo '<span class="content-secondary">'; | echo '<span class="content-secondary">'; |
echo '<a href="' . $trip['route_url'] . '">View Original Timetable/Map</a>'; | echo '<a href="' . $trip['route_url'] . '">View Original Timetable/Map</a>'; |
echo '<h2>Via:</h2> <small>' . viaPointNames($tripid) . '</small>'; | echo '<h2>Via:</h2> <small>' . viaPointNames($tripid) . '</small>'; |
echo '<h2>Other Trips:</h2> '; | echo '<h2>Other Trips:</h2> '; |
echo "getRoutesTrips(".print_r($routeids,true).", {$trip['direction_id']}, $service_period) $tripid"; | $routeTrips = getRouteTrips($routeid, $trip['direction_id'], $service_period); |
$routeTrips = getRoutesTrips($routeids, $trip['direction_id'], $service_period); | |
foreach ($routeTrips as $key => $othertrip) { | foreach ($routeTrips as $key => $othertrip) { |
// if ($othertrip['trip_id'] != $tripid) { | // if ($othertrip['trip_id'] != $tripid) { |
echo '<a href="trip.php?tripid=' . $othertrip['trip_id'] . "&routeids=" . implode(",", $routeids) . '">' . 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> '; |
// } else { | // } else { |
// skip this trip but look forward/back | // skip this trip but look forward/back |
if ($key - 1 > 0) | if ($key - 1 > 0) |
$prevTrip = $routeTrips[$key - 1]['trip_id']; | $prevTrip = $routeTrips[$key - 1]['trip_id']; |
if ($key + 1 < sizeof($routeTrips)) | if ($key + 1 < sizeof($routeTrips)) |
$nextTrip = $routeTrips[$key + 1]['trip_id']; | $nextTrip = $routeTrips[$key + 1]['trip_id']; |
// } | // } |
} | } |
flush(); | flush(); |
@ob_flush(); | @ob_flush(); |
echo '<h2>Other directions/timing periods:</h2> '; | echo '<h2>Other directions/timing periods:</h2> '; |
$otherDir = 0; | $otherDir = 0; |
$filteredRoutes = Array(); | |
foreach (getRoutesByNumber($trip['route_short_name']) as $row) { | |
foreach (getRouteHeadsigns($row['route_id']) as $headsign) { | foreach (getRouteHeadsigns($routeid) as $headsign) { |
if ( $headsign['direction_id'] != $directionid || service_period_day($headsign['service_id']) != $service_period) { | if ($headsign['direction_id'] != $directionid || strtolower($headsign['service_id']) != $service_period) { |
echo "{$headsign['direction_id']} != $directionid || ".service_period_day($headsign['service_id'])." != $service_period <br>"; | |
$start = $headsign['stop_name']; | |
$serviceday = service_period_day($headsign['service_id']); | echo '<a href="trip.php?routeid=' . $routeid . '&directionid=' . $headsign['direction_id'] . '&service_period=' . $headsign['service_id'] . '"> Starting at ' . $headsign['stop_name'] . ' (' . $headsign['service_id'] . ')</a> '; |
$key = $row['route_short_name'] . "." . $headsign['direction_id']; | $otherDir++; |
if (isset($filteredRoutes[$key])) { | |
$filteredRoutes[$key]['route_ids'][] = $row['route_id']; | |
$filteredRoutes[$key]['route_ids'] = array_unique($filteredRoutes[$key]['route_ids']); | |
} else { | |
$filteredRoutes[$key]['route_short_name'] = $row['route_short_name']; | |
$filteredRoutes[$key]['route_long_name'] = "Starting at " . $start; | |
$filteredRoutes[$key]['service_id'] = $serviceday; | |
$filteredRoutes[$key]['direction_id'] = $headsign['direction_id']; | |
} | |
} | } |
} | } |
} | |
foreach ($filteredRoutes as $key => $row) { | |
echo '<a href="trip.php?routeids=' . implode(",",$row['route_ids']) . '&directionid='.$row['direction_id'].'&service_period='.$row['service_id'].'">' . $row['route_long_name'] . ' (' . ucwords($row['service_id']) . ')</a> '; | |
$otherDir++; | |
} | |
if ($otherDir == 0) { | if ($otherDir == 0) { |
echo "None"; | echo "None"; |
} | } |
echo '</span><span class="content-primary">'; | echo '</span><span class="content-primary">'; |
flush(); | flush(); |
@ob_flush(); | @ob_flush(); |
echo "<div class='ui-header' style='overflow: visible; height: 1.5em'>"; | echo "<div class='ui-header' style='overflow: visible; height: 1.5em'>"; |
if ($nextTrip) | if ($nextTrip) |
echo '<a href="trip.php?tripid=' . $nextTrip . "&routeids=" . implode(",", $routeids) . '" data-icon="arrow-r" class="ui-btn-right">Next Trip</a>'; | echo '<a href="trip.php?tripid=' . $nextTrip . "&routeid=" . $routeid . '" data-icon="arrow-r" class="ui-btn-right">Next Trip</a>'; |
if ($prevTrip) | if ($prevTrip) |
echo '<a href="trip.php?tripid=' . $prevTrip . "&routeids=" . implode(",", $routeids) . '" data-icon="arrow-l" class="ui-btn-left">Previous Trip</a>'; | echo '<a href="trip.php?tripid=' . $prevTrip . "&routeid=" . $routeid . '" data-icon="arrow-l" class="ui-btn-left">Previous Trip</a>'; |
echo "</div>"; | echo "</div>"; |
echo ' <ul data-role="listview" data-inset="true">'; | echo ' <ul data-role="listview" data-inset="true">'; |
$stopsGrouped = Array(); | $stopsGrouped = Array(); |
$tripStopTimes = getTripStopTimes($tripid); | $tripStopTimes = getTripStopTimes($tripid); |
echo '<li data-role="list-divider">' . $tripStopTimes[0]['arrival_time'] . ' to ' . $tripStopTimes[sizeof($tripStopTimes) - 1]['arrival_time'] . ' towards ' . $destination['stop_name'] . ' (' . ucwords(service_period_day($tripStopTimes[0]['service_id'])) . ')</li>'; | echo '<li data-role="list-divider">' . $tripStopTimes[0]['arrival_time'] . ' to ' . $tripStopTimes[sizeof($tripStopTimes) - 1]['arrival_time'] . ' towards ' . $destination['stop_name'] . ' (' . ucwords(strtolower($tripStopTimes[0]['service_id'])) . ')</li>'; |
foreach ($tripStopTimes as $key => $tripStopTime) { | foreach ($tripStopTimes as $key => $tripStopTime) { |
if ($key + 1 > sizeof($tripStopTimes) || stopCompare($tripStopTimes[$key]["stop_name"]) != stopCompare($tripStopTimes[$key + 1]["stop_name"])) { | if ($key + 1 > sizeof($tripStopTimes) || stopCompare($tripStopTimes[$key]["stop_name"]) != stopCompare($tripStopTimes[$key + 1]["stop_name"])) { |
echo '<li>'; | echo '<li>'; |
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']; |
if (isset($_SESSION['lat']) && isset($_SESSION['lon'])) { | if (isset($_SESSION['lat']) && isset($_SESSION['lon'])) { |
echo '<br>' . distance($tripStopTime['stop_lat'], $tripStopTime['stop_lon'], $_SESSION['lat'], $_SESSION['lon'], true) . 'm away'; | echo '<br>' . distance($tripStopTime['stop_lat'], $tripStopTime['stop_lon'], $_SESSION['lat'], $_SESSION['lon'], true) . 'm away'; |
} | } |
echo '</p>'; | echo '</p>'; |
echo stopGroupTitle($tripStopTime['stop_name'], $tripStopTime['stop_desc']) . '<br><small>' . sizeof($stopsGrouped["stop_ids"]) . ' stops</small>'; | echo stopGroupTitle($tripStopTime['stop_name'], $tripStopTime['stop_desc']) . '<br><small>' . sizeof($stopsGrouped["stop_ids"]) . ' stops</small>'; |
echo '</a></li>'; | echo '</a></li>'; |
flush(); | flush(); |
@ob_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']; | echo '<p class="ui-li-aside">' . $tripStopTime['arrival_time']; |
if (isset($_SESSION['lat']) && isset($_SESSION['lon'])) { | if (isset($_SESSION['lat']) && isset($_SESSION['lon'])) { |
echo '<br>' . distance($tripStopTime['stop_lat'], $tripStopTime['stop_lon'], $_SESSION['lat'], $_SESSION['lon'], true) . 'm away'; | echo '<br>' . distance($tripStopTime['stop_lat'], $tripStopTime['stop_lon'], $_SESSION['lat'], $_SESSION['lon'], true) . 'm away'; |
} | } |
echo '</p>'; | echo '</p>'; |
echo $tripStopTime['stop_name']; | echo $tripStopTime['stop_name']; |
echo '</a></li>'; | echo '</a></li>'; |
flush(); | flush(); |
@ob_flush(); | @ob_flush(); |
} | } |
} else { | } else { |
// this is a duplicated line item | // this is a duplicated line item |
if ($key - 1 <= 0 || stopCompare($tripStopTimes[$key]['stop_name']) != stopCompare($tripStopTimes[$key - 1]['stop_name'])) { | if ($key - 1 <= 0 || stopCompare($tripStopTimes[$key]['stop_name']) != stopCompare($tripStopTimes[$key - 1]['stop_name'])) { |
// first duplicate | // first duplicate |
$stopsGrouped = Array( | $stopsGrouped = Array( |
"name" => trim(preg_replace("/\(Platform.*/", "", $stop['stop_name'])), | "name" => trim(preg_replace("/\(Platform.*/", "", $stop['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>'; |
echo '</span>'; | echo '</span>'; |
include_footer(); | include_footer(); |
?> | ?> |
<?php | <?php |
/* | /* |
* Copyright 2010,2011 Alexander Sadleir | * Copyright 2010,2011 Alexander Sadleir |
Licensed under the Apache License, Version 2.0 (the "License"); | Licensed under the Apache License, Version 2.0 (the "License"); |
you may not use this file except in compliance with the License. | you may not use this file except in compliance with the License. |
You may obtain a copy of the License at | You may obtain a copy of the License at |
http://www.apache.org/licenses/LICENSE-2.0 | http://www.apache.org/licenses/LICENSE-2.0 |
Unless required by applicable law or agreed to in writing, software | Unless required by applicable law or agreed to in writing, software |
distributed under the License is distributed on an "AS IS" BASIS, | distributed under the License is distributed on an "AS IS" BASIS, |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
See the License for the specific language governing permissions and | See the License for the specific language governing permissions and |
limitations under the License. | limitations under the License. |
*/ | */ |
include ('include/common.inc.php'); | include ('include/common.inc.php'); |
include_header("Trip Planner", "tripPlanner", true, false, true); | include_header("Trip Planner", "tripPlanner", true, false, true); |
$from = (isset($_REQUEST['from']) ? filter_var($_REQUEST['from'], FILTER_SANITIZE_STRING) : ""); | $from = (isset($_REQUEST['from']) ? filter_var($_REQUEST['from'], FILTER_SANITIZE_STRING) : ""); |
$to = (isset($_REQUEST['to']) ? filter_var($_REQUEST['to'], FILTER_SANITIZE_STRING) : ""); | $to = (isset($_REQUEST['to']) ? filter_var($_REQUEST['to'], FILTER_SANITIZE_STRING) : ""); |
$date = (isset($_REQUEST['date']) ? filter_var($_REQUEST['date'], FILTER_SANITIZE_STRING) : date("m/d/Y")); | $date = (isset($_REQUEST['date']) ? filter_var($_REQUEST['date'], FILTER_SANITIZE_STRING) : date("m/d/Y")); |
$time = (isset($_REQUEST['time']) ? filter_var($_REQUEST['time'], FILTER_SANITIZE_STRING) : date("H:i")); | $time = (isset($_REQUEST['time']) ? filter_var($_REQUEST['time'], FILTER_SANITIZE_STRING) : date("H:i")); |
function formatTime($timeString) { | function formatTime($timeString) { |
$timeParts = explode("T", $timeString); | $timeParts = explode("T", $timeString); |
return str_replace("Z", "", $timeParts[1]); | return str_replace("Z", "", $timeParts[1]); |
} | } |
function tripPlanForm($errorMessage = "") { | function tripPlanForm($errorMessage = "") { |
global $date, $time, $from, $to; | global $date, $time, $from, $to; |
echo "<div class='error'>$errorMessage</font>"; | echo "<div class='error'>$errorMessage</font>"; |
echo '<form action="tripPlanner.php" method="post"> | echo '<form action="tripPlanner.php" method="post"> |
<div data-role="fieldcontain"> | <div data-role="fieldcontain"> |
<label for="from">I would like to go from</label> | <label for="from">I would like to go from</label> |
<input type="text" name="from" id="from" value="' . $from . '" /> | <input type="text" name="from" id="from" value="' . $from . '" /> |
<a href="#" style="display:none" name="fromHere" id="fromHere">Here?</a> | <a href="#" style="display:none" name="fromHere" id="fromHere">Here?</a> |
</div> | </div> |
<div data-role="fieldcontain"> | <div data-role="fieldcontain"> |
<label for="to"> to </label> | <label for="to"> to </label> |
<input type="text" name="to" id="to" value="' . $to . '" /> | <input type="text" name="to" id="to" value="' . $to . '" /> |
<a href="#" style="display:none" name="toHere" id="toHere">Here?</a> | <a href="#" style="display:none" name="toHere" id="toHere">Here?</a> |
</div> | </div> |
<div data-role="fieldcontain"> | <div data-role="fieldcontain"> |
<label for="date"> on </label> | <label for="date"> on </label> |
<input type="text" name="date" id="date" value="' . $date . '" /> | <input type="text" name="date" id="date" value="' . $date . '" /> |
</div> | </div> |
<div data-role="fieldcontain"> | <div data-role="fieldcontain"> |
<label for="time"> at </label> | <label for="time"> at </label> |
<input type="time" name="time" id="time" value="' . $time . '" /> | <input type="time" name="time" id="time" value="' . $time . '" /> |
</div> | </div> |
<input type="submit" value="Go!"></form>'; | <input type="submit" value="Go!"></form>'; |
} | } |
function processItinerary($itineraryNumber, $itinerary) { | function processItinerary($itineraryNumber, $itinerary) { |
echo '<div data-role="collapsible" ' . ($itineraryNumber > 0 ? 'data-collapsed="true"' : "") . '> <h3> Option #' . ($itineraryNumber + 1) . ": " . floor($itinerary->duration / 60000) . " minutes (" . formatTime($itinerary->startTime) . " to " . formatTime($itinerary->endTime) . ")</h3><p>"; | echo '<div data-role="collapsible" ' . ($itineraryNumber > 0 ? 'data-collapsed="true"' : "") . '> <h3> Option #' . ($itineraryNumber + 1) . ": " . floor($itinerary->duration / 60000) . " minutes (" . formatTime($itinerary->startTime) . " to " . formatTime($itinerary->endTime) . ")</h3><p>"; |
echo "Walking time: " . floor($itinerary->walkTime / 60000) . " minutes (" . floor($itinerary->walkDistance) . " meters)<br>\n"; | echo "Walking time: " . floor($itinerary->walkTime / 60000) . " minutes (" . floor($itinerary->walkDistance) . " meters)<br>\n"; |
echo "Transit time: " . floor($itinerary->transitTime / 60000) . " minutes<br>\n"; | echo "Transit time: " . floor($itinerary->transitTime / 60000) . " minutes<br>\n"; |
echo "Waiting time: " . floor($itinerary->waitingTime / 60000) . " minutes<br>\n"; | echo "Waiting time: " . floor($itinerary->waitingTime / 60000) . " minutes<br>\n"; |
if (is_array($itinerary->legs->leg)) { | if (is_array($itinerary->legs->leg)) { |
$legMarkers = array(); | $legMarkers = array(); |
foreach ($itinerary->legs->leg as $legNumber => $leg) { | foreach ($itinerary->legs->leg as $legNumber => $leg) { |
$legMarkers[] = array( | $legMarkers[] = array( |
$leg->from->lat, | $leg->from->lat, |
$leg->from->lon | $leg->from->lon |
); | ); |
} | } |
echo '' . staticmap($legMarkers, false, false, true) . "<br>\n"; | echo '' . staticmap($legMarkers, false, false, true) . "<br>\n"; |
echo '<ul>'; | echo '<ul>'; |
foreach ($itinerary->legs->leg as $legNumber => $leg) { | foreach ($itinerary->legs->leg as $legNumber => $leg) { |
echo '<li>'; | echo '<li>'; |
processLeg($legNumber, $leg); | processLeg($legNumber, $leg); |
echo "</li>"; | echo "</li>"; |
flush(); | flush(); |
@ob_flush(); | @ob_flush(); |
} | } |
echo "</ul>"; | echo "</ul>"; |
} else { | } else { |
echo '' . staticmap(array( | echo '' . staticmap(array( |
array( | array( |
$itinerary->legs->leg->from->lat, | $itinerary->legs->leg->from->lat, |
$itinerary->legs->leg->from->lon | $itinerary->legs->leg->from->lon |
) | ) |
), false, false, true) . "<br>\n"; | ), false, false, true) . "<br>\n"; |
processLeg(0, $itinerary->legs->leg); | processLeg(0, $itinerary->legs->leg); |
} | } |
echo "</p></div>"; | echo "</p></div>"; |
} | } |
function processLeg($legNumber, $leg) { | function processLeg($legNumber, $leg) { |
$legArray = object2array($leg); | $legArray = object2array($leg); |
echo '<h3>Leg #' . ($legNumber + 1) . " ( {$legArray['@mode']} from: {$leg->from->name} to {$leg->to->name}, " . floor($leg->duration / 60000) . " minutes) </h3>\n"; | echo '<h3>Leg #' . ($legNumber + 1) . " ( {$legArray['@mode']} from: {$leg->from->name} to {$leg->to->name}, " . floor($leg->duration / 60000) . " minutes) </h3>\n"; |
if ($legArray["@mode"] === "BUS") { | if ($legArray["@mode"] === "BUS") { |
echo "Take bus {$legArray['@route']} " . str_replace("To", "towards", $legArray['@headsign']) . " departing at " . formatTime($leg->startTime) . "<br>"; | echo "Take bus {$legArray['@route']} " . str_replace("To", "towards", $legArray['@headsign']) . " departing at " . formatTime($leg->startTime) . "<br>"; |
} else { | } else { |
$walkStepMarkers = array(); | $walkStepMarkers = array(); |
foreach ($leg->steps->walkSteps as $stepNumber => $step) { | foreach ($leg->steps->walkSteps as $stepNumber => $step) { |
$walkStepMarkers[] = array( | $walkStepMarkers[] = array( |
$step->lat, | $step->lat, |
$step->lon | $step->lon |
); | ); |
} | } |
echo "" . staticmap($walkStepMarkers, false, false, true) . "<br>\n"; | echo "" . staticmap($walkStepMarkers, false, false, true) . "<br>\n"; |
foreach ($leg->steps->walkSteps as $stepNumber => $step) { | foreach ($leg->steps->walkSteps as $stepNumber => $step) { |
echo "Walking step " . ($stepNumber + 1) . ": "; | echo "Walking step " . ($stepNumber + 1) . ": "; |
if ($step->relativeDirection == "CONTINUE") { | if ($step->relativeDirection == "CONTINUE") { |
echo "Continue, "; | echo "Continue, "; |
} else if ($step->relativeDirection) | } else if ($step->relativeDirection) |
echo "Turn " . ucwords(strtolower(str_replace("_", " ", $step->relativeDirection))) . ", "; | echo "Turn " . ucwords(strtolower(str_replace("_", " ", $step->relativeDirection))) . ", "; |
echo "Go " . ucwords(strtolower($step->absoluteDirection)) . " on "; | echo "Go " . ucwords(strtolower($step->absoluteDirection)) . " on "; |
if (strpos($step->streetName, "from") !== false && strpos($step->streetName, "way") !== false) { | if (strpos($step->streetName, "from") !== false && strpos($step->streetName, "way") !== false) { |
echo "footpath"; | echo "footpath"; |
} else { | } else { |
echo $step->streetName; | echo $step->streetName; |
} | } |
echo " for " . floor($step->distance) . " meters<br>\n"; | echo " for " . floor($step->distance) . " meters<br>\n"; |
} | } |
} | } |
} | } |
if ($_REQUEST['time']) { | if ($_REQUEST['time']) { |
if (startsWith($to, "-")) { | if (startsWith($to, "-")) { |
$toPlace = $to; | $toPlace = $to; |
} else if (strpos($to, "(") !== false) { | } else if (strpos($to, "(") !== false) { |
$toParts = explode("(", $to); | $toParts = explode("(", $to); |
$toPlace = str_replace(")", "", $toParts[1]); | $toPlace = str_replace(")", "", $toParts[1]); |
} else { | } else { |
$toPlace = geocode($to, false); | $toPlace = geocode($to, false); |
} | } |
if (startsWith($from, "-")) { | if (startsWith($from, "-")) { |
$fromPlace = $from; | $fromPlace = $from; |
} else if (strpos($from, "(") !== false) { | } else if (strpos($from, "(") !== false) { |
$fromParts = explode("(", urldecode($from)); | $fromParts = explode("(", urldecode($from)); |
$fromPlace = str_replace(")", "", $fromParts[1]); | $fromPlace = str_replace(")", "", $fromParts[1]); |
} else { | } else { |
$fromPlace = geocode($from, false); | $fromPlace = geocode($from, false); |
} | } |
if ($toPlace == "" || $fromPlace == "") { | if ($toPlace == "" || $fromPlace == "") { |
$errorMessage = ""; | $errorMessage = ""; |
if ($toPlace == "") { | if ($toPlace == "") { |
$errorMessage.= urlencode($to) . " not found.<br>\n"; | $errorMessage.= urlencode($to) . " not found.<br>\n"; |
trackEvent("Trip Planner", "Geocoder Failed", $to); | trackEvent("Trip Planner", "Geocoder Failed", $to); |
} | } |
if ($fromPlace == "") { | if ($fromPlace == "") { |
$errorMessage.= urlencode($from) . " not found.<br>\n"; | $errorMessage.= urlencode($from) . " not found.<br>\n"; |
trackEvent("Trip Planner", "Geocoder Failed", $from); | trackEvent("Trip Planner", "Geocoder Failed", $from); |
} | } |
tripPlanForm($errorMessage); | tripPlanForm($errorMessage); |
} else { | } else { |
$url = $otpAPIurl . "ws/plan?date=" . urlencode($_REQUEST['date']) . "&time=" . urlencode($_REQUEST['time']) . "&mode=TRANSIT%2CWALK&optimize=QUICK&maxWalkDistance=840&wheelchair=false&toPlace=$toPlace&fromPlace=$fromPlace&intermediatePlaces="; | $url = $otpAPIurl . "ws/plan?date=" . urlencode($_REQUEST['date']) . "&time=" . urlencode($_REQUEST['time']) . "&mode=TRANSIT%2CWALK&optimize=QUICK&maxWalkDistance=840&wheelchair=false&toPlace=$toPlace&fromPlace=$fromPlace&intermediatePlaces="; |
debug($url); | debug($url); |
$ch = curl_init($url); | $ch = curl_init($url); |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); | curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); |
curl_setopt($ch, CURLOPT_HEADER, 0); | curl_setopt($ch, CURLOPT_HEADER, 0); |
curl_setopt($ch, CURLOPT_HTTPHEADER, array( | curl_setopt($ch, CURLOPT_HTTPHEADER, array( |
"Accept: application/json" | "Accept: application/json" |
)); | )); |
curl_setopt($ch, CURLOPT_TIMEOUT, 10); | curl_setopt($ch, CURLOPT_TIMEOUT, 10); |
$page = curl_exec($ch); | $page = curl_exec($ch); |
if (curl_errno($ch) || curl_getinfo($ch, CURLINFO_HTTP_CODE) != 200) { | if (curl_errno($ch) || curl_getinfo($ch, CURLINFO_HTTP_CODE) != 200) { |
tripPlanForm("Trip planner temporarily unavailable: " . curl_errno($ch) . " " . curl_error($ch) . " " . curl_getinfo($ch, CURLINFO_HTTP_CODE) . (isDebug() ? "<br>" . $url : "")); | tripPlanForm("Trip planner temporarily unavailable: " . curl_errno($ch) . " " . curl_error($ch) . " " . curl_getinfo($ch, CURLINFO_HTTP_CODE) . (isDebug() ? "<br>" . $url : "")); |
trackEvent("Trip Planner", "Trip Planner Failed", $url); | trackEvent("Trip Planner", "Trip Planner Failed", $url); |
} else { | } else { |
trackEvent("Trip Planner", "Plan Trip From", $from); | trackEvent("Trip Planner", "Plan Trip From", $from); |
trackEvent("Trip Planner", "Plan Trip To", $to); | trackEvent("Trip Planner", "Plan Trip To", $to); |
$tripplan = json_decode($page); | $tripplan = json_decode($page); |
debug(print_r($tripplan, true)); | debug(print_r($tripplan, true)); |
echo "<h1> From: {$tripplan->plan->from->name} To: {$tripplan->plan->to->name} </h1>"; | echo "<h1> From: {$tripplan->plan->from->name} To: {$tripplan->plan->to->name} </h1>"; |
echo "<h1> At: " . formatTime($tripplan->plan->date) . " </h1>"; | echo "<h1> At: " . formatTime($tripplan->plan->date) . " </h1>"; |
if (is_array($tripplan->plan->itineraries->itinerary)) { | if (is_array($tripplan->plan->itineraries->itinerary)) { |
echo '<div data-role="collapsible-set">'; | echo '<div data-role="collapsible-set">'; |
foreach ($tripplan->plan->itineraries->itinerary as $itineraryNumber => $itinerary) { | foreach ($tripplan->plan->itineraries->itinerary as $itineraryNumber => $itinerary) { |
processItinerary($itineraryNumber, $itinerary); | processItinerary($itineraryNumber, $itinerary); |
} | } |
echo "</div>"; | echo "</div>"; |
} else { | } else { |
processItinerary(0, $tripplan->plan->itineraries->itinerary); | processItinerary(0, $tripplan->plan->itineraries->itinerary); |
} | } |
} | } |
curl_close($ch); | curl_close($ch); |
} | } |
} else { | } else { |
$overrides = getServiceOverride(); | |
if (isset($overrides['service_id'])) { | |
echo "Sorry, due to the modified timetable, this trip planner won't work correctly today. Instead, use the Google Maps one below:"; | |
echo ' | |
<script language="javascript"> | |
// make some ezamples | |
var startExample = "Gungahlin, ACT"; | |
var endExample = "Bunda St, Canberra"; | |
var zip = "2600"; | |
var urlToGoTo = "http://www.google.com/maps?ie=UTF8&f=d&" ; | |
function buildURL(){ | |
document.getElementById(\'linkOut\').href = urlToGoTo + "&saddr=" + document.getElementById(\'saddr\').value + "&daddr=" + document.getElementById(\'daddr\').value + "&dirflg=r"; | |
} | |
</script> | |
<form action="https://www.action.act.gov.au/googletransit/redir_to_google.asp" method="post" name="GoogleTransit" target="_blank" id="GoogleTransit"> | |
<table width="226" cellspacing="1" border="1"> | |
<tr> | |
<td colspan="2" valign="middle"><a href="http://google.com/transit"><img src="/maps_logo_small_blue.png"width="150" height="55" border="0" alt="Link to Google Transit Trip Planner" align="middle"></a> <br /> | |
<B>Transit Trip Planner</B></td> | |
</tr> | |
<tr> | |
<td colspan="2" nowrap><strong>Start</strong> (e.g. | |
<script language="javascript">document.write(startExample)</script>)<br /> | |
<input type="text" size="27" name="saddr" id="saddr" maxlength="2048" title="Enter the Origin Address" value="" onFocus="this.value=\'\';" onBlur="if(this.value==\'\')this.value=startExample"> | |
<br /><br /> <strong>End</strong> (e.g. | |
<script language="javascript">document.write(endExample)</script>) | |
<BR> | |
<input type="text" size="27" name="daddr" id="daddr" maxlength="2048" title="Enter the Destination Address" onfocus="this.value=\'\';" onBlur="if(this.value==\'\')this.value=endExample"> | |
<br> | |
<table> | |
<tr> | |
<td><strong>Date</strong></td> | |
<td><strong>Time</strong></td> | |
</tr> | |
<tr> | |
<td nowrap=""><input type="text" title="Enter the Date in DD/MM/YY format" maxlength="10" value="" name="date" size="10" id="fdate"></td> | |
<td nowrap="nowrap"><input type="text" title="Enter the Time in HH:MM AM or PM format" maxlength="8" value="" name="time" size="5" id="ftime"></td> | |
</tr> | |
</table> | |
Plan by: | |
<select name="ttype"> | |
<option value="dep">Departure Time</option> | |
<option value="arr">Arrival Time</option> | |
</select> | |
<center> | |
<input name="Submit" type="submit" value="Get directions"> | |
</center></td> | |
</tr> | |
</table> | |
</form> | |
<script language="javascript"> | |
// calculate the current time | |
var currentTime = new Date() ; | |
var hours = currentTime.getHours() ; | |
var minutes = currentTime.getMinutes() ; | |
var currentDay = currentTime.getDate() ; | |
var currentMonth = currentTime.getMonth() + 1 ; | |
// var currentYear = currentTime.getYear() ; 07/10/2011 by Vlad | |
var currentYear = currentTime.getFullYear() ; | |
// account for leading zero | |
if (minutes < 10) | |
minutes = "0" + minutes | |
// 07/10/2011 by Vlad | |
if (hours < 10) | |
hours = "0" + hours | |
if (currentDay < 10) | |
currentDay = "0" + currentDay | |
if (currentMonth < 10) | |
currentMonth = "0" + currentMonth | |
var displayTime = hours + ":" + minutes ; | |
// populate the current time | |
document.getElementById(\'ftime\').value = displayTime ; | |
// populate the address examplates | |
document.getElementById(\'saddr\').value = startExample ; | |
document.getElementById(\'daddr\').value = endExample ; | |
document.getElementById(\'fdate\').value = currentDay + \'/\' + currentMonth + \'/\' + currentYear ; | |
</script> | |
'; | |
} else { | |
tripPlanForm(); | tripPlanForm(); |
} | |
} | } |
include_footer(); | include_footer(); |
?> | ?> |
<?php | <?php |
/* | /* |
* Copyright 2010,2011 Alexander Sadleir | * Copyright 2010,2011 Alexander Sadleir |
Licensed under the Apache License, Version 2.0 (the "License"); | Licensed under the Apache License, Version 2.0 (the "License"); |
you may not use this file except in compliance with the License. | you may not use this file except in compliance with the License. |
You may obtain a copy of the License at | You may obtain a copy of the License at |
http://www.apache.org/licenses/LICENSE-2.0 | http://www.apache.org/licenses/LICENSE-2.0 |
Unless required by applicable law or agreed to in writing, software | Unless required by applicable law or agreed to in writing, software |
distributed under the License is distributed on an "AS IS" BASIS, | distributed under the License is distributed on an "AS IS" BASIS, |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
See the License for the specific language governing permissions and | See the License for the specific language governing permissions and |
limitations under the License. | limitations under the License. |
*/ | */ |
if (php_sapi_name() == "cli") { | if (php_sapi_name() == "cli") { |
include ('include/common.inc.php'); | include ('include/common.inc.php'); |
$conn = pg_connect("dbname=transitdata user=postgres password=snmc host=localhost") or die('connection failed'); | |
$pdconn = new PDO("pgsql:dbname=transitdata;user=postgres;password=snmc;host=localhost"); | $pdconn = new PDO("pgsql:dbname=transitdata;user=postgres;password=snmc;host=localhost"); |
/* | /* |
delete from agency; | delete from agency; |
delete from calendar; | delete from calendar; |
delete from calendar_dates; | delete from calendar_dates; |
delete from routes; | delete from routes; |
delete from shapes; | delete from shapes; |
delete from stop_times; | delete from stop_times; |
delete from stops; | delete from stops; |
delete from trips; | delete from trips; |
*/ | */ |
// Unzip cbrfeed.zip, import all csv files to database | // Unzip cbrfeed.zip, import all csv files to database |
$unzip = false; | $unzip = false; |
$zip = zip_open(dirname(__FILE__) . "/cbrfeed.zip"); | $zip = zip_open(dirname(__FILE__) . "/cbrfeed.zip"); |
$tmpdir = "c:/tmp/"; | $tmpdir = "c:/tmp/cbrfeed/"; |
mkdir($tmpdir); | mkdir($tmpdir); |
if ($unzip) { | if ($unzip) { |
if (is_resource($zip)) { | if (is_resource($zip)) { |
while ($zip_entry = zip_read($zip)) { | while ($zip_entry = zip_read($zip)) { |
$fp = fopen($tmpdir . zip_entry_name($zip_entry), "w"); | $fp = fopen($tmpdir . zip_entry_name($zip_entry), "w"); |
if (zip_entry_open($zip, $zip_entry, "r")) { | if (zip_entry_open($zip, $zip_entry, "r")) { |
echo "Extracting " . zip_entry_name($zip_entry) . "\n"; | echo "Extracting " . zip_entry_name($zip_entry) . "\n"; |
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); | $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); |
fwrite($fp, "$buf"); | fwrite($fp, "$buf"); |
zip_entry_close($zip_entry); | zip_entry_close($zip_entry); |
fclose($fp); | fclose($fp); |
} | } |
} | } |
zip_close($zip); | zip_close($zip); |
} | } |
} | } |
foreach (scandir($tmpdir) as $file) { | foreach (scandir($tmpdir) as $file) { |
$headers = Array(); | |
if (!strpos($file, ".txt") === false) { | if (!strpos($file, ".txt") === false) { |
$fieldseparator = ","; | $fieldseparator = ","; |
$lineseparator = "\n"; | $lineseparator = "\n"; |
$tablename = str_replace(".txt", "", $file); | $tablename = str_replace(".txt", "", $file); |
echo "Opening $file \n"; | echo "Opening $file \n"; |
$line = 0; | $line = 0; |
$handle = fopen($tmpdir . $file, "r"); | $handle = fopen($tmpdir . $file, "r"); |
if ($tablename == "stop_times") { | |
$stmt = $pdconn->prepare("insert into stop_times (trip_id,stop_id,stop_sequence,arrival_time,departure_time) values(:trip_id, :stop_id, :stop_sequence,:arrival_time,:departure_time);"); | |
$stmt->bindParam(':trip_id', $trip_id); | |
$stmt->bindParam(':stop_id', $stop_id); | |
$stmt->bindParam(':stop_sequence', $stop_sequence); | |
$stmt->bindParam(':arrival_time', $time); | |
$stmt->bindParam(':departure_time', $time); | |
} | |
$distance = 0; | $distance = 0; |
$lastshape = 0; | $lastshape = 0; |
$lastlat = 0; | $lastlat = 0; |
$lastlon = 0; | $lastlon = 0; |
$stmt = null; | |
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { | while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { |
if ($line == 0) { | if ($line == 0) { |
$headers = array_values($data); | |
} else { | if ($tablename == "stops") { |
$query = "insert into $tablename values("; | $headers[] = "position"; |
} | |
if ($tablename == "shapes") { | |
$headers[] = "shape_pt"; | |
} | |
$query = "insert into $tablename ("; | |
$valueCount = 0; | |
foreach ($headers as $value) { | |
$query.=($valueCount > 0 ? "," : "") . pg_escape_string($value); | |
$valueCount++; | |
} | |
$query.= ") values( "; | |
$valueCount = 0; | $valueCount = 0; |
foreach ($data as $value) { | foreach ($data as $value) { |
$query.=($valueCount > 0 ? "','" : "'") . pg_escape_string($value); | $query.=($valueCount > 0 ? "," : "") . '?'; |
$valueCount++; | $valueCount++; |
} | } |
if ($tablename == "stops") { | |
$query.= ", ST_GeographyFromText(?));"; | |
} else if ($tablename == "shapes") { | |
$query.= ", ST_GeographyFromText(?));"; | |
} else { | |
$query.= ");"; | |
} | |
echo $query; | |
$stmt = $pdconn->prepare($query); | |
} else { | |
$values = array_values($data); | |
if ($tablename == "stops") { | if ($tablename == "stops") { |
$query.= "', ST_GeographyFromText('SRID=4326;POINT({$data[2]} {$data[0]})'));"; | // Coordinate values are out of range [-180 -90, 180 90] |
} else if ($tablename == "shapes") { | $values[] = 'SRID=4326;POINT('.$values[5].' '.$values[4].')'; |
} | |
if ($tablename == "shapes") { | |
if ($data[0] != $lastshape) { | if ($data[0] != $lastshape) { |
$distance = 0; | $distance = 0; |
$lastshape = $data[0]; | $lastshape = $data[0]; |
} else { | } else { |
$distance += distance($lastlat, $lastlon, $data[1], $data[2]); | $distance += distance($lastlat, $lastlon, $data[1], $data[2]); |
} | } |
$lastlat = $data[1]; | $lastlat = $data[1]; |
$lastlon = $data[2]; | $lastlon = $data[2]; |
$query.= "', $distance, ST_GeographyFromText('SRID=4326;POINT({$data[2]} {$data[1]})'));"; | |
} else { | $values[4] = $distance; |
$query.= "');"; | $values[] = 'SRID=4326;POINT('.$values[2].' '.$values[1].')'; |
} | } |
if ($tablename == "stop_times") { | if (substr($values[1],0,2) == '24') $values[1] = "23:59:59"; |
// $query = "insert into $tablename (trip_id,stop_id,stop_sequence) values('{$data[0]}','{$data[3]}','{$data[4]}');"; | if (substr($values[2],0,2) == '24') $values[2] = "23:59:59"; |
$trip_id = $data[0]; | $stmt->execute($values); |
$stop_id = $data[3]; | $err = $pdconn->errorInfo(); |
$stop_sequence = $data[4]; | if ($err[2] != "" && strpos($err[2], "duplicate key") === false) { |
$time = ($data[1] == "" ? null : $data[1]); | print_r($values); |
print_r($err); | |
die("terminated import due to db error above"); | |
} | } |
} | |
if ($tablename == "stop_times") { | |
$stmt->execute(); | |
} else { | |
$result = pg_query($conn, $query); | |
} | } |
$line++; | $line++; |
if ($line % 10000 == 0) | if ($line % 10000 == 0) |
echo "$line records... " . date('c') . "\n"; | echo "$line records... " . date('c') . "\n"; |
} | } |
fclose($handle); | fclose($handle); |
$stmt->closeCursor(); | |
echo "Found a total of $line records in $file.\n"; | echo "Found a total of $line records in $file.\n"; |
} | } |
} | } |
} | } |
?> | ?> |