--- a/include/db/route-dao.inc.php +++ b/include/db/route-dao.inc.php @@ -1,222 +1,229 @@ prepare($query); - $query -> bindParam(":routeID", $routeID); - $query -> execute(); - if (!$query) { - databaseError($conn -> errorInfo()); - return Array(); - } - return $query -> fetch(PDO :: FETCH_ASSOC); - } - -function getRouteByFullName($routeFullName) - -{ - global $conn; - $query = "Select * from routes where route_short_name||route_long_name = :routeFullName LIMIT 1"; - debug($query, "database"); - $query = $conn -> prepare($query); - $query -> bindParam(":routeFullName", $routeFullName); - $query -> execute(); - if (!$query) { - databaseError($conn -> errorInfo()); - return Array(); - } - return $query -> fetch(PDO :: FETCH_ASSOC); - } - -function getRoutes() - -{ - global $conn; - $query = "Select * from routes order by route_short_name;"; - debug($query, "database"); - $query = $conn -> prepare($query); - $query -> execute(); - if (!$query) { - databaseError($conn -> errorInfo()); - return Array(); - } - return $query -> fetchAll(); - } -function getRoutesByNumber($routeNumber = "") - -{ - global $conn; - if ($routeNumber != "") { + +/* + * Copyright 2010,2011 Alexander Sadleir + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +function getRoute($routeID) { + global $conn; + $query = "Select * from routes where route_id = :routeID LIMIT 1"; + debug($query, "database"); + $query = $conn->prepare($query); + $query->bindParam(":routeID", $routeID); + $query->execute(); + if (!$query) { + databaseError($conn->errorInfo()); + return Array(); + } + return $query->fetch(PDO :: FETCH_ASSOC); +} + +function getRouteByFullName($routeFullName) { + global $conn; + $query = "Select * from routes where route_short_name||route_long_name = :routeFullName LIMIT 1"; + debug($query, "database"); + $query = $conn->prepare($query); + $query->bindParam(":routeFullName", $routeFullName); + $query->execute(); + if (!$query) { + databaseError($conn->errorInfo()); + return Array(); + } + return $query->fetch(PDO :: FETCH_ASSOC); +} + +function getRoutes() { + global $conn; + $query = "Select * from routes order by route_short_name;"; + debug($query, "database"); + $query = $conn->prepare($query); + $query->execute(); + if (!$query) { + databaseError($conn->errorInfo()); + return Array(); + } + return $query->fetchAll(); +} + +function getRoutesByNumber($routeNumber = "") { + global $conn; + if ($routeNumber != "") { $query = "Select distinct routes.route_id,routes.route_short_name,routes.route_long_name,service_id from routes join trips on trips.route_id = routes.route_id join stop_times on stop_times.trip_id = trips.trip_id where route_short_name = :routeNumber OR route_short_name LIKE :routeNumber2 order by route_short_name;"; - } - else { + } else { $query = "SELECT DISTINCT route_short_name from routes order by route_short_name"; - } - debug($query, "database"); - $query = $conn -> prepare($query); - if ($routeNumber != "") { - $query -> bindParam(":routeNumber", $routeNumber); - $routeNumber2 = "% " . $routeNumber; - $query -> bindParam(":routeNumber2", $routeNumber2); - } - $query -> execute(); - if (!$query) { - databaseError($conn -> errorInfo()); - return Array(); - } - return $query -> fetchAll(); - } -function getRoutesByNumberSeries($routeNumberSeries = "") - -{ - global $conn; - if (strlen($routeNumberSeries) == 1) { + } + debug($query, "database"); + $query = $conn->prepare($query); + if ($routeNumber != "") { + $query->bindParam(":routeNumber", $routeNumber); + $routeNumber2 = "% " . $routeNumber; + $query->bindParam(":routeNumber2", $routeNumber2); + } + $query->execute(); + if (!$query) { + databaseError($conn->errorInfo()); + return Array(); + } + return $query->fetchAll(); +} + +function getRoutesByNumberSeries($routeNumberSeries = "") { + global $conn; + if (strlen($routeNumberSeries) == 1) { return getRoutesByNumber($routeNumberSeries); - } + } $seriesMin = substr($routeNumberSeries, 0, -1) . "0"; - $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 = + $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 = 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"); - $query = $conn -> prepare($query); - $query -> bindParam(":seriesMin", $seriesMin); - $query -> bindParam(":seriesMax", $seriesMax); - $routeNumberSeries = "% " . substr($routeNumberSeries, 0, -1) . "%"; - $query -> bindParam(":routeNumberSeries", $routeNumberSeries); - $query -> execute(); - if (!$query) { - databaseError($conn -> errorInfo()); - return Array(); - } - return $query -> fetchAll(); - } -function getRouteNextTrip($routeID) - -{ - global $conn; - $query = "select * from routes join trips on trips.route_id = routes.route_id + debug($query, "database"); + $query = $conn->prepare($query); + $query->bindParam(":seriesMin", $seriesMin); + $query->bindParam(":seriesMax", $seriesMax); + $routeNumberSeries = "% " . substr($routeNumberSeries, 0, -1) . "%"; + $query->bindParam(":routeNumberSeries", $routeNumberSeries); + $query->execute(); + if (!$query) { + databaseError($conn->errorInfo()); + return Array(); + } + return $query->fetchAll(); +} + +function getRouteNextTrip($routeID) { + global $conn; + $query = "select * from routes join trips on trips.route_id = routes.route_id join stop_times on stop_times.trip_id = trips.trip_id where arrival_time > :currentTime and routes.route_id = :routeID order by arrival_time limit 1"; - debug($query, "database"); - $query = $conn -> prepare($query); - $query -> bindParam(":currentTime", current_time()); - $query -> bindParam(":routeID", $routeID); - $query -> execute(); - if (!$query) { - databaseError($conn -> errorInfo()); - return Array(); - } - $r = $query -> fetch(PDO :: FETCH_ASSOC); - - // past last trip of the day special case + debug($query, "database"); + $query = $conn->prepare($query); + $query->bindParam(":currentTime", current_time()); + $query->bindParam(":routeID", $routeID); + $query->execute(); + if (!$query) { + databaseError($conn->errorInfo()); + return Array(); + } + $r = $query->fetch(PDO :: FETCH_ASSOC); + + // past last trip of the day special case if (sizeof($r) < 16) { $query = "select * from routes join trips on trips.route_id = routes.route_id join stop_times on stop_times.trip_id = trips.trip_id where routes.route_id = :routeID order by arrival_time DESC limit 1"; - debug($query, "database"); - $query = $conn -> prepare($query); - $query -> bindParam(":routeID", $routeID); - $query -> execute(); - if (!$query) { - databaseError($conn -> errorInfo()); - return Array(); - } - - $r = $query -> fetch(PDO :: FETCH_ASSOC); - } + debug($query, "database"); + $query = $conn->prepare($query); + $query->bindParam(":routeID", $routeID); + $query->execute(); + if (!$query) { + databaseError($conn->errorInfo()); + return Array(); + } + + $r = $query->fetch(PDO :: FETCH_ASSOC); + } return $r; - } -function getTimeInterpolatedRouteAtStop($routeID, $stop_id) - -{ - $nextTrip = getRouteNextTrip($routeID); - if ($nextTrip['trip_id']) { +} + +function getTimeInterpolatedRouteAtStop($routeID, $stop_id) { + $nextTrip = getRouteNextTrip($routeID); + if ($nextTrip['trip_id']) { foreach (getTimeInterpolatedTrip($nextTrip['trip_id']) as $tripStop) { - if ($tripStop['stop_id'] == $stop_id) return $tripStop; - } - } + if ($tripStop['stop_id'] == $stop_id) + return $tripStop; + } + } return Array(); - } -function getRouteTrips($routeID) - -{ - global $conn; - $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 +} + +function getRouteTrips($routeID) { + global $conn; + $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 routes.route_id = :routeID and stop_sequence = '1' order by arrival_time "; - debug($query, "database"); - $query = $conn -> prepare($query); - $query -> bindParam(":routeID", $routeID); - $query -> execute(); - if (!$query) { - databaseError($conn -> errorInfo()); - return Array(); - } - return $query -> fetchAll(); - } -function getRoutesByDestination($destination = "", $service_period = "") - -{ - global $conn; - if ($service_period == "") $service_period = service_period(); - if ($destination != "") { + debug($query, "database"); + $query = $conn->prepare($query); + $query->bindParam(":routeID", $routeID); + $query->execute(); + if (!$query) { + databaseError($conn->errorInfo()); + return Array(); + } + return $query->fetchAll(); +} + +function getRoutesByDestination($destination = "", $service_period = "") { + global $conn; + if ($service_period == "") + $service_period = service_period(); + if ($destination != "") { $query = "SELECT DISTINCT trips.route_id,route_short_name,route_long_name, service_id FROM stop_times join trips on trips.trip_id = stop_times.trip_id join routes on trips.route_id = routes.route_id WHERE route_long_name = :destination AND service_id=:service_period order by route_short_name"; - } - else { + } else { $query = "SELECT DISTINCT route_long_name FROM stop_times join trips on trips.trip_id = stop_times.trip_id join routes on trips.route_id = routes.route_id WHERE service_id= :service_period order by route_long_name"; - } - debug($query, "database"); - $query = $conn -> prepare($query); - $query -> bindParam(":service_period", $service_period); - if ($destination != "") $query -> bindParam(":destination", $destination); - $query -> execute(); - if (!$query) { - databaseError($conn -> errorInfo()); - return Array(); - } - return $query -> fetchAll(); - } -function getRoutesBySuburb($suburb, $service_period = "") - -{ - if ($service_period == "") $service_period = service_period(); - global $conn; - $query = "SELECT DISTINCT service_id,trips.route_id,route_short_name,route_long_name + } + debug($query, "database"); + $query = $conn->prepare($query); + $query->bindParam(":service_period", $service_period); + if ($destination != "") + $query->bindParam(":destination", $destination); + $query->execute(); + if (!$query) { + databaseError($conn->errorInfo()); + return Array(); + } + return $query->fetchAll(); +} + +function getRoutesBySuburb($suburb, $service_period = "") { + if ($service_period == "") + $service_period = service_period(); + global $conn; + $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 join routes on trips.route_id = routes.route_id join stops on stops.stop_id = stop_times.stop_id WHERE zone_id LIKE ':suburb AND service_id=:service_period ORDER BY route_short_name"; - debug($query, "database"); - $query = $conn -> prepare($query); - $query -> bindParam(":service_period", $service_period); - $suburb = "%" . $suburb . ";%"; - $query -> bindParam(":suburb", $suburb); - $query -> execute(); - if (!$query) { - databaseError($conn -> errorInfo()); - return Array(); - } - return $query -> fetchAll(); - } -function getRoutesNearby($lat, $lng, $limit = "", $distance = 500) - -{ - if ($service_period == "") $service_period = service_period(); - if ($limit != "") $limitSQL = " LIMIT :limit "; - global $conn; - $query = "SELECT service_id,trips.route_id,route_short_name,route_long_name,min(stops.stop_id) as stop_id, + debug($query, "database"); + $query = $conn->prepare($query); + $query->bindParam(":service_period", $service_period); + $suburb = "%" . $suburb . ";%"; + $query->bindParam(":suburb", $suburb); + $query->execute(); + if (!$query) { + databaseError($conn->errorInfo()); + return Array(); + } + return $query->fetchAll(); +} + +function getRoutesNearby($lat, $lng, $limit = "", $distance = 500) { + if ($service_period == "") + $service_period = service_period(); + if ($limit != "") + $limitSQL = " LIMIT :limit "; + global $conn; + $query = "SELECT service_id,trips.route_id,route_short_name,route_long_name,min(stops.stop_id) as stop_id, min(ST_Distance(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), FALSE)) as distance FROM stop_times join trips on trips.trip_id = stop_times.trip_id @@ -226,16 +233,18 @@ AND ST_DWithin(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), :distance, FALSE) group by service_id,trips.route_id,route_short_name,route_long_name order by distance $limitSQL"; - debug($query, "database"); - $query = $conn -> prepare($query); - $query -> bindParam(":service_period", $service_period); - $query -> bindParam(":distance", $distance); - if ($limit != "") $query -> bindParam(":limit", $limit); - $query -> execute(); - if (!$query) { - databaseError($conn -> errorInfo()); - return Array(); - } - return $query -> fetchAll(); - } + debug($query, "database"); + $query = $conn->prepare($query); + $query->bindParam(":service_period", $service_period); + $query->bindParam(":distance", $distance); + if ($limit != "") + $query->bindParam(":limit", $limit); + $query->execute(); + if (!$query) { + databaseError($conn->errorInfo()); + return Array(); + } + return $query->fetchAll(); +} + ?>