From: Maxious Date: Sun, 29 Jan 2012 11:40:00 +0000 Subject: Merge branch 'master' of github.com:maxious/ACTBus-ui X-Git-Url: https://maxious.lambdacomplex.org/git/?p=busui.git&a=commitdiff&h=8a79694d825dfaaeef67810be5828b52922b3e47 --- Merge branch 'master' of github.com:maxious/ACTBus-ui --- --- a/about.php +++ b/about.php @@ -34,8 +34,9 @@
Some icons by Joseph Wain / glyphish.com
Native clients also available for iPhone(cbrTimetable by Sandor Kolotenko - , ACT Buses by David Sullivan) - , Android (MyBus 2.0 by Imagine Team) + , ACT Buses by David Sullivan, Bus Trips ACT by Molson Chengalath) + , Android (MyBus 2.0 by Imagine Team, GetMe2 Canberra by +Colin Thompson ) and Windows Phone 7 (TransHub Canberra by Soul Solutions) Other web clients include iTranzit.
GTFS-realtime API: --- a/aws/busuidb.sh +++ b/aws/busuidb.sh @@ -7,7 +7,8 @@ psql -d transitdata -f /var/www/transitdata.cbrfeed.sql #createuser transitdata -SDRP #password transitdata -#psql -d transitdata -c "GRANT SELECT ON TABLE agency,calendar,calendar_dates,routes,stop_times,stops,trips TO transitdata;" +#psql -d transitdata -c "GRANT SELECT ON TABLE agency,calendar,calendar_dates,routes,stop_times,stops,trips\ +#,servicealerts_alerts,servicealerts_informed TO transitdata;" #psql -d transitdata -c "GRANT SELECT,INSERT ON TABLE myway_observations,myway_routes,myway_stops,myway_timingdeltas TO transitdata;" #psql -d transitdata -c "GRANT SELECT,INSERT,UPDATE ON TABLE myway_routes,myway_stops TO transitdata;" ##psql -d transitdata -c "GRANT SELECT ON ALL TABLES IN SCHEMA public TO transitdata;" @@ -15,3 +16,4 @@ ##SELECT '', 'public', 'shapes', 'shape_pt', ST_CoordDim(shape_pt), ST_SRID(shape_pt), GeometryType(shape_pt) ##FROM shapes LIMIT 1; php /var/www/updatedb.php + --- a/geo/route.kml.php +++ b/geo/route.kml.php @@ -1,4 +1,5 @@ @@ -14,15 +15,15 @@ '; $route = getRoute($routeid); - echo "\n\n"; - $link = curPageURL()."/../trip.php?routeid=".htmlspecialchars ($route["route_id"]); - echo "".$route['route_short_name'].""; - echo ''; - echo ''.$route['route_short_name']." ".$route['route_long_name']."]]> "; +echo "\n\n"; + +$link = curPageURL() . "/../trip.php?routeid=" . htmlspecialchars($route["route_id"]); +echo "" . $route['route_short_name'] . ""; +echo ''; +echo '' . $route['route_short_name'] . " " . $route['route_long_name'] . "]]> "; echo "#yellowLineGreenPoly"; - - $trip = getRouteNextTrip($routeid); - echo getTripShape($trip['trip_id']); +$trip = getRouteNextTrip($routeid); +echo getTripShape($trip['trip_id']); echo "\n\n"; ?> --- a/geo/stops.kml.php +++ b/geo/stops.kml.php @@ -1,11 +1,11 @@ createElementNS('http://earth.google.com/kml/2.1', 'kml'); +$node = $dom->createElementNS('http://www.opengis.net/kml/2.2', 'kml'); $parNode = $dom->appendChild($node); // Creates a KML Document element and append it to the KML element. $dnode = $dom->createElement('Document'); @@ -13,7 +13,7 @@ if ($suburb != "") $result_stops = getStopsBySuburb($suburb); else $result_stops = getStops(); foreach ($result_stops as $stop) { - $description = 'http://bus.lambdacomplex.org/' . 'stop.php?stopid=' . $stop['stop_id'] . "
"; + $description = baseURL() . 'stop.php?stopid=' . $stop['stop_id'] . "
"; // Creates a Placemark and append it to the Document. $node = $dom->createElement('Placemark'); $placeNode = $docNode->appendChild($node); --- /dev/null +++ b/geo/trip.kml.php @@ -1,1 +1,31 @@ + +'; +echo ' + '; +$trip = getTrip($tripid); +echo "\n\n"; +$link = curPageURL() . "/../trip.php?tripid=" . htmlspecialchars($$tripid); +echo "" . $tripid . ""; +echo ''; +echo '' . $tripid . "]]> "; +echo "#yellowLineGreenPoly"; + + +echo getTripShape($tripid); + +echo "\n\n"; +?> + + --- a/include/common-net.inc.php +++ b/include/common-net.inc.php @@ -35,7 +35,11 @@ debug(print_r($page, true), "json"); return $page; } +function baseURL() { + $protocol = $_SERVER['HTTPS'] ? "https" : "http"; + return $protocol . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; +} function curPageURL() { $isHTTPS = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on"); $port = (isset($_SERVER["SERVER_PORT"]) && ((!$isHTTPS && $_SERVER["SERVER_PORT"] != "80") || ($isHTTPS && $_SERVER["SERVER_PORT"] != "443"))); --- a/include/common-request.inc.php +++ b/include/common-request.inc.php @@ -57,11 +57,14 @@ if (isset($_REQUEST['stopids'])) { $stopids = explode(",", filter_var($_REQUEST['stopids'], FILTER_SANITIZE_STRING)); } -if (isset($_REQUEST['routeids'])) { - $routeids = explode(",", filter_var($_REQUEST['routeids'], FILTER_SANITIZE_STRING)); -} if (isset($_REQUEST['tripid'])) { $tripid = filter_var($_REQUEST['tripid'], FILTER_SANITIZE_STRING); +} +if (isset($_REQUEST['routeid'])) { + $routeid = filter_var($_REQUEST['routeid'], FILTER_SANITIZE_STRING); +} +if (isset($_REQUEST['directionid'])) { + $directionid = filter_var($_REQUEST['directionid'], FILTER_SANITIZE_STRING); } if (isset($_REQUEST['stopid'])) { $stopid = filter_var($_REQUEST['stopid'], FILTER_SANITIZE_NUMBER_INT); --- a/include/common-session.inc.php +++ b/include/common-session.inc.php @@ -61,8 +61,10 @@ } //debug(print_r($_SESSION, true) , "session"); -function current_time() { - return ($_REQUEST['time'] ? $_REQUEST['time'] : date("H:i:s")); +function current_time($time = "") { + if (isset($_REQUEST['time'])) return $_REQUEST['time']; + else if ($time != "") date("H:i:s",$time); + else return date("H:i:s"); } ?> --- a/include/common-template.inc.php +++ b/include/common-template.inc.php @@ -54,7 +54,7 @@ '; - $jqmVersion = "1.0"; + $jqmVersion = "1.0.1"; if (isDebugServer()) { $jqmcss = $basePath . "css/jquery.mobile-$jqmVersion.css"; $jqjs = $basePath . "js/jquery-1.6.4.min.js"; @@ -175,7 +175,7 @@
'; if ($GTFSREnabled) { $overrides = getServiceOverride(); - if ($overrides['service_id']) { + if (isset($overrides['service_id'])) { if ($overrides['service_id'] == "noservice") { echo '
Buses are not running today due to industrial action/public holiday. See http://www.action.act.gov.au for details.
'; --- a/include/common-transit.inc.php +++ b/include/common-transit.inc.php @@ -20,20 +20,21 @@ 'saturday', 'weekday' ); -function service_period_day ($spid) { - $idParts = explode("-",$spid); - return strtolower($idParts[2]); -} + function service_period($date = "") { - if (isset($_REQUEST['service_period'])) + if (isset($_REQUEST['service_period'])) { return $_REQUEST['service_period']; + } + $override = getServiceOverride($date); - if ($override['service_id']) { - return service_period_day ($override['service_id']); - } - - switch (date('w', ($date != "" ? $date : time()))) { + if (isset($override['service_id'])) { + return strtolower($override['service_id']); + } + $date = ($date != "" ? $date : time()); + $dow = date('w', $date); + + switch ($dow) { case 0: return 'sunday'; case 6: @@ -42,19 +43,28 @@ return 'weekday'; } } -function service_ids($service_period) { + +function service_ids($service_period, $date = "") { switch ($service_period) { case 'sunday': - return Array("2010-TUGGSUN-Sunday-20","2010-BELCSUN-Sunday-19"); + return Array("Sunday", "Sunday"); case 'saturday': - return Array("2010-BELCSAT-Saturday-19","2010-TUGGSAT-Saturday-19"); + return Array("Saturday", "Saturday"); default: - //return 'weekday'; - return Array("2010-BELCMAST-Weekday-15","2010-TUGGMAST-Weekday-14"); - } -} + $date = ($date != "" ? $date : time()); +// school holidays + $ymd = date('Ymd', $date); + $dow = date('w', $date); + if (intval($ymd) < "20120203" && $dow != 0 && $dow != 6) { + return Array("Weekday-SchoolVacation", "Weekday-SchoolVacation"); + } else { + return Array("Weekday", "Weekday"); + } + } +} + 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 = "") { --- a/include/db/route-dao.inc.php +++ b/include/db/route-dao.inc.php @@ -61,8 +61,8 @@ } return $query->fetchAll(); } -function getRouteDescription($routeID) { - $trip = getRouteNextTrip($routeID); +function getRouteDescription($routeID, $directionID) { + $trip = getRouteNextTrip($routeID, $directionID); $start = getTripStartingPoint($trip['trip_id']); $end = getTripDestination($trip['trip_id']); return "From ".$start['stop_name']." to ".$end['stop_name']; @@ -86,30 +86,6 @@ $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 = "", $directionID = "",$service_period = "") { - global $conn; - if ($routeNumber != "") { - $query = "Select distinct routes.route_id,routes.route_short_name,routes.route_long_name,service_id from routes join trips on trips.route_id = -routes.route_id join stop_times on stop_times.trip_id = trips.trip_id -where route_short_name = :routeNumber OR route_short_name LIKE :routeNumber2 order by route_short_name;"; - } else { - $query = "SELECT DISTINCT route_short_name from routes order by route_short_name"; - } - debug($query, "database"); - $query = $conn->prepare($query); - if ($routeNumber != "") { - $query->bindParam(":routeNumber", $routeNumber); - $routeNumber2 = "% " . $routeNumber; - $query->bindParam(":routeNumber2", $routeNumber2); - } $query->execute(); if (!$query) { databaseError($conn->errorInfo()); @@ -141,16 +117,21 @@ return $query->fetchAll(); } -function getRouteNextTrip($routeID) { +function getRouteNextTrip($routeID, $directionID) { global $conn; - $query = "select routes.route_id,direction_id,trips.trip_id,departure_time from routes join trips on trips.route_id = routes.route_id -join stop_times on stop_times.trip_id = trips.trip_id where arrival_time > :currentTime and routes.route_id = :routeID order by + $query = "select routes.route_id,direction_id,trips.trip_id,trip_headsign,departure_time from routes join trips on trips.route_id = routes.route_id +join stop_times on stop_times.trip_id = trips.trip_id where arrival_time between :currentTime and :futureTime +and routes.route_id = :routeID and trips.direction_id = :directionID order by arrival_time limit 1"; debug($query, "database"); $query = $conn->prepare($query); $query->bindParam(":currentTime", current_time()); + $futureTime = current_time(strtotime(current_time() ." +2h")); + if (date("h",strtotime(current_time()) > 22)) $futureTime = "23:59:59"; + $query->bindParam(":futureTime", $futureTime); $query->bindParam(":routeID", $routeID); + $query->bindParam(":directionID", $directionID); $query->execute(); databaseError($conn->errorInfo()); if (!$query) { @@ -158,15 +139,21 @@ 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 + return $r; +} + +function getRouteFirstTrip($routeID,$directionID) { + global $conn; + + $query = "select * from routes join trips on trips.route_id = routes.route_id +join stop_times on stop_times.trip_id = trips.trip_id where routes.route_id = :routeID +and trips.direction_id = :directionID order by arrival_time DESC limit 1"; debug($query, "database"); $query = $conn->prepare($query); $query->bindParam(":routeID", $routeID); + + $query->bindParam(":directionID", $directionID); $query->execute(); if (!$query) { databaseError($conn->errorInfo()); @@ -174,12 +161,11 @@ } $r = $query->fetch(PDO :: FETCH_ASSOC); - } - return $r; -} - -function getRouteAtStop($routeID, $stop_id) { - $nextTrip = getRouteNextTrip($routeID); + return $r; +} + +function getRouteAtStop($routeID, $directionID, $stop_id) { + $nextTrip = getRouteNextTrip($routeID, $directionID); if ($nextTrip['trip_id']) { foreach (getTripStopTimes($nextTrip['trip_id']) as $tripStop) { if ($tripStop['stop_id'] == $stop_id) @@ -189,7 +175,7 @@ return Array(); } -function getRoutesTrips($routeIDs, $directionID = "", $service_period = "") { +function getRouteTrips($routeID, $directionID = "", $service_period = "") { global $conn; if ($service_period == "") $service_period = service_period(); @@ -201,12 +187,11 @@ $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 join stop_times on stop_times.trip_id = trips.trip_id where (service_id=:service_periodA OR service_id=:service_periodB) -AND (routes.route_id = :routeIDA OR routes.route_id = :routeIDB) " . $directionSQL . " and stop_sequence = '1' order by +AND (routes.route_id = :routeID) " . $directionSQL . " and stop_sequence = '1' order by arrival_time "; debug($query, "database"); $query = $conn->prepare($query); - $query->bindParam(":routeIDA", $routeIDs[0]); - $query->bindParam(":routeIDB", $routeIDs[1]); + $query->bindParam(":routeID", $routeID); $query->bindParam(":service_periodA", $sidA); $query->bindParam(":service_periodB", $sidB); if ($directionSQL != "") @@ -227,23 +212,22 @@ $sidA = $service_ids[0]; $sidB = $service_ids[1]; 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 = 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) - 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 + 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 { - $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_periodA OR service_id=:service_periodB) - order by route_long_name"; - } - debug($query, "database"); - $query = $conn->prepare($query); - - $query->bindParam(":service_periodA", $sidA); - $query->bindParam(":service_periodB", $sidB); + $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;"; + } + debug($query, "database"); + $query = $conn->prepare($query); + + //$query->bindParam(":service_periodA", $sidA); + //$query->bindParam(":service_periodB", $sidB); if ($destination != "") $query->bindParam(":destination", $destination); $query->execute(); @@ -290,7 +274,7 @@ 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, + $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 FROM stop_times join trips on trips.trip_id = stop_times.trip_id @@ -298,7 +282,7 @@ join stops on stops.stop_id = stop_times.stop_id WHERE (service_id=:service_periodA OR service_id=:service_periodB) AND ST_DWithin(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), :distance, FALSE) - group by service_id,trips.route_id,route_short_name,route_long_name + group by service_id,trips.route_id,trips.direction_id,route_short_name,route_long_name order by distance $limitSQL"; debug($query, "database"); $query = $conn->prepare($query); --- a/include/db/stop-dao.inc.php +++ b/include/db/stop-dao.inc.php @@ -46,7 +46,7 @@ } } $query .= " order by stop_name;"; - debug($query,"database"); + debug($query, "database"); $query = $conn->prepare($query); if ($firstLetter != "") $query->bindParam(":firstLetter", $firstLetter); @@ -167,16 +167,16 @@ if ($service_period == "") { $service_period = service_period(); } - $service_ids = service_ids($service_period); + $service_ids = service_ids($service_period); $sidA = $service_ids[0]; $sidB = $service_ids[1]; $limitSQL = ""; if ($limit != "") $limitSQL .= " LIMIT :limit "; - + global $conn; 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,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 join trips on trips.trip_id = stop_times.trip_id @@ -184,7 +184,7 @@ WHERE stop_times.arrival_time IS NOT NULL group by trip_id) as end_times WHERE stop_times.stop_id = :stopID 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 ORDER BY end_time $limitSQL"; } else { @@ -194,7 +194,7 @@ stop_times.trip_id join routes on trips.route_id = routes.route_id 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"; } debug($query, "database"); --- a/include/db/trip-dao.inc.php +++ b/include/db/trip-dao.inc.php @@ -78,7 +78,7 @@ 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 trips.trip_id = :tripID $range ORDER BY stop_sequence"; +WHERE trips.trip_id = :tripID ORDER BY stop_sequence"; debug($query, "database"); $query = $conn->prepare($query); $query->bindParam(":tripID", $tripID); --- a/index.php +++ b/index.php @@ -20,7 +20,7 @@
-

busness time


Canberra Bus Timetables and Trip Planner +

busness time


Canberra Bus Timetables and Trip Planner
Launch Trip Planner... @@ -37,9 +37,9 @@
  • Routes By Suburb
  • Nearby Routes
  • + Busness R&D + MyWay Balance and Timeliness Survey Results Busness R&D'; - echo ' MyWay Balance and Timeliness Survey Results'; include_footer(true) ?> --- a/myway/myway_api.json.php +++ b/myway/myway_api.json.php @@ -84,6 +84,9 @@ curl_setopt($ch, CURLOPT_REFERER, "https://www.transport.act.gov.au/ARTS/getbalance.asp"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_TIMEOUT, 30); + // ssl ignore + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); //execute post $pageHTML = curl_exec($ch); if (curl_errno($ch)) --- a/myway/myway_timeliness.php +++ b/myway/myway_timeliness.php @@ -41,8 +41,18 @@ $labels = Array(); $lastRoute = ""; foreach ($query->fetchAll() as $delta) { + /*$routeIDParts = explode(" ",$delta['route_name']); + $routeNumber = $routeIDParts[0]; + $routeDirection = $routeIDParts[1]; + if (preg_match('/31./',$routeName)) { + $routeName = "312-319"." ".$routeDirection; + } else { + $routeName = $delta['route_name']; + }*/ + $routeName = $delta['route_name']; - if (preg_match('/z/',$routeName)) { + + if (preg_match('/31./',$routeName)) { $routeName = "312-319"; } else { $routeName = preg_replace('/\D/', '', $routeName); --- a/myway/myway_timeliness_calculate.php +++ b/myway/myway_timeliness_calculate.php @@ -58,10 +58,18 @@ $search_time = date("H:i:s", strtotime($obsv['time']) - (60 * 60)); // 30 minutes margin $date = date("c", strtotime($obsv['time'])); $timing_period = service_period(strtotime($date)); + + // little hack for public holidays nolonger active; weekdays and 900+ route numbers don't make sense + if ($timing_period == "weekday" && preg_match('/9../',$obsv["route_short_name"])) { + echo "Potential public holiday detected, trying Sunday timetable.
    "; + + $timing_period = "sunday"; + } + if (isset($obsv["stop_id"]) && $obsv["stop_id"] != "" && $obsv["stop_id"] != "*") { $potentialStops = Array(getStop($obsv["stop_id"])); } else { - echo "Potential stops are a bus station
    "; + echo "No stop_id recorded for this stop_name, potential stops are a bus station
    "; $potentialStops = getStops("", trim(str_replace(Array("Arrival","Arrivals","Arrive Platform 3 Set down only.","Arrive","Set Down Only"), "", $obsv["myway_stop"]))); } //:get myway_stops records @@ -87,7 +95,7 @@ } $timeDeltas = Array(); foreach ($potentialRoutes as $potentialRoute) { - echo "Matched route: {$potentialRoute['route_id']} {$potentialRoute['route_short_name']}{$potentialRoute['route_long_name']} {$timing_period}
    "; + echo "Matched route: {$potentialRoute['route_id']} {$potentialRoute['route_short_name']} {$timing_period}
    "; foreach ($potentialStops as $potentialStop) { $stopRoutes = getStopRoutes($potentialStop['stop_id'], $timing_period); $foundRoute = Array(); @@ -110,7 +118,7 @@ "timeDiff" => $timeDiff, "stop_id" => $potentialStop['stop_id'], "stop_sequence" => $trip['stop_sequence'], - "route_name" => "{$trip['route_short_name']} {$trip['route_long_name']} {$trip['direction']}", + "route_name" => "{$trip['route_short_name']} {$trip['trip_headsign']}", "route_id" => $trip['route_id'] ); echo "Found trip {$trip['trip_id']} at stop {$potentialStop['stop_id']} (#{$potentialStop['stop_name']}, sequence #{$trip['stop_sequence']})
    "; --- a/routeList.php +++ b/routeList.php @@ -32,38 +32,35 @@ } function displayRoutes($routes) { - global $nearby; echo '
      '; - $filteredRoutes = Array(); foreach ($routes as $route) { foreach (getRouteHeadsigns($route['route_id']) as $headsign) { - $start = $headsign['stop_name']; - $serviceday = service_period_day($headsign['service_id']); - $key = $route['route_short_name'] . "." . $headsign['direction_id']; - if (isset($filteredRoutes[$key])) { - $filteredRoutes[$key]['route_ids'][] = $route['route_id']; - $filteredRoutes[$key]['route_ids'] = array_unique($filteredRoutes[$key]['route_ids']); - } else { - $filteredRoutes[$key]['route_short_name'] = $route['route_short_name']; - $filteredRoutes[$key]['route_long_name'] = "starting at " . $start; - $filteredRoutes[$key]['service_id'] = $serviceday; - $filteredRoutes[$key]['trip_headsign'] = $headsign['trip_headsign'].(strstr($headsign['trip_headsign'], "bound") ===false ?"bound":""); - $filteredRoutes[$key]['direction_id'] = $headsign['direction_id']; - if (isset($nearby)) { - $filteredRoutes[$key]['distance'] = $route['distance']; - } - } + + //print_r($route); + echo '
    • ' . $route['route_id'] . "

      + +

      " . $headsign['trip_headsign'] . (strstr($headsign['trip_headsign'], "bound") === false ? "bound" : "") . ", starting at " . $headsign['stop_name'] . " (" . ucwords($headsign['service_id']) . ")

      "; + + echo"
    • \n"; } } - foreach ($filteredRoutes as $key => $route) { - echo '
    • ' . $route['route_short_name'] . "

      +} + +function displayNearbyRoutes($routes) { + echo '
        '; + foreach ($routes as $route) { + $time = getRouteAtStop($route['route_id'], $route['direction_id'], $route['stop_id']); + $start = getTripStartingPoint($time['trip_id']); + $end = getTripDestination($time['trip_id']); + //print_r($route); + echo '
      • ' . $route['route_short_name'] . "

        -

        " . $route['trip_headsign'].", ". $route['route_long_name'] . " (" . ucwords($route['service_id']) . ")

        "; - if (isset($nearby)) { - $time = getRouteAtStop($route['route_id'], $route['stop_id']); - echo '' . ($time['arrival_time'] ? $time['arrival_time'] : "No more trips today") . "
        " . floor($route['distance']) . 'm away
        '; - } - echo"
      • \n"; +

        " . $time['trip_headsign'] . (strstr($time['trip_headsign'], "bound") === false ? "bound" : "") . " from ".$start['stop_name']." to ".$end['stop_name'] . " (" . ucwords($time['service_id']) . ")

        "; + $stop = getStop($route['stop_id']); +echo "

        Board at ".$stop['stop_name']."

        "; + echo '' . ($time['arrival_time'] ? $time['arrival_time'] : "No more trips today") . "
        " . floor($route['distance']) . 'm away
        '; + + echo" \n"; } } @@ -106,7 +103,7 @@ if (sizeof($routes) > 0) { - displayRoutes($routes); + displayNearbyRoutes($routes); } else { echo '
          '; echo "
        • No routes nearby.
        • "; @@ -116,7 +113,7 @@ navbar(); echo '
            '; if (isset($bynumber)) { - $routes = getRoutesByNumber(); + $routes = getRoutes(); $routeSeries = Array(); $seriesRange = Array(); foreach ($routes as $key => $routeNumber) { @@ -160,7 +157,7 @@ displayRoutes(getRoutesByDestination($routeDestination)); } else { foreach (getRoutesByDestination() as $destination) { - echo '
          • ' . $destination['route_long_name'] . "...
          • \n"; + echo '
          • ' . $destination['stop_name'] . "...
          • \n"; } } } --- a/stop.php +++ b/stop.php @@ -73,8 +73,12 @@ //} } } -include_header($stop['stop_name'], "stop"); - +if (sizeof($stops) > 0) { +$stopDescParts = explode("
            ",$stop['stop_desc']); +include_header(trim(str_replace("Street: ","",$stopDescParts[0])), "stop"); +} else { + include_header($stop['stop_name']); +} /* $serviceAlerts = json_decode(getPage(curPageURL() . "/servicealerts_api.php?filter_class=stop&filter_id=".$stopid) , true); foreach($serviceAlerts['entities'] as $serviceAlert) { @@ -106,22 +110,29 @@ } else { $trips = getStopTripsWithTimes($stopid); } + echo "
            "; +// if we have too many trips, cut down to size. +if (sizeof($trips) > 10) { + $trips = array_splice($trips, 0,10); +} + // later/earlier button setup if (sizeof($trips) == 0) { $time = isset($_REQUEST['time']) ? strtotime($_REQUEST['time']) : time(); $earlierTime = $time - (90 * 60); $laterTime = $time + (90 * 60); } else { - $earlierTime = strtotime($trips[0]['arrival_time']) - (90 * 60); - $laterTime = strtotime($trips[sizeof($trips) - 1]['arrival_time']) - 60; + $tripsKeys = array_keys($trips); + $earlierTime = strtotime($trips[$tripsKeys[0]]['arrival_time']) - (90 * 60); + $laterTime = strtotime($trips[$tripsKeys[sizeof($trips) - 1]]['arrival_time']) - 60; } -if (sizeof($stopids) > 0) { +if (isset($stopids) && sizeof($stopids) > 0) { $stopidurl = "stopids=" . implode(",", $stopids); } else { $stopidurl = "stopid=$stopid"; } -if (sizeof($trips) > 10) { +if (sizeof($trips) >= 10) { echo 'Later Trips'; } echo 'Earlier Trips'; @@ -133,7 +144,7 @@ echo '
          • '; $destination = getTripDestination($trip['trip_id']); - echo '

            ' . $trip['route_short_name'] . " towards " . $destination['stop_name'] . "

            "; + echo '

            '. $trip['route_short_name'] . " towards " . $destination['stop_name'] . "

            "; $viaPoints = viaPointNames($trip['trip_id'], $trip['stop_sequence']); if ($viaPoints != "") echo '
            Via: ' . $viaPoints . ''; --- a/stopList.php +++ b/stopList.php @@ -36,8 +36,8 @@ navbar(); echo '

              '; if (!isset($firstLetter)) { - foreach (range('A', 'Z') as $letter) { - echo "
            • $letter...
            • \n"; + foreach (range('A', 'Y') as $letter) { // no suburbs start with J, Q, U, V, X or Z + if ($letter != "J" && $letter != "Q" && $letter != "U" && $letter != "V" && $letter != "X") echo "
            • $letter...
            • \n"; } } else { foreach ($suburbs as $suburb) { @@ -86,17 +86,16 @@ navbar(); } echo '
                '; - if (!isset($firstLetter) && !isset($suburb) && !isset($nearby)) { - foreach (range('A', 'Z') as $letter) { - echo "
              • $letter...
              • \n"; + if (!isset($firstLetter) && !isset($suburb) && !isset($nearby)) { // all stops by letter + foreach (range('A', 'Y') as $letter) { // no streets start with X or Z + if ($letter != "X") echo "
              • $letter...
              • \n"; } } else { //var_dump($stops); $stopsGrouped = Array(); foreach ($stops as $key => $stop) { - if (stopCompare($stops[$key]["stop_name"]) - != stopCompare($stops[$key + 1]["stop_name"]) - || $key + 1 >= sizeof($stops)) { + if ($key + 1 >= sizeof($stops) || + stopCompare($stops[$key]["stop_name"]) != stopCompare($stops[$key + 1]["stop_name"])) { if (sizeof($stopsGrouped) > 0) { // print and empty grouped stops // subsequent duplicates --- a/trip.php +++ b/trip.php @@ -17,75 +17,52 @@ */ include ('include/common.inc.php'); $routetrips = Array(); -if (isset($routeids) && !isset($tripid)) { - foreach ($routeids as $routeid) { - $possibleTrip = getRouteNextTrip($routeid); - if (!isset($trip) || strtotime($possibleTrip['departure_time']) < strtotime($trip['departure_time'])) { - $trip = getRouteNextTrip($routeid); - } +if (isset($routeid) && !isset($tripid)) { + $trip = getRouteNextTrip($routeid,$directionid); + + if (!($trip)) { + $trip = getRouteFirstTrip($routeid,$directionid); } $tripid = $trip['trip_id']; } else { $trip = getTrip($tripid); - $similarRoutes = getRoutesByNumber($trip['route_short_name'], $trip['direction_id'], service_period_day($trip["service_id"])); - $routeids = Array(); - foreach ($similarRoutes as $similarRoute) { - $routeids[] = $similarRoute['route_id']; - } - $routeids = array_unique($routeids); + $routeid = $trip['route_id']; } $directionid = $trip['direction_id']; -$service_period = service_period_day($trip["service_id"]); +$service_period = strtolower($trip["service_id"]); $destination = getTripDestination($trip['trip_id']); include_header("Stops on " . $trip['route_short_name'] . ' ' . $destination['stop_name'], "trip"); trackEvent("Route/Trip View", "View Route", $trip['route_short_name'] . ' ' . $destination['stop_name'], $routeid); echo ''; -echo 'View Original Timetable/Map'; +echo 'View Original Timetable/Map '; +echo 'View Trip in Google Earth '; +echo 'View Route in Google Earth'; echo '

                Via:

                ' . viaPointNames($tripid) . ''; echo '

                Other Trips:

                '; -echo "getRoutesTrips(".print_r($routeids,true).", {$trip['direction_id']}, $service_period) $tripid"; -$routeTrips = getRoutesTrips($routeids, $trip['direction_id'], $service_period); +$routeTrips = getRouteTrips($routeid, $trip['direction_id'], $service_period); foreach ($routeTrips as $key => $othertrip) { - // if ($othertrip['trip_id'] != $tripid) { - echo '' . str_replace(" ", ":00", str_replace(":00", " ", $othertrip['arrival_time'])) . ' '; - // } else { - // skip this trip but look forward/back - if ($key - 1 > 0) - $prevTrip = $routeTrips[$key - 1]['trip_id']; - if ($key + 1 < sizeof($routeTrips)) - $nextTrip = $routeTrips[$key + 1]['trip_id']; - // } + // if ($othertrip['trip_id'] != $tripid) { + echo '' . str_replace(" ", ":00", str_replace(":00", " ", $othertrip['arrival_time'])) . ' '; + // } else { + // skip this trip but look forward/back + if ($key - 1 > 0) + $prevTrip = $routeTrips[$key - 1]['trip_id']; + if ($key + 1 < sizeof($routeTrips)) + $nextTrip = $routeTrips[$key + 1]['trip_id']; + // } } flush(); @ob_flush(); echo '

                Other directions/timing periods:

                '; $otherDir = 0; -$filteredRoutes = Array(); -foreach (getRoutesByNumber($trip['route_short_name']) as $row) { - foreach (getRouteHeadsigns($row['route_id']) as $headsign) { - if ( $headsign['direction_id'] != $directionid || service_period_day($headsign['service_id']) != $service_period) { - echo "{$headsign['direction_id']} != $directionid || ".service_period_day($headsign['service_id'])." != $service_period
                "; - $start = $headsign['stop_name']; + foreach (getRouteHeadsigns($routeid) as $headsign) { + if ($headsign['direction_id'] != $directionid || strtolower($headsign['service_id']) != $service_period) { - $serviceday = service_period_day($headsign['service_id']); - $key = $row['route_short_name'] . "." . $headsign['direction_id']; - if (isset($filteredRoutes[$key])) { - $filteredRoutes[$key]['route_ids'][] = $row['route_id']; - $filteredRoutes[$key]['route_ids'] = array_unique($filteredRoutes[$key]['route_ids']); - } else { - $filteredRoutes[$key]['route_short_name'] = $row['route_short_name']; - $filteredRoutes[$key]['route_long_name'] = "Starting at " . $start; - $filteredRoutes[$key]['service_id'] = $serviceday; - $filteredRoutes[$key]['direction_id'] = $headsign['direction_id']; - } + echo ' Starting at ' . $headsign['stop_name'] . ' (' . $headsign['service_id'] . ') '; + $otherDir++; } } -} -foreach ($filteredRoutes as $key => $row) { - echo '' . $row['route_long_name'] . ' (' . ucwords($row['service_id']) . ') '; - $otherDir++; -} if ($otherDir == 0) { echo "None"; @@ -95,14 +72,14 @@ @ob_flush(); echo "
                "; if ($nextTrip) - echo 'Next Trip'; + echo 'Next Trip'; if ($prevTrip) - echo 'Previous Trip'; + echo 'Previous Trip'; echo "
                "; echo '
                  '; $stopsGrouped = Array(); $tripStopTimes = getTripStopTimes($tripid); -echo '
                • ' . $tripStopTimes[0]['arrival_time'] . ' to ' . $tripStopTimes[sizeof($tripStopTimes) - 1]['arrival_time'] . ' towards ' . $destination['stop_name'] . ' (' . ucwords(service_period_day($tripStopTimes[0]['service_id'])) . ')
                • '; +echo '
                • ' . $tripStopTimes[0]['arrival_time'] . ' to ' . $tripStopTimes[sizeof($tripStopTimes) - 1]['arrival_time'] . ' towards ' . $destination['stop_name'] . ' (' . ucwords(strtolower($tripStopTimes[0]['service_id'])) . ')
                • '; foreach ($tripStopTimes as $key => $tripStopTime) { if ($key + 1 > sizeof($tripStopTimes) || stopCompare($tripStopTimes[$key]["stop_name"]) != stopCompare($tripStopTimes[$key + 1]["stop_name"])) { echo '
                • '; --- a/tripPlanner.php +++ b/tripPlanner.php @@ -182,7 +182,99 @@ curl_close($ch); } } else { + $overrides = getServiceOverride(); + if (isset($overrides['service_id'])) { + echo "Sorry, due to the modified timetable, this trip planner won't work correctly today. Instead, use the Google Maps one below:"; + echo ' + + +
                  + + + + + + + +
                  Link to Google Transit Trip Planner 
                  + Transit Trip Planner
                  Start (e.g. + )
                  + +

                  End (e.g. + ) +
                  + +
                  + + + + + + + + + +
                  DateTime
                  +Plan by: + +
                  + +
                  +
                  + + +'; + } else { tripPlanForm(); + } } include_footer(); ?> --- a/updatedb.php +++ b/updatedb.php @@ -17,7 +17,6 @@ */ if (php_sapi_name() == "cli") { include ('include/common.inc.php'); - $conn = pg_connect("dbname=transitdata user=postgres password=snmc host=localhost") or die('connection failed'); $pdconn = new PDO("pgsql:dbname=transitdata;user=postgres;password=snmc;host=localhost"); /* @@ -34,7 +33,7 @@ // Unzip cbrfeed.zip, import all csv files to database $unzip = false; $zip = zip_open(dirname(__FILE__) . "/cbrfeed.zip"); - $tmpdir = "c:/tmp/"; + $tmpdir = "c:/tmp/cbrfeed/"; mkdir($tmpdir); if ($unzip) { if (is_resource($zip)) { @@ -53,6 +52,7 @@ } foreach (scandir($tmpdir) as $file) { + $headers = Array(); if (!strpos($file, ".txt") === false) { $fieldseparator = ","; $lineseparator = "\n"; @@ -60,33 +60,50 @@ echo "Opening $file \n"; $line = 0; $handle = fopen($tmpdir . $file, "r"); - if ($tablename == "stop_times") { - $stmt = $pdconn->prepare("insert into stop_times (trip_id,stop_id,stop_sequence,arrival_time,departure_time) values(:trip_id, :stop_id, :stop_sequence,:arrival_time,:departure_time);"); - $stmt->bindParam(':trip_id', $trip_id); - $stmt->bindParam(':stop_id', $stop_id); - $stmt->bindParam(':stop_sequence', $stop_sequence); - $stmt->bindParam(':arrival_time', $time); - $stmt->bindParam(':departure_time', $time); - } $distance = 0; $lastshape = 0; $lastlat = 0; $lastlon = 0; + $stmt = null; while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { if ($line == 0) { - - } else { - $query = "insert into $tablename values("; + $headers = array_values($data); + if ($tablename == "stops") { + $headers[] = "position"; + } + if ($tablename == "shapes") { + $headers[] = "shape_pt"; + } + $query = "insert into $tablename ("; + $valueCount = 0; + foreach ($headers as $value) { + $query.=($valueCount > 0 ? "," : "") . pg_escape_string($value); + $valueCount++; + } + $query.= ") values( "; $valueCount = 0; foreach ($data as $value) { - $query.=($valueCount > 0 ? "','" : "'") . pg_escape_string($value); + $query.=($valueCount > 0 ? "," : "") . '?'; $valueCount++; } + if ($tablename == "stops") { + $query.= ", ST_GeographyFromText(?));"; + } else if ($tablename == "shapes") { + $query.= ", ST_GeographyFromText(?));"; + } else { + $query.= ");"; + } + echo $query; + $stmt = $pdconn->prepare($query); + } else { + $values = array_values($data); if ($tablename == "stops") { - $query.= "', ST_GeographyFromText('SRID=4326;POINT({$data[2]} {$data[0]})'));"; - } else if ($tablename == "shapes") { + // Coordinate values are out of range [-180 -90, 180 90] + $values[] = 'SRID=4326;POINT('.$values[5].' '.$values[4].')'; + } + if ($tablename == "shapes") { if ($data[0] != $lastshape) { $distance = 0; $lastshape = $data[0]; @@ -95,28 +112,26 @@ } $lastlat = $data[1]; $lastlon = $data[2]; - $query.= "', $distance, ST_GeographyFromText('SRID=4326;POINT({$data[2]} {$data[1]})'));"; - } else { - $query.= "');"; + + $values[4] = $distance; + $values[] = 'SRID=4326;POINT('.$values[2].' '.$values[1].')'; } - if ($tablename == "stop_times") { - // $query = "insert into $tablename (trip_id,stop_id,stop_sequence) values('{$data[0]}','{$data[3]}','{$data[4]}');"; - $trip_id = $data[0]; - $stop_id = $data[3]; - $stop_sequence = $data[4]; - $time = ($data[1] == "" ? null : $data[1]); +if (substr($values[1],0,2) == '24') $values[1] = "23:59:59"; +if (substr($values[2],0,2) == '24') $values[2] = "23:59:59"; + $stmt->execute($values); + $err = $pdconn->errorInfo(); + if ($err[2] != "" && strpos($err[2], "duplicate key") === false) { + print_r($values); + print_r($err); + die("terminated import due to db error above"); } - } - if ($tablename == "stop_times") { - $stmt->execute(); - } else { - $result = pg_query($conn, $query); } $line++; if ($line % 10000 == 0) echo "$line records... " . date('c') . "\n"; } fclose($handle); + $stmt->closeCursor(); echo "Found a total of $line records in $file.\n"; } }