<?php | <?php |
require $basePath.'lib/openid.php'; | |
require ROOT . '/../lib/openid.php'; | |
$openid = new LightOpenID($_SERVER['HTTP_HOST']); | $openid = new LightOpenID($_SERVER['HTTP_HOST']); |
function login() | function login() { |
{ | global $openid; |
global $openid; | if (!$openid->mode) { |
if(!$openid->mode) { | $openid->required = array('contact/email'); |
$openid->required = array('contact/email'); | $openid->identity = 'https://www.google.com/accounts/o8/id'; |
$openid->identity = 'https://www.google.com/accounts/o8/id'; | header('Location: ' . $openid->authUrl()); |
header('Location: ' . $openid->authUrl()); | } |
} | } |
} | |
function auth() { | |
if ($_SESSION['authed'] == true) | |
return true; | |
global $openid; | |
if ($openid->mode) { | |
$attr = $openid->getAttributes(); | |
if ($attr['contact/email'] != 'maxious@gmail.com') { | |
die('Access Denied'); | |
} else { | |
$_SESSION['authed'] = true; | |
} | |
} else { | |
login(); | |
} | |
} | |
function auth() | |
{ | |
if ($_SESSION['authed'] == true) return true; | |
global $openid; | |
if($openid->mode) { | |
$attr = $openid->getAttributes(); | |
if ($attr["contact/email"] != "maxious@gmail.com") { | |
die("Access Denied"); | |
} else { | |
$_SESSION['authed'] = true; | |
} | |
} else { | |
login(); | |
} | |
} | |
<?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 (strstr(php_uname('n'),"actbus")) { | if (strstr(php_uname('n'),'actbus')) { |
$conn = new PDO("pgsql:dbname=transitdata;user=transitdata;password=transitdata;host=bus-main.lambdacomplex.org"); | $conn = new PDO('pgsql:dbname=transitdata;user=transitdata;password=transitdata;host=bus-main.lambdacomplex.org'); |
} else if (isDebugServer()) { | } else if (isDebugServer()) { |
$conn = new PDO("pgsql:dbname=transitdata;user=postgres;password=snmc;host=localhost"); | $conn = new PDO('pgsql:dbname=transitdata;user=postgres;password=snmc;host=localhost'); |
} else { | } else { |
$conn = new PDO("pgsql:dbname=transitdata;user=transitdata;password=transitdata;host=localhost"); | $conn = new PDO('pgsql:dbname=transitdata;user=transitdata;password=transitdata;host=localhost'); |
} | } |
if (!$conn) { | if (!$conn) { |
die("A database error occurred.\n"); | die('A database error occurred.'.PHP_EOL); |
} | } |
function databaseError($errMsg) { | function databaseError($errMsg) { |
if ($errMsg[1] != "") { | if ($errMsg[1] != '') { |
die(print_r($errMsg,true)); | die(print_r($errMsg,true)); |
} | } |
} | } |
include ('db/route-dao.inc.php'); | include ('db/route-dao.inc.php'); |
include ('db/trip-dao.inc.php'); | include ('db/trip-dao.inc.php'); |
include ('db/stop-dao.inc.php'); | include ('db/stop-dao.inc.php'); |
include ('db/servicealert-dao.inc.php'); | include ('db/servicealert-dao.inc.php'); |
<?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. |
*/ | */ |
// SELECT array_to_string(array(SELECT REPLACE(name_2006, ',', '\,') as name FROM suburbs order by name), ',') | // SELECT array_to_string(array(SELECT REPLACE(name_2006, ',', '\,') as name FROM suburbs order by name), ',') |
$suburbs = explode(",", "Acton,Ainslie,Amaroo,Aranda,Banks,Barton,Belconnen,Bonner,Bonython,Braddon,Bruce,Calwell,Campbell,Chapman,Charnwood,Chifley,Chisholm,City,Conder,Cook,Curtin,Deakin,Dickson,Downer,Duffy,Dunlop,Evatt,Fadden,Farrer,Fisher,Florey,Flynn,Forrest,Franklin,Fraser,Fyshwick,Garran,Gilmore,Giralang,Gordon,Gowrie,Greenway,Griffith,Gungahlin,Hackett,Hall,Harrison,Hawker,Higgins,Holder,Holt,Hughes,Hume,Isaacs,Isabella Plains,Kaleen,Kambah,Kingston,Latham,Lawson,Lyneham,Lyons,Macarthur,Macgregor,Macquarie,Mawson,McKellar,Melba,Mitchell,Monash,Narrabundah,Ngunnawal,Nicholls,Oaks Estate,O'Connor,O'Malley,Oxley,Page,Palmerston,Parkes,Pearce,Phillip,Pialligo,Red Hill,Reid,Richardson,Rivett,Russell,Scullin,Spence,Stirling,Symonston,Tharwa,Theodore,Torrens,Turner,Wanniassa,Waramanga,Watson,Weetangera,Weston,Yarralumla"); | $suburbs = explode(',', 'Acton,Ainslie,Amaroo,Aranda,Banks,Barton,Belconnen,Bonner,Bonython,Braddon,Bruce,Calwell,Campbell,Chapman,Charnwood,Chifley,Chisholm,City,Conder,Cook,Curtin,Deakin,Dickson,Downer,Duffy,Dunlop,Evatt,Fadden,Farrer,Fisher,Florey,Flynn,Forrest,Franklin,Fraser,Fyshwick,Garran,Gilmore,Giralang,Gordon,Gowrie,Greenway,Griffith,Gungahlin,Hackett,Hall,Harrison,Hawker,Higgins,Holder,Holt,Hughes,Hume,Isaacs,Isabella Plains,Kaleen,Kambah,Kingston,Latham,Lawson,Lyneham,Lyons,Macarthur,Macgregor,Macquarie,Mawson,McKellar,Melba,Mitchell,Monash,Narrabundah,Ngunnawal,Nicholls,Oaks Estate,O\'Connor,O\'Malley,Oxley,Page,Palmerston,Parkes,Pearce,Phillip,Pialligo,Red Hill,Reid,Richardson,Rivett,Russell,Scullin,Spence,Stirling,Symonston,Tharwa,Theodore,Torrens,Turner,Wanniassa,Waramanga,Watson,Weetangera,Weston,Yarralumla'); |
function staticmap($mapPoints, $collapsible = true, $twotone = false, $path = false, $numbered = false) { | function staticmap($mapPoints, $collapsible = true, $twotone = false, $path = false, $numbered = false) { |
$markers = ""; | $markers = ''; |
$height = 300; | $height = 300; |
$width = $height; | $width = $height; |
$index = 0; | $index = 0; |
if (sizeof($mapPoints) < 1) | if (sizeof($mapPoints) < 1) |
return "map error"; | return 'map error'; |
if (sizeof($mapPoints) === 1) { | if (sizeof($mapPoints) === 1) { |
$markers = "markers={$mapPoints[0][0]},{$mapPoints[0][1]}"; | $markers = 'markers={$mapPoints[0][0]},{$mapPoints[0][1]}'; |
} else { | } else { |
if (!$numbered) { | if (!$numbered) { |
$markers = "markers="; | $markers = 'markers='; |
} | } |
if ($path) { | if ($path) { |
$markers.= "markers={$mapPoints[0][0]},{$mapPoints[0][1]}&path="; | $markers.= 'markers={$mapPoints[0][0]},{$mapPoints[0][1]}&path='; |
} | } |
foreach ($mapPoints as $index => $mapPoint) { | foreach ($mapPoints as $index => $mapPoint) { |
if ($twotone && $index == 0) { | if ($twotone && $index == 0) { |
$markers = "markerd=color:red|".$mapPoint[0] . "," . $mapPoint[1]."&markers="; | $markers = 'markerd=color:red|' . $mapPoint[0] . ',' . $mapPoint[1] . '&markers='; |
} else { | } else { |
if ($numbered) { | if ($numbered) { |
$label = ($index > 9 ? 9 : $index); | $label = ($index > 9 ? 9 : $index); |
$markers.= "markers=label:$label|" . $mapPoint[0] . "," . $mapPoint[1]; | $markers.= 'markers=label:' . $label . '|' . $mapPoint[0] . ',' . $mapPoint[1]; |
if ($index + 1 != sizeof($mapPoints)) { | if ($index + 1 != sizeof($mapPoints)) { |
$markers.= "&"; | $markers.= '&'; |
} | } |
} else { | } else { |
$markers.= $mapPoint[0] . "," . $mapPoint[1]; | $markers.= $mapPoint[0] . ',' . $mapPoint[1]; |
if ($index + 1 != sizeof($mapPoints)) { | if ($index + 1 != sizeof($mapPoints)) { |
$markers.= "|"; | $markers.= '|'; |
} | } |
} | } |
$index++; | $index++; |
} | } |
} | } |
} | } |
$output = ""; | $output = ''; |
if ($collapsible) | if ($collapsible) |
$output.= '<div class="map" data-role="collapsible" data-collapsed="true"><h3>Open Map...</h3>'; | $output.= '<div class="map" data-role="collapsible" data-collapsed="true"><h3>Open Map...</h3>'; |
if (isIOSDevice()) $output.= '<img class="hiresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&' . $markers . '&scale=2&sensor=true" width=' . $width . ' height=' . $height . ' alt="map of stop location">'; | if (isIOSDevice()) |
else $output.= '<img class="lowresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&' . $markers . '&scale=1&format=jpg&sensor=true" width=' . $width . ' height=' . $height . ' alt="map of stop location">'; | $output.= '<img class="hiresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&' . $markers . '&scale=2&sensor=true" width=' . $width . ' height=' . $height . '" alt="map of stop location">'; |
else | |
$output.= '<img class="lowresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&' . $markers . '&scale=1&format=jpg&sensor=true" width=' . $width . ' height=' . $height . '" alt="map of stop location">'; | |
if ($collapsible) | if ($collapsible) |
$output.= '</div>'; | $output.= '</div>'; |
return $output; | return $output; |
} | } |
function distance($lat1, $lng1, $lat2, $lng2, $roundLargeValues = false) { | function distance($lat1, $lng1, $lat2, $lng2, $roundLargeValues = false) { |
$pi80 = M_PI / 180; | $pi80 = M_PI / 180; |
$lat1*= $pi80; | $lat1*= $pi80; |
$lng1*= $pi80; | $lng1*= $pi80; |
$lat2*= $pi80; | $lat2*= $pi80; |
$lng2*= $pi80; | $lng2*= $pi80; |
$r = 6372.797; // mean radius of Earth in km | $r = 6372.797; // mean radius of Earth in km |
$dlat = $lat2 - $lat1; | $dlat = $lat2 - $lat1; |
$dlng = $lng2 - $lng1; | $dlng = $lng2 - $lng1; |
$a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2); | $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2); |
$c = 2 * atan2(sqrt($a), sqrt(1 - $a)); | $c = 2 * atan2(sqrt($a), sqrt(1 - $a)); |
$km = $r * $c; | $km = $r * $c; |
if ($roundLargeValues) { | if ($roundLargeValues) { |
if ($km < 1) | if ($km < 1) |
return floor($km * 1000); | return floor($km * 1000); |
else | else |
return round($km, 2) . "k"; | return round($km, 2) . 'k'; |
} | } |
else | else |
return floor($km * 1000); | return floor($km * 1000); |
} | } |
function decodePolylineToArray($encoded) { | function decodePolylineToArray($encoded) { |
// source: http://latlongeeks.com/forum/viewtopic.php?f=4&t=5 | // source: http://latlongeeks.com/forum/viewtopic.php?f=4&t=5 |
$length = strlen($encoded); | $length = strlen($encoded); |
$index = 0; | $index = 0; |
$points = array(); | $points = array(); |
$lat = 0; | $lat = 0; |
$lng = 0; | $lng = 0; |
while ($index < $length) { | while ($index < $length) { |
// Temporary variable to hold each ASCII byte. | // Temporary variable to hold each ASCII byte. |
$b = 0; | $b = 0; |
// The encoded polyline consists of a latitude value followed by a | // The encoded polyline consists of a latitude value followed by a |
// longitude value. They should always come in pairs. Read the | // longitude value. They should always come in pairs. Read the |
// latitude value first. | // latitude value first. |
$shift = 0; | $shift = 0; |
$result = 0; | $result = 0; |
do { | do { |
// The `ord(substr($encoded, $index++))` statement returns the ASCII | // The `ord(substr($encoded, $index++))` statement returns the ASCII |
// code for the character at $index. Subtract 63 to get the original | // code for the character at $index. Subtract 63 to get the original |
// value. (63 was added to ensure proper ASCII characters are displayed | // value. (63 was added to ensure proper ASCII characters are displayed |
// in the encoded polyline string, which is `human` readable) | // in the encoded polyline string, which is `human` readable) |
$b = ord(substr($encoded, $index++)) - 63; | $b = ord(substr($encoded, $index++)) - 63; |
// AND the bits of the byte with 0x1f to get the original 5-bit `chunk. | // AND the bits of the byte with 0x1f to get the original 5-bit `chunk. |
// Then left shift the bits by the required amount, which increases | // Then left shift the bits by the required amount, which increases |
// by 5 bits each time. | // by 5 bits each time. |
// OR the value into $results, which sums up the individual 5-bit chunks | // OR the value into $results, which sums up the individual 5-bit chunks |
// into the original value. Since the 5-bit chunks were reversed in | // into the original value. Since the 5-bit chunks were reversed in |
// order during encoding, reading them in this way ensures proper | // order during encoding, reading them in this way ensures proper |
// summation. | // summation. |
$result|= ($b & 0x1f) << $shift; | $result|= ($b & 0x1f) << $shift; |
$shift+= 5; | $shift+= 5; |
} | } |
// Continue while the read byte is >= 0x20 since the last `chunk` | // Continue while the read byte is >= 0x20 since the last `chunk` |
// was not OR'd with 0x20 during the conversion process. (Signals the end) | // was not OR'd with 0x20 during the conversion process. (Signals the end) |
while ($b >= 0x20); | while ($b >= 0x20); |
// Check if negative, and convert. (All negative values have the last bit | // Check if negative, and convert. (All negative values have the last bit |
// set) | // set) |
$dlat = (($result & 1) ? ~($result >> 1) : ($result >> 1)); | $dlat = (($result & 1) ? ~($result >> 1) : ($result >> 1)); |
// Compute actual latitude since value is offset from previous value. | // Compute actual latitude since value is offset from previous value. |
$lat+= $dlat; | $lat+= $dlat; |
// The next values will correspond to the longitude for this point. | // The next values will correspond to the longitude for this point. |
$shift = 0; | $shift = 0; |
$result = 0; | $result = 0; |
do { | do { |
$b = ord(substr($encoded, $index++)) - 63; | $b = ord(substr($encoded, $index++)) - 63; |
$result|= ($b & 0x1f) << $shift; | $result|= ($b & 0x1f) << $shift; |
$shift+= 5; | $shift+= 5; |
} while ($b >= 0x20); | } while ($b >= 0x20); |
$dlng = (($result & 1) ? ~($result >> 1) : ($result >> 1)); | $dlng = (($result & 1) ? ~($result >> 1) : ($result >> 1)); |
$lng+= $dlng; | $lng+= $dlng; |
// The actual latitude and longitude values were multiplied by | // The actual latitude and longitude values were multiplied by |
// 1e5 before encoding so that they could be converted to a 32-bit | // 1e5 before encoding so that they could be converted to a 32-bit |
// integer representation. (With a decimal accuracy of 5 places) | // integer representation. (With a decimal accuracy of 5 places) |
// Convert back to original values. | // Convert back to original values. |
$points[] = array( | $points[] = array( |
$lat * 1e-5, | $lat * 1e-5, |
$lng * 1e-5 | $lng * 1e-5 |
); | ); |
} | } |
return $points; | return $points; |
} | } |
function geocode($query, $giveOptions) { | function geocode($query, $giveOptions) { |
global $cloudmadeAPIkey; | global $cloudmadeAPIkey; |
$url = "http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?query=" . urlencode($query) . "&bbox=-35.5,149.00,-35.15,149.1930&return_location=true&bbox_only=true"; | $url = 'http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?query=' . urlencode($query) . '&bbox=-35.5,149.00,-35.15,149.1930&return_location=true&bbox_only=true'; |
$contents = json_decode(getPage($url)); | $contents = json_decode(getPage($url)); |
if ($giveOptions) | if ($giveOptions) |
return $contents->features; | return $contents->features; |
elseif (isset($contents->features[0]->centroid)) | elseif (isset($contents->features[0]->centroid)) |
return $contents->features[0]->centroid->coordinates[0] . "," . $contents->features[0]->centroid->coordinates[1]; | return $contents->features[0]->centroid->coordinates[0] . ',' . $contents->features[0]->centroid->coordinates[1]; |
else | else |
return ""; | return ''; |
} | } |
function reverseGeocode($lat, $lng) { | function reverseGeocode($lat, $lng) { |
global $cloudmadeAPIkey; | global $cloudmadeAPIkey; |
$url = "http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?around=" . $lat . "," . $lng . "&distance=closest&object_type=road"; | $url = 'http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?around=' . $lat . ',' . $lng . '&distance=closest&object_type=road'; |
$contents = json_decode(getPage($url)); | $contents = json_decode(getPage($url)); |
return $contents->features[0]->properties->name; | return $contents->features[0]->properties->name; |
} | } |
<?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 getPage($url) { | function getPage($url) { |
debug($url, "json"); | debug($url, 'json'); |
$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_TIMEOUT, 45); | curl_setopt($ch, CURLOPT_TIMEOUT, 45); |
$page = curl_exec($ch); | $page = curl_exec($ch); |
if (curl_errno($ch)) { | if (curl_errno($ch)) { |
echo "<font color=red> Database temporarily unavailable: "; | echo '<font color=red> Database temporarily unavailable: '; |
echo curl_errno($ch) . " " . curl_error($ch); | echo curl_errno($ch) . ' ' . curl_error($ch); |
if (isDebug()) { | if (isDebug()) { |
echo $url; | echo $url; |
} | } |
echo "</font><br>"; | echo '</font><br>'; |
} | } |
curl_close($ch); | curl_close($ch); |
debug(print_r($page, true), "json"); | debug(print_r($page, true), 'json'); |
return $page; | return $page; |
} | } |
function curPageURL() { | function curPageURL() { |
$isHTTPS = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on"); | $isHTTPS = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'); |
$port = (isset($_SERVER["SERVER_PORT"]) && ((!$isHTTPS && $_SERVER["SERVER_PORT"] != "80") || ($isHTTPS && $_SERVER["SERVER_PORT"] != "443"))); | $port = (isset($_SERVER['SERVER_PORT']) && ((!$isHTTPS && $_SERVER['SERVER_PORT'] != '80') || ($isHTTPS && $_SERVER['SERVER_PORT'] != '443'))); |
$port = ($port) ? ':' . $_SERVER["SERVER_PORT"] : ''; | $port = ($port) ? ':' . $_SERVER['SERVER_PORT'] : ''; |
$url = ($isHTTPS ? 'https://' : 'http://') . $_SERVER["SERVER_NAME"] . $port . htmlentities(dirname($_SERVER['PHP_SELF']), ENT_QUOTES); | $url = ($isHTTPS ? 'https://' : 'http://') . $_SERVER['SERVER_NAME'] . $port . htmlentities(dirname($_SERVER['PHP_SELF']), ENT_QUOTES); |
return $url; | return $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($time = "") { | function current_time($time = '') { |
if (isset($_REQUEST['time'])) return $_REQUEST['time']; | if (isset($_REQUEST['time'])) |
else if ($time != "") date("H:i:s",$time); | return $_REQUEST['time']; |
else return date("H:i:s"); | 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. |
*/ | */ |
$service_periods = Array( | $service_periods = Array( |
'sunday', | 'sunday', |
'saturday', | 'saturday', |
'weekday' | 'weekday' |
); | ); |
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 (isset($override['service_id'])) { | if (isset($override['service_id'])) { |
return strtolower($override['service_id']); | return strtolower($override['service_id']); |
} | } |
$date = ($date != "" ? $date : time()); | $date = ($date != '' ? $date : time()); |
$dow = date('w', $date); | $dow = date('w', $date); |
switch ($dow) { | switch ($dow) { |
case 0: | case 0: |
return 'sunday'; | return 'sunday'; |
case 6: | case 6: |
return 'saturday'; | return 'saturday'; |
default: | default: |
return 'weekday'; | return 'weekday'; |
} | } |
} | } |
function service_ids($service_period, $date = "") { | function service_ids($service_period, $date = '') { |
switch ($service_period) { | switch ($service_period) { |
case 'sunday': | case 'sunday': |
return Array("Sunday", "Sunday"); | return Array('Sunday', 'Sunday'); |
case 'saturday': | case 'saturday': |
return Array("Saturday", "Saturday"); | return Array('Saturday', 'Saturday'); |
default: | default: |
$date = ($date != "" ? $date : time()); | $date = ($date != '' ? $date : time()); |
// school holidays | // school holidays |
$ymd = date('Ymd', $date); | $ymd = date('Ymd', $date); |
$dow = date('w', $date); | $dow = date('w', $date); |
if (intval($ymd) < "20120203" && $dow != 0 && $dow != 6) { | if (intval($ymd) < '20120203' && $dow != 0 && $dow != 6) { |
return Array("Weekday-SchoolVacation", "Weekday-SchoolVacation"); | return Array('Weekday-SchoolVacation', 'Weekday-SchoolVacation'); |
} else { | } else { |
return Array("Weekday", "Weekday"); | return Array('Weekday', 'Weekday'); |
} | } |
} | } |
} | } |
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 . (ROOT. '/../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(ROOT. '/../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 |
*/ | */ |
$current_alerts = getCurrentAlerts(); | $current_alerts = getCurrentAlerts(); |
$informed_count = 0; | $informed_count = 0; |
if (sizeof($current_alerts) > 0) { | if (sizeof($current_alerts) > 0) { |
$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 ($current_alerts as $current_alert) { | foreach ($current_alerts as $current_alert) { |
$affectsFilteredEntities = false; | $affectsFilteredEntities = false; |
$fe = new transit_realtime\FeedEntity(); | $fe = new transit_realtime\FeedEntity(); |
$fe->setId($current_alert['id']); | $fe->setId($current_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($current_alert['start']); | $tr->setStart($current_alert['start']); |
$tr->setEnd($current_alert['end']); | $tr->setEnd($current_alert['end']); |
$alert->addActivePeriod($tr); | $alert->addActivePeriod($tr); |
$informedEntities = getInformedAlerts($current_alert['id'], $filter_class, $filter_id); | $informedEntities = getInformedAlerts($current_alert['id'], $filter_class, $filter_id); |
if (sizeof($informedEntities) > 0) { | if (sizeof($informedEntities) > 0) { |
$affectsFilteredEntities = true; | $affectsFilteredEntities = true; |
foreach ($informedEntities as $informedEntity) { | foreach ($informedEntities as $informedEntity) { |
$informed_count++; | $informed_count++; |
$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); |
} | } |
} | } |
if ($current_alert['cause'] != "") { | if ($current_alert['cause'] != '') { |
$alert->setCause(constant("transit_realtime\Alert\Cause::" . $current_alert['cause'])); | $alert->setCause(constant('transit_realtime\Alert\Cause::' . $current_alert['cause'])); |
} | } |
if ($current_alert['effect'] != "") { | if ($current_alert['effect'] != '') { |
$alert->setEffect(constant("transit_realtime\Alert\Effect::" . $current_alert['effect'])); | $alert->setEffect(constant('transit_realtime\Alert\Effect::' . $current_alert['effect'])); |
} | } |
if ($current_alert['url'] != "") { | if ($current_alert['url'] != '') { |
$tsUrl = new transit_realtime\TranslatedString(); | $tsUrl = new transit_realtime\TranslatedString(); |
$tUrl = new transit_realtime\TranslatedString\Translation(); | $tUrl = new transit_realtime\TranslatedString\Translation(); |
$tUrl->setText($current_alert['url']); | $tUrl->setText($current_alert['url']); |
$tUrl->setLanguage("en"); | $tUrl->setLanguage('en'); |
$tsUrl->addTranslation($tUrl); | $tsUrl->addTranslation($tUrl); |
$alert->setUrl($tsUrl); | $alert->setUrl($tsUrl); |
} | } |
if ($current_alert['header'] != "") { | if ($current_alert['header'] != '') { |
$tsHeaderText = new transit_realtime\TranslatedString(); | $tsHeaderText = new transit_realtime\TranslatedString(); |
$tHeaderText = new transit_realtime\TranslatedString\Translation(); | $tHeaderText = new transit_realtime\TranslatedString\Translation(); |
$tHeaderText->setText($current_alert['header']); | $tHeaderText->setText($current_alert['header']); |
$tHeaderText->setLanguage("en"); | $tHeaderText->setLanguage('en'); |
$tsHeaderText->addTranslation($tHeaderText); | $tsHeaderText->addTranslation($tHeaderText); |
$alert->setHeaderText($tsHeaderText); | $alert->setHeaderText($tsHeaderText); |
} | } |
if ($current_alert['description'] != "") { | if ($current_alert['description'] != '') { |
$tsDescriptionText = new transit_realtime\TranslatedString(); | $tsDescriptionText = new transit_realtime\TranslatedString(); |
$tDescriptionText = new transit_realtime\TranslatedString\Translation(); | $tDescriptionText = new transit_realtime\TranslatedString\Translation(); |
$tDescriptionText->setText(trim($current_alert['description'])); | $tDescriptionText->setText(trim($current_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); |
if ($affectsFilteredEntities) { | if ($affectsFilteredEntities) { |
$fm->addEntity($fe); | $fm->addEntity($fe); |
} | } |
} | } |
if ($informed_count > 0) { | if ($informed_count > 0) { |
return $fm; | return $fm; |
} else { | } else { |
return null; | return null; |
} | } |
} else | } else |
return null; | return null; |
} | } |
function getServiceAlertsAsArray($filter_class = "", $filter_id = "") { | function getServiceAlertsAsArray($filter_class = '', $filter_id = '') { |
$alerts = getServiceAlerts($filter_class, $filter_id); | $alerts = getServiceAlerts($filter_class, $filter_id); |
if ($alerts != null) { | if ($alerts != null) { |
$codec = new DrSlump\Protobuf\Codec\PhpArray(); | $codec = new DrSlump\Protobuf\Codec\PhpArray(); |
return $codec->encode($alerts); | return $codec->encode($alerts); |
} else { | } else { |
return null; | return null; |
} | } |
} | } |
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. |
*/ | */ |
date_default_timezone_set('Australia/ACT'); | date_default_timezone_set('Australia/ACT'); |
$debugOkay = Array( | $debugOkay = Array( |
"session", | 'session', |
"json", | 'json', |
"phperror", | 'phperror', |
"awsotp", | 'awsotp', |
//"squallotp", | //'squallotp', |
//"vanilleotp", | //'vanilleotp', |
"database", | 'database', |
"other" | 'other' |
); | ); |
$GTFSREnabled = true; | $GTFSREnabled = true; |
$cloudmadeAPIkey = "daa03470bb8740298d4b10e3f03d63e6"; | $cloudmadeAPIkey = 'daa03470bb8740298d4b10e3f03d63e6'; |
$googleMapsAPIkey = "ABQIAAAA95XYXN0cki3Yj_Sb71CFvBTPaLd08ONybQDjcH_VdYtHHLgZvRTw2INzI_m17_IoOUqH3RNNmlTk1Q"; | $googleMapsAPIkey = 'ABQIAAAA95XYXN0cki3Yj_Sb71CFvBTPaLd08ONybQDjcH_VdYtHHLgZvRTw2INzI_m17_IoOUqH3RNNmlTk1Q'; |
$otpAPIurl = 'http://localhost:8080/opentripplanner-api-webapp/'; | $otpAPIurl = 'http://localhost:8080/opentripplanner-api-webapp/'; |
if (isDebug("awsotp") || php_uname('n') == "maxious.xen.prgmr.com" || strstr(php_uname('n'),"actbus")) { | if (isDebug('awsotp') || php_uname('n') == 'maxious.xen.prgmr.com' || strstr(php_uname('n'),'actbus')) { |
$otpAPIurl = 'http://bus-main.lambdacomplex.org:8080/opentripplanner-api-webapp/'; | $otpAPIurl = 'http://bus-main.lambdacomplex.org:8080/opentripplanner-api-webapp/'; |
} | } |
if (isDebug("dotcloudotp") || php_uname('n') == "actbus-www") { | if (isDebug('dotcloudotp') || php_uname('n') == 'actbus-www') { |
$otpAPIurl = 'http://otp.actbus.dotcloud.com/opentripplanner-api-webapp/'; | $otpAPIurl = 'http://otp.actbus.dotcloud.com/opentripplanner-api-webapp/'; |
} | } |
if (isDebug("squallotp")) { | if (isDebug('squallotp')) { |
$otpAPIurl = 'http://10.0.1.108:5080/opentripplanner-api-webapp/'; | $otpAPIurl = 'http://10.0.1.108:5080/opentripplanner-api-webapp/'; |
} | } |
if (isDebug("vanilleotp")) { | if (isDebug('vanilleotp')) { |
$otpAPIurl = 'http://10.0.1.135:8080/opentripplanner-api-webapp/'; | $otpAPIurl = 'http://10.0.1.135:8080/opentripplanner-api-webapp/'; |
} | } |
if (isDebug("phperror")) | if (isDebug('phperror')) |
error_reporting(E_ALL ^ E_NOTICE); | error_reporting(E_ALL ^ E_NOTICE); |
$basePath = ""; | |
define('ROOT' , pathinfo(__FILE__, PATHINFO_DIRNAME)); | |
if (strstr($_SERVER['PHP_SELF'], "labs/") | if (strstr($_SERVER['PHP_SELF'], "labs/") |
|| strstr($_SERVER['PHP_SELF'], "myway/") | || strstr($_SERVER['PHP_SELF'], "myway/") |
|| strstr($_SERVER['PHP_SELF'], "lib/") | || strstr($_SERVER['PHP_SELF'], "lib/") |
|| strstr($_SERVER['PHP_SELF'], "geo/") | || strstr($_SERVER['PHP_SELF'], "geo/") |
|| strstr($_SERVER['PHP_SELF'], "include/") | || strstr($_SERVER['PHP_SELF'], "include/") |
|| strstr($_SERVER['PHP_SELF'], "rtpis/")) { | || strstr($_SERVER['PHP_SELF'], "rtpis/")) { |
$basePath = "../"; | $basePath = "../"; |
} | } |
function isDebugServer() { | function isDebugServer() { |
return php_sapi_name() == "cli" || strstr(php_uname('n'),"actbus") || isset($_SERVER['SERVER_NAME']) && ( $_SERVER['SERVER_NAME'] == "azusa" || $_SERVER['SERVER_NAME'] == "vanille" | return php_sapi_name() == 'cli' || strstr(php_uname('n'),'actbus') || isset($_SERVER['SERVER_NAME']) && ( $_SERVER['SERVER_NAME'] == 'azusa' || $_SERVER['SERVER_NAME'] == 'vanille' |
|| $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "192.168.1.8" || $_SERVER['SERVER_NAME'] == "192.168.178.24"); | || $_SERVER['SERVER_NAME'] == 'localhost' || $_SERVER['SERVER_NAME'] == '127.0.0.1' || $_SERVER['SERVER_NAME'] == '192.168.1.8' || $_SERVER['SERVER_NAME'] == '192.168.178.24'); |
} | } |
if (isset($_SERVER['SERVER_NAME']) && $_SERVER['SERVER_NAME'] == "maxious.xen.prgmr.com") { | if (isset($_SERVER['SERVER_NAME']) && $_SERVER['SERVER_NAME'] == 'maxious.xen.prgmr.com') { |
// Set the exception handler | // Set the exception handler |
require $basePath."/lib/amon-php/amon.php"; | require ROOT.'../lib/amon-php/amon.php'; |
Amon::setup_exception_handler(); | Amon::setup_exception_handler(); |
} | } |
include_once ("common-geo.inc.php"); | include_once ('common-geo.inc.php'); |
include_once ("common-net.inc.php"); | include_once ('common-net.inc.php'); |
include_once ("common-transit.inc.php"); | include_once ('common-transit.inc.php'); |
if (!strstr($_SERVER['PHP_SELF'], "feedback")) { | if (!strstr($_SERVER['PHP_SELF'], 'feedback')) { |
include_once ("common-db.inc.php"); | include_once ('common-db.inc.php'); |
} | } |
include_once ("common-request.inc.php"); | include_once ('common-request.inc.php'); |
include_once ("common-session.inc.php"); | include_once ('common-session.inc.php'); |
include_once ("common-auth.inc.php"); | include_once ('common-auth.inc.php'); |
include_once ("common-template.inc.php"); | include_once ('common-template.inc.php'); |
function isAnalyticsOn() { | function isAnalyticsOn() { |
$user_agent = $_SERVER['HTTP_USER_AGENT']; | $user_agent = $_SERVER['HTTP_USER_AGENT']; |
return !isDebugServer() && !preg_match('/cloudkick/i', $user_agent) && !preg_match('/googlebot/i', $user_agent) && | return !isDebugServer() && !preg_match('/cloudkick/i', $user_agent) && !preg_match('/googlebot/i', $user_agent) && |
!preg_match('/baidu/i', $user_agent); | !preg_match('/baidu/i', $user_agent); |
} | } |
function isDebug($debugReason = "other") { | function isDebug($debugReason = 'other') { |
global $debugOkay; | global $debugOkay; |
return in_array($debugReason, $debugOkay, false) && isDebugServer(); | return in_array($debugReason, $debugOkay, false) && isDebugServer(); |
} | } |
function debug($msg, $debugReason = "other") { | function debug($msg, $debugReason = 'other') { |
if (isDebug($debugReason)) | if (isDebug($debugReason)) |
echo "\n<!-- " . date(DATE_RFC822) . "\n $msg -->\n"; | echo PHP_EOL.'<!-- ' . date(DATE_RFC822) . PHP_EOL.' $msg -->'.PHP_EOL; |
} | } |
function isIOSDevice() { | function isIOSDevice() { |
return strstr($_SERVER['HTTP_USER_AGENT'], 'iPhone') || strstr($_SERVER['HTTP_USER_AGENT'], 'iPod') || strstr($_SERVER['HTTP_USER_AGENT'], 'iPad'); | return strstr($_SERVER['HTTP_USER_AGENT'], 'iPhone') || strstr($_SERVER['HTTP_USER_AGENT'], 'iPod') || strstr($_SERVER['HTTP_USER_AGENT'], 'iPad'); |
} | } |
function isJQueryMobileDevice() { | function isJQueryMobileDevice() { |
// http://forum.jquery.com/topic/what-is-the-best-way-to-detect-all-useragents-which-can-handle-jquery-mobile#14737000002087897 | // http://forum.jquery.com/topic/what-is-the-best-way-to-detect-all-useragents-which-can-handle-jquery-mobile#14737000002087897 |
$user_agent = $_SERVER['HTTP_USER_AGENT']; | $user_agent = $_SERVER['HTTP_USER_AGENT']; |
return preg_match('/iphone/i', $user_agent) || preg_match('/android/i', $user_agent) || preg_match('/webos/i', $user_agent) || preg_match('/ios/i', $user_agent) || preg_match('/bada/i', $user_agent) || preg_match('/maemo/i', $user_agent) || preg_match('/meego/i', $user_agent) || preg_match('/fennec/i', $user_agent) || (preg_match('/symbian/i', $user_agent) && preg_match('/s60/i', $user_agent) && $browser['majorver'] >= 5) || (preg_match('/symbian/i', $user_agent) && preg_match('/platform/i', $user_agent) && $browser['majorver'] >= 3) || (preg_match('/blackberry/i', $user_agent) && $browser['majorver'] >= 5) || (preg_match('/opera mobile/i', $user_agent) && $browser['majorver'] >= 10) || (preg_match('/opera mini/i', $user_agent) && $browser['majorver'] >= 5); | return preg_match('/iphone/i', $user_agent) || preg_match('/android/i', $user_agent) || preg_match('/webos/i', $user_agent) || preg_match('/ios/i', $user_agent) || preg_match('/bada/i', $user_agent) || preg_match('/maemo/i', $user_agent) || preg_match('/meego/i', $user_agent) || preg_match('/fennec/i', $user_agent) || (preg_match('/symbian/i', $user_agent) && preg_match('/s60/i', $user_agent) && $browser['majorver'] >= 5) || (preg_match('/symbian/i', $user_agent) && preg_match('/platform/i', $user_agent) && $browser['majorver'] >= 3) || (preg_match('/blackberry/i', $user_agent) && $browser['majorver'] >= 5) || (preg_match('/opera mobile/i', $user_agent) && $browser['majorver'] >= 10) || (preg_match('/opera mini/i', $user_agent) && $browser['majorver'] >= 5); |
} | } |
function array_flatten($a, $f = array()) { | function array_flatten($a, $f = array()) { |
if (!$a || !is_array($a)) | if (!$a || !is_array($a)) |
return ''; | return ''; |
foreach ($a as $k => $v) { | foreach ($a as $k => $v) { |
if (is_array($v)) | if (is_array($v)) |
$f = array_flatten($v, $f); | $f = array_flatten($v, $f); |
else | else |
$f[$k] = $v; | $f[$k] = $v; |
} | } |
return $f; | return $f; |
} | } |
function remove_spaces($string) { | function remove_spaces($string) { |
return str_replace(' ', '', $string); | return str_replace(' ', '', $string); |
} | } |
function object2array($object) { | function object2array($object) { |
if (is_object($object)) { | if (is_object($object)) { |
foreach ($object as $key => $value) { | foreach ($object as $key => $value) { |
$array[$key] = $value; | $array[$key] = $value; |
} | } |
} else { | } else { |
$array = $object; | $array = $object; |
} | } |
return $array; | return $array; |
} | } |
function startsWith($haystack, $needle, $case = true) { | function startsWith($haystack, $needle, $case = true) { |
if ($case) { | if ($case) { |
return (strcmp(substr($haystack, 0, strlen($needle)), $needle) === 0); | return (strcmp(substr($haystack, 0, strlen($needle)), $needle) === 0); |
} | } |
return (strcasecmp(substr($haystack, 0, strlen($needle)), $needle) === 0); | return (strcasecmp(substr($haystack, 0, strlen($needle)), $needle) === 0); |
} | } |
function endsWith($haystack, $needle, $case = true) { | function endsWith($haystack, $needle, $case = true) { |
if ($case) { | if ($case) { |
return (strcmp(substr($haystack, strlen($haystack) - strlen($needle)), $needle) === 0); | return (strcmp(substr($haystack, strlen($haystack) - strlen($needle)), $needle) === 0); |
} | } |
return (strcasecmp(substr($haystack, strlen($haystack) - strlen($needle)), $needle) === 0); | return (strcasecmp(substr($haystack, strlen($haystack) - strlen($needle)), $needle) === 0); |
} | } |
function sksort(&$array, $subkey = "id", $sort_ascending = false) { | function sksort(&$array, $subkey = 'id', $sort_ascending = false) { |
if (count($array)) | if (count($array)) |
$temp_array[key($array)] = array_shift($array); | $temp_array[key($array)] = array_shift($array); |
foreach ($array as $key => $val) { | foreach ($array as $key => $val) { |
$offset = 0; | $offset = 0; |
$found = false; | $found = false; |
foreach ($temp_array as $tmp_key => $tmp_val) { | foreach ($temp_array as $tmp_key => $tmp_val) { |
if (!$found and strtolower($val[$subkey]) > strtolower($tmp_val[$subkey])) { | if (!$found and strtolower($val[$subkey]) > strtolower($tmp_val[$subkey])) { |
$temp_array = array_merge((array) array_slice($temp_array, 0, $offset), array( | $temp_array = array_merge((array) array_slice($temp_array, 0, $offset), array( |
$key => $val | $key => $val |
), array_slice($temp_array, $offset)); | ), array_slice($temp_array, $offset)); |
$found = true; | $found = true; |
} | } |
$offset++; | $offset++; |
} | } |
if (!$found) | if (!$found) |
$temp_array = array_merge($temp_array, array( | $temp_array = array_merge($temp_array, array( |
$key => $val | $key => $val |
)); | )); |
} | } |
if ($sort_ascending) | if ($sort_ascending) |
$array = array_reverse($temp_array); | $array = array_reverse($temp_array); |
else | else |
$array = $temp_array; | $array = $temp_array; |
} | } |
function sktimesort(&$array, $subkey = "id", $sort_ascending = false) { | function sktimesort(&$array, $subkey = 'id', $sort_ascending = false) { |
if (count($array)) | if (count($array)) |
$temp_array[key($array)] = array_shift($array); | $temp_array[key($array)] = array_shift($array); |
foreach ($array as $key => $val) { | foreach ($array as $key => $val) { |
$offset = 0; | $offset = 0; |
$found = false; | $found = false; |
foreach ($temp_array as $tmp_key => $tmp_val) { | foreach ($temp_array as $tmp_key => $tmp_val) { |
if (!$found and strtotime($val[$subkey]) > strtotime($tmp_val[$subkey])) { | if (!$found and strtotime($val[$subkey]) > strtotime($tmp_val[$subkey])) { |
$temp_array = array_merge((array) array_slice($temp_array, 0, $offset), array( | $temp_array = array_merge((array) array_slice($temp_array, 0, $offset), array( |
$key => $val | $key => $val |
), array_slice($temp_array, $offset)); | ), array_slice($temp_array, $offset)); |
$found = true; | $found = true; |
} | } |
$offset++; | $offset++; |
} | } |
if (!$found) | if (!$found) |
$temp_array = array_merge($temp_array, array( | $temp_array = array_merge($temp_array, array( |
$key => $val | $key => $val |
)); | )); |
} | } |
if ($sort_ascending && isset($temp_array)) | if ($sort_ascending && isset($temp_array)) |
$array = array_reverse($temp_array); | $array = array_reverse($temp_array); |
else | else |
$array = $temp_array; | $array = $temp_array; |
} | } |
function r_implode($glue, $pieces) { | function r_implode($glue, $pieces) { |
foreach ($pieces as $r_pieces) { | foreach ($pieces as $r_pieces) { |
if (is_array($r_pieces)) { | if (is_array($r_pieces)) { |
$retVal[] = r_implode($glue, $r_pieces); | $retVal[] = r_implode($glue, $r_pieces); |
} else { | } else { |
$retVal[] = $r_pieces; | $retVal[] = $r_pieces; |
} | } |
} | } |
return implode($glue, $retVal); | return implode($glue, $retVal); |
} | } |
<?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(); |
} | } |
$results = $query->fetchAll(); | $results = $query->fetchAll(); |
if (is_array($results)) { | if (is_array($results)) { |
return $results; | return $results; |
} else { | } else { |
return Array($results); | return Array($results); |
} | } |
} | } |
function getRouteDescription($routeID, $directionID) { | function getRouteDescription($routeID, $directionID) { |
$trip = getRouteNextTrip($routeID, $directionID); | $trip = getRouteNextTrip($routeID, $directionID); |
$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 getRoutesByNumberSeries($routeNumberSeries = "") { | function getRoutesByNumberSeries($routeNumberSeries = '') { |
global $conn; | global $conn; |
if (strlen($routeNumberSeries) == 1) { | if (strlen($routeNumberSeries) == 1) { |
return getRoute($routeNumberSeries); | return getRoute($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, $directionID) { | function getRouteNextTrip($routeID, $directionID) { |
global $conn; | global $conn; |
$query = "select routes.route_id,routes.route_url,direction_id,trips.trip_id,trip_headsign,departure_time,service_id from routes join trips on trips.route_id = routes.route_id | $query = 'select routes.route_id,routes.route_url,direction_id,trips.trip_id,trip_headsign,departure_time,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 arrival_time between :currentTime and :futureTime | 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 | 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()); |
$futureTime = current_time(strtotime(current_time() ." +2h")); | $futureTime = current_time(strtotime(current_time() . ' +2h')); |
if (date("h",strtotime(current_time()) > 22)) $futureTime = "23:59:59"; | if (date('h', strtotime(current_time()) > 22)) |
$query->bindParam(":futureTime", $futureTime); | $futureTime = '23:59:59'; |
$query->bindParam(":routeID", $routeID); | $query->bindParam(':futureTime', $futureTime); |
$query->bindParam(":directionID", $directionID); | $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; | return $r; |
} | } |
function getRouteFirstTrip($routeID,$directionID) { | function getRouteFirstTrip($routeID, $directionID) { |
global $conn; | global $conn; |
$query = "select * from routes join trips on trips.route_id = routes.route_id | $query = 'select * from routes join trips on trips.route_id = routes.route_id |
join stop_times on stop_times.trip_id = trips.trip_id where routes.route_id = :routeID | join stop_times on stop_times.trip_id = trips.trip_id where routes.route_id = :routeID |
and trips.direction_id = :directionID order by | 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->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, $directionID, $stop_id) { |
$nextTrip = getRouteNextTrip($routeID, $directionID); | $nextTrip = getRouteNextTrip($routeID, $directionID); |
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 getRouteTrips($routeID, $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 = :routeID) " . $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(":routeID", $routeID); | $query->bindParam(':routeID', $routeID); |
$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'; */ |
$query = "select route_id, direction_id, stop_name, b.trip_id, b.stop_sequence from (select route_id, direction_id, max(stop_sequence) as stop_sequence, max(a.trip_id) as trip_id from stop_times inner join (SELECT route_id, direction_id, max(trip_id) as trip_id | $query = 'select route_id, direction_id, stop_name, b.trip_id, b.stop_sequence from (select route_id, direction_id, max(stop_sequence) as stop_sequence, max(a.trip_id) as trip_id from stop_times inner join (SELECT route_id, direction_id, max(trip_id) as trip_id |
from trips group by route_id,direction_id) as a on stop_times.trip_id = a.trip_id group by route_id, direction_id) as b inner join stop_times on b.trip_id = stop_times.trip_id inner join stops on stop_times.stop_id = stops.stop_id where stop_times.stop_sequence = b.stop_sequence and stop_name = :destination order by route_id;"; | from trips group by route_id,direction_id) as a on stop_times.trip_id = a.trip_id group by route_id, direction_id) as b inner join stop_times on b.trip_id = stop_times.trip_id inner join stops on stop_times.stop_id = stops.stop_id where stop_times.stop_sequence = b.stop_sequence and stop_name = :destination order by route_id;'; |
} else { | } else { |
$query = "select stop_name from (select route_id, direction_id, max(stop_sequence) as stop_sequence, max(a.trip_id) as trip_id from stop_times inner join (SELECT route_id, direction_id, max(trip_id) as trip_id | $query = 'select stop_name from (select route_id, direction_id, max(stop_sequence) as stop_sequence, max(a.trip_id) as trip_id from stop_times inner join (SELECT route_id, direction_id, max(trip_id) as trip_id |
from trips group by route_id,direction_id) as a on stop_times.trip_id = a.trip_id group by route_id, direction_id) as b inner join stop_times on b.trip_id = stop_times.trip_id inner join stops on stop_times.stop_id = stops.stop_id where stop_times.stop_sequence = b.stop_sequence group by stop_name order by stop_name;"; | from trips group by route_id,direction_id) as a on stop_times.trip_id = a.trip_id group by route_id, direction_id) as b inner join stop_times on b.trip_id = stop_times.trip_id inner join stops on stop_times.stop_id = stops.stop_id where stop_times.stop_sequence = b.stop_sequence group by stop_name order by stop_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]; |
$limitSQL = ""; | $limitSQL = ''; |
if ($limit != "") | if ($limit != '') |
$limitSQL = " LIMIT :limit "; | $limitSQL = ' LIMIT :limit '; |
global $conn; | global $conn; |
$query = "SELECT service_id,trips.route_id,trips.direction_id,route_short_name,route_long_name,min(stops.stop_id) as stop_id, | $query = 'SELECT service_id,trips.route_id,trips.direction_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,trips.direction_id,route_short_name,route_long_name | group by service_id,trips.route_id,trips.direction_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. |
*/ | */ |
function getServiceOverride($date = "") { | function getServiceOverride($date = '') { |
global $conn; | global $conn; |
$query = "Select * from calendar_dates where date = :date and exception_type = '1' LIMIT 1"; | $query = 'Select * from calendar_dates where date = :date and exception_type = \'1\' LIMIT 1'; |
// debug($query,"database"); | // debug($query,'database'); |
$query = $conn->prepare($query); // Create a prepared statement | $query = $conn->prepare($query); // Create a prepared statement |
$date = date("Ymd", ($date != "" ? $date : time())); | $date = date('Ymd', ($date != '' ? $date : time())); |
$query->bindParam(":date", $date); | $query->bindParam(':date', $date); |
$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 getServiceAlert($alertID) { | function getServiceAlert($alertID) { |
global $conn; | global $conn; |
$query = "SELECT id,extract('epoch' from start) as start, extract('epoch' from \"end\") as \"end\",cause,effect,header,description,url from servicealerts_alerts where id = :servicealert_id"; | $query = 'SELECT id,extract(\'epoch\' from start) as start, extract(\'epoch\' from "end") as \\\'end\\\',cause,effect,header,description,url from servicealerts_alerts where id = :servicealert_id'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":servicealert_id", $alertID); | $query->bindParam(':servicealert_id', $alertID); |
$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 updateServiceAlert($alertID, $alert) { | function updateServiceAlert($alertID, $alert) { |
global $conn; | global $conn; |
$query = 'update servicealerts_alerts set start=:start, "end"=:end, header=:header, description=:description, url=:url, cause=:cause, effect=:effect where id = :servicealert_id'; | $query = 'update servicealerts_alerts set start=:start, "end"=:end, header=:header, description=:description, url=:url, cause=:cause, effect=:effect where id = :servicealert_id'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindValue(":servicealert_id", $alertID); | $query->bindValue(':servicealert_id', $alertID); |
$query->bindValue(":start", $alert['startdate']); | $query->bindValue(':start', $alert['startdate']); |
$query->bindValue(":end", $alert['enddate']); | $query->bindValue(':end', $alert['enddate']); |
$query->bindValue(":header", $alert['header']); | $query->bindValue(':header', $alert['header']); |
$query->bindValue(":description", $alert['description']); | $query->bindValue(':description', $alert['description']); |
$query->bindValue(":url", $alert['url']); | $query->bindValue(':url', $alert['url']); |
$query->bindValue(":cause", $alert['cause']); | $query->bindValue(':cause', $alert['cause']); |
$query->bindValue(":effect", $alert['effect']); | $query->bindValue(':effect', $alert['effect']); |
$query->execute(); | $query->execute(); |
print_r($conn->errorInfo()); | print_r($conn->errorInfo()); |
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 addServiceAlert($alert) { | function addServiceAlert($alert) { |
global $conn; | global $conn; |
$query = 'INSERT INTO servicealerts_alerts (start, "end", header, description, url,cause,effect) VALUES (:start, :end, :header, :description, :url,:cause,:effect) '; | $query = 'INSERT INTO servicealerts_alerts (start, "end", header, description, url,cause,effect) VALUES (:start, :end, :header, :description, :url,:cause,:effect) '; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
//print_r($alert); | //print_r($alert); |
$query->bindValue(":start", $alert['startdate']); | $query->bindValue(':start', $alert['startdate']); |
$query->bindValue(":end", $alert['enddate']); | $query->bindValue(':end', $alert['enddate']); |
$query->bindValue(":header", $alert['header']); | $query->bindValue(':header', $alert['header']); |
$query->bindValue(":description", $alert['description']); | $query->bindValue(':description', $alert['description']); |
$query->bindValue(":url", $alert['url']); | $query->bindValue(':url', $alert['url']); |
$query->bindValue(":cause", $alert['cause']); | $query->bindValue(':cause', $alert['cause']); |
$query->bindValue(":effect", $alert['effect']); | $query->bindValue(':effect', $alert['effect']); |
$query->execute(); | $query->execute(); |
print_r($conn->errorInfo()); | print_r($conn->errorInfo()); |
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 getCurrentAlerts() { | function getCurrentAlerts() { |
global $conn; | global $conn; |
$query = "SELECT id,extract('epoch' from start) as start, extract('epoch' from \"end\") as \"end\",cause,effect,header,description,url from servicealerts_alerts where NOW() > start and NOW() < \"end\""; | $query = 'SELECT id,extract(\'epoch\' from start) as start, extract(\'epoch\' from "end") as "end",cause,effect,header,description,url from servicealerts_alerts where NOW() > start and NOW() < "end"'; |
// 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 getFutureAlerts() { | function getFutureAlerts() { |
global $conn; | global $conn; |
$query = "SELECT id,extract('epoch' from start) as start, extract('epoch' from \"end\") as \"end\",cause,effect,header,description,url from servicealerts_alerts where NOW() < \"end\""; | $query = 'SELECT id,extract(\'epoch\' from start) as start, extract(\'epoch\' from "end") as "end",cause,effect,header,description,url from servicealerts_alerts where NOW() < "end"'; |
// 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 getAllAlerts() { | function getAllAlerts() { |
global $conn; | global $conn; |
$query = "SELECT id,extract('epoch' from start) as start, extract('epoch' from \"end\") as \"end\",cause,effect,header,description,url from servicealerts_alerts"; | $query = 'SELECT id,extract(\'epoch\' from start) as start, extract(\'epoch\' from "end") as "end",cause,effect,header,description,url from servicealerts_alerts'; |
// 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 getInformedAlerts($id, $filter_class, $filter_id) { | function getInformedAlerts($id, $filter_class, $filter_id) { |
global $conn; | global $conn; |
//echo "$id, $filter_class, $filter_id\n"; | //echo '$id, $filter_class, $filter_id\n'; |
$query = "SELECT * from servicealerts_informed where servicealert_id = :servicealert_id"; | $query = 'SELECT * from servicealerts_informed where servicealert_id = :servicealert_id'; |
if ($filter_class != "") { | if ($filter_class != '') { |
$query .= " AND informed_class = :informed_class "; | $query .= ' AND informed_class = :informed_class '; |
} | } |
if ($filter_id != "") { | if ($filter_id != '') { |
$query .= " AND informed_id = :informed_id "; | $query .= ' AND informed_id = :informed_id '; |
} | } |
// debug($query, "database"); | // debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
if ($filter_class != "") { | if ($filter_class != '') { |
$query->bindParam(":informed_class", $filter_class); | $query->bindParam(':informed_class', $filter_class); |
} | } |
if ($filter_id != "") { | if ($filter_id != '') { |
$query->bindParam(":informed_id", $filter_id); | $query->bindParam(':informed_id', $filter_id); |
} | } |
$query->bindParam(":servicealert_id", $id); | $query->bindParam(':servicealert_id', $id); |
$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 deleteInformedAlert($serviceAlertID, $class, $id) { | function deleteInformedAlert($serviceAlertID, $class, $id) { |
global $conn; | global $conn; |
$query = 'DELETE from servicealerts_informed where servicealert_id = :servicealert_id and informed_class = :informed_class AND informed_id = :informed_id'; | $query = 'DELETE from servicealerts_informed where servicealert_id = :servicealert_id and informed_class = :informed_class AND informed_id = :informed_id'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":servicealert_id", $serviceAlertID); | $query->bindParam(':servicealert_id', $serviceAlertID); |
$query->bindParam(":informed_class", $class); | $query->bindParam(':informed_class', $class); |
$query->bindParam(":informed_id", $id); | $query->bindParam(':informed_id', $id); |
$query->execute(); | $query->execute(); |
print_r($conn->errorInfo()); | print_r($conn->errorInfo()); |
if (!$query) { | if (!$query) { |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return Array(); | return Array(); |
} | } |
return null; | return null; |
} | } |
function addInformedAlert($serviceAlertID, $class, $id, $action) { | function addInformedAlert($serviceAlertID, $class, $id, $action) { |
global $conn; | global $conn; |
$query = 'INSERT INTO servicealerts_informed (servicealert_id , informed_class , informed_id, informed_action) | $query = 'INSERT INTO servicealerts_informed (servicealert_id , informed_class , informed_id, informed_action) |
VALUES(:servicealert_id ,:informed_class, :informed_id, :informed_action)'; | VALUES(:servicealert_id ,:informed_class, :informed_id, :informed_action)'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":servicealert_id", $serviceAlertID); | $query->bindParam(':servicealert_id', $serviceAlertID); |
$query->bindParam(":informed_class", $class); | $query->bindParam(':informed_class', $class); |
$query->bindParam(":informed_id", $id); | $query->bindParam(':informed_id', $id); |
$query->bindParam(":informed_action", $action); | $query->bindParam(':informed_action', $action); |
$query->execute(); | $query->execute(); |
print_r($conn->errorInfo()); | print_r($conn->errorInfo()); |
if (!$query) { | if (!$query) { |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return Array(); | return Array(); |
} | } |
return null; | return null; |
} | } |
<?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 getStop($stopID) { | function getStop($stopID) { |
global $conn; | global $conn; |
$query = "Select * from stops where stop_id = :stopID LIMIT 1"; | $query = 'Select * from stops where stop_id = :stopID LIMIT 1'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":stopID", $stopID); | $query->bindParam(':stopID', $stopID); |
$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 getStops($firstLetter = "", $startsWith = "") { | function getStops($firstLetter = '', $startsWith = '') { |
global $conn; | global $conn; |
$conditions = Array(); | $conditions = Array(); |
if ($firstLetter != "") | if ($firstLetter != '') |
$conditions[] = "substr(stop_name,1,1) = :firstLetter"; | $conditions[] = 'substr(stop_name,1,1) = :firstLetter'; |
if ($startsWith != "") | if ($startsWith != '') |
$conditions[] = "stop_name like :startsWith"; | $conditions[] = 'stop_name like :startsWith'; |
$query = "Select * from stops"; | $query = 'Select * from stops'; |
if (sizeof($conditions) > 0) { | if (sizeof($conditions) > 0) { |
if (sizeof($conditions) > 1) { | if (sizeof($conditions) > 1) { |
$query .= " Where " . implode(" AND ", $conditions) . " "; | $query .= ' Where ' . implode(' AND ', $conditions) . ' '; |
} else { | } else { |
$query .= " Where " . $conditions[0] . " "; | $query .= ' Where ' . $conditions[0] . ' '; |
} | } |
} | } |
$query .= " order by stop_name;"; | $query .= ' order by stop_name;'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
if ($firstLetter != "") | if ($firstLetter != '') |
$query->bindParam(":firstLetter", $firstLetter); | $query->bindParam(':firstLetter', $firstLetter); |
if ($startsWith != "") { | if ($startsWith != '') { |
$startsWith = $startsWith . "%"; | $startsWith = $startsWith . '%'; |
$query->bindParam(":startsWith", $startsWith); | $query->bindParam(':startsWith', $startsWith); |
} | } |
$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 getNearbyStops($lat, $lng, $limit = "", $distance = 1000) { | function getNearbyStops($lat, $lng, $limit = '', $distance = 1000) { |
if ($lat == null || $lng == null) | if ($lat == null || $lng == null) |
return Array(); | return Array(); |
if ($limit != "") | if ($limit != '') |
$limitSQL = " LIMIT :limit "; | $limitSQL = ' LIMIT :limit '; |
global $conn; | global $conn; |
$query = "Select *, ST_Distance(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), FALSE) as distance | $query = 'Select *, ST_Distance(position, ST_GeographyFromText(\'SRID=4326;POINT($lng $lat)\'), FALSE) as distance |
from stops WHERE ST_DWithin(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), :distance, FALSE) | from stops WHERE ST_DWithin(position, ST_GeographyFromText(\'SRID=4326;POINT($lng $lat)\'), :distance, FALSE) |
order by distance $limitSQL;"; | order by distance $limitSQL;'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":distance", $distance); | $query->bindParam(':distance', $distance); |
$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(); |
} | } |
function getStopsByName($name) { | function getStopsByName($name) { |
global $conn; | global $conn; |
$query = "Select * from stops where stop_name LIKE :name;"; | $query = 'Select * from stops where stop_name LIKE :name;'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$name = $name . "%"; | $name = $name . '%'; |
$query->bindParam(":name", $name); | $query->bindParam(':name', $name); |
$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 getStopsBySuburb($suburb) { | function getStopsBySuburb($suburb) { |
global $conn; | global $conn; |
$query = "Select * from stops where stop_desc LIKE :suburb order by stop_name;"; | $query = 'Select * from stops where stop_desc LIKE :suburb order by stop_name;'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$suburb = "%<br>Suburb: %" . $suburb . "%"; | $suburb = '%<br>Suburb: %' . $suburb . '%'; |
$query->bindParam(":suburb", $suburb); | $query->bindParam(':suburb', $suburb); |
$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 getStopsByStopCode($stop_code, $startsWith = "") { | function getStopsByStopCode($stop_code, $startsWith = '') { |
global $conn; | global $conn; |
$query = "Select * from stops where (stop_code = :stop_code OR stop_code LIKE :stop_code2)"; | $query = 'Select * from stops where (stop_code = :stop_code OR stop_code LIKE :stop_code2)'; |
if ($startsWith != "") | if ($startsWith != '') |
$query .= " AND stop_name like :startsWith"; | $query .= ' AND stop_name like :startsWith'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":stop_code", $stop_code); | $query->bindParam(':stop_code', $stop_code); |
$stop_code2 = $stop_code . "%"; | $stop_code2 = $stop_code . '%'; |
$query->bindParam(":stop_code2", $stop_code2); | $query->bindParam(':stop_code2', $stop_code2); |
if ($startsWith != "") { | if ($startsWith != '') { |
$startsWith = $startsWith . "%"; | $startsWith = $startsWith . '%'; |
$query->bindParam(":startsWith", $startsWith); | $query->bindParam(':startsWith', $startsWith); |
} | } |
$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 getStopRoutes($stopID, $service_period) { | function getStopRoutes($stopID, $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 = | FROM stop_times join trips on trips.trip_id = |
stop_times.trip_id join routes on trips.route_id = routes.route_id WHERE stop_id = :stopID | stop_times.trip_id join routes on trips.route_id = routes.route_id WHERE stop_id = :stopID |
AND (service_id=:service_periodA OR service_id=:service_periodB)"; | AND (service_id=:service_periodA OR service_id=:service_periodB)'; |
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(":stopID", $stopID); | $query->bindParam(':stopID', $stopID); |
$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 getStopTrips($stopID, $service_period = "", $afterTime = "", $limit = "", $route_short_name = "") { | function getStopTrips($stopID, $service_period = '', $afterTime = '', $limit = '', $route_short_name = '') { |
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]; |
$limitSQL = ""; | $limitSQL = ''; |
if ($limit != "") | if ($limit != '') |
$limitSQL .= " LIMIT :limit "; | $limitSQL .= ' LIMIT :limit '; |
global $conn; | global $conn; |
if ($afterTime != "") { | if ($afterTime != '') { |
$query = " SELECT stop_times.trip_id,stop_times.arrival_time,stop_times.stop_id,stop_sequence,service_id,trips.route_id,trips.direction_id,trips.trip_headsign,route_short_name,route_long_name,end_times.arrival_time as end_time | $query = ' SELECT stop_times.trip_id,stop_times.arrival_time,stop_times.stop_id,stop_sequence,service_id,trips.route_id,trips.direction_id,trips.trip_headsign,route_short_name,route_long_name,end_times.arrival_time as end_time |
FROM stop_times | FROM stop_times |
join trips on trips.trip_id = | join trips on trips.trip_id = |
stop_times.trip_id | stop_times.trip_id |
join routes on trips.route_id = routes.route_id , (SELECT trip_id,max(arrival_time) as arrival_time from stop_times | join routes on trips.route_id = routes.route_id , (SELECT trip_id,max(arrival_time) as arrival_time from stop_times |
WHERE stop_times.arrival_time IS NOT NULL group by trip_id) as end_times | WHERE stop_times.arrival_time IS NOT NULL group by trip_id) as end_times |
WHERE stop_times.stop_id = :stopID | WHERE stop_times.stop_id = :stopID |
AND stop_times.trip_id = end_times.trip_id | AND stop_times.trip_id = end_times.trip_id |
AND (service_id=:service_periodA OR service_id=:service_periodB) " . ($route_short_name != "" ? " AND route_short_name = :route_short_name " : "") . " | AND (service_id=:service_periodA OR service_id=:service_periodB) ' . ($route_short_name != '' ? ' AND route_short_name = :route_short_name ' : '') . ' |
AND end_times.arrival_time > :afterTime | AND end_times.arrival_time > :afterTime |
ORDER BY end_time $limitSQL"; | ORDER BY end_time $limitSQL'; |
} else { | } else { |
$query = "SELECT stop_times.trip_id,arrival_time,stop_times.stop_id,stop_sequence,service_id,trips.route_id,route_short_name,route_long_name | $query = 'SELECT stop_times.trip_id,arrival_time,stop_times.stop_id,stop_sequence,service_id,trips.route_id,route_short_name,route_long_name |
FROM stop_times | FROM stop_times |
join trips on trips.trip_id = | join trips on trips.trip_id = |
stop_times.trip_id | stop_times.trip_id |
join routes on trips.route_id = routes.route_id | join routes on trips.route_id = routes.route_id |
WHERE stop_times.stop_id = :stopID | WHERE stop_times.stop_id = :stopID |
AND (service_id=:service_periodA OR service_id=:service_periodB) " . ($route_short_name != "" ? " AND route_short_name = :route_short_name " : "") . " | AND (service_id=:service_periodA OR service_id=:service_periodB) ' . ($route_short_name != '' ? ' AND route_short_name = :route_short_name ' : '') . ' |
ORDER BY arrival_time $limitSQL"; | ORDER BY arrival_time $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(":stopID", $stopID); | $query->bindParam(':stopID', $stopID); |
if ($limit != "") | if ($limit != '') |
$query->bindParam(":limit", $limit); | $query->bindParam(':limit', $limit); |
if ($afterTime != "") | if ($afterTime != '') |
$query->bindParam(":afterTime", $afterTime); | $query->bindParam(':afterTime', $afterTime); |
if ($route_short_name != "") | if ($route_short_name != '') |
$query->bindParam(":route_short_name", $route_short_name); | $query->bindParam(':route_short_name', $route_short_name); |
$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 getStopTripsWithTimes($stopID, $time = "", $service_period = "", $time_range = "", $limit = "") { | function getStopTripsWithTimes($stopID, $time = '', $service_period = '', $time_range = '', $limit = '') { |
if ($service_period == "") | if ($service_period == '') |
$service_period = service_period(); | $service_period = service_period(); |
if ($time_range == "") | if ($time_range == '') |
$time_range = (24 * 60 * 60); | $time_range = (24 * 60 * 60); |
if ($time == "") | if ($time == '') |
$time = current_time(); | $time = current_time(); |
if ($limit == "") | if ($limit == '') |
$limit = 10; | $limit = 10; |
$trips = getStopTrips($stopID, $service_period, $time); | $trips = getStopTrips($stopID, $service_period, $time); |
$timedTrips = Array(); | $timedTrips = Array(); |
if ($trips && sizeof($trips) > 0) { | if ($trips && sizeof($trips) > 0) { |
foreach ($trips as $trip) { | foreach ($trips as $trip) { |
if ($trip['arrival_time'] != "") { | if ($trip['arrival_time'] != '') { |
if (strtotime($trip['arrival_time']) > strtotime($time) and strtotime($trip['arrival_time']) < (strtotime($time) + $time_range)) { | if (strtotime($trip['arrival_time']) > strtotime($time) and strtotime($trip['arrival_time']) < (strtotime($time) + $time_range)) { |
$timedTrips[] = $trip; | $timedTrips[] = $trip; |
} | } |
} else { | } else { |
$timedTrip = getTripAtStop($trip['trip_id'], $trip['stop_sequence']); | $timedTrip = getTripAtStop($trip['trip_id'], $trip['stop_sequence']); |
if ($timedTrip['arrival_time'] > $time and strtotime($timedTrip['arrival_time']) < (strtotime($time) + $time_range)) { | if ($timedTrip['arrival_time'] > $time and strtotime($timedTrip['arrival_time']) < (strtotime($time) + $time_range)) { |
$timedTrips[] = $timedTrip; | $timedTrips[] = $timedTrip; |
} | } |
} | } |
if (sizeof($timedTrips) > $limit) | if (sizeof($timedTrips) > $limit) |
break; | break; |
} | } |
sktimesort($timedTrips, "arrival_time", true); | sktimesort($timedTrips, 'arrival_time', true); |
} | } |
return $timedTrips; | return $timedTrips; |
} | } |
<?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 getTrip($tripID) { | function getTrip($tripID) { |
global $conn; | global $conn; |
$query = "Select * from trips | $query = 'Select * from trips |
join routes on trips.route_id = routes.route_id | join routes on trips.route_id = routes.route_id |
where trip_id = :tripID | where trip_id = :tripID |
LIMIT 1"; | LIMIT 1'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":tripID", $tripID); | $query->bindParam(':tripID', $tripID); |
$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 getTripStops($tripID) { | function getTripStops($tripID) { |
global $conn; | global $conn; |
$query = "SELECT stops.stop_id, stop_name, ST_AsKML(position) as positionkml, | $query = 'SELECT stops.stop_id, stop_name, ST_AsKML(position) as positionkml, |
stop_sequence, trips.trip_id | stop_sequence, trips.trip_id |
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 stops on stops.stop_id = stop_times.stop_id | join stops on stops.stop_id = stop_times.stop_id |
WHERE trips.trip_id = :tripID ORDER BY stop_sequence"; | WHERE trips.trip_id = :tripID ORDER BY stop_sequence'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":tripID", $tripID); | $query->bindParam(':tripID', $tripID); |
$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 getTripHasStop($tripID, $stopID) { | function getTripHasStop($tripID, $stopID) { |
global $conn; | global $conn; |
$query = "SELECT stop_id | $query = 'SELECT stop_id |
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 |
WHERE trips.trip_id = :tripID and stop_times.stop_id = :stopID"; | WHERE trips.trip_id = :tripID and stop_times.stop_id = :stopID'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":tripID", $tripID); | $query->bindParam(':tripID', $tripID); |
$query->bindParam(":stopID", $stopID); | $query->bindParam(':stopID', $stopID); |
$query->execute(); | $query->execute(); |
if (!$query) { | if (!$query) { |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return Array(); | return Array(); |
} | } |
return ($query->fetchColumn() > 0); | return ($query->fetchColumn() > 0); |
} | } |
function getTripShape($tripID) { | function getTripShape($tripID) { |
// todo, use shapes table if shape_id specified | // todo, use shapes table if shape_id specified |
global $conn; | global $conn; |
$query = "SELECT ST_AsKML(ST_MakeLine(geometry(a.shape_pt))) as the_route | $query = 'SELECT ST_AsKML(ST_MakeLine(geometry(a.shape_pt))) as the_route |
FROM (SELECT shapes.shape_id,shape_pt from shapes | FROM (SELECT shapes.shape_id,shape_pt from shapes |
inner join trips on shapes.shape_id = trips.shape_id | inner join trips on shapes.shape_id = trips.shape_id |
WHERE trips.trip_id = :tripID ORDER BY shape_pt_sequence) as a group by a.shape_id"; | WHERE trips.trip_id = :tripID ORDER BY shape_pt_sequence) as a group by a.shape_id'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":tripID", $tripID); | $query->bindParam(':tripID', $tripID); |
$query->execute(); | $query->execute(); |
if (!$query) { | if (!$query) { |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return Array(); | return Array(); |
} | } |
return $query->fetchColumn(0); | return $query->fetchColumn(0); |
} | } |
function getTripStopTimes($tripID) { | function getTripStopTimes($tripID) { |
global $conn; | global $conn; |
$query = "SELECT stop_times.trip_id,trip_headsign,arrival_time,stop_times.stop_id | $query = 'SELECT stop_times.trip_id,trip_headsign,arrival_time,stop_times.stop_id |
,stop_lat,stop_lon,stop_name,stop_desc,stop_code, | ,stop_lat,stop_lon,stop_name,stop_desc,stop_code, |
stop_sequence,service_id,trips.route_id,route_short_name,route_long_name | stop_sequence,service_id,trips.route_id,route_short_name,route_long_name |
FROM stop_times | FROM stop_times |
join trips on trips.trip_id = stop_times.trip_id | join trips on trips.trip_id = stop_times.trip_id |
join routes on trips.route_id = routes.route_id | join routes on trips.route_id = routes.route_id |
join stops on stops.stop_id = stop_times.stop_id | join stops on stops.stop_id = stop_times.stop_id |
WHERE trips.trip_id = :tripID ORDER BY stop_sequence"; | WHERE trips.trip_id = :tripID ORDER BY stop_sequence'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":tripID", $tripID); | $query->bindParam(':tripID', $tripID); |
$query->execute(); | $query->execute(); |
if (!$query) { | if (!$query) { |
databaseError($conn->errorInfo()); | databaseError($conn->errorInfo()); |
return Array(); | return Array(); |
} | } |
$stopTimes = $query->fetchAll(); | $stopTimes = $query->fetchAll(); |
return $stopTimes; | return $stopTimes; |
} | } |
function getTripAtStop($tripID, $stop_sequence) { | function getTripAtStop($tripID, $stop_sequence) { |
global $conn; | global $conn; |
foreach (getTripStopTimes($tripID) as $tripStop) { | foreach (getTripStopTimes($tripID) as $tripStop) { |
if ($tripStop['stop_sequence'] == $stop_sequence) | if ($tripStop['stop_sequence'] == $stop_sequence) |
return $tripStop; | return $tripStop; |
} | } |
return Array(); | return Array(); |
} | } |
function getTripStartTime($tripID) { | function getTripStartTime($tripID) { |
global $conn; | global $conn; |
$query = "Select * from stop_times | $query = 'Select * from stop_times |
where trip_id = :tripID | where trip_id = :tripID |
AND arrival_time IS NOT NULL | AND arrival_time IS NOT NULL |
AND stop_sequence = '1'"; | AND stop_sequence = \'1\''; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":tripID", $tripID); | $query->bindParam(':tripID', $tripID); |
$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['arrival_time']; | return $r['arrival_time']; |
} | } |
function getTripEndTime($tripID) { | function getTripEndTime($tripID) { |
global $conn; | global $conn; |
$query = "SELECT trip_id,max(arrival_time) as arrival_time from stop_times | $query = 'SELECT trip_id,max(arrival_time) as arrival_time from stop_times |
WHERE stop_times.arrival_time IS NOT NULL and trip_id = :tripID group by trip_id"; | WHERE stop_times.arrival_time IS NOT NULL and trip_id = :tripID group by trip_id'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":tripID", $tripID); | $query->bindParam(':tripID', $tripID); |
$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['arrival_time']; | return $r['arrival_time']; |
} | } |
function getTripStartingPoint($tripID) { | function getTripStartingPoint($tripID) { |
global $conn; | global $conn; |
$query = "SELECT stops.stop_id, stops.stop_name, stops.stop_desc | $query = 'SELECT stops.stop_id, stops.stop_name, stops.stop_desc |
from stop_times inner join stops on stop_times.stop_id = stops.stop_id | from stop_times inner join stops on stop_times.stop_id = stops.stop_id |
WHERE trip_id = :tripID and stop_sequence = '1' limit 1"; | WHERE trip_id = :tripID and stop_sequence = \'1\' limit 1'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":tripID", $tripID); | $query->bindParam(':tripID', $tripID); |
$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 getTripDestination($tripID) { | function getTripDestination($tripID) { |
global $conn; | global $conn; |
$query = "SELECT stops.stop_id, stops.stop_name, stops.stop_desc | $query = 'SELECT stops.stop_id, stops.stop_name, stops.stop_desc |
from stop_times inner join stops on stop_times.stop_id = stops.stop_id | from stop_times inner join stops on stop_times.stop_id = stops.stop_id |
WHERE trip_id = :tripID order by stop_sequence desc limit 1"; | WHERE trip_id = :tripID order by stop_sequence desc limit 1'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":tripID", $tripID); | $query->bindParam(':tripID', $tripID); |
$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 getActiveTrips($time) { | function getActiveTrips($time) { |
global $conn; | global $conn; |
if ($time == "") | if ($time == '') |
$time = current_time(); | $time = current_time(); |
$query = "Select distinct stop_times.trip_id, start_times.arrival_time as start_time, end_times.arrival_time as end_time from stop_times, (SELECT trip_id,arrival_time from stop_times WHERE stop_times.arrival_time IS NOT NULL | $query = 'Select distinct stop_times.trip_id, start_times.arrival_time as start_time, end_times.arrival_time as end_time from stop_times, (SELECT trip_id,arrival_time from stop_times WHERE stop_times.arrival_time IS NOT NULL |
AND stop_sequence = '1') as start_times, (SELECT trip_id,max(arrival_time) as arrival_time from stop_times WHERE stop_times.arrival_time IS NOT NULL group by trip_id) as end_times | AND stop_sequence = \'1\') as start_times, (SELECT trip_id,max(arrival_time) as arrival_time from stop_times WHERE stop_times.arrival_time IS NOT NULL group by trip_id) as end_times |
WHERE start_times.trip_id = end_times.trip_id AND stop_times.trip_id = end_times.trip_id AND :time > start_times.arrival_time AND :time < end_times.arrival_time"; | WHERE start_times.trip_id = end_times.trip_id AND stop_times.trip_id = end_times.trip_id AND :time > start_times.arrival_time AND :time < end_times.arrival_time'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
$query->bindParam(":time", $time); | $query->bindParam(':time', $time); |
$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 viaPoints($tripID, $stop_sequence = "") { | function viaPoints($tripID, $stop_sequence = '') { |
global $conn; | global $conn; |
$query = "SELECT stops.stop_id, stop_name, arrival_time | $query = 'SELECT stops.stop_id, stop_name, arrival_time |
FROM stop_times join stops on stops.stop_id = stop_times.stop_id | FROM stop_times join stops on stops.stop_id = stop_times.stop_id |
WHERE stop_times.trip_id = :tripID | WHERE stop_times.trip_id = :tripID |
" . ($stop_sequence != "" ? " AND stop_sequence > :stop_sequence " : "") . " ORDER BY stop_sequence"; | ' . ($stop_sequence != '' ? ' AND stop_sequence > :stop_sequence ' : '') . ' ORDER BY stop_sequence'; |
debug($query, "database"); | debug($query, 'database'); |
$query = $conn->prepare($query); | $query = $conn->prepare($query); |
if ($stop_sequence != "") | if ($stop_sequence != '') |
$query->bindParam(":stop_sequence", $stop_sequence); | $query->bindParam(':stop_sequence', $stop_sequence); |
$query->bindParam(":tripID", $tripID); | $query->bindParam(':tripID', $tripID); |
$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'); |
$last_updated = date('Y-m-d', @filemtime('cbrfeed.zip')); | $last_updated = date('Y-m-d', @filemtime('cbrfeed.zip')); |
header("Content-Type: text/xml"); | header("Content-Type: text/xml"); |
echo "<?xml version='1.0' encoding='UTF-8'?>"; | echo "<?xml version='1.0' encoding='UTF-8'?>"; |
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:geo="http://www.google.com/geo/schemas/sitemap/1.0">' . "\n"; | echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:geo="http://www.google.com/geo/schemas/sitemap/1.0">' .PHP_EOL; |
echo " <url><loc>" . curPageURL() . "index.php</loc><priority>1.0</priority></url>\n"; | echo " <url><loc>" . curPageURL() . "index.php</loc><priority>1.0</priority></url>".PHP_EOL; |
foreach (scandir("./") as $file) { | foreach (scandir("./") as $file) { |
if (strpos($file, ".php") !== false && $file != "index.php" && $file != "sitemap.xml.php") | if (strpos($file, ".php") !== false && $file != "index.php" && $file != "sitemap.xml.php") |
echo " <url><loc>" . curPageURL() . "$file</loc><priority>0.3</priority></url>\n"; | echo " <url><loc>" . curPageURL() . "$file</loc><priority>0.3</priority></url>".PHP_EOL; |
} | } |
foreach (scandir("./labs") as $file) { | foreach (scandir("./labs") as $file) { |
if (strpos($file, ".php") !== false) | if (strpos($file, ".php") !== false) |
echo " <url><loc>" . curPageURL() . "/labs/$file</loc><priority>0.3</priority></url>\n"; | echo " <url><loc>" . curPageURL() . "/labs/$file</loc><priority>0.3</priority></url>".PHP_EOL; |
} | } |
foreach (scandir("./myway") as $file) { | foreach (scandir("./myway") as $file) { |
if (strpos($file, ".php") !== false) | if (strpos($file, ".php") !== false) |
echo " <url><loc>" . curPageURL() . "/myway/$file</loc><priority>0.3</priority></url>\n"; | echo " <url><loc>" . curPageURL() . "/myway/$file</loc><priority>0.3</priority></url>".PHP_EOL; |
} | } |
foreach (getStops() as $stop) { | foreach (getStops() as $stop) { |
echo " <url><loc>" . curPageURL() . "stop.php?stopid=" . htmlspecialchars($stop["stop_id"]) . "</loc>"; | echo " <url><loc>" . curPageURL() . "stop.php?stopid=" . htmlspecialchars($stop["stop_id"]) . "</loc>"; |
echo "<lastmod>" . $last_updated . "</lastmod>"; | echo "<lastmod>" . $last_updated . "</lastmod>"; |
echo "<changefreq>monthly</changefreq>"; | echo "<changefreq>monthly</changefreq>"; |
echo "<priority>0.9</priority>"; | echo "<priority>0.9</priority>"; |
echo "</url>\n"; | echo "</url>".PHP_EOL; |
} | } |
foreach (getRoutes() as $route) { | foreach (getRoutes() as $route) { |
echo " <url><loc>" . curPageURL() . "trip.php?routeid=" . htmlspecialchars($route["route_id"]) . "</loc>"; | echo " <url><loc>" . curPageURL() . "trip.php?routeid=" . htmlspecialchars($route["route_id"]) . "</loc>"; |
echo "<lastmod>" . $last_updated . "</lastmod>"; | echo "<lastmod>" . $last_updated . "</lastmod>"; |
echo "<changefreq>monthly</changefreq>"; | echo "<changefreq>monthly</changefreq>"; |
echo "<priority>0.9</priority>"; | echo "<priority>0.9</priority>"; |
echo "</url>\n"; | echo "</url>".PHP_EOL; |
} | } |
// geosite map | // geosite map |
foreach (getRoutes() as $route) { | foreach (getRoutes() as $route) { |
echo " <url><loc>" . curPageURL() . "geo/route.kml.php?routeid=" . htmlspecialchars($route["route_id"]) . "</loc>"; | echo " <url><loc>" . curPageURL() . "geo/route.kml.php?routeid=" . htmlspecialchars($route["route_id"]) . "</loc>"; |
echo "<lastmod>" . $last_updated . "</lastmod>"; | echo "<lastmod>" . $last_updated . "</lastmod>"; |
echo "<geo:geo> | echo "<geo:geo> |
<geo:format>kml</geo:format> | <geo:format>kml</geo:format> |
</geo:geo>"; | </geo:geo>"; |
echo "</url>\n"; | echo "</url>".PHP_EOL; |
} | } |
echo '</urlset>'; | echo '</urlset>'; |
?> | ?> |
<?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'); |
$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/cbrfeed/"; | $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) . PHP_EOL; |
$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(); | $headers = Array(); |
if (!strpos($file, ".txt") === false) { | if (!strpos($file, ".txt") === false) { |
$fieldseparator = ","; | $fieldseparator = ","; |
$lineseparator = "\n"; | $lineseparator = PHP_EOL; |
$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"); |
$distance = 0; | $distance = 0; |
$lastshape = 0; | $lastshape = 0; |
$lastlat = 0; | $lastlat = 0; |
$lastlon = 0; | $lastlon = 0; |
$stmt = null; | $stmt = null; |
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { | while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { |
if ($line == 0) { | if ($line == 0) { |
$headers = array_values($data); | $headers = array_values($data); |
if ($tablename == "stops") { | if ($tablename == "stops") { |
$headers[] = "position"; | $headers[] = "position"; |
} | } |
if ($tablename == "shapes") { | if ($tablename == "shapes") { |
$headers[] = "shape_pt"; | $headers[] = "shape_pt"; |
} | } |
$query = "insert into $tablename ("; | $query = "insert into $tablename ("; |
$valueCount = 0; | $valueCount = 0; |
foreach ($headers as $value) { | foreach ($headers as $value) { |
$query.=($valueCount > 0 ? "," : "") . pg_escape_string($value); | $query.=($valueCount > 0 ? "," : "") . pg_escape_string($value); |
$valueCount++; | $valueCount++; |
} | } |
$query.= ") values( "; | $query.= ") values( "; |
$valueCount = 0; | $valueCount = 0; |
foreach ($data as $value) { | foreach ($data as $value) { |
$query.=($valueCount > 0 ? "," : "") . '?'; | $query.=($valueCount > 0 ? "," : "") . '?'; |
$valueCount++; | $valueCount++; |
} | } |
if ($tablename == "stops") { | if ($tablename == "stops") { |
$query.= ", ST_GeographyFromText(?));"; | $query.= ", ST_GeographyFromText(?));"; |
} else if ($tablename == "shapes") { | } else if ($tablename == "shapes") { |
$query.= ", ST_GeographyFromText(?));"; | $query.= ", ST_GeographyFromText(?));"; |
} else { | } else { |
$query.= ");"; | $query.= ");"; |
} | } |
echo $query; | echo $query; |
$stmt = $pdconn->prepare($query); | $stmt = $pdconn->prepare($query); |
} else { | } else { |
$values = array_values($data); | $values = array_values($data); |
if ($tablename == "stops") { | if ($tablename == "stops") { |
// Coordinate values are out of range [-180 -90, 180 90] | // Coordinate values are out of range [-180 -90, 180 90] |
$values[] = 'SRID=4326;POINT('.$values[5].' '.$values[4].')'; | $values[] = 'SRID=4326;POINT('.$values[5].' '.$values[4].')'; |
} | } |
if ($tablename == "shapes") { | 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]; |
$values[4] = $distance; | $values[4] = $distance; |
$values[] = 'SRID=4326;POINT('.$values[2].' '.$values[1].')'; | $values[] = 'SRID=4326;POINT('.$values[2].' '.$values[1].')'; |
} | } |
if (substr($values[1],0,2) == '24') $values[1] = "23:59:59"; | if (substr($values[1],0,2) == '24') $values[1] = "23:59:59"; |
if (substr($values[2],0,2) == '24') $values[2] = "23:59:59"; | if (substr($values[2],0,2) == '24') $values[2] = "23:59:59"; |
$stmt->execute($values); | $stmt->execute($values); |
$err = $pdconn->errorInfo(); | $err = $pdconn->errorInfo(); |
if ($err[2] != "" && strpos($err[2], "duplicate key") === false) { | if ($err[2] != "" && strpos($err[2], "duplicate key") === false) { |
print_r($values); | print_r($values); |
print_r($err); | print_r($err); |
die("terminated import due to db error above"); | die("terminated import due to db error above"); |
} | } |
} | } |
$line++; | $line++; |
if ($line % 10000 == 0) | if ($line % 10000 == 0) |
echo "$line records... " . date('c') . "\n"; | echo "$line records... " . date('c') . PHP_EOL; |
} | } |
fclose($handle); | fclose($handle); |
$stmt->closeCursor(); | $stmt->closeCursor(); |
echo "Found a total of $line records in $file.\n"; | echo "Found a total of $line records in $file.\n"; |
} | } |
} | } |
} | } |
?> | ?> |