From: Maxious Date: Sat, 26 Nov 2011 10:39:31 +0000 Subject: Try to adapt to new route destination detection X-Git-Url: https://maxious.lambdacomplex.org/git/?p=busui.git&a=commitdiff&h=546427e54c1b49ee1cddb74afc378aa5c41eaa26 --- Try to adapt to new route destination detection --- --- a/geo/route.kml.php +++ b/geo/route.kml.php @@ -21,8 +21,8 @@ echo ''.$route['route_short_name']." ".$route['route_long_name']."]]> "; echo "#yellowLineGreenPoly"; - $trips = getRouteTrips($routeid); - echo getTripShape($trips[0]['trip_id']); + $trip = getRouteNextTrip($routeid); + echo getTripShape($trip['trip_id']); echo "\n\n"; ?> --- a/include/common-db.inc.php +++ b/include/common-db.inc.php @@ -27,7 +27,9 @@ } function databaseError($errMsg) { - die($errMsg); + if ($errMsg[1] != "") { + die(print_r($errMsg,true)); + } } include ('db/route-dao.inc.php'); --- a/include/common-request.inc.php +++ b/include/common-request.inc.php @@ -57,15 +57,15 @@ 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['stopid'])) { $stopid = filter_var($_REQUEST['stopid'], FILTER_SANITIZE_NUMBER_INT); } -if (isset($_REQUEST['routeid'])) { - $routeid = filter_var($_REQUEST['routeid'], FILTER_SANITIZE_NUMBER_INT); -} if (isset($_REQUEST['geolocate'])) { $geolocate = filter_var($_REQUEST['geolocate'], FILTER_SANITIZE_URL); } --- a/include/common-transit.inc.php +++ b/include/common-transit.inc.php @@ -20,15 +20,17 @@ 'saturday', 'weekday' ); - +function service_period_day ($spid) { + $idParts = explode("-",$spid); + return strtolower($idParts[2]); +} function service_period($date = "") { if (isset($_SESSION['service_period'])) return $_SESSION['service_period']; $override = getServiceOverride($date); if ($override['service_id']) { - $idParts = explode("-",$override['service_id']); - return strtolower($idParts[2]); + return service_period_day ($override['service_id']); } switch (date('w', ($date != "" ? $date : time()))) { @@ -50,6 +52,9 @@ //return 'weekday'; return Array("2010-BELCMAST-Weekday-15","2010-TUGGMAST-Weekday-14"); } +} +function valid_service_ids() { + 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 @@ -29,6 +29,7 @@ } return $query->fetch(PDO :: FETCH_ASSOC); } + function getRoutesByShortName($routeShortName) { global $conn; $query = "Select distinct route_id, route_short_name from routes where route_short_name = :routeShortName"; @@ -45,8 +46,11 @@ function getRouteHeadsigns($routeID) { global $conn; - $query = "select distinct stops.stop_name, trip_headsign,direction_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 stop_times.stop_id = stops.stop_id where trips.route_id = :routeID and stop_times.stop_sequence = 1"; + $query = "select stops.stop_name, direction_id,max(service_id) as service_id, count(*) + 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 +stop_times.stop_id = stops.stop_id where trips.route_id = :routeID +and stop_times.stop_sequence = 1 group by stops.stop_name, direction_id having count(*) > 2"; debug($query, "database"); $query = $conn->prepare($query); $query->bindParam(":routeID", $routeID); @@ -55,9 +59,14 @@ databaseError($conn->errorInfo()); return Array(); } -return $query->fetchAll(); -} - + return $query->fetchAll(); +} +function getRouteDescription($routeID) { + $trip = getRouteNextTrip($routeID); + $start = getTripStartingPoint($trip['trip_id']); + $end = getTripDestination($trip['trip_id']); + return "From ".$start['stop_name']." to ".$end['stop_name']; +} function getRouteByFullName($routeFullName) { global $conn; $query = "Select * from routes where route_short_name||route_long_name = :routeFullName LIMIT 1"; @@ -85,7 +94,7 @@ return $query->fetchAll(); } -function getRoutesByNumber($routeNumber = "") { +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 = @@ -134,15 +143,16 @@ 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 + + $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 arrival_time limit 1"; debug($query, "database"); $query = $conn->prepare($query); $query->bindParam(":currentTime", current_time()); $query->bindParam(":routeID", $routeID); $query->execute(); + databaseError($conn->errorInfo()); if (!$query) { databaseError($conn->errorInfo()); return Array(); @@ -179,40 +189,61 @@ 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 -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 = "") { +function getRoutesTrips($routeIDs, $directionID = "", $service_period = "") { global $conn; if ($service_period == "") $service_period = service_period(); + $service_ids = service_ids($service_period); + $sidA = $service_ids[0]; + $sidB = $service_ids[1]; + $directionSQL = ""; + if ($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 +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 +arrival_time "; + debug($query, "database"); + $query = $conn->prepare($query); + $query->bindParam(":routeIDA", $routeIDs[0]); + $query->bindParam(":routeIDB", $routeIDs[1]); + $query->bindParam(":service_periodA", $sidA); + $query->bindParam(":service_periodB", $sidB); + if ($directionSQL != "") + $query->bindParam(":directionID", $directionID); + $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(); + $service_ids = service_ids($service_period); + $sidA = $service_ids[0]; + $sidB = $service_ids[1]; 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"; +WHERE route_long_name = :destination AND (service_id=:service_periodA OR service_id=:service_periodB) + order by route_short_name"; } 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); +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); if ($destination != "") $query->bindParam(":destination", $destination); $query->execute(); @@ -226,14 +257,20 @@ function getRoutesBySuburb($suburb, $service_period = "") { if ($service_period == "") $service_period = service_period(); + $service_ids = service_ids($service_period); + $sidA = $service_ids[0]; + $sidB = $service_ids[1]; 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); +WHERE zone_id LIKE ':suburb AND (service_id=:service_periodA OR service_id=:service_periodB) + ORDER BY route_short_name"; + debug($query, "database"); + $query = $conn->prepare($query); + $query->bindParam(":service_periodA", $sidA); + $query->bindParam(":service_periodB", $sidB); $query->bindParam(":service_period", $service_period); $suburb = "%" . $suburb . ";%"; $query->bindParam(":suburb", $suburb); @@ -248,7 +285,7 @@ function getRoutesNearby($lat, $lng, $limit = "", $distance = 500) { 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]; if ($limit != "") --- a/include/db/stop-dao.inc.php +++ b/include/db/stop-dao.inc.php @@ -176,7 +176,7 @@ 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,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,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 --- a/include/db/trip-dao.inc.php +++ b/include/db/trip-dao.inc.php @@ -133,6 +133,22 @@ $r = $query->fetch(PDO :: FETCH_ASSOC); return $r['arrival_time']; } +function getTripStartingPoint($tripID) { + global $conn; + $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 + WHERE trip_id = :tripID and stop_sequence = '1' limit 1"; + debug($query, "database"); + $query = $conn->prepare($query); + $query->bindParam(":tripID", $tripID); + $query->execute(); + if (!$query) { + databaseError($conn->errorInfo()); + return Array(); + } + $r = $query->fetch(PDO :: FETCH_ASSOC); + return $r; +} function getTripDestination($tripID) { global $conn; --- a/routeList.php +++ b/routeList.php @@ -119,8 +119,28 @@ } else if ($numberSeries) { $routes = getRoutesByNumberSeries($numberSeries); + $filteredRoutes = Array(); foreach ($routes as $route) { - echo '
  • ' . $route['route_short_name'] . "

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

  • \n"; + 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]['direction_id'] = $headsign['direction_id']; + } + } + } + foreach ($filteredRoutes as $key => $route) { + echo '
  • ' . $route['route_short_name'] . "

    + +

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

    +
  • \n"; } } } else { --- a/stop.php +++ b/stop.php @@ -135,7 +135,7 @@ echo '
  • '; $destination = getTripDestination($trip['trip_id']); - echo '

    ' . $trip['route_short_name'] . " " . $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/trip.php +++ b/trip.php @@ -17,58 +17,92 @@ */ include ('include/common.inc.php'); $routetrips = Array(); -if (isset($routeid) && !isset($tripid)) { - $trip = getRouteNextTrip($routeid); +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); + } + } $tripid = $trip['trip_id']; } else { $trip = getTrip($tripid); - $routeid = $trip["route_id"]; + $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); } - - $destination = getTripDestination($trip['trip_id']); +$directionid = $trip['direction_id']; +$service_period = service_period_day($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 '

    Via:

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

    Other Trips:

    '; -$routeTrips = getRouteTrips($routeid); +echo "getRoutesTrips(".print_r($routeids,true).", {$trip['direction_id']}, $service_period) $tripid"; +$routeTrips = getRoutesTrips($routeids, $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 { + // 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) { - if ($row['route_id'] != $routeid) { - echo '' . $row['route_long_name'] . ' (' . ucwords($row['service_id']) . ') '; - $otherDir++; + + 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']; + + $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']; + } + } } } -if ($otherDir == 0) +foreach ($filteredRoutes as $key => $row) { + echo '' . $row['route_long_name'] . ' (' . ucwords($row['service_id']) . ') '; + $otherDir++; +} + +if ($otherDir == 0) { echo "None"; +} echo ''; flush(); @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'] . ' ' . $destination['stop_name'] . ' (' . ucwords($tripStopTimes[0]['service_id']) . ')
    • '; +echo '
    • ' . $tripStopTimes[0]['arrival_time'] . ' to ' . $tripStopTimes[sizeof($tripStopTimes) - 1]['arrival_time'] . ' towards ' . $destination['stop_name'] . ' (' . ucwords(service_period_day($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 '
    • '; @@ -84,8 +118,8 @@ echo '
      ' . distance($tripStopTime['stop_lat'], $tripStopTime['stop_lon'], $_SESSION['lat'], $_SESSION['lon'], true) . 'm away'; } echo '

      '; - echo stopGroupTitle($tripStopTime['stop_name'],$tripStopTime['stop_desc']) . '
      ' . sizeof($stopsGrouped["stop_ids"]) . ' stops'; - + echo stopGroupTitle($tripStopTime['stop_name'], $tripStopTime['stop_desc']) . '
      ' . sizeof($stopsGrouped["stop_ids"]) . ' stops'; + echo '
    • '; flush(); @ob_flush();