Fix service alert display and include stop/route filters
--- a/about.php
+++ b/about.php
@@ -34,8 +34,9 @@
<br />
Some icons by Joseph Wain / glyphish.com<br />
Native clients also available for iPhone(<a href="http://itunes.apple.com/au/app/cbrtimetable/id444287349?mt=8">cbrTimetable by Sandor Kolotenko</a>
- , <a href="http://itunes.apple.com/au/app/act-buses/id376634797?mt=8">ACT Buses by David Sullivan</a>)
- , Android (<a href="https://market.android.com/details?id=com.action">MyBus 2.0 by Imagine Team</a>)
+ , <a href="http://itunes.apple.com/au/app/act-buses/id376634797?mt=8">ACT Buses by David Sullivan</a>, <a href="http://itunes.apple.com/app/bus-trips-act/id489146525?mt=8">Bus Trips ACT by Molson Chengalath</a>)
+ , Android (<a href="https://market.android.com/details?id=com.action">MyBus 2.0 by Imagine Team</a>, <A href="https://market.android.com/details?id=GetMe2CanberraFree.source">GetMe2 Canberra by
+Colin Thompson </a>)
and Windows Phone 7 (<a href="http://www.windowsphone.com/en-AU/apps/d840375e-429c-4aa4-a358-80eec6ea9e66">TransHub Canberra by Soul Solutions</a>) Other web clients include <a href="http://canberra.itranzit.com/option.html">iTranzit</a>.
<br />
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,30 +1,105 @@
<?php
header('Content-Type: application/vnd.google-earth.kml+xml');
include ('../include/common.inc.php');
+header('Content-Disposition: attachment; filename="route.' . urlencode($routeid) . '.kml"');
+$debugOkay = Array(); // disable debugging output even on dev server
echo '<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom"><Document>';
echo '
- <Style id="yellowLineGreenPoly">
+ <Style id="ylw-pushpin">
+ <IconStyle>
+ <Icon>
+ <href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
+
+ </Icon>
+ </IconStyle>
+
+ </Style>
+ <Style id="blue-pushpin">
+ <IconStyle>
+ <Icon>
+ <href>http://maps.google.com/mapfiles/kml/pushpin/blue-pushpin.png</href>
+
+ </Icon>
+ </IconStyle>
+
+ </Style>
+ <Style id="grn-pushpin">
+ <IconStyle>
+ <Icon>
+ <href>http://maps.google.com/mapfiles/kml/pushpin/grn-pushpin.png</href>
+
+ </Icon>
+ </IconStyle>
+ </Style>
+ <Style id="yellowLineYellowPoly">
<LineStyle>
- <color>7f00ff00</color>
+ <color>7f00ebff</color>
<width>4</width>
</LineStyle>
<PolyStyle>
- <color>7f00ffff</color>
+ <color>7f00ebff</color>
</PolyStyle>
- </Style>';
+ </Style>
+ <Style id="blueLineBluePoly">
+ <LineStyle>
+ <color>7fff0000</color>
+ <width>4</width>
+ </LineStyle>
+ <PolyStyle>
+ <color>7fff0000</color>
+ </PolyStyle>
+ </Style>
+ ';
$route = getRoute($routeid);
- echo "\n<Placemark>\n";
- $link = curPageURL()."/../trip.php?routeid=".htmlspecialchars ($route["route_id"]);
- echo "<name>".$route['route_short_name']."</name>";
- echo '<atom:link href="'.$link.'"/>';
- echo '<description><![CDATA[ <a href="'.$link.'">'.$route['route_short_name']." ".$route['route_long_name']."</a>]]> </description>";
-echo "<styleUrl>#yellowLineGreenPoly</styleUrl>";
+echo "\n<Placemark>\n";
+$_REQUEST['time'] = "12:00";
+$trip = getRouteNextTrip($routeid, 0);
+$link = curPageURL() . "/../trip.php?routeid=" . htmlspecialchars($route["route_id"]. "&directionid=0&tripid=".$trip['trip_id']) ;
+echo "<name>" . $route['route_short_name'] . " Direction 0 </name>";
+echo '<atom:link rel="related" href="' . $link . '"/>';
+echo '<description><![CDATA[ <a href="' . $link . '">' . $route['route_short_name'] . " Direction 0</a>]]> </description>";
+echo "<styleUrl>#yellowLineYellowPoly</styleUrl>";
- $trip = getRouteNextTrip($routeid);
- echo getTripShape($trip['trip_id']);
+echo getTripShape($trip['trip_id']);
+ echo "</Placemark>\n";
+$stops = Array();
+foreach (getTripStops($trip['trip_id']) as $stop) {
+ $stop['style'] = "#ylw-pushpin";
+ $stops[$stop['stop_id']] = $stop;
+}
-echo "</Placemark>\n</Document></kml>\n";
+
+echo "\n<Placemark>\n";
+$trip = getRouteNextTrip($routeid, 1);
+$link = curPageURL() . "/../trip.php?routeid=" . htmlspecialchars($route["route_id"]. "&directionid=1&tripid=".$trip['trip_id']) ;
+echo "<name>" . $route['route_short_name'] . " Direction 1 </name>";
+echo '<atom:link rel="related" href="' . $link . '"/>';
+echo '<description><![CDATA[ <a href="' . $link . '">' . $route['route_short_name'] . " Direction 1</a>]]> </description>";
+echo "<styleUrl>#blueLineBluePoly</styleUrl>";
+
+echo getTripShape($trip['trip_id']);
+ echo "</Placemark>\n";
+foreach (getTripStops($trip['trip_id']) as $stop) {
+ if (isset($stops[$stop['stop_id']])) {
+ $stop['style'] = "#grn-pushpin";
+ } else {
+ $stop['style'] = "#blue-pushpin";
+ }
+ $stops[$stop['stop_id']] = $stop;
+}
+foreach ($stops as $stop) {
+ echo "\n<Placemark>\n";
+ $link = curPageURL() . '/../stop.php?stopid=' . htmlspecialchars($stop['stop_id']);
+ echo "<name>" . htmlspecialchars($stop['stop_name']) . "</name>";
+ echo '<atom:link rel="related" href="' . $link . '"/>';
+ echo '<description><![CDATA[ <a href="' . $link . '">' . htmlspecialchars($stop['stop_name']) . "</a>]]> </description>";
+ echo "<styleUrl>" . $stop['style'] . "</styleUrl>";
+ echo $stop['positionkml'];
+ echo "</Placemark>\n";
+}
+
+echo "</Document></kml>\n";
?>
--- a/geo/stops.kml.php
+++ b/geo/stops.kml.php
@@ -1,11 +1,13 @@
<?php
+header('Content-type: application/vnd.google-earth.kml+xml');
include ('../include/common.inc.php');
-header('Content-type: application/vnd.google-earth.kml+xml');
+header('Content-Disposition: attachment; filename="stops.kml"');
+$debugOkay = Array(); // disable debugging output even on dev server
//http://wiki.openstreetmap.org/wiki/OpenLayers_Dynamic_KML
// Creates the KML/XML Document.
$dom = new DOMDocument('1.0', 'UTF-8');
// Creates the root KML element and appends it to the root document.
-$node = $dom->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 +15,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'] . " <br>";
+ $description = '<a href="'.curPageURL() . '/../stop.php?stopid=' . $stop['stop_id'] . '">View stop page</a><br>';
// 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,70 @@
+<?php
+header('Content-Type: application/vnd.google-earth.kml+xml');
+include ('../include/common.inc.php');
+header('Content-Disposition: attachment; filename="trip.' . urlencode($tripid) . '.kml"');
+$debugOkay = Array(); // disable debugging output even on dev server
+echo '<?xml version="1.0" encoding="UTF-8"?>
+<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom"><Document>';
+echo '
+ <Style id="ylw-pushpin">
+ <IconStyle>
+ <Icon>
+ <href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
+
+ </Icon>
+ </IconStyle>
+
+ </Style>
+ <Style id="blue-pushpin">
+ <IconStyle>
+ <Icon>
+ <href>http://maps.google.com/mapfiles/kml/pushpin/blue-pushpin.png</href>
+
+ </Icon>
+ </IconStyle>
+
+ </Style>
+ <Style id="grn-pushpin">
+ <IconStyle>
+ <Icon>
+ <href>http://maps.google.com/mapfiles/kml/pushpin/grn-pushpin.png</href>
+
+ </Icon>
+ </IconStyle>
+ </Style>
+ <Style id="yellowLineGreenPoly">
+ <LineStyle>
+ <color>7f00ff00</color>
+ <width>4</width>
+ </LineStyle>
+ <PolyStyle>
+ <color>7f00ffff</color>
+ </PolyStyle>
+ </Style>';
+$trip = getTrip($tripid);
+echo "\n<Placemark>\n";
+$link = curPageURL() . "/../trip.php?tripid=" . htmlspecialchars($$tripid);
+echo "<name>" . $tripid . "</name>";
+echo '<atom:link rel="related" href="' . $link . '"/>';
+echo '<description><![CDATA[ <a href="' . $link . '">' . $tripid . "</a>]]> </description>";
+echo "<styleUrl>#yellowLineGreenPoly</styleUrl>";
+
+echo getTripShape($tripid);
+
+echo "</Placemark>\n";
+foreach (getTripStopTimes($tripid) as $stop) {
+ echo "\n<Placemark>\n";
+ $link = curPageURL() . '/../trip.php?tripid=' . htmlspecialchars($tripid);
+ echo "<name>" . $stop['arrival_time'] . " @ " . htmlspecialchars($stop['stop_name']) . "</name>";
+ echo '<atom:link rel="related" href="' . $link . '"/>';
+ echo '<description><![CDATA[ <a href="' . $link . '">' . htmlspecialchars($stop['stop_name']) . "</a>]]> </description>";
+ echo "<styleUrl>#blue-pushpin</styleUrl>";
+ echo "<Point><coordinates>" . $stop['stop_lon'] . "," . $stop['stop_lat'] . "</coordinates></Point>";
+
+ echo "</Placemark>\n";
+}
+echo "</Document></kml>\n";
+?>
+
+
--- a/include/common-auth.inc.php
+++ b/include/common-auth.inc.php
@@ -30,4 +30,4 @@
login();
}
}
-?>
+
--- a/include/common-db.inc.php
+++ b/include/common-db.inc.php
@@ -36,5 +36,4 @@
include ('db/trip-dao.inc.php');
include ('db/stop-dao.inc.php');
include ('db/servicealert-dao.inc.php');
-?>
--- a/include/common-geo.inc.php
+++ b/include/common-geo.inc.php
@@ -168,5 +168,3 @@
return $contents->features[0]->properties->name;
}
-?>
-
--- a/include/common-net.inc.php
+++ b/include/common-net.inc.php
@@ -35,7 +35,6 @@
debug(print_r($page, true), "json");
return $page;
}
-
function curPageURL() {
$isHTTPS = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on");
$port = (isset($_SERVER["SERVER_PORT"]) && ((!$isHTTPS && $_SERVER["SERVER_PORT"] != "80") || ($isHTTPS && $_SERVER["SERVER_PORT"] != "443")));
@@ -44,5 +43,4 @@
return $url;
}
-?>
--- a/include/common-request.inc.php
+++ b/include/common-request.inc.php
@@ -57,11 +57,20 @@
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['filterIncludeRoutes'])) {
+ $filterIncludeRoutes = explode(",", filter_var($_REQUEST['filterIncludeRoutes'], FILTER_SANITIZE_STRING));
+}
+if (isset($_REQUEST['filterHasStop'])) {
+ $filterHasStop = filter_var($_REQUEST['filterHasStop'], 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);
@@ -69,4 +78,4 @@
if (isset($_REQUEST['geolocate'])) {
$geolocate = filter_var($_REQUEST['geolocate'], FILTER_SANITIZE_URL);
}
-?>
+
--- a/include/common-session.inc.php
+++ b/include/common-session.inc.php
@@ -61,9 +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
@@ -42,7 +42,7 @@
}
function include_header($pageTitle, $pageType, $opendiv = true, $geolocate = false, $datepicker = false) {
- global $basePath, $GTFSREnabled;
+ global $basePath, $GTFSREnabled, $stopid, $routeid;
echo '
<!DOCTYPE html>
<html lang="en">
@@ -54,19 +54,18 @@
<link rel="dns-prefetch" href="//code.jquery.com">
<link rel="dns-prefetch" href="//ajax.googleapis.com">
<link rel="stylesheet" href="' . $basePath . 'css/jquery-ui-1.8.12.custom.css" />';
- $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";
$jqmjs = $basePath . "js/jquery.mobile-$jqmVersion.js";
-
+
$jqmcss = $basePath . "css/jquery.mobile-b90eab4935.css";
$jqmjs = $basePath . "js/jquery.mobile-b90eab4935.js";
} else {
$jqmcss = "//code.jquery.com/mobile/$jqmVersion/jquery.mobile-$jqmVersion.min.css";
$jqjs = "//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js";
$jqmjs = "//code.jquery.com/mobile/$jqmVersion/jquery.mobile-$jqmVersion.min.js";
-
}
echo '<link rel="stylesheet" href="' . $jqmcss . '" />
<script src="' . $jqjs . '"></script>
@@ -108,7 +107,7 @@
}';
echo '</style>';
echo '<link rel="stylesheet" href="' . $basePath . 'css/local.css.php" />';
- if (isIOSDevice()){
+ if (isIOSDevice()) {
echo '<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<link rel="apple-touch-startup-image" href="startup.png" />
@@ -174,19 +173,38 @@
<a name="maincontent" id="maincontent"></a>
<div data-role="content"> ';
if ($GTFSREnabled) {
- $overrides = getServiceOverride();
- if (isset($overrides['service_id'])) {
- if ($overrides['service_id'] == "noservice") {
- echo '<div id="servicewarning">Buses are <strong>not running today</strong> due to industrial action/public holiday. See <a
+ $overrides = getServiceOverride();
+ if (isset($overrides['service_id'])) {
+ if ($overrides['service_id'] == "noservice") {
+ echo '<div id="servicewarning">Buses are <strong>not running today</strong> due to industrial action/public holiday. See <a
href="http://www.action.act.gov.au">http://www.action.act.gov.au</a> for details.</div>';
- } else {
- echo '<div id="servicewarning">Buses are running on an altered timetable today due to industrial action/public holiday. See <a href="http://www.action.act.gov.au">http://www.action.act.gov.au</a> for details.</div>';
- }
- }
- $serviceAlerts = getServiceAlertsAsArray("agency", "0");
+ } else {
+ echo '<div id="servicewarning">Buses are running on an altered timetable today due to industrial action/public holiday. See <a href="http://www.action.act.gov.au">http://www.action.act.gov.au</a> for details.</div>';
+ }
+ }
+ $serviceAlerts = Array();
+ $globalAlerts = getServiceAlertsAsArray("agency", "0");
+ if ($globalAlerts != nullarray) {
+ $serviceAlerts = array_merge($serviceAlerts, $globalAlerts);
+ }
+ if (isset($stopid)) {
+ $stopAlerts = getServiceAlertsAsArray("stop", $stopid);
+ if ($stopAlerts != nullarray) {
+ $serviceAlerts = array_merge($serviceAlerts, $stopAlerts);
+ }
+ }
+ if (isset($routeid)) {
+ $routeAlerts = getServiceAlertsAsArray("route", $routeid);
+ if ($routeAlerts != nullarray) {
+ $serviceAlerts = array_merge($serviceAlerts, $routeAlerts);
+ }
+ }
if (isset($serviceAlerts['entity']) && sizeof($serviceAlerts['entity']) > 0) {
foreach ($serviceAlerts['entity'] as $entity) {
- echo "<div id='servicewarning'>" . date("F j, g:i a", strtotime($entity['alert']['active_period'][0]['start'])) . " to " . date("F j, g:i a", strtotime($entity['alert']['active_period'][0]['end'])) . "{$entity['alert']['header_text']['translation'][0]['text']}<br>Warning: {$entity['alert']['description_text']['translation'][0]['text']}
+ echo "<div id='servicewarning'><b>{$entity['alert']['header_text']['translation'][0]['text']}</b> <small>"
+ . date("F jS Y, g:i a", $entity['alert']['active_period'][0]['start']) . " to "
+ . date("F jS Y, g:i a", $entity['alert']['active_period'][0]['end']) . "</small>
+ <br>Warning: {$entity['alert']['description_text']['translation'][0]['text']}
<br><a href='{$entity['alert']['url']['translation'][0]['text']}'>Source</a> </div>";
}
}
@@ -212,9 +230,10 @@
}
echo "\n</div></div></body></html>";
}
+
function timeSettings() {
global $service_periods;
-echo '<div id="settings" data-role="collapsible" data-collapsed="true">
+ echo '<div id="settings" data-role="collapsible" data-collapsed="true">
<h3>Change Time (' . (isset($_REQUEST['time']) ? $_REQUEST['time'] : "Current Time,") . ' ' . ucwords(service_period()) . ')...</h3>
<form action="' . basename($_SERVER['PHP_SELF']) . '" method="GET">
<input type="hidden" name="suburb" id="suburb" value="' . (isset($_REQUEST['suburb']) ? $_REQUEST['suburb'] : "") . '"/>
@@ -230,10 +249,10 @@
<div data-role="fieldcontain">
<label for="service_period"> Service Period: </label>
<select name="service_period" id="service_period">';
-foreach ($service_periods as $service_period) {
- echo "<option value=\"$service_period\"" . (service_period() === $service_period ? " SELECTED" : "") . '>' . ucwords($service_period) . '</option>';
-}
-echo '</select>
+ foreach ($service_periods as $service_period) {
+ echo "<option value=\"$service_period\"" . (service_period() === $service_period ? " SELECTED" : "") . '>' . ucwords($service_period) . '</option>';
+ }
+ echo '</select>
<a href="#" style="display:none" name="currentPeriod" id="currentPeriod">Current Period?</a>
</div>
@@ -241,8 +260,9 @@
</div></form>
</div>';
}
+
function placeSettings() {
-
+
$geoerror = false;
$geoerror = !isset($_SESSION['lat']) || !isset($_SESSION['lat']) || $_SESSION['lat'] == "" || $_SESSION['lon'] == "";
@@ -275,14 +295,15 @@
//stop list collapsing
function stopCompare($stopName) {
- return substr(trim(preg_replace("/\(Platform.*/", "", $stopName)),0,9);
-}
-function stopGroupTitle($stopName,$stopdesc) {
- if (preg_match("/Dr |Cct |Cir |Av |St |Cr |Parade |Way |Bank /",$stopName)) {
- $descParts = explode("<br>",$stopdesc);
- return trim(str_replace("Street: ","",$descParts[0]));
+ return substr(trim(preg_replace("/\(Platform.*/", "", $stopName)), 0, 9);
+}
+
+function stopGroupTitle($stopName, $stopdesc) {
+ if (preg_match("/Dr |Cct |Cir |Av |St |Cr |Parade |Way |Bank /", $stopName)) {
+ $descParts = explode("<br>", $stopdesc);
+ return trim(str_replace("Street: ", "", $descParts[0]));
} else {
- return trim(preg_replace("/\(Platform.*/", "",$stopName));
+ return trim(preg_replace("/\(Platform.*/", "", $stopName));
}
}
@@ -304,5 +325,4 @@
return "";
}
}
-?>
-
+
--- a/include/common-transit.inc.php
+++ b/include/common-transit.inc.php
@@ -18,8 +18,7 @@
$service_periods = Array(
'sunday',
'saturday',
- 'weekday',
- "Christmas2011","EndOfYearHolidays"
+ 'weekday'
);
function service_period($date = "") {
@@ -33,48 +32,39 @@
return strtolower($override['service_id']);
}
$date = ($date != "" ? $date : time());
-// christmas special cases
- $ymd = date('Ymd', $date);
$dow = date('w', $date);
- if ($ymd == "20111225") {
- return "Christmas2011";
- } if ($ymd == "20111228" || $ymd == "20111229" || $ymd == "20111230") {
- return "EndOfYearHolidays";
- } else if (intval($ymd) < "20120203" && $dow != 0 && $dow != 6) {
- return "Weekday-SchoolVacation";
- } else {
- switch ($dow) {
- case 0:
- return 'sunday';
- case 6:
- return 'saturday';
- default:
- return 'weekday';
- }
- }
-}
-
-function service_ids($service_period) {
+
+ switch ($dow) {
+ case 0:
+ return 'sunday';
+ case 6:
+ return 'saturday';
+ default:
+ return 'weekday';
+ }
+}
+
+function service_ids($service_period, $date = "") {
switch ($service_period) {
case 'sunday':
return Array("Sunday", "Sunday");
case 'saturday':
return Array("Saturday", "Saturday");
- case "Christmas2011":
- return Array("Christmas2011", "Christmas2011");
- case "EndOfYearHolidays":
- return Array("Weekday-EndOfYearHolidays", "Weekday-EndOfYearHolidays");
- case "Weekday-SchoolVacation":
- return Array("Weekday", "Weekday-SchoolVacation");
default:
- //return 'weekday';
- return Array("Weekday", "Weekday");
+ $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'),
- Array("Christmas2011","Weekday-EndOfYearHolidays","Weekday-SchoolVacation"));
+ return array_merge(service_ids(""), service_ids('saturday'), service_ids('sunday'));
}
function midnight_seconds($time = "") {
@@ -159,69 +149,96 @@
street inform: route inform, trip inform, stop inform
route patch: trip remove
*/
- $fm = new transit_realtime\FeedMessage();
- $fh = new transit_realtime\FeedHeader();
- $fh->setGtfsRealtimeVersion(1);
- $fh->setTimestamp(time());
- $fm->setHeader($fh);
- foreach (getCurrentAlerts() as $alert) {
- $fe = new transit_realtime\FeedEntity();
- $fe->setId($alert['id']);
- $fe->setIsDeleted(false);
- $alert = new transit_realtime\Alert();
- $tr = new transit_realtime\TimeRange();
- $tr->setStart($alert['start']);
- $tr->setEnd($alert['end']);
- $alert->addActivePeriod($tr);
- $informedEntities = getInformedAlerts($alert['id'], $_REQUEST['filter_class'], $_REQUEST['filter_id']);
- if (sizeof($informedEntities) > 0) {
- $informed = Array();
- $es = new transit_realtime\EntitySelector();
- if ($informedEntity['informed_class'] == "agency") {
- $es->setAgencyId($informedEntity['informed_id']);
- }
- if ($informedEntity['informed_class'] == "stop") {
- $es->setStopId($informedEntity['informed_id']);
- }
- if ($informedEntity['informed_class'] == "route") {
- $es->setRouteId($informedEntity['informed_id']);
- }
- if ($informedEntity['informed_class'] == "trip") {
- $td = new transit_realtime\TripDescriptor();
- $td->setTripId($informedEntity['informed_id']);
- $es->setTrip($td);
- }
- $alert->addInformedEntity($es);
- }
- $alert->setCause(constant("transit_realtime\Alert\Cause::" . $alert['cause']));
- $alert->setEffect(constant("transit_realtime\Alert\Effect::" . $alert['effect']));
- $tsUrl = new transit_realtime\TranslatedString();
- $tUrl = new transit_realtime\TranslatedString\Translation();
- $tUrl->setText($alert['url']);
- $tUrl->setLanguage("en");
- $tsUrl->addTranslation($tUrl);
- $alert->setUrl($tsUrl);
- $tsHeaderText = new transit_realtime\TranslatedString();
- $tHeaderText = new transit_realtime\TranslatedString\Translation();
- $tHeaderText->setText($alert['header']);
- $tHeaderText->setLanguage("en");
- $tsHeaderText->addTranslation($tHeaderText);
- $alert->setHeaderText($tsHeaderText);
- $tsDescriptionText = new transit_realtime\TranslatedString();
- $tDescriptionText = new transit_realtime\TranslatedString\Translation();
- $tDescriptionText->setText($alert['description']);
- $tDescriptionText->setLanguage("en");
- $tsDescriptionText->addTranslation($tDescriptionText);
- $alert->setDescriptionText($tsDescriptionText);
- $fe->setAlert($alert);
- $fm->addEntity($fe);
+ $current_alerts = getCurrentAlerts();
+ $informed_count = 0;
+ if (sizeof($current_alerts) > 0) {
+ $fm = new transit_realtime\FeedMessage();
+ $fh = new transit_realtime\FeedHeader();
+ $fh->setGtfsRealtimeVersion(1);
+ $fh->setTimestamp(time());
+ $fm->setHeader($fh);
+ foreach ($current_alerts as $current_alert) {
+ $fe = new transit_realtime\FeedEntity();
+ $fe->setId($current_alert['id']);
+ $fe->setIsDeleted(false);
+ $alert = new transit_realtime\Alert();
+ $tr = new transit_realtime\TimeRange();
+ $tr->setStart($current_alert['start']);
+ $tr->setEnd($current_alert['end']);
+ $alert->addActivePeriod($tr);
+ $informedEntities = getInformedAlerts($current_alert['id'], $filter_class, $filter_id);
+ if (sizeof($informedEntities) > 0) {
+ $informed_count++;
+ $informed = Array();
+ $es = new transit_realtime\EntitySelector();
+ if ($informedEntity['informed_class'] == "agency") {
+ $es->setAgencyId($informedEntity['informed_id']);
+ }
+ if ($informedEntity['informed_class'] == "stop") {
+ $es->setStopId($informedEntity['informed_id']);
+ }
+ if ($informedEntity['informed_class'] == "route") {
+ $es->setRouteId($informedEntity['informed_id']);
+ }
+ if ($informedEntity['informed_class'] == "trip") {
+ $td = new transit_realtime\TripDescriptor();
+ $td->setTripId($informedEntity['informed_id']);
+ $es->setTrip($td);
+ }
+ $alert->addInformedEntity($es);
+ }
+ if ($current_alert['cause'] != "") {
+ $alert->setCause(constant("transit_realtime\Alert\Cause::" . $current_alert['cause']));
+ }
+ if ($current_alert['effect'] != "") {
+ $alert->setEffect(constant("transit_realtime\Alert\Effect::" . $current_alert['effect']));
+ }
+ if ($current_alert['url'] != "") {
+ $tsUrl = new transit_realtime\TranslatedString();
+ $tUrl = new transit_realtime\TranslatedString\Translation();
+ $tUrl->setText($current_alert['url']);
+ $tUrl->setLanguage("en");
+ $tsUrl->addTranslation($tUrl);
+ $alert->setUrl($tsUrl);
+ }
+ if ($current_alert['header'] != "") {
+ $tsHeaderText = new transit_realtime\TranslatedString();
+ $tHeaderText = new transit_realtime\TranslatedString\Translation();
+ $tHeaderText->setText($current_alert['header']);
+ $tHeaderText->setLanguage("en");
+ $tsHeaderText->addTranslation($tHeaderText);
+ $alert->setHeaderText($tsHeaderText);
+ }
+ if ($current_alert['description'] != "") {
+ $tsDescriptionText = new transit_realtime\TranslatedString();
+ $tDescriptionText = new transit_realtime\TranslatedString\Translation();
+ $tDescriptionText->setText($current_alert['description']);
+ $tDescriptionText->setLanguage("en");
+ $tsDescriptionText->addTranslation($tDescriptionText);
+ $alert->setDescriptionText($tsDescriptionText);
+ }
+ $fe->setAlert($alert);
+ $fm->addEntity($fe);
+ }
+ if ($informed_count > 0) {
+ return $fm;
+ } else {
+ return null;
+ }
+ } else
+ return null;
+ }
+
+ function getServiceAlertsAsArray($filter_class = "", $filter_id = "") {
+
+ $alerts = getServiceAlerts($filter_class, $filter_id);
+ if ($alerts != null) {
+ $codec = new DrSlump\Protobuf\Codec\PhpArray();
+
+ return $codec->encode($alerts);
+ } else {
+ return nullarray;
}
- return $fm;
- }
-
- function getServiceAlertsAsArray($filter_class = "", $filter_id = "") {
- $codec = new DrSlump\Protobuf\Codec\PhpArray();
- return $codec->encode(getServiceAlerts($filter_class, $filter_id));
}
function getServiceAlertsAsBinary($filter_class = "", $filter_id = "") {
@@ -311,5 +328,4 @@
}
}
-?>
-
+
--- a/include/common.inc.php
+++ b/include/common.inc.php
@@ -57,7 +57,7 @@
function isDebugServer() {
return php_sapi_name() == "cli" || strstr(php_uname('n'),"actbus") || isset($_SERVER['SERVER_NAME']) && ( $_SERVER['SERVER_NAME'] == "azusa" || $_SERVER['SERVER_NAME'] == "vanille"
- || $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "192.168.1.8");
+ || $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "192.168.1.8" || $_SERVER['SERVER_NAME'] == "192.168.178.24");
}
include_once ("common-geo.inc.php");
@@ -201,6 +201,3 @@
return implode($glue, $retVal);
}
-
-?>
-
--- 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'];
@@ -94,34 +94,10 @@
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());
- return Array();
- }
- return $query->fetchAll();
-}
-
function getRoutesByNumberSeries($routeNumberSeries = "") {
global $conn;
if (strlen($routeNumberSeries) == 1) {
- return getRoutesByNumber($routeNumberSeries);
+ return getRoute($routeNumberSeries);
}
$seriesMin = substr($routeNumberSeries, 0, -1) . "0";
$seriesMax = substr($routeNumberSeries, 0, -1) . "9";
@@ -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();
@@ -282,15 +266,16 @@
}
function getRoutesNearby($lat, $lng, $limit = "", $distance = 500) {
- if ($service_period == "")
+ // if ($service_period == "")
$service_period = service_period();
$service_ids = service_ids($service_period);
$sidA = $service_ids[0];
$sidB = $service_ids[1];
- if ($limit != "")
+ $limitSQL = "";
+ 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 +283,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);
@@ -315,4 +300,3 @@
return $query->fetchAll();
}
-?>
--- a/include/db/servicealert-dao.inc.php
+++ b/include/db/servicealert-dao.inc.php
@@ -174,4 +174,3 @@
return null;
}
-?>
--- 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");
@@ -247,4 +247,3 @@
return $timedTrips;
}
-?>
--- a/include/db/trip-dao.inc.php
+++ b/include/db/trip-dao.inc.php
@@ -35,7 +35,7 @@
}
function getTripStops($tripID) {
global $conn;
- $query = "SELECT stop_id, stop_name, ST_AsKML(position) as positionkml,
+ $query = "SELECT stops.stop_id, stop_name, ST_AsKML(position) as positionkml,
stop_sequence, trips.trip_id
FROM stop_times
join trips on trips.trip_id = stop_times.trip_id
@@ -49,8 +49,27 @@
databaseError($conn->errorInfo());
return Array();
}
- return $query->fetchColumn(0);
-}
+ return $query->fetchAll();
+}
+
+function getTripHasStop($tripID, $stopID) {
+ global $conn;
+ $query = "SELECT stop_id
+FROM stop_times
+join trips on trips.trip_id = stop_times.trip_id
+WHERE trips.trip_id = :tripID and stop_times.stop_id = :stopID";
+ debug($query, "database");
+ $query = $conn->prepare($query);
+ $query->bindParam(":tripID", $tripID);
+ $query->bindParam(":stopID", $stopID);
+ $query->execute();
+ if (!$query) {
+ databaseError($conn->errorInfo());
+ return Array();
+ }
+ return ($query->fetchColumn() > 0);
+}
+
function getTripShape($tripID) {
// todo, use shapes table if shape_id specified
global $conn;
@@ -78,7 +97,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);
@@ -203,6 +222,3 @@
}
return $query->fetchAll();
}
-
-
-?>
--- a/index.php
+++ b/index.php
@@ -37,13 +37,9 @@
<li><a href="routeList.php?bysuburbs=yes">Routes By Suburb</a></li>
<li><a class="nearby" href="routeList.php?nearby=yes">Nearby Routes</a></li>
</ul>
+ <a href="labs/index.php" data-role="button" data-icon="beaker">Busness R&D</a>
+ <a href="myway/index.php" data-role="button">MyWay Balance and Timeliness Survey Results</a>
<?php
- print_r(getServiceOverride(time()));
- echo service_period(time());
- print_r(service_ids(service_period(time())));
- echo ' <a href="labs/index.php" data-role="button" data-icon="beaker">Busness R&D</a>';
- echo ' <a href="myway/index.php" data-role="button">MyWay Balance and Timeliness Survey Results</a>';
-
include_footer(true)
?>
--- a/labs/busstopdensity.tile.php
+++ b/labs/busstopdensity.tile.php
@@ -1,6 +1,6 @@
<?php
include ('../include/common.inc.php');
-$debugOkay = Array();
+$debugOkay = Array(); // disable debugging output even on dev server
/*
*DISCLAIMER
--- a/labs/stopBrowser.kml.php
+++ b/labs/stopBrowser.kml.php
@@ -33,8 +33,8 @@
list($bbox_south, $bbox_west, $bbox_north, $bbox_east) = explode(",", $bbox); // west, south, east, north
include ('../include/common.inc.php');
-$debugOkay = Array();
-$contents = getNearbyStops((($bbox_west + $bbox_east) / 2), ($bbox_south + $bbox_north) / 2, 50, 3000);
+$debugOkay = Array(); // disable debugging output even on dev server
+//$contents = getNearbyStops((($bbox_west + $bbox_east) / 2), ($bbox_south + $bbox_north) / 2, 50, 3000);
foreach ($contents as $stop) {
$description = 'http://bus.lambdacomplex.org/' . 'stop.php?stopid=' . $stop['stop_id'] . " <br>";
$trips = getStopTripsWithTimes($stop['stop_id'], "", "", "", 3);
--- 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.<br>";
+
+ $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<br>";
+ echo "No stop_id recorded for this stop_name, potential stops are a bus station<br>";
$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}<br>";
+ echo "Matched route: {$potentialRoute['route_id']} {$potentialRoute['route_short_name']} {$timing_period}<br>";
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']})<br>";
--- a/routeList.php
+++ b/routeList.php
@@ -32,38 +32,35 @@
}
function displayRoutes($routes) {
- global $nearby;
echo ' <ul data-role="listview" data-filter="true" data-inset="true" >';
- $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 '<li> <a href="trip.php?routeid=' . $route['route_id'] . '&directionid=' . $headsign['direction_id'] . '"><h3>' . $route['route_id'] . "</h3>
+
+ <p>" . $headsign['trip_headsign'] . (strstr($headsign['trip_headsign'], "bound") === false ? "bound" : "") . ", starting at " . $headsign['stop_name'] . " (" . ucwords($headsign['service_id']) . ")</p>";
+
+ echo" </a></li>\n";
}
}
- foreach ($filteredRoutes as $key => $route) {
- echo '<li> <a href="trip.php?routeids=' . implode(",", $route['route_ids']) . '&directionid=' . $route['direction_id'] . '"><h3>' . $route['route_short_name'] . "</h3>
+}
+
+function displayNearbyRoutes($routes) {
+ echo ' <ul data-role="listview" data-filter="true" data-inset="true" >';
+ 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 '<li> <a href="trip.php?routeid=' . $route['route_id'] . '&directionid=' . $route['direction_id'] . '"><h3>' . $route['route_short_name'] . "</h3>
- <p>" . $route['trip_headsign'].", ". $route['route_long_name'] . " (" . ucwords($route['service_id']) . ")</p>";
- if (isset($nearby)) {
- $time = getRouteAtStop($route['route_id'], $route['stop_id']);
- echo '<span class="ui-li-count">' . ($time['arrival_time'] ? $time['arrival_time'] : "No more trips today") . "<br>" . floor($route['distance']) . 'm away</span>';
- }
- echo" </a></li>\n";
+ <p>" . $time['trip_headsign'] . (strstr($time['trip_headsign'], "bound") === false ? "bound" : "") . " from ".$start['stop_name']." to ".$end['stop_name'] . " (" . ucwords($time['service_id']) . ")</p>";
+ $stop = getStop($route['stop_id']);
+echo "<p>Board at ".$stop['stop_name']."</p>";
+ echo '<span class="ui-li-count">' . ($time['arrival_time'] ? $time['arrival_time'] : "No more trips today") . "<br>" . floor($route['distance']) . 'm away</span>';
+
+ echo" </a></li>\n";
}
}
@@ -95,7 +92,7 @@
} else if (isset($nearby)) {
$routes = Array();
include_header("Routes Nearby", "routeList", true, true);
- trackEvent("Route Lists", "Routes Nearby", $_SESSION['lat'] . "," . $_SESSION['lon']);
+ if (isset($_SESSION['lat'])) trackEvent("Route Lists", "Routes Nearby", $_SESSION['lat'] . "," . $_SESSION['lon']);
navbar();
placeSettings();
if (!isset($_SESSION['lat']) || !isset($_SESSION['lat']) || $_SESSION['lat'] == "" || $_SESSION['lon'] == "") {
@@ -106,7 +103,7 @@
if (sizeof($routes) > 0) {
- displayRoutes($routes);
+ displayNearbyRoutes($routes);
} else {
echo ' <ul data-role="listview" data-filter="true" data-inset="true" >';
echo "<li style='text-align: center;'> No routes nearby.</li>";
@@ -116,7 +113,7 @@
navbar();
echo ' <ul data-role="listview" data-inset="true">';
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 '<li><a href="' . curPageURL() . '/routeList.php?routeDestination=' . urlencode($destination['route_long_name']) . '">' . $destination['route_long_name'] . "... </a></li>\n";
+ echo '<li><a href="' . curPageURL() . '/routeList.php?routeDestination=' . urlencode($destination['stop_name']) . '">' . $destination['stop_name'] . "... </a></li>\n";
}
}
}
--- a/servicealerts/servicealert_editor.php
+++ b/servicealerts/servicealert_editor.php
@@ -30,7 +30,7 @@
if ($_REQUEST['saveedit'] != "")
updateServiceAlert($_REQUEST['saveedit'], $_REQUEST['startdate'], $_REQUEST['enddate'], $_REQUEST['header'], $_REQUEST['description'], $_REQUEST['url']);
else
- addServiceAlert($_REQUEST['startdate'], $_REQUEST['enddate'], $_REQUEST['description'], $_REQUEST['url']);
+ addServiceAlert($_REQUEST['startdate'], $_REQUEST['enddate'], $_REQUEST['header'], $_REQUEST['description'], $_REQUEST['url']);
echo "Saved " . $_REQUEST['saveedit'];
die();
}
--- a/stop.php
+++ b/stop.php
@@ -73,8 +73,12 @@
//}
}
}
-include_header($stop['stop_name'], "stop");
-
+if (sizeof($stops) > 0) {
+ $stopDescParts = explode("<br>", $stop['stop_desc']);
+ include_header(trim(str_replace("Street: ", "", $stopDescParts[0])), "stop");
+} else {
+ include_header($stop['stop_name'], "stop");
+}
/* $serviceAlerts = json_decode(getPage(curPageURL() . "/servicealerts_api.php?filter_class=stop&filter_id=".$stopid) , true);
foreach($serviceAlerts['entities'] as $serviceAlert) {
@@ -104,24 +108,31 @@
sktimesort($allStopsTrips, "arrival_time", true);
$trips = $allStopsTrips;
} else {
- $trips = getStopTripsWithTimes($stopid);
+ $trips = getStopTripsWithTimes($stopid, "", "", "", (isset($filterIncludeRoutes) || isset($filterHasStop) ? "75" : ""));
}
+
echo "<div class='ui-header' style='overflow: visible; height: 2.5em'>";
+// if we have too many trips, cut down to size.
+if (!isset($filterIncludeRoutes) && !isset($filterHasStop) && 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 '<a href="stop.php?' . $stopidurl . '&service_period=' . service_period() . '&time=' . date("H:i", $laterTime) . '" data-icon="arrow-r" class="ui-btn-right">Later Trips</a>';
}
echo '<a href="stop.php?' . $stopidurl . '&service_period=' . service_period() . '&time=' . date("H:i", $earlierTime) . '" data-icon="arrow-l" class="ui-btn-left">Earlier Trips</a>';
@@ -130,29 +141,35 @@
echo "<li style='text-align: center;'>No trips in the near future.</li>";
} else {
foreach ($trips as $trip) {
- echo '<li>';
+ if (
+ isset($filterHasStop) && (getTripHasStop($trip['trip_id'], $filterHasStop) == 1)
+ || (isset($filterIncludeRoutes) && in_array($trip["route_short_name"], $filterIncludeRoutes))
+ || (!isset($filterIncludeRoutes) && !isset($filterHasStop))
+ ) {
+ echo '<li>';
- $destination = getTripDestination($trip['trip_id']);
- echo '<a href="trip.php?stopid=' . $stopid . '&tripid=' . $trip['trip_id'] . '"><h3>'. (service_period() == "Christmas2011" ? $trip['route_long_name'] : "") . $trip['route_short_name'] . " towards " . $destination['stop_name'] . "</h3><p>";
- $viaPoints = viaPointNames($trip['trip_id'], $trip['stop_sequence']);
- if ($viaPoints != "")
- echo '<br><span class="viaPoints">Via: ' . $viaPoints . '</span>';
- if (sizeof($tripStopNumbers) > 0) {
- echo '<br><small>Boarding At: ';
- if (sizeof($tripStopNumbers[$trip['trip_id']]) == sizeof($stopids)) {
- echo "All Stops";
- } else {
- foreach ($tripStopNumbers[$trip['trip_id']] as $key) {
- echo $stopNames[$key] . ', ';
+ $destination = getTripDestination($trip['trip_id']);
+ echo '<a href="trip.php?stopid=' . $stopid . '&tripid=' . $trip['trip_id'] . '"><h3>' . $trip['route_short_name'] . " towards " . $destination['stop_name'] . "</h3><p>";
+ $viaPoints = viaPointNames($trip['trip_id'], $trip['stop_sequence']);
+ if ($viaPoints != "")
+ echo '<br><span class="viaPoints">Via: ' . $viaPoints . '</span>';
+ if (sizeof($tripStopNumbers) > 0) {
+ echo '<br><small>Boarding At: ';
+ if (sizeof($tripStopNumbers[$trip['trip_id']]) == sizeof($stopids)) {
+ echo "All Stops";
+ } else {
+ foreach ($tripStopNumbers[$trip['trip_id']] as $key) {
+ echo $stopNames[$key] . ', ';
+ }
}
+ echo '</small>';
}
- echo '</small>';
+ echo '</p>';
+ echo '<p class="ui-li-aside"><strong>' . $trip['arrival_time'] . '</strong></p>';
+ echo '</a></li>';
+ flush();
+ @ob_flush();
}
- echo '</p>';
- echo '<p class="ui-li-aside"><strong>' . $trip['arrival_time'] . '</strong></p>';
- echo '</a></li>';
- flush();
- @ob_flush();
}
}
echo '</ul>';
--- a/stopList.php
+++ b/stopList.php
@@ -36,8 +36,8 @@
navbar();
echo ' <ul data-role="listview" data-filter="true" data-inset="true" >';
if (!isset($firstLetter)) {
- foreach (range('A', 'Z') as $letter) {
- echo "<li><a href=\"stopList.php?firstLetter=$letter&bysuburbs=yes\">$letter...</a></li>\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 "<li><a href=\"stopList.php?firstLetter=$letter&bysuburbs=yes\">$letter...</a></li>\n";
}
} else {
foreach ($suburbs as $suburb) {
@@ -86,17 +86,16 @@
navbar();
}
echo ' <ul data-role="listview" data-filter="true" data-inset="true" >';
- if (!isset($firstLetter) && !isset($suburb) && !isset($nearby)) {
- foreach (range('A', 'Z') as $letter) {
- echo "<li><a href=\"stopList.php?firstLetter=$letter&$listType\">$letter...</a></li>\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 "<li><a href=\"stopList.php?firstLetter=$letter&$listType\">$letter...</a></li>\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'], strtolower($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 = strtolower($trip["service_id"]);
$destination = getTripDestination($trip['trip_id']);
-include_header("Stops on " . $trip['route_short_name'] . ' ' . $destination['stop_name'], "trip");
+include_header("Route " . $trip['route_id'] . ' to ' . $destination['stop_name'], "trip");
trackEvent("Route/Trip View", "View Route", $trip['route_short_name'] . ' ' . $destination['stop_name'], $routeid);
echo '<span class="content-secondary">';
-echo '<a href="' . $trip['route_url'] . '">View Original Timetable/Map</a>';
+echo '<a href="' . $trip['route_url'] . '">View Original Timetable/Map</a> ';
+echo '<a href="geo/trip.kml.php?tripid='.$tripid.'">View Trip in Google Earth</a> ';
+echo '<a href="geo/route.kml.php?routeid='.$routeid.'">View Route in Google Earth</a>';
echo '<h2>Via:</h2> <small>' . viaPointNames($tripid) . '</small>';
echo '<h2>Other Trips:</h2> ';
-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 '<a href="trip.php?tripid=' . $othertrip['trip_id'] . "&routeids=" . implode(",", $routeids) . '">' . str_replace(" ", ":00", str_replace(":00", " ", $othertrip['arrival_time'])) . '</a> ';
- // } 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 '<a href="trip.php?tripid=' . $othertrip['trip_id'] . "&routeid=" . $routeid . '">' . str_replace(" ", ":00", str_replace(":00", " ", $othertrip['arrival_time'])) . '</a> ';
+ // } 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 '<h2>Other directions/timing periods:</h2> ';
$otherDir = 0;
-$filteredRoutes = Array();
-foreach (getRoutesByNumber($trip['route_short_name']) as $row) {
- foreach (getRouteHeadsigns($row['route_id']) as $headsign) {
- if ( $headsign['direction_id'] != $directionid || strtolower($headsign['service_id']) != $service_period) {
- echo "{$headsign['direction_id']} != $directionid || ".strtolower($headsign['service_id'])." != $service_period <br>";
- $start = $headsign['stop_name'];
+ foreach (getRouteHeadsigns($routeid) as $headsign) {
+ if ($headsign['direction_id'] != $directionid || strtolower($headsign['service_id']) != $service_period) {
- $serviceday = strtolower($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 '<a href="trip.php?routeid=' . $routeid . '&directionid=' . $headsign['direction_id'] . '&service_period=' . $headsign['service_id'] . '"> Starting at ' . $headsign['stop_name'] . ' (' . $headsign['service_id'] . ')</a> ';
+ $otherDir++;
}
}
-}
-foreach ($filteredRoutes as $key => $row) {
- echo '<a href="trip.php?routeids=' . implode(",",$row['route_ids']) . '&directionid='.$row['direction_id'].'&service_period='.$row['service_id'].'">' . $row['route_long_name'] . ' (' . ucwords($row['service_id']) . ')</a> ';
- $otherDir++;
-}
if ($otherDir == 0) {
echo "None";
@@ -95,9 +72,9 @@
@ob_flush();
echo "<div class='ui-header' style='overflow: visible; height: 1.5em'>";
if ($nextTrip)
- echo '<a href="trip.php?tripid=' . $nextTrip . "&routeids=" . implode(",", $routeids) . '" data-icon="arrow-r" class="ui-btn-right">Next Trip</a>';
+ echo '<a href="trip.php?tripid=' . $nextTrip . "&routeid=" . $routeid . '" data-icon="arrow-r" class="ui-btn-right">Next Trip</a>';
if ($prevTrip)
- echo '<a href="trip.php?tripid=' . $prevTrip . "&routeids=" . implode(",", $routeids) . '" data-icon="arrow-l" class="ui-btn-left">Previous Trip</a>';
+ echo '<a href="trip.php?tripid=' . $prevTrip . "&routeid=" . $routeid . '" data-icon="arrow-l" class="ui-btn-left">Previous Trip</a>';
echo "</div>";
echo ' <ul data-role="listview" data-inset="true">';
$stopsGrouped = Array();