Refactor stopsList page
--- a/include/common-db.php
+++ /dev/null
--- a/include/common.inc.php
+++ b/include/common.inc.php
@@ -1,19 +1,15 @@
<?php
date_default_timezone_set('Australia/ACT');
-$APIurl = "http://localhost:8765";
$debugOkay = Array(
"session",
"json",
"phperror",
- //"awsgtfs",
"awsotp",
//"squallotp",
//"vanilleotp",
+ "database",
"other"
);
-if (isDebug("awsgtfs")) {
- $APIurl = "http://bus-main.lambdacomplex.org:8765";
-}
$cloudmadeAPIkey = "daa03470bb8740298d4b10e3f03d63e6";
$googleMapsAPIkey = "ABQIAAAA95XYXN0cki3Yj_Sb71CFvBTPaLd08ONybQDjcH_VdYtHHLgZvRTw2INzI_m17_IoOUqH3RNNmlTk1Q";
$otpAPIurl = 'http://localhost:8080/opentripplanner-api-webapp/';
@@ -31,8 +27,8 @@
include_once ("common-geo.inc.php");
include_once ("common-net.inc.php");
include_once ("common-transit.inc.php");
-
include_once ("common-session.inc.php");
+include_once ("common-db.inc.php");
include_once ("common-template.inc.php");
function isDebugServer()
--- a/include/db/stop-dao.inc.php
+++ b/include/db/stop-dao.inc.php
@@ -4,94 +4,138 @@
return (stop.stop_id, stop.stop_name, float(stop.stop_lat),
float(stop.stop_lon), stop.location_type, stop.stop_code, stop.zone_id)
*/
-
-function getStop($stopID) {
-
+function getStop($stopID)
+{
+global $conn;
+ $query = "Select * from stops where stop_id = '$stopID' LIMIT 1";
+ debug($query,"database");
+ $result = pg_query($conn, $query);
+ if (!$result) {
+ databaseError(pg_result_error($result));
+ return Array();
+ }
+ return pg_fetch_all($result);
}
-
-function getStops($timingPointsOnly = false) {
-
+function getStops($timingPointsOnly = false, $firstLetter = "")
+{
+ global $conn;
+ $conditions = Array();
+ if ($timingPointsOnly) $conditions[] = "substr(stop_code,1,2) != 'Wj'";
+ if ($firstLetter != "") $conditions[] = "substr(stop_name,1,1) = '$firstLetter'";
+ $query = "Select * from stops";
+ if (sizeof($conditions) > 0) {
+ if (sizeof($conditions) > 1) {
+ $query .= " Where ".implode(" AND ",$conditions)." ";
+ }
+ else {
+ $query .= " Where ".$conditions[0]." ";
+ }
+ }
+ $query .= "order by stop_name;";
+ debug($query,"database");
+ $result = pg_query($conn, $query);
+ if (!$result) {
+ databaseError(pg_result_error($result));
+ return Array();
+ }
+ return pg_fetch_all($result);
}
-
-function stopsNear($lat,$lng,$limit) {
-
- /*
- -- Show a distance query and note, London is outside the 1000km tolerance
- SELECT name FROM global_points WHERE ST_DWithin(location, ST_GeographyFromText('SRID=4326;POINT(-110 29)'), 1000000, FALSE);
- // All the geography functions have the option of using a sphere calculation, by setting a final boolean parameter to 'FALSE'. This will somewhat speed up calculations, particularly for cases where the geometries are very simple.
- */
+function getNearbyStops($lat, $lng, $limit, $distance = 1000)
+{
+ if ($lat == null || $lng == null) return Array();
+ global $conn;
+ $query = "Select *, ST_Distance(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), FALSE) as distance
+ from stops WHERE ST_DWithin(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), $distance, FALSE)
+ order by distance;";
+ debug($query,"database");
+ $result = pg_query($conn, $query);
+ if (!$result) {
+ databaseError(pg_result_error($result));
+ return Array();
+ }
+ return pg_fetch_all($result);
}
-
-function stopsBySuburb($suburb) {
-
+function getStopsBySuburb($suburb)
+{
+global $conn;
+ $query = "Select * from stops where zone_id LIKE '%$suburb;%' order by stop_name;";
+ debug($query,"database");
+ $result = pg_query($conn, $query);
+ if (!$result) {
+ databaseError(pg_result_error($result));
+ return Array();
+ }
+ return pg_fetch_all($result);
}
-
-function stopRoutes($stopID,$service_period)
-/*
- def handle_json_GET_stoproutes(self, params):
- """Given a stop_id return all routes to visit the stop."""
- schedule = self.server.schedule
- stop = schedule.GetStop(params.get('stop', None))
- service_period = params.get('service_period', None)
- trips = stop.GetTrips(schedule)
- result = {}
- for trip in trips:
- route = schedule.GetRoute(trip.route_id)
- if service_period == None or trip.service_id == service_period:
- if not route.route_short_name+route.route_long_name+trip.service_id in result:
- result[route.route_short_name+route.route_long_name+trip.service_id] = (route.route_id, route.route_short_name, route.route_long_name, trip.trip_id, trip.service_id)
- return result
-*/
-
-function stopTrips($stopID) {
- /*
- def handle_json_GET_stopalltrips(self, params):
- """Given a stop_id return all trips to visit the stop (without times)."""
- schedule = self.server.schedule
- stop = schedule.GetStop(params.get('stop', None))
- service_period = params.get('service_period', None)
- trips = stop.GetTrips(schedule)
- result = []
- for trip in trips:
- if service_period == None or trip.service_id == service_period:
- result.append((trip.trip_id, trip.service_id))
- return result
- */
+function stopRoutes($stopID, $service_period)
+{
+ /*
+ def handle_json_GET_stoproutes(self, params):
+ """Given a stop_id return all routes to visit the stop."""
+ schedule = self.server.schedule
+ stop = schedule.GetStop(params.get('stop', None))
+ service_period = params.get('service_period', None)
+ trips = stop.GetTrips(schedule)
+ result = {}
+ for trip in trips:
+ route = schedule.GetRoute(trip.route_id)
+ if service_period == None or trip.service_id == service_period:
+ if not route.route_short_name+route.route_long_name+trip.service_id in result:
+ result[route.route_short_name+route.route_long_name+trip.service_id] = (route.route_id, route.route_short_name, route.route_long_name, trip.trip_id, trip.service_id)
+ return result
+ */
}
-function stopTripsWithTimes($stopID, $time, $service_period) {
- /*
- def handle_json_GET_stoptrips(self, params):
- """Given a stop_id and time in seconds since midnight return the next
- trips to visit the stop."""
- schedule = self.server.schedule
- stop = schedule.GetStop(params.get('stop', None))
- requested_time = int(params.get('time', 0))
- limit = int(params.get('limit', 15))
- service_period = params.get('service_period', None)
- time_range = int(params.get('time_range', 24*60*60))
-
- filtered_time_trips = []
- for trip, index in stop._GetTripIndex(schedule):
- tripstarttime = trip.GetStartTime()
- if tripstarttime > requested_time and tripstarttime < (requested_time + time_range):
- time, stoptime, tp = trip.GetTimeInterpolatedStops()[index]
- if time > requested_time and time < (requested_time + time_range):
- bisect.insort(filtered_time_trips, (time, (trip, index), tp))
- result = []
- for time, (trip, index), tp in filtered_time_trips:
- if len(result) > limit:
- break
- route = schedule.GetRoute(trip.route_id)
- trip_name = ''
- if route.route_short_name:
- trip_name += route.route_short_name
- if route.route_long_name:
- if len(trip_name):
- trip_name += " - "
- trip_name += route.route_long_name
- if service_period == None or trip.service_id == service_period:
- result.append((time, (trip.trip_id, trip_name, trip.service_id), tp))
- return result
- */
+function stopTrips($stopID)
+{
+ /*
+ def handle_json_GET_stopalltrips(self, params):
+ """Given a stop_id return all trips to visit the stop (without times)."""
+ schedule = self.server.schedule
+ stop = schedule.GetStop(params.get('stop', None))
+ service_period = params.get('service_period', None)
+ trips = stop.GetTrips(schedule)
+ result = []
+ for trip in trips:
+ if service_period == None or trip.service_id == service_period:
+ result.append((trip.trip_id, trip.service_id))
+ return result
+ */
+}
+function stopTripsWithTimes($stopID, $time, $service_period)
+{
+ /*
+ def handle_json_GET_stoptrips(self, params):
+ """Given a stop_id and time in seconds since midnight return the next
+ trips to visit the stop."""
+ schedule = self.server.schedule
+ stop = schedule.GetStop(params.get('stop', None))
+ requested_time = int(params.get('time', 0))
+ limit = int(params.get('limit', 15))
+ service_period = params.get('service_period', None)
+ time_range = int(params.get('time_range', 24*60*60))
+
+ filtered_time_trips = []
+ for trip, index in stop._GetTripIndex(schedule):
+ tripstarttime = trip.GetStartTime()
+ if tripstarttime > requested_time and tripstarttime < (requested_time + time_range):
+ time, stoptime, tp = trip.GetTimeInterpolatedStops()[index]
+ if time > requested_time and time < (requested_time + time_range):
+ bisect.insort(filtered_time_trips, (time, (trip, index), tp))
+ result = []
+ for time, (trip, index), tp in filtered_time_trips:
+ if len(result) > limit:
+ break
+ route = schedule.GetRoute(trip.route_id)
+ trip_name = ''
+ if route.route_short_name:
+ trip_name += route.route_short_name
+ if route.route_long_name:
+ if len(trip_name):
+ trip_name += " - "
+ trip_name += route.route_long_name
+ if service_period == None or trip.service_id == service_period:
+ result.append((time, (trip.trip_id, trip_name, trip.service_id), tp))
+ return result
+ */
}
?>
--- a/stopList.php
+++ b/stopList.php
@@ -1,5 +1,6 @@
<?php
include ('include/common.inc.php');
+$stops = Array();
function filterByFirstLetter($var)
{
return $var[1][0] == $_REQUEST['firstLetter'];
@@ -31,7 +32,6 @@
foreach ($suburbs as $suburb) {
if (startsWith($suburb, $_REQUEST['firstLetter'])) {
echo '<li><a href="stopList.php?suburb=' . urlencode($suburb) . '">' . $suburb . '</a></li>';
- flush(); @ob_flush();
}
}
}
@@ -41,14 +41,14 @@
// Timing Points / All stops
if ($_REQUEST['allstops']) {
$listType = 'allstops=yes';
- $url = $APIurl . "/json/stops";
+ $stops = getStops();
include_header("All Stops", "stopList");
navbar();
timePlaceSettings();
}
else if ($_REQUEST['nearby']) {
$listType = 'nearby=yes';
- $url = $APIurl . "/json/neareststops?lat={$_SESSION['lat']}&lon={$_SESSION['lon']}&limit=15";
+ $stops = getNearbyStops($_SESSION['lat'],$_SESSION['lon'],15);
include_header("Nearby Stops", "stopList", true, true);
navbar();
timePlaceSettings(true);
@@ -59,14 +59,13 @@
}
else if ($_REQUEST['suburb']) {
$suburb = filter_var($_REQUEST['suburb'], FILTER_SANITIZE_STRING);
- $listType = "suburb=$suburb";
- $url = $APIurl . "/json/stopzonesearch?q=" . $suburb;
+ $stops = getStopsBySuburb($suburb);
include_header("Stops in " . ucwords($suburb) , "stopList");
navbar();
trackEvent("Stop Lists","Stops By Suburb", $suburb);
}
else {
- $url = $APIurl . "/json/timingpoints";
+ $stops = getStops(true,$_REQUEST['firstLetter']);
include_header("Timing Points / Major Stops", "stopList");
navbar();
timePlaceSettings();
@@ -78,29 +77,21 @@
}
}
else {
- $stops = json_decode(getPage($url));
- foreach ($stops as $key => $row) {
- $stopName[$key] = $row[1];
- }
- // Sort the stops by name
- array_multisort($stopName, SORT_ASC, $stops);
- if (!isset($_REQUEST['suburb']) && !isset($_REQUEST['nearby'])) {
- $stops = array_filter($stops, "filterByFirstLetter");
- }
+ //var_dump($stops);
$stopsGrouped = Array();
- foreach ($stops as $key => $row) {
- if ((trim(preg_replace("/\(Platform.*/", "", $stops[$key][1])) != trim(preg_replace("/\(Platform.*/", "", $stops[$key + 1][1]))) || $key + 1 >= sizeof($stops)) {
+ foreach ($stops as $key => $stop) {
+ if ((trim(preg_replace("/\(Platform.*/", "", $stops[$key]["stop_name"])) != trim(preg_replace("/\(Platform.*/", "", $stops[$key + 1]["stop_name"]))) || $key + 1 >= sizeof($stops)) {
if (sizeof($stopsGrouped) > 0) {
// print and empty grouped stops
// subsequent duplicates
- $stopsGrouped["stop_ids"][] = $row[0];
+ $stopsGrouped["stop_ids"][] = $stop['stop_id'];
echo '<li>';
if (!startsWith($stopsGrouped['stop_codes'][0], "Wj")) echo '<img src="css/images/time.png" alt="Timing Point: " class="ui-li-icon">';
echo '<a href="stop.php?stopids=' . implode(",", $stopsGrouped['stop_ids']) . '">';
if (isset($_SESSION['lat']) && isset($_SESSION['lon'])) {
- echo '<span class="ui-li-count">' . distance($row[2], $row[3], $_SESSION['lat'], $_SESSION['lon'], true) . 'm away</span>';
+ echo '<span class="ui-li-count">' . distance($stop['stop_lat'],$stop['stop_lon'], $_SESSION['lat'], $_SESSION['lon'], true) . 'm away</span>';
}
- echo bracketsMeanNewLine(trim(preg_replace("/\(Platform.*/", "", $row[1])) . '(' . sizeof($stopsGrouped["stop_ids"]) . ' stops)');
+ echo bracketsMeanNewLine(trim(preg_replace("/\(Platform.*/", "", $stop['stop_name'])) . '(' . sizeof($stopsGrouped["stop_ids"]) . ' stops)');
echo "</a></li>\n";
flush(); @ob_flush();
$stopsGrouped = Array();
@@ -108,33 +99,33 @@
else {
// just a normal stop
echo '<li>';
- if (!startsWith($row[5], "Wj")) echo '<img src="css/images/time.png" alt="Timing Point" class="ui-li-icon">';
- echo '<a href="stop.php?stopid=' . $row[0] . (startsWith($row[5], "Wj") ? '&stopcode=' . $row[5] : "") . '">';
+ if (!startsWith($stop['stop_code'], "Wj")) echo '<img src="css/images/time.png" alt="Timing Point" class="ui-li-icon">';
+ echo '<a href="stop.php?stopid=' . $row[0] . (startsWith($stop['stop_code'], "Wj") ? '&stopcode=' . $stop['stop_code'] : "") . '">';
if (isset($_SESSION['lat']) && isset($_SESSION['lon'])) {
- echo '<span class="ui-li-count">' . distance($row[2], $row[3], $_SESSION['lat'], $_SESSION['lon'], true) . 'm away</span>';
+ echo '<span class="ui-li-count">' . distance($stop['stop_lat'],$stop['stop_lon'], $_SESSION['lat'], $_SESSION['lon'], true) . 'm away</span>';
}
- echo bracketsMeanNewLine($row[1]);
+ echo bracketsMeanNewLine($stop['stop_name']);
echo "</a></li>\n";
flush(); @ob_flush();
}
}
else {
// this is a duplicated line item
- if ($key - 1 <= 0 || (trim(preg_replace("/\(Platform.*/", "", $stops[$key][1])) != trim(preg_replace("/\(Platform.*/", "", $stops[$key - 1][1])))) {
+ if ($key - 1 <= 0 || (trim(preg_replace("/\(Platform.*/", "", $stops[$key]['stop_name'])) != trim(preg_replace("/\(Platform.*/", "", $stops[$key - 1]['stop_name'])))) {
// first duplicate
$stopsGrouped = Array(
- "name" => trim(preg_replace("/\(Platform.*/", "", $row[1])) ,
+ "name" => trim(preg_replace("/\(Platform.*/", "", $stop['stop_name'])) ,
"stop_ids" => Array(
- $row[0]
+ $stop['stop_id']
) ,
"stop_codes" => Array(
- $row[5]
+ $stop['stop_code']
)
);
}
else {
// subsequent duplicates
- $stopsGrouped["stop_ids"][] = $row[0];
+ $stopsGrouped["stop_ids"][] = $stop['stop_id'];;
}
}
}
--- a/updatedb.php
+++ b/updatedb.php
@@ -1,9 +1,10 @@
<?php
+include('lib/common-db.inc.php');
// Unzip cbrfeed.zip, import all csv files to database
$zip = zip_open(dirname(__FILE__) . "/cbrfeed.zip");
$tmpdir = "/tmp/cbrfeed/";
mkdir($tmpdir);
-/*if (is_resource($zip)) {
+if (is_resource($zip)) {
while ($zip_entry = zip_read($zip)) {
$fp = fopen($tmpdir . zip_entry_name($zip_entry) , "w");
if (zip_entry_open($zip, $zip_entry, "r")) {
@@ -15,12 +16,7 @@
}
}
zip_close($zip);
-}*/
-$conn = pg_connect("dbname=transitdata user=postgres password=snmc");
- if (!$conn) {
- echo "An error occured.\n";
- exit;
- }
+}
foreach (scandir($tmpdir) as $file) {
if (!strpos($file, ".txt") === false) {