--- a/busui/common.inc.php +++ b/busui/common.inc.php @@ -1,13 +1,30 @@ <?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,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'] == "10.0.1.154" || $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || !$_SERVER['SERVER_NAME']; @@ -21,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> @@ -49,12 +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" /> @@ -64,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); } @@ -106,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'); @@ -145,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"); @@ -336,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]; @@ -344,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; } @@ -394,10 +398,21 @@ return implode(", ",$pointNames); } -function timePlaceSettings() { +function timePlaceSettings($geolocate = false) { global $service_periods; - echo '<div data-role="collapsible" data-collapsed="true"> + $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> @@ -405,7 +420,7 @@ </div> <div data-role="fieldcontain"> <label for="time"> Time: </label> - <input type="time" value="'. date("H:m").'"/> <a href="#" style="display:none" name="currentTime" id="currentTime"/>Current Time?</a> + <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> @@ -419,10 +434,7 @@ </div> <input type="submit" value="Update"/> + </form> </div></div>'; -echo " <script> -$('#here').click(function(event) { $('#geolocate').val(getCookie('geolocate')); return false;}); -$('#here').show(); - </script>"; } ?>
--- a/busui/index.php +++ b/busui/index.php @@ -1,20 +1,11 @@ <?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"> @@ -22,13 +13,13 @@ <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?suburbs=yes">Stops By Suburb</a></li> - <li><a href="stopList.php?nearby=yes">Nearby Stops</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?nearby=yes">Nearby Routes</a></li> + <li><a class="nearby" href="routeList.php?nearby=yes">Nearby Routes</a></li> </ul> <?php echo timePlaceSettings();?>
--- 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/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));
--- 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/stopzonesearch?q={$_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,12 +1,12 @@ <?php include('common.inc.php'); -$tripid = $_REQUEST['tripid']; -$stopid = $_REQUEST['stopid']; +$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]; @@ -19,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">';
--- a/busui/tripPlanner.php +++ b/busui/tripPlanner.php @@ -1,14 +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:m")); - # todo: convert date from form to 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> @@ -86,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/cbrtable.yml.in.in +++ b/maxious-canberra-transit-feed/cbrtable.yml.in.in @@ -5,6 +5,7 @@ agency_name: ACT Internal Omnibus Network (ACTION) agency_url: http://www.action.act.gov.au/ agency_timezone: Australia/Sydney + agency_phone: 131710 + agency_lang: en -