--- a/busui/common.inc.php +++ b/busui/common.inc.php @@ -1,14 +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,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) { @@ -19,25 +38,40 @@ } 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> <head> - <title>bus.lambdacomplex.org - '.$pageTitle.'</title> + <title>busness time - '.$pageTitle.'</title> '; - if (isDebug()) echo '<link rel="stylesheet" href="jquery-mobile-1.0a2.css" /> - <script type="text/javascript" src="jquery-mobile-1.0a2.js"></script>'; - else echo '<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a2/jquery.mobile-1.0a2.min.css" /> - <script type="text/javascript" src="http://code.jquery.com/mobile/1.0a2/jquery.mobile-1.0a2.min.js"></script>'; + if (isDebug()) echo '<link rel="stylesheet" href="css/jquery-mobile-1.0a3.css" /> + <script type="text/javascript" src="js/jquery-1.5.js"></script> + <script type="text/javascript" src="js/jquery-mobile-1.0a3.js"></script>'; + else echo '<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.css" /> + <script type="text/javascript" src="http://code.jquery.com/jquery-1.5.js"></script> + <script type="text/javascript" src="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.js"></script>'; echo ' +<link rel="stylesheet" href="css/jquery.ui.datepicker.mobile.css" /> + <script> + //reset type=date inputs to text + $( document ).bind( "mobileinit", function(){ + $.mobile.page.prototype.options.degradeInputs.date = true; + }); + </script> + <script src="js/jQuery.ui.datepicker.js"></script> + <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" /> @@ -47,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); } @@ -89,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'); @@ -128,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"); @@ -136,15 +155,22 @@ function midnight_seconds_to_time($seconds) { +if ($seconds > 0) { $midnight = mktime (0, 0, 0, date("n"), date("j"), date("Y")); return date("h:ia",$midnight+$seconds); +} else { +return ""; +} } function getPage($url) { + debug($url); $ch = curl_init($url); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( $ch, CURLOPT_HEADER, 0 ); + curl_setopt($ch,CURLOPT_TIMEOUT,30); $page = curl_exec($ch); + if(curl_errno($ch)) echo "<font color=red> Database temporarily unavailable: ".curl_errno($ch)." ".curl_error($ch)."</font>"; curl_close($ch); return $page; } @@ -202,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) @@ -309,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]; @@ -317,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; } @@ -331,6 +362,79 @@ if($case){return (strcmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0);} return (strcasecmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0); } +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>'; +} ?> - -