Fix bugs due to recent code standards enforcement
Fix bugs due to recent code standards enforcement

<?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]}&amp;path='; $markers.= 'markers='.$mapPoints[0][0].','.$mapPoints[0][1].'&amp;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] . '&amp;markers='; $markers = 'markerd=color:red|' . $mapPoint[0] . ',' . $mapPoint[1] . '&amp;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.= '&amp;'; $markers.= '&amp;';
} }
} 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()) if (isIOSDevice())
$output.= '<img class="hiresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&amp;' . $markers . '&amp;scale=2&amp;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 . '&amp;' . $markers . '&amp;scale=2&amp;sensor=true" width=' . $width . ' height=' . $height . '" alt="map of stop location">';
else else
$output.= '<img class="lowresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&amp;' . $markers . '&amp;scale=1&amp;format=jpg&amp;sensor=true" width=' . $width . ' height=' . $height . '" alt="map of stop location">'; $output.= '<img class="lowresmap" src="http://maps.googleapis.com/maps/api/staticmap?size=' . $width . 'x' . $height . '&amp;' . $markers . '&amp;scale=1&amp;format=jpg&amp;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 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)) if (date('h', strtotime(current_time()) > 22))
$futureTime = '23:59:59'; $futureTime = '23:59:59';
$query->bindParam(':futureTime', $futureTime); $query->bindParam(':futureTime', $futureTime);
$query->bindParam(':routeID', $routeID); $query->bindParam(':routeID', $routeID);
$query->bindParam(':directionID', $directionID); $query->bindParam(':d