Fix css issues
[bus.git] / busui / tripPlanner.php
blob:a/busui/tripPlanner.php -> blob:b/busui/tripPlanner.php
<?php <?php
include('common.inc.php'); include('common.inc.php');
include_header("Trip Planner", true, true); 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 = "") function tripPlanForm($errorMessage = "")
{ {
$from = (isset($_REQUEST['from']) ? $_REQUEST['from'] : "Brigalow"); global $date,$time,$from,$to;
$to = (isset($_REQUEST['to']) ? $_REQUEST['to'] : "Barry"); echo "<font color=red>$errorMessage</font>";
$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>";  
echo '<form action="tripPlanner.php" method="post"> echo '<form action="tripPlanner.php" method="post">
<div data-role="fieldcontain"> <div data-role="fieldcontain">
<label for="from">I would like to go from</label> <label for="from">I would like to go from</label>
<input type="text" name="from" id="from" value="' . $from . '" /> <input type="text" name="from" id="from" value="' . $from . '" />
<a href="#" style="display:none" name="fromHere" id="fromHere"/>Here?</a> <a href="#" style="display:none" name="fromHere" id="fromHere"/>Here?</a>
</div> </div>
<div data-role="fieldcontain"> <div data-role="fieldcontain">
<label for="to"> to </label> <label for="to"> to </label>
<input type="text" name="to" id="to" value="' . $to . '" /> <input type="text" name="to" id="to" value="' . $to . '" />
<a href="#" style="display:none" name="toHere" id="toHere"/>Here?</a> <a href="#" style="display:none" name="toHere" id="toHere"/>Here?</a>
</div> </div>
<div data-role="fieldcontain"> <div data-role="fieldcontain">
<label for="date"> on </label> <label for="date"> on </label>
<input type="date" name="date" id="date" value="' . $date . '" /> <input type="date" name="date" id="date" value="' . $date . '" />
</div> </div>
<div data-role="fieldcontain"> <div data-role="fieldcontain">
<label for="time"> at </label> <label for="time"> at </label>
<input type="time" name="time" id="time" value="' . $time . '" /> <input type="time" name="time" id="time" value="' . $time . '" />
</div> </div>
<input type="submit" value="Go!"></form>'; <input type="submit" value="Go!"></form>';
echo "<script> echo "<script>
$('#toHere').click(function(event) { $('#to').val(getCookie('geolocate')); return false;}); $('#toHere').click(function(event) { $('#to').val(getCookie('geolocate')); return false;});
$('#toHere').show(); $('#toHere').show();
$('#fromHere').click(function(event) { $('#from').val(getCookie('geolocate')); return false;}); $('#fromHere').click(function(event) { $('#from').val(getCookie('geolocate')); return false;});
$('#fromHere').show(); $('#fromHere').show();
   
</script>"; </script>";
} }
function processItinerary($itineraryNumber, $itinerary) function processItinerary($itineraryNumber, $itinerary)
{ {
echo '<div data-role="collapsible" ' . ($itineraryNumber > 0 ? 'data-collapsed="true"' : "") . '> <h3> Option #' . ($itineraryNumber + 1) . ": " . floor($itinerary->duration / 60000) . " minutes ({$itinerary->startTime} to {$itinerary->endTime})</h3><p>"; echo '<div data-role="collapsible" ' . ($itineraryNumber > 0 ? 'data-collapsed="true"' : "") . '> <h3> Option #' . ($itineraryNumber + 1) . ": " . floor($itinerary->duration / 60000) . " minutes ({$itinerary->startTime} to {$itinerary->endTime})</h3><p>";
echo "Walking time: " . floor($itinerary->walkTime / 60000) . " minutes (" . floor($itinerary->walkDistance) . " meters)<br>\n"; echo "Walking time: " . floor($itinerary->walkTime / 60000) . " minutes (" . floor($itinerary->walkDistance) . " meters)<br>\n";
echo "Transit time: " . floor($itinerary->transitTime / 60000) . " minutes<br>\n"; echo "Transit time: " . floor($itinerary->transitTime / 60000) . " minutes<br>\n";
echo "Waiting time: " . floor($itinerary->waitingTime / 60000) . " minutes<br>\n"; echo "Waiting time: " . floor($itinerary->waitingTime / 60000) . " minutes<br>\n";
   
if (is_array($itinerary->legs->leg)) { if (is_array($itinerary->legs->leg)) {
$legMarkers = array(); $legMarkers = array();
foreach ($itinerary->legs->leg as $legNumber => $leg) { foreach ($itinerary->legs->leg as $legNumber => $leg) {
$legMarkers[] = array($leg->from->lat, $leg->from->lon); $legMarkers[] = array($leg->from->lat, $leg->from->lon);
} }
echo '' . staticmap($legMarkers) . "<br>\n"; echo '' . staticmap($legMarkers) . "<br>\n";
echo '<ul>'; echo '<ul>';
foreach ($itinerary->legs->leg as $legNumber => $leg) { foreach ($itinerary->legs->leg as $legNumber => $leg) {
echo '<li>'; echo '<li>';
processLeg($legNumber, $leg); processLeg($legNumber, $leg);
echo "</li>"; echo "</li>";
} }
echo "</ul>"; echo "</ul>";
} else { } else {
echo '' . staticmap(array(array($itinerary->legs->leg->from->lat, $itinerary->legs->leg->from->lon))) . "<br>\n"; echo '' . staticmap(array(array($itinerary->legs->leg->from->lat, $itinerary->legs->leg->from->lon))) . "<br>\n";
processLeg(0, $itinerary->legs->leg); processLeg(0, $itinerary->legs->leg);
} }
echo "</p></div>"; echo "</p></div>";
} }
function processLeg($legNumber, $leg) { function processLeg($legNumber, $leg) {
$legArray = object2array($leg); $legArray = object2array($leg);
echo '<h3>Leg #' . ($legNumber + 1) . " ( {$legArray['@mode']} from: {$leg->from->name} to {$leg->to->name}, " . floor($leg->duration / 60000) . " minutes) </h3>\n"; echo '<h3>Leg #' . ($legNumber + 1) . " ( {$legArray['@mode']} from: {$leg->from->name} to {$leg->to->name}, " . floor($leg->duration / 60000) . " minutes) </h3>\n";
if ($legArray["@mode"] === "BUS") { if ($legArray["@mode"] === "BUS") {
echo "Take bus {$legArray['@route']} " . str_replace("To", "towards", $legArray['@headsign']) . "<br>"; echo "Take bus {$legArray['@route']} " . str_replace("To", "towards", $legArray['@headsign']) . "<br>";
} else { } else {
$walkStepMarkers = array(); $walkStepMarkers = array();
foreach ($leg->steps->walkSteps as $stepNumber => $step) { foreach ($leg->steps->walkSteps as $stepNumber => $step) {
$walkStepMarkers[] = array($step->lat, $step->lon); $walkStepMarkers[] = array($step->lat, $step->lon);
} }
echo "" . staticmap($walkStepMarkers, "icong") . "<br>\n"; echo "" . staticmap($walkStepMarkers, "icong") . "<br>\n";
foreach ($leg->steps->walkSteps as $stepNumber => $step) { foreach ($leg->steps->walkSteps as $stepNumber => $step) {
echo "Walking step " . ($stepNumber + 1) . " $step->absoluteDirection / $step->relativeDirection on $step->streetName for " . floor($step->distance) . " meters<br>\n"; echo "Walking step " . ($stepNumber + 1) . " $step->absoluteDirection / $step->relativeDirection on $step->streetName for " . floor($step->distance) . " meters<br>\n";
} }
} }
} }
if ($_REQUEST['time']) { if ($_REQUEST['time']) {
$toPlace = (startsWith($_REQUEST['to'], "-") ? $_REQUEST['to'] : geocode(urlencode($_REQUEST['to']), false)); $toPlace = (startsWith($to, "-") ? $to : geocode($to, false));
$fromPlace = (startsWith($_REQUEST['from'], "-") ? $_REQUEST['from'] : geocode(urlencode($_REQUEST['from']), false)); $fromPlace = (startsWith($from, "-") ? $from : geocode($from, false));
if ($toPlace == "" || $fromPlace == "") { if ($toPlace == "" || $fromPlace == "") {
$errorMessage = ""; $errorMessage = "";
if ($toPlace === "") if ($toPlace === "")
$errorMessage .= urlencode($_REQUEST['to']) . " not found.<br>\n"; $errorMessage .= urlencode($to) . " not found.<br>\n";
if ($fromPlace === "") if ($fromPlace === "")
$errorMessage .= urlencode($_REQUEST['from']) . " not found.<br>\n"; $errorMessage .= urlencode($from) . " not found.<br>\n";
tripPlanForm($errorMessage); tripPlanForm($errorMessage);
} else { } 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); $ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept: application/json")); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept: application/json"));
curl_setopt($ch,CURLOPT_TIMEOUT,5); curl_setopt($ch,CURLOPT_TIMEOUT,5);
$page = curl_exec($ch); $page = curl_exec($ch);
   
if(curl_errno($ch)) { tripPlanForm("Trip planner temporarily unavailable: ".curl_errno($ch)." ".curl_error($ch));} if(curl_errno($ch)) { tripPlanForm("Trip planner temporarily unavailable: ".curl_errno($ch)." ".curl_error($ch));}
else { else {
$tripplan = json_decode($page); $tripplan = json_decode($page);
debug(print_r($triplan,true)); debug(print_r($triplan,true));
echo "<h1> From: {$tripplan->plan->from->name} To: {$tripplan->plan->to->name} </h1>"; echo "<h1> From: {$tripplan->plan->from->name} To: {$tripplan->plan->to->name} </h1>";
echo "<h1> At: {$tripplan->plan->date} </h1>"; echo "<h1> At: {$tripplan->plan->date} </h1>";
if (is_array($tripplan->plan->itineraries->itinerary)) { if (is_array($tripplan->plan->itineraries->itinerary)) {
echo '<div data-role="collapsible-set">'; echo '<div data-role="collapsible-set">';
foreach ($tripplan->plan->itineraries->itinerary as $itineraryNumber => $itinerary) { foreach ($tripplan->plan->itineraries->itinerary as $itineraryNumber => $itinerary) {
processItinerary($itineraryNumber, $itinerary); processItinerary($itineraryNumber, $itinerary);
} }
echo "</div>"; echo "</div>";
} else { } else {
processItinerary(0, $tripplan->plan->itineraries->itinerary); processItinerary(0, $tripplan->plan->itineraries->itinerary);
} }
} }
curl_close($ch); curl_close($ch);
} }
} else { } else {
tripPlanForm(); tripPlanForm();
} }
include_footer(); include_footer();
?> ?>