Fix css issues
Place time/period/location adjuster on many views
Sanitize more user input
--- a/busui/common.inc.php
+++ b/busui/common.inc.php
@@ -1,18 +1,33 @@
<?php
date_default_timezone_set('Australia/ACT');
$APIurl = "http://localhost:8765";
-error_reporting(E_ALL ^ E_NOTICE);
+$cloudmadeAPIkey="daa03470bb8740298d4b10e3f03d63e6";
+$googleMapsAPIkey="ABQIAAAA95XYXN0cki3Yj_Sb71CFvBTPaLd08ONybQDjcH_VdYtHHLgZvRTw2INzI_m17_IoOUqH3RNNmlTk1Q";
+$otpAPIurl = 'http://10.1.0.243:5080/opentripplanner-api-webapp/';
+if (isDebug()) error_reporting(E_ALL ^ E_NOTICE);
// SELECT array_to_string(array(SELECT REPLACE(name_2006, ',', '\,') as name FROM suburbs order by name), ',')
-$suburbs = explode(",","Acton,Ainslie,Amaroo,Aranda,Banks,Barton,Belconnen,Bonner,Bonython,Braddon,Bruce,Calwell,Campbell,Chapman,Charnwood,Chifley,Chisholm,City,Conder,Cook,Curtin,Deakin,Dickson,Downer,Duffy,Dunlop,Evatt,Fadden,Farrer,Fisher,Florey,Flynn,Forrest,Franklin,Fraser,Fyshwick,Garran,Gilmore,Giralang,Gordon,Gowrie,Greenway,Griffith,Gungahlin,Hackett,Hall,Harrison,Hawker,Higgins,Holder,Holt,Hughes,Hume,Isaacs,Isabella Plains,Kaleen,Kambah,Kingston,Latham,Lawson,Lyneham,Lyons,Macarthur,Macgregor,Macquarie,Mawson,McKellar,Melba,Mitchell,Monash,Narrabundah,Ngunnawal,Nicholls,Oaks Estate,O'Connor,O'Malley,Oxley,Page,Palmerston,Parkes,Pearce,Phillip,Pialligo,Red Hill,Reid,Richardson,Rivett,Russell,Scullin,Spence,Stirling,Symonston,Tharwa,Theodore,Torrens,Turner,Unclassified ACT,Wanniassa,Waramanga,Watson,Weetangera,Weston,Yarralumla");
+$suburbs = explode(",","Acton,Ainslie,Amaroo,Aranda,Banks,Barton,Belconnen,Bonner,Bonython,Braddon,Bruce,Calwell,Campbell,Chapman,Charnwood,Chifley,Chisholm,City,Conder,Cook,Curtin,Deakin,Dickson,Downer,Duffy,Dunlop,Evatt,Fadden,Farrer,Fisher,Florey,Flynn,Forrest,Franklin,Fraser,Fyshwick,Garran,Gilmore,Giralang,Gordon,Gowrie,Greenway,Griffith,Gungahlin,Hackett,Hall,Harrison,Hawker,Higgins,Holder,Holt,Hughes,Hume,Isaacs,Isabella Plains,Kaleen,Kambah,Kingston,Latham,Lawson,Lyneham,Lyons,Macarthur,Macgregor,Macquarie,Mawson,McKellar,Melba,Mitchell,Monash,Narrabundah,Ngunnawal,Nicholls,Oaks Estate,O'Connor,O'Malley,Oxley,Page,Palmerston,Parkes,Pearce,Phillip,Pialligo,Red Hill,Reid,Richardson,Rivett,Russell,Scullin,Spence,Stirling,Symonston,Tharwa,Theodore,Torrens,Turner,Wanniassa,Waramanga,Watson,Weetangera,Weston,Yarralumla");
// you have to open the session to be able to modify or remove it
-session_start();
-
-
+session_start();
+ if (isset($_REQUEST['service_period'])) $_SESSION['service_period'] = filter_var($_REQUEST['service_period'],FILTER_SANITIZE_STRING);
+ if (isset($_REQUEST['time'])) $_SESSION['time'] = filter_var($_REQUEST['time'],FILTER_SANITIZE_STRING);
+ if (isset($_REQUEST['geolocate'])) {
+ $contents = geocode(var_filter($_REQUEST['geolocate'],FILTER_SANITIZE_URL),true);
+ if (isset($contents[0]->centroid)) {
+ $session['lat'] = $contents[0]->centroid->coordinates[0];
+ $session['lon'] = $contents[0]->centroid->coordinates[1];
+ }
+ else {
+ $session['lat'] = "";
+ $session['lon'] = "";
+ }
+ }
+//print_r ($_SESSION);
function isDebug()
{
- return $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || !$_SERVER['SERVER_NAME'];
+ return $_SERVER['SERVER_NAME'] == "10.0.1.154" || $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || !$_SERVER['SERVER_NAME'];
}
function debug($msg) {
@@ -23,10 +38,6 @@
}
function include_header($pageTitle, $opendiv = true, $geolocate = false) {
- // this starts the session
- session_start();
-
- // if (isDebug()) // set php error level high
echo '
<!DOCTYPE html>
<html>
@@ -51,8 +62,16 @@
<script src="js/jquery.ui.datepicker.mobile.js"></script>
<style type="text/css">
.ui-navbar {
- padding-bottom: 18px;
width: 100%;
+ }
+ .ui-btn-inner {
+ white-space: normal !important;
+ }
+ .ui-li-heading {
+ white-space: normal !important;
+ }
+ .ui-listview-filter {
+ margin: 0 !important;
}
</style>
<meta name="apple-mobile-web-app-capable" content="yes" />
@@ -62,35 +81,12 @@
if ($geolocate) {
echo "<script>
-function setCookie(c_name,value,expiredays)
-{
-var exdate=new Date();
-exdate.setDate(exdate.getDate()+expiredays);
-document.cookie=c_name+ \"=\" +escape(value)+
-((expiredays==null) ? \"\" : \";expires=\"+exdate.toUTCString());
-}
-
-function getCookie(c_name)
-{
-if (document.cookie.length>0)
- {
- c_start=document.cookie.indexOf(c_name + \"=\");
- if (c_start!=-1)
- {
- c_start=c_start + c_name.length+1;
- c_end=document.cookie.indexOf(\";\",c_start);
- if (c_end==-1) c_end=document.cookie.length;
- return unescape(document.cookie.substring(c_start,c_end));
- }
- }
-return \"\";
-}
-
function success(position) {
$('#geolocate').val(position.coords.latitude+','+position.coords.longitude);
-setCookie('geolocate',position.coords.latitude+','+position.coords.longitude,1);
-}
-
+// setCookie('geolocate',position.coords.latitude+','+position.coords.longitude,1);
+$('#here').click(function(event) { $('#geolocate').val(doAJAXrequestForGeolocSessionHere()); return false;});
+$('#here').show();
+}
function error(msg) {
console.log(msg);
}
@@ -104,17 +100,25 @@
echo '</head>
<body>
';
-if ($opendiv) echo '<div data-role="page">
+if ($opendiv) {
+ echo '<div data-role="page">
<div data-role="header">
<h1>'.$pageTitle.'</h1>
</div><!-- /header -->
<div data-role="content"> ';
}
+}
function include_footer()
{
- echo '</div>';
+ if ($geolocate && isset($_SESSION['lat'])) {
+ echo "<script>
+ $('#here').click(function(event) { $('#geolocate').val(doAJAXrequestForGeolocSessionHere()); return false;});
+$('#here').show();
+</script>";
+ }
+ echo '</div>';
}
$service_periods = Array ('sunday','saturday','weekday');
@@ -143,7 +147,7 @@
{
// from http://www.perturb.org/display/Perlfunc__Seconds_Since_Midnight.html
if (isset($_SESSION['time'])) {
- $time = mkdate($_SESSION['time']);
+ $time = strtotime($_SESSION['time']);
return (date("G",$time) * 3600) + (date("i",$time) * 60) + date("s",$time);
}
return (date("G") * 3600) + (date("i") * 60) + date("s");
@@ -160,6 +164,7 @@
}
function getPage($url)
{
+ debug($url);
$ch = curl_init($url);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_HEADER, 0 );
@@ -223,8 +228,11 @@
}
$center = $totalLat/sizeof($mapPoints).",".$totalLon/sizeof($mapPoints);
}
-
- return '<img src="staticmaplite/staticmap.php?center='.$center.'&zoom='.$zoom.'&size='.$width.'x'.$height.'&maptype=mapnik&markers='.$markers.'" width='.$width.' height='.$height.'>';
+ $output = "";
+ $output .= '<div data-role="collapsible" data-collapsed="true"><h3>Open Map...</h3>';
+ $output .= '<center><img src="staticmaplite/staticmap.php?center='.$center.'&zoom='.$zoom.'&size='.$width.'x'.$height.'&maptype=mapnik&markers='.$markers.'" width='.$width.' height='.$height.'></center>';
+ $output .= '</div>';
+ return $output;
}
function distance($lat1, $lng1, $lat2, $lng2)
@@ -330,7 +338,8 @@
}
function geocode($query, $giveOptions) {
- $url = "http://geocoding.cloudmade.com/daa03470bb8740298d4b10e3f03d63e6/geocoding/v2/find.js?query=".$query."&bbox=-35.5,149.00,-35.15,149.1930&return_location=true&bbox_only=true";
+ global $cloudmadeAPIkey;
+ $url = "http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?query=".$query."&bbox=-35.5,149.00,-35.15,149.1930&return_location=true&bbox_only=true";
$contents = json_decode(getPage($url));
if ($giveOptions) return $contents->features;
elseif (isset($contents->features[0]->centroid)) return $contents->features[0]->centroid->coordinates[0].",".$contents->features[0]->centroid->coordinates[1];
@@ -338,7 +347,8 @@
}
function reverseGeocode($lat,$lng) {
- $url = "http://geocoding.cloudmade.com/daa03470bb8740298d4b10e3f03d63e6/geocoding/v2/find.js?around=".$lat.",".$lng."&distance=closest&object_type=road";
+ global $cloudmadeAPIkey;
+ $url = "http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?around=".$lat.",".$lng."&distance=closest&object_type=road";
$contents = json_decode(getPage($url));
return $contents->features[0]->properties->name;
}
@@ -355,6 +365,76 @@
function bracketsMeanNewLine($input) {
return str_replace(")","</small>",str_replace("(","<br><small>",$input));
}
+
+function viaPoints($tripid,$stopid, $timingPointsOnly = false) {
+ global $APIurl;
+ $url = $APIurl."/json/tripstoptimes?trip=".$tripid;
+
+$json = json_decode(getPage($url));
+debug(print_r($json,true));
+$stops = $json[0];
+$times = $json[1];
+$foundStop = false;
+$viaPoints = Array();
+foreach ($stops as $key => $row)
+{
+ if ($foundStop) {
+ if (!$timingPointsOnly || !startsWith($row[5],"Wj") ) {
+ $viaPoints[] = Array("id" => $row[0], "name" => $row[1], "time" => $times[$key]);
+ }
+ } else {
+ if ($row[0] == $stopid) $foundStop = true;
+ }
+}
+ return $viaPoints;
+}
+
+function viaPointNames($tripid,$stopid) {
+ $points = viaPoints($tripid,$stopid,true);
+ $pointNames = Array();
+ foreach ($points as $point) {
+ $pointNames[] = $point['name'];
+ }
+ return implode(", ",$pointNames);
+}
+
+function timePlaceSettings($geolocate = false) {
+ global $service_periods;
+ $geoerror = false;
+ if ($geolocate == true) {
+ $geoerror = !isset($_SESSION['lat']) || !isset($_SESSION['lat'])
+ || $_SESSION['lat'] == "" || $_SESSION['lon'] == "";
+ }
+ if ($geoerror) {
+ echo '<div class="error">Sorry, but your location could not currently be detected.
+ Please allow location permission, wait for your location to be detected,
+ or enter an address/co-ordinates in the box below.</div>';
+ }
+ echo '<div data-role="collapsible" data-collapsed="'.!$geoerror.'">
+ <h3>Change Time/Place...</h3>
+ <form action="" method="post">
+ <div class="ui-body">
+ <div data-role="fieldcontain">
+ <label for="geolocate"> Current Location: </label>
+ <input type="text" id="geolocate" name="geolocate" value="Enter co-ordinates or address here"/> <a href="#" style="display:none" name="here" id="here"/>Here?</a>
+ </div>
+ <div data-role="fieldcontain">
+ <label for="time"> Time: </label>
+ <input type="time" name="time" id="time" value="'. ($_SESSION['time'] ? $_SESSION['time'] : date("H:m")).'"/> <a href="#" name="currentTime" id="currentTime"/>Current Time?</a>
+ </div>
+ <div data-role="fieldcontain">
+ <label for="service_period"> Service Period: </label>
+ <select name="service_period">';
+
+ 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>
+
+ <input type="submit" value="Update"/>
+ </form>
+ </div></div>';
+}
?>
-
-
--- a/busui/index.php
+++ b/busui/index.php
@@ -1,62 +1,28 @@
<?php
include('common.inc.php');
- // remove all the variable in the session
- session_unset();
-
- //destroy the session
- session_destroy();
- if (isset($_REQUEST['service_period'])) $_SESSION['service_period'] = $_REQUEST['service_period'];
- if (isset($_REQUEST['time'])) $_SESSION['time'] = $_REQUEST['time'];
- // todo take in cellids and crossreference with http://realtimeblog.free.fr/latest/cellular/processed/sqlite/505_sqlite_zones.zip to estimate location
include_header("bus.lambdacomplex.org",false, true)
?>
<div data-role="page">
<div data-role="content">
<div id="jqm-homeheader">
- <center><h3 id="jqm-logo"><img src="apple-touch-icon.png" alt="logo" width="64" height="64" /><br>
- busness time</h3></center>
+ <center><h3>busness time</h3><br><small>Canberra Bus Timetables and Trip Planner</small></center>
</div>
<a href="tripPlanner.php" data-role="button">Launch Trip Planner...</a>
<ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="b">
<li data-role="list-divider">Timetables - Stops</li>
<li><a href="stopList.php">Major (Timing Point) Stops</a></li>
<li><a href="stopList.php">All Stops</a></li>
- <li><a href="stopList.php?nearbyfavs=yes">Nearby/Favourite Stops</a></li>
+ <li><a href="stopList.php?suburbs=yes">Stops By Suburb</a></li>
+ <li><a class="nearby" href="stopList.php?nearby=yes">Nearby Stops</a></li>
</ul>
<ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="b">
<li data-role="list-divider">Timetables - Routes</li>
<li><a href="routeList.php">Routes By Final Destination</a></li>
<li><a href="routeList.php?bynumber=yes">Routes By Number</a></li>
- <li><a href="routeList.php?nearbyfavs=yes">Nearby/Favourites Routes</a></li>
+ <li><a class="nearby" href="routeList.php?nearby=yes">Nearby Routes</a></li>
</ul>
- <div class="ui-body ui-body-c">
- <h3>Time/Place Settings</h3>
- <div data-role="fieldcontain">
- <label for="geolocate"> Current Location: </label>
- <input type="text" id="geolocate" name="geolocate"/> <a href="#" style="display:none" name="here" id="here"/>Here?</a>
- </div>
- <div data-role="fieldcontain">
- <label for="time"> Time: </label>
- <input type="time" value="<?php echo date("H:m"); ?>"/> <a href="#" style="display:none" name="currentTime" id="currentTime"/>Current Time?</a>
- </div>
- <div data-role="fieldcontain">
- <label for="service_period"> Service Period: </label>
- <select name="service_period">
- <?php
- foreach ($service_periods as $service_period) {
- echo "<option value=\"$service_period\"".(service_period() === $service_period ? "SELECTED" : "").'>'.ucwords($service_period).'</option>';
- }?>
- </select>
- <a href="#" style="display:none" name="currentPeriod" id="currentPeriod"/>Current Period?</a>
- </div>
-
- <input type="submit" value="Update"/>
- </div>
- <script>
-$('#here').click(function(event) { $('#geolocate').val(getCookie('geolocate')); return false;});
-$('#here').show();
- </script>
- </div>
+<?php echo timePlaceSettings();?>
+
</div>
</body>
</html>
--- a/busui/js/jquery.ui.datepicker.mobile.js
+++ b/busui/js/jquery.ui.datepicker.mobile.js
@@ -47,9 +47,12 @@
};
//bind to pagecreate to automatically enhance date inputs
- $( ".ui-page" ).live( "pagecreate", function(){
+ $( ".ui-page" ).live( "pagecreate", function(){
$( "input[type='date'], input[data-type='date']" ).each(function(){
+ if ($(this).hasClass("hasDatepicker") == false) {
$(this).after( $( "<div />" ).datepicker({ altField: "#" + $(this).attr( "id" ), showOtherMonths: true }) );
- });
- });
+ $(this).addClass("hasDatepicker");
+ }
+ });
+ });
})( jQuery );
--- a/busui/routeList.php
+++ b/busui/routeList.php
@@ -6,7 +6,8 @@
<ul>
<li><a href="routeList.php">By Final Destination...</a></li>
<li><a href="routeList.php?bynumber=yes">By Number... </a></li>
- <!--<li><a href="routeList.php?bysuburb=yes">By Suburb... </a></li>-->
+ <li><a href="routeList.php?bysuburb=yes">By Suburb... </a></li>
+ <li><a href="routeList.php?nearby=yes">Nearby... </a></li>
</ul>
</div>
';
--- a/busui/schedule_viewer.py
+++ b/busui/schedule_viewer.py
@@ -89,10 +89,10 @@
"""Return tuple as expected by javascript function addStopMarkerFromList"""
return (stop.stop_id, stop.stop_name, float(stop.stop_lat),
float(stop.stop_lon), stop.location_type, stop.stop_code)
-def StopCodeToTuple(stop, code):
+def StopZoneToTuple(stop):
+ """Return tuple as expected by javascript function addStopMarkerFromList"""
return (stop.stop_id, stop.stop_name, float(stop.stop_lat),
- float(stop.stop_lon), stop.location_type, code)
-
+ float(stop.stop_lon), stop.location_type, stop.stop_code, stop.zone_id)
class ScheduleRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self):
@@ -360,10 +360,8 @@
schedule = self.server.schedule
matches = []
for s in schedule.GetStopList():
- #wtf, stop_code changes into stop_name after .find()
- virginstopCode = s.stop_code
if s.stop_code.find("Wj") == -1:
- matches.append(StopCodeToTuple(s,virginstopCode))
+ matches.append(StopToTuple(s))
return matches
def handle_json_GET_stopsearch(self, params):
@@ -389,10 +387,17 @@
query = params.get('q', None).lower()
matches = []
for s in schedule.GetStopList():
- #wtf, stop_code changes into stop_name after .find()
- virginstopCode = s.stop_code
if s.stop_code.lower().find(query) != -1:
- matches.append(StopCodeToTuple(s,virginstopCode))
+ matches.append(StopToTuple(s))
+ return matches
+
+ def handle_json_GET_stopzonesearch(self, params):
+ schedule = self.server.schedule
+ query = params.get('q', None).lower()
+ matches = []
+ for s in schedule.GetStopList():
+ if s.zone_id != None and s.zone_id.lower().find(query) != -1:
+ matches.append(StopToTuple(s))
return matches
def handle_json_GET_stop(self, params):
@@ -416,7 +421,6 @@
# Need make a tuple to find correct bisect point
time_trips = time_trips[bisect.bisect_left(time_trips, (time, 0)):]
time_trips = time_trips[:15]
- # TODO: combine times for a route to show next 2 departure times
result = []
for time, (trip, index), tp in time_trips:
headsign = None
@@ -436,8 +440,9 @@
if len(trip_name):
trip_name += " - "
trip_name += route.route_long_name
- if headsign:
- trip_name += " (Direction: %s)" % headsign
+ # comment out directions because we already have them in the long name
+ #if headsign:
+ # trip_name += " (Direction: %s)" % headsign
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/busui/stop.php
+++ b/busui/stop.php
@@ -3,9 +3,9 @@
$url = $APIurl."/json/stop?stop_id=".$_REQUEST['stopid'];
$stop = json_decode(getPage($url));
-include_header("Trips passing ".$stop[1]);
+include_header($stop[1]);
+timePlaceSettings();
echo '<div data-role="content" class="ui-content" role="main"><p>'.staticmap(Array(0 => Array($stop[2],$stop[3]))).'</p>';
-// change date/time/service_period
echo ' <ul data-role="listview" data-inset="true">';
$url = $APIurl."/json/stoptrips?stop=".$_REQUEST['stopid']."&time=".midnight_seconds()."&service_period=".service_period();
$trips = json_decode(getPage($url));
@@ -13,7 +13,8 @@
foreach ($trips as $row)
{
echo '<li>';
-echo '<h3><a href="trip.php?stopid='.$_REQUEST['stopid'].'&tripid='.$row[1][0].'">'.bracketsMeanNewLine($row[1][1]).'</a></h3>';
+echo '<h3><a href="trip.php?stopid='.$_REQUEST['stopid'].'&tripid='.$row[1][0].'">'.$row[1][1];
+echo '<br><small>Via: '.viaPointNames($row[1][0],$_REQUEST['stopid']).'</small> </a></h3>';
echo '<p class="ui-li-aside"><strong>'.midnight_seconds_to_time($row[0]).'</strong></p>';
echo '</li>';
}
--- a/busui/stopList.php
+++ b/busui/stopList.php
@@ -1,8 +1,9 @@
<?php
include('common.inc.php');
-include_header("Stops");
-echo'
- <div data-role="navbar">
+
+function navbar() {
+ echo'
+ <div data-role="navbar">
<ul>
<li><a href="stopList.php">Timing Points</a></li>
<li><a href="stopList.php?suburbs=yes">By Suburb</a></li>
@@ -11,8 +12,12 @@
</ul>
</div>
';
+ timePlaceSettings();
+}
// By suburb
if (isset($_REQUEST['suburbs'])) {
+ include_header("Stops by Suburb");
+ navbar();
echo ' <ul data-role="listview" data-filter="true" data-inset="true" >';
foreach ($suburbs as $suburb) {
echo '<li><a href="stopList.php?suburb='.urlencode($suburb).'">'.$suburb.'</a></li>';
@@ -20,6 +25,25 @@
echo '</ul>';
} else {
// Timing Points / All stops
+
+if ($_REQUEST['allstops']) {
+ $url = $APIurl."/json/stops";
+ include_header("All Stops");
+ navbar();
+} else if ($_REQUEST['nearby']) {
+ $url = $APIurl."/json/neareststops?lat={$_SESSION['lat']}&lon={$_SESSION['lon']}&limit=15";
+include_header("Nearby Stops");
+ navbar();
+ timePlaceSettings();
+} else if ($_REQUEST['suburb']) {
+ $url = $APIurl."/json/stopzonesearch?q=".filter_var($_REQUEST['suburb'], FILTER_SANITIZE_STRING);
+include_header("Stops in ".ucwords(filter_var($_REQUEST['suburb'], FILTER_SANITIZE_STRING)));
+ navbar();
+} else {
+ $url = $APIurl."/json/timingpoints";
+ include_header("Timing Points / Major Stops");
+ navbar();
+}
echo '<div class="noscriptnav"> Go to letter: ';
foreach(range('A','Z') as $letter)
{
@@ -30,10 +54,6 @@
$('.noscriptnav').hide();
</script>";
echo ' <ul data-role="listview" data-filter="true" data-inset="true" >';
-$url = $APIurl."/json/timingpoints";
-if ($_REQUEST['allstops']) $url = $APIurl."/json/stops";
-if ($_REQUEST['nearby']) $url = $APIurl."/json/neareststops?lat={$_REQUEST['lat']}&lon={$_REQUEST['lon']}&limit=15";
-if ($_REQUEST['suburb']) $url = $APIurl."/json/neareststops?lat={$_REQUEST['suburb']}";
$contents = json_decode(getPage($url));
debug(print_r($contents,true));
foreach ($contents as $key => $row) {
--- a/busui/trip.php
+++ b/busui/trip.php
@@ -1,11 +1,12 @@
<?php
include('common.inc.php');
-$tripid = $_REQUEST['tripid'];
+$tripid = filter_var($_REQUEST['tripid'],FILTER_SANITIZE_NUMBER_INT);
+$stopid = filter_var($_REQUEST['stopid'],FILTER_SANITIZE_NUMBER_INT);
if ($_REQUEST['routeid']) {
- $url = $APIurl."/json/routetrips?route_id=".$_REQUEST['routeid'];
+ $url = $APIurl."/json/routetrips?route_id=".filter_var($_REQUEST['routeid'],FILTER_SANITIZE_NUMBER_INT);
$trips = json_decode(getPage($url));
-debug(print_r($trips,true));
-foreach ($trips as $trip)
+ debug(print_r($trips,true));
+ foreach ($trips as $trip)
{
if ($trip[0] < midnight_seconds()) {
$tripid = $trip[1];
@@ -18,6 +19,7 @@
$trips = array_flatten(json_decode(getPage($url)));
debug(print_r($trips,true));
include_header("Stops on ". $trips[1]->route_short_name . ' '. $trips[1]->route_long_name);
+timePlaceSettings();
echo ' <ul data-role="listview" data-inset="true">';
@@ -30,7 +32,9 @@
foreach ($stops as $key => $row)
{
echo '<li>';
-echo '<h3><a href="stop.php?stopid='.$row[0].'">'.bracketsMeanNewLine($row[1]).'</a></h3>';
+echo '<h3><a href="stop.php?stopid='.$row[0].'">'.bracketsMeanNewLine($row[1]);
+if ($row[0] == $stopid) echo "<br><small> Current Location</small>";
+echo '</a></h3>';
echo '<p class="ui-li-aside">'.midnight_seconds_to_time($times[$key]).'</p>';
echo '</li>';
}
--- a/busui/tripPlanner.php
+++ b/busui/tripPlanner.php
@@ -1,13 +1,16 @@
<?php
include('common.inc.php');
include_header("Trip Planner", true, true);
+ $from = (isset($_REQUEST['from']) ? filter_var($_REQUEST['from'],FILTER_SANITIZE_STRING) : "Brigalow");
+ $to = (isset($_REQUEST['to']) ? filter_var($_REQUEST['to'],FILTER_SANITIZE_STRING) : "Barry");
+ $date = (isset($_REQUEST['date']) ? filter_var($_REQUEST['date'],FILTER_SANITIZE_STRING) : date("m/d/Y"));
+ $time = (isset($_REQUEST['time']) ? filter_var($_REQUEST['time'],FILTER_SANITIZE_STRING) : date("H:m"));
+ # todo: convert date from form to h:ia?
+
function tripPlanForm($errorMessage = "")
{
- $from = (isset($_REQUEST['from']) ? $_REQUEST['from'] : "Brigalow");
- $to = (isset($_REQUEST['to']) ? $_REQUEST['to'] : "Barry");
- $date = (isset($_REQUEST['date']) ? $_REQUEST['date'] : date("m/d/Y"));
- $time = (isset($_REQUEST['time']) ? $_REQUEST['time'] : date("h:ia"));
- echo "<font color=red>$errorMessage</font>";
+ global $date,$time,$from,$to;
+ echo "<font color=red>$errorMessage</font>";
echo '<form action="tripPlanner.php" method="post">
<div data-role="fieldcontain">
<label for="from">I would like to go from</label>
@@ -85,17 +88,17 @@
}
if ($_REQUEST['time']) {
- $toPlace = (startsWith($_REQUEST['to'], "-") ? $_REQUEST['to'] : geocode(urlencode($_REQUEST['to']), false));
- $fromPlace = (startsWith($_REQUEST['from'], "-") ? $_REQUEST['from'] : geocode(urlencode($_REQUEST['from']), false));
+ $toPlace = (startsWith($to, "-") ? $to : geocode($to, false));
+ $fromPlace = (startsWith($from, "-") ? $from : geocode($from, false));
if ($toPlace == "" || $fromPlace == "") {
$errorMessage = "";
if ($toPlace === "")
- $errorMessage .= urlencode($_REQUEST['to']) . " not found.<br>\n";
+ $errorMessage .= urlencode($to) . " not found.<br>\n";
if ($fromPlace === "")
- $errorMessage .= urlencode($_REQUEST['from']) . " not found.<br>\n";
+ $errorMessage .= urlencode($from) . " not found.<br>\n";
tripPlanForm($errorMessage);
} else {
- $url = "http://10.1.0.243:5080/opentripplanner-api-webapp/ws/plan?_dc=1290254798856&arriveBy=false&date=" . urlencode($_REQUEST['date']) . "&time=" . urlencode($_REQUEST['time']) . "&mode=TRANSIT%2CWALK&optimize=QUICK&maxWalkDistance=840&wheelchair=false&toPlace=$toPlace&fromPlace=$fromPlace&intermediatePlaces=";
+ $url = $otpAPIurl."ws/plan?date=" . urlencode($_REQUEST['date']) . "&time=" . urlencode($_REQUEST['time']) . "&mode=TRANSIT%2CWALK&optimize=QUICK&maxWalkDistance=840&wheelchair=false&toPlace=$toPlace&fromPlace=$fromPlace&intermediatePlaces=";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
--- a/maxious-canberra-transit-feed/04-generateymlinclude.rb
+++ b/maxious-canberra-transit-feed/04-generateymlinclude.rb
@@ -46,7 +46,7 @@
# 3 = name
# 4 = suburb(s)
#pp time_point[0]
- f2.puts " - { name: #{stop[3]},stop_code: #{stop[0]}!#{stop[4]}, lat: #{Float(stop[1])/10000000}, lng: #{Float(stop[2])/10000000}}"
+ f2.puts " - { name: #{stop[3]},stop_code: #{stop[0]}, lat: #{Float(stop[1])/10000000}, lng: #{Float(stop[2])/10000000}, zone_id: #{stop[4]} }"
end
f2.puts "routes:\n";
end
--- a/maxious-canberra-transit-feed/cbrtable.yml
+++ b/maxious-canberra-transit-feed/cbrtable.yml
@@ -228,1665 +228,1665 @@
- { name: Woden Bus Station (Platform 9),stop_code: Woden Bus Station (Platform 9), lat: -35.3442083, lng: 149.0877771}
- { name: Woodcock / Clare Dennis,stop_code: Woodcock / Clare Dennis, lat: -35.4422566, lng: 149.0854375}
- { name: Yarralumla,stop_code: Yarralumla, lat: -35.30725, lng: 149.0972}
- - { name: Cowper Street,stop_code: Wjz5SWN, lat: -35.2535974, lng: 149.1390827}
- - { name: Learmonth Drive,stop_code: Wjz230G, lat: -35.4032475, lng: 149.0634951}
- - { name: Hurtle Avenue,stop_code: Wjz1dX2, lat: -35.4341379, lng: 149.0831762}
- - { name: Copland Drive,stop_code: Wjz67xQ, lat: -35.2046532, lng: 149.0691406}
- - { name: Baddeley Crescent,stop_code: Wjz67nz, lat: -35.2006201, lng: 149.0659965}
- - { name: King Edward Terrace,stop_code: Wjz4S1U, lat: -35.2983385, lng: 149.1296979}
- - { name: Theodore Street,stop_code: Wjz3fCx, lat: -35.333256, lng: 149.0798309}
- - { name: Hopetoun Circuit,stop_code: Wjz4A7o, lat: -35.3052441, lng: 149.107042}
- - { name: Schlich Street,stop_code: Wjz4tpE, lat: -35.3038329, lng: 149.1005569}
- - { name: Hopetoun Circuit,stop_code: Wjz4A2c, lat: -35.3082791, lng: 149.1066534}
- - { name: Lawrence Wackett Crescent,stop_code: Wjz1HEb, lat: -35.4471149, lng: 149.1245306}
- - { name: Chippindall Circuit,stop_code: Wjz1xWZ, lat: -35.4565002, lng: 149.1174205}
- - { name: Goyder Street,stop_code: Wjzb705, lat: -35.3370433, lng: 149.1505109}
- - { name: Clift Crescent,stop_code: Wjz1CdY, lat: -35.4270927, lng: 149.1090734}
- - { name: Kingsford Smith Drive,stop_code: Wjr_UPA, lat: -35.1977713, lng: 149.0605874}
- - { name: Clarey Crescent,stop_code: Wjz707Z, lat: -35.1948745, lng: 149.0637273}
- - { name: Owen Dixon Drive,stop_code: Wjz70IY, lat: -35.1970964, lng: 149.0706179}
- - { name: Copland Drive,stop_code: Wjz67BD, lat: -35.2015929, lng: 149.0686908}
- - { name: Bimbimbie Street,stop_code: Wjz68Y0, lat: -35.2413091, lng: 149.0832098}
- - { name: Bimbimbie Street,stop_code: Wjz68Ip, lat: -35.2412881, lng: 149.0809439}
- - { name: Bandjalong Crescent,stop_code: Wjz5dQt, lat: -35.2573605, lng: 149.0822652}
- - { name: Cooyong Street,stop_code: Wjz5NAQ, lat: -35.2794375, lng: 149.1349942}
- - { name: Kambah pool Road,stop_code: WjrXMN9, lat: -35.3751239, lng: 149.0489789}
- - { name: Hodgson Crescent,stop_code: Wjz3i6e, lat: -35.3603188, lng: 149.084779}
- - { name: Melrose Drive,stop_code: Wjz3k1J, lat: -35.3528521, lng: 149.0854118}
- - { name: Amy Ackman Street,stop_code: Wjz7ZaP, lat: -35.1710474, lng: 149.141884}
- - { name: Cowper Street,stop_code: Wjz5Za5, lat: -35.2588175, lng: 149.1409439}
- - { name: Gundaroo Drive,stop_code: Wjz7xp9, lat: -35.193896, lng: 149.1108506}
- - { name: Constitution Avenue,stop_code: Wjz5MsT, lat: -35.2846782, lng: 149.133671}
- - { name: Hindmarsh Drive,stop_code: WjrXBSS, lat: -35.3438051, lng: 149.0278253}
- - { name: Northbourne Avenue,stop_code: