AWS fixes
[busui.git] / tripPlanner.php
blob:a/tripPlanner.php -> blob:b/tripPlanner.php
<?php <?php
include('common.inc.php'); include ('include/common.inc.php');
include_header("Trip Planner","tripPlanner", true, true); include_header("Trip Planner", "tripPlanner", true, true, true);
$from = (isset($_REQUEST['from']) ? filter_var($_REQUEST['from'],FILTER_SANITIZE_STRING) : "Brigalow"); $from = (isset($_REQUEST['from']) ? filter_var($_REQUEST['from'], FILTER_SANITIZE_STRING) : "");
$to = (isset($_REQUEST['to']) ? filter_var($_REQUEST['to'],FILTER_SANITIZE_STRING) : "Barry"); $to = (isset($_REQUEST['to']) ? filter_var($_REQUEST['to'], FILTER_SANITIZE_STRING) : "");
$date = (isset($_REQUEST['date']) ? filter_var($_REQUEST['date'],FILTER_SANITIZE_STRING) : date("m/d/Y")); $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")); $time = (isset($_REQUEST['time']) ? filter_var($_REQUEST['time'], FILTER_SANITIZE_STRING) : date("H:i"));
# todo: convert date from form to h:ia? function formatTime($timeString)
  {
function tripPlanForm($errorMessage = "") $timeParts = explode("T", $timeString);
{ return str_replace("Z", "", $timeParts[1]);
global $date,$time,$from,$to; }
echo "<font color=red>$errorMessage</font>"; function tripPlanForm($errorMessage = "")
echo '<form action="tripPlanner.php" method="post"> {
  global $date, $time, $from, $to;
  echo "<font color=red>$errorMessage</font>";
  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="text" name="date" id="date" value="' . $date . '" /> <input type="text" 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 (" . formatTime($itinerary->startTime) . " to " . formatTime($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)) {
  $legMarkers = array();
  foreach ($itinerary->legs->leg as $legNumber => $leg) {
  $legMarkers[] = array(
if (is_array($itinerary->legs->leg)) { $leg->from->lat,
$legMarkers = array(); $leg->from->lon
foreach ($itinerary->legs->leg as $legNumber => $leg) { );
$legMarkers[] = array($leg->from->lat, $leg->from->lon); }
} echo '' . staticmap($legMarkers, 0, "iconb", false) . "<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>"; flush();
} @ob_flush();
echo "</ul>"; }
} else { echo "</ul>";
echo '' . staticmap(array(array($itinerary->legs->leg->from->lat, $itinerary->legs->leg->from->lon))) . "<br>\n"; }
processLeg(0, $itinerary->legs->leg); else {
} echo '' . staticmap(array(
  array(
echo "</p></div>"; $itinerary->legs->leg->from->lat,
} $itinerary->legs->leg->from->lon
  )
function processLeg($legNumber, $leg) { ) , 0, "iconb", false) . "<br>\n";
$legArray = object2array($leg); processLeg(0, $itinerary->legs->leg);
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") { echo "</p></div>";
echo "Take bus {$legArray['@route']} " . str_replace("To", "towards", $legArray['@headsign']) . "<br>"; }
} else { function processLeg($legNumber, $leg)
$walkStepMarkers = array(); {
foreach ($leg->steps->walkSteps as $stepNumber => $step) { $legArray = object2array($leg);
$walkStepMarkers[] = array($step->lat, $step->lon); 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") {
echo "" . staticmap($walkStepMarkers, "icong") . "<br>\n"; echo "Take bus {$legArray['@route']} " . str_replace("To", "towards", $legArray['@headsign']) . "<br>";
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"; else {
} $walkStepMarkers = array();
} foreach ($leg->steps->walkSteps as $stepNumber => $step) {
} $walkStepMarkers[] = array(
  $step->lat,
if ($_REQUEST['time']) { $step->lon
$toPlace = (startsWith($to, "-") ? $to : geocode($to, false)); );
$fromPlace = (startsWith($from, "-") ? $from : geocode($from, false)); }
if ($toPlace == "" || $fromPlace == "") { echo "" . staticmap($walkStepMarkers, 0, "icong", false) . "<br>\n";
$errorMessage = ""; foreach ($leg->steps->walkSteps as $stepNumber => $step) {
if ($toPlace === "") echo "Walking step " . ($stepNumber + 1) . ": ";
$errorMessage .= urlencode($to) . " not found.<br>\n"; if ($step->relativeDirection == "CONTINUE") {
if ($fromPlace === "") echo "Continue, ";
$errorMessage .= urlencode($from) . " not found.<br>\n"; }
tripPlanForm($errorMessage); else if ($step->relativeDirection) echo "Turn " . ucwords(strtolower(str_replace("_", " ", $step->relativeDirection))) . ", ";
} else { echo "Go " . ucwords(strtolower($step->absoluteDirection)) . " on ";
if (isMetricsOn()) { if (strpos($step->streetName, "from") !== false && strpos($step->streetName, "way") !== false) {
// Create a new Instance of the tracker echo "footpath";
$owa = new owa_php($config); }
// Set the ID of the site being tracked else {
$owa->setSiteId('bus.lambdacomplex.org'); echo $step->streetName;
// Create a new event object }
$event = $owa->makeEvent(); echo " for " . floor($step->distance) . " meters<br>\n";
// Set the Event Type, in this case a "video_play" }
$event->setEventType('view_trip_plan'); }
// Set a property }
$event->set('from',$from); if ($_REQUEST['time']) {
$event->set('to',$to); if (startsWith($to, "-")) {
$event->set('time',$time); $toPlace = $to;
$event->set('date',$date); }
// Track the event else if (strpos($to, "(") !== false) {
$owa->trackEvent($event); $toParts = explode("(", $to);
} print_r($toParts);
$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="; $toPlace = str_replace( ")", "", $toParts[1]);
$ch = curl_init($url); }
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); else {
curl_setopt($ch, CURLOPT_HEADER, 0); $toPlace = geocode($to, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept: application/json")); }
curl_setopt($ch,CURLOPT_TIMEOUT,5);  
$page = curl_exec($ch); if (startsWith($from, "-")) {
  $fromPlace = $from;
if(curl_errno($ch)) { tripPlanForm("Trip planner temporarily unavailable: ".curl_errno($ch)." ".curl_error($ch));} }
else { else if (strpos($from, "(") !== false) {
$tripplan = json_decode($page); $fromParts = explode("(", urldecode($from));
debug(print_r($triplan,true)); $fromPlace = str_replace(")", "", $fromParts[1]);
echo "<h1> From: {$tripplan->plan->from->name} To: {$tripplan->plan->to->name} </h1>"; }
echo "<h1> At: {$tripplan->plan->date} </h1>"; else {
  $fromPlace = geocode($from, false);
if (is_array($tripplan->plan->itineraries->itinerary)) { }
echo '<div data-role="collapsible-set">';  
foreach ($tripplan->plan->itineraries->itinerary as $itineraryNumber => $itinerary) { if ($toPlace == "" || $fromPlace == "") {
processItinerary($itineraryNumber, $itinerary); $errorMessage = "";
} if ($toPlace == "") {
echo "</div>"; $errorMessage.= urlencode($to) . " not found.<br>\n";
} else { trackEvent("Trip Planner", "Geocoder Failed", $to);
processItinerary(0, $tripplan->plan->itineraries->itinerary); }
} if ($fromPlace == "") {
} $errorMessage.= urlencode($from) . " not found.<br>\n";
curl_close($ch); trackEvent("Trip Planner", "Geocoder Failed", $from);
} }
} else { tripPlanForm($errorMessage);
tripPlanForm(); }
} else {
include_footer(); $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=";
  debug($url);
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Accept: application/json"
  ));
  curl_setopt($ch, CURLOPT_TIMEOUT, 10);
  $page = curl_exec($ch);
  if (curl_errno($ch) || curl_getinfo($ch, CURLINFO_HTTP_CODE) != 200) {
  tripPlanForm("Trip planner temporarily unavailable: " . curl_errno($ch) . " " . curl_error($ch) . " " . curl_getinfo($ch, CURLINFO_HTTP_CODE) . (isDebug() ? "<br>" . $url : ""));
  trackEvent("Trip Planner", "Trip Planner Failed", $url);
  }
  else {
  trackEvent("Trip Planner", "Plan Trip From", $from);
  trackEvent("Trip Planner", "Plan Trip To", $to);
  $tripplan = json_decode($page);
  debug(print_r($tripplan, true));
  echo "<h1> From: {$tripplan->plan->from->name} To: {$tripplan->plan->to->name} </h1>";
  echo "<h1> At: " . formatTime($tripplan->plan->date) . " </h1>";
  if (is_array($tripplan->plan->itineraries->itinerary)) {
  echo '<div data-role="collapsible-set">';
  foreach ($tripplan->plan->itineraries->itinerary as $itineraryNumber => $itinerary) {
  processItinerary($itineraryNumber, $itinerary);
  }
  echo "</div>";
  }
  else {
  processItinerary(0, $tripplan->plan->itineraries->itinerary);
  }
  }
  curl_close($ch);
  }
  }
  else {
  tripPlanForm();
  }
  include_footer();
?> ?>