Only load datepicker for 2 pages
[busui.git] / tripPlanner.php
blob:a/tripPlanner.php -> blob:b/tripPlanner.php
--- a/tripPlanner.php
+++ b/tripPlanner.php
@@ -1,25 +1,29 @@
 <?php
-include ('common.inc.php');
-include_header("Trip Planner", "tripPlanner", true, 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");
+include ('include/common.inc.php');
+include_header("Trip Planner", "tripPlanner", true, false, true);
+$from = (isset($_REQUEST['from']) ? filter_var($_REQUEST['from'], FILTER_SANITIZE_STRING) : "");
+$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"));
 $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)
+{
+	$timeParts = explode("T", $timeString);
+	return str_replace("Z", "", $timeParts[1]);
+}
 function tripPlanForm($errorMessage = "")
 {
 	global $date, $time, $from, $to;
-	echo "<font color=red>$errorMessage</font>";
+	echo "<div class='error'>$errorMessage</font>";
 	echo '<form action="tripPlanner.php" method="post">
     <div data-role="fieldcontain">
         <label for="from">I would like to go from</label>
         <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 data-role="fieldcontain">
         <label for="to"> to </label>
         <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 data-role="fieldcontain">
         <label for="date"> on </label>
@@ -30,17 +34,11 @@
         <input type="time" name="time" id="time" value="' . $time . '"  />
     </div>
         <input type="submit" value="Go!"></form>';
-	echo "<script>
-$('#toHere').click(function(event) { $('#to').val(getCookie('geolocate')); return false;});
-$('#toHere').show();
-$('#fromHere').click(function(event) { $('#from').val(getCookie('geolocate')); return false;});
-$('#fromHere').show();
 
-        </script>";
 }
 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 (" . formatTime($itinerary->startTime) . " to " . formatTime($itinerary->endTime) . ")</h3><p>";
 	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 "Waiting time: " . floor($itinerary->waitingTime / 60000) . " minutes<br>\n";
@@ -58,6 +56,8 @@
 			echo '<li>';
 			processLeg($legNumber, $leg);
 			echo "</li>";
+			flush();
+			@ob_flush();
 		}
 		echo "</ul>";
 	}
@@ -77,7 +77,7 @@
 	$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";
 	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']) . " departing at ". formatTime($leg->startTime)."<br>";
 	}
 	else {
 		$walkStepMarkers = array();
@@ -89,54 +89,79 @@
 		}
 		echo "" . staticmap($walkStepMarkers, 0, "icong", false) . "<br>\n";
 		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) . ": ";
+			if ($step->relativeDirection == "CONTINUE") {
+				echo "Continue, ";
+			}
+			else if ($step->relativeDirection) echo "Turn " . ucwords(strtolower(str_replace("_", " ", $step->relativeDirection))) . ", ";
+			echo "Go " . ucwords(strtolower($step->absoluteDirection)) . " on ";
+			if (strpos($step->streetName, "from") !== false && strpos($step->streetName, "way") !== false) {
+				echo "footpath";
+			}
+			else {
+				echo $step->streetName;
+			}
+			echo " for " . floor($step->distance) . " meters<br>\n";
 		}
 	}
 }
 if ($_REQUEST['time']) {
-	$toPlace = (startsWith($to, "-") ? $to : geocode($to, false));
-	$fromPlace = (startsWith($from, "-") ? $from : geocode($from, false));
+	if (startsWith($to, "-")) {
+		$toPlace = $to;
+	}
+	else if (strpos($to, "(") !== false) {
+		$toParts = explode("(", $to);
+		$toPlace = str_replace( ")", "", $toParts[1]);
+	}
+	else {
+		$toPlace = geocode($to, false);
+	}
+        
+	if (startsWith($from, "-")) {
+		$fromPlace = $from;
+	}
+	else if (strpos($from, "(") !== false) {
+		$fromParts = explode("(", urldecode($from));
+		$fromPlace = str_replace(")", "", $fromParts[1]);
+	}
+	else {
+		$fromPlace = geocode($from, false);
+	}
+        
 	if ($toPlace == "" || $fromPlace == "") {
 		$errorMessage = "";
-		if ($toPlace === "") $errorMessage.= urlencode($to) . " not found.<br>\n";
-		if ($fromPlace === "") $errorMessage.= urlencode($from) . " not found.<br>\n";
+		if ($toPlace == "") {
+			$errorMessage.= urlencode($to) . " not found.<br>\n";
+			trackEvent("Trip Planner", "Geocoder Failed", $to);
+		}
+		if ($fromPlace == "") {
+			$errorMessage.= urlencode($from) . " not found.<br>\n";
+			trackEvent("Trip Planner", "Geocoder Failed", $from);
+		}
 		tripPlanForm($errorMessage);
 	}
 	else {
-		if (isMetricsOn()) {
-			// Create a new Instance of the tracker
-			$owa = new owa_php();
-			// Set the ID of the site being tracked
-			$owa->setSiteId($owaSiteID);
-			// Create a new event object
-			$event = $owa->makeEvent();
-			// Set the Event Type, in this case a "video_play"
-			$event->setEventType('view_trip_plan');
-			// Set a property
-			$event->set('from', $from);
-			$event->set('to', $to);
-			$event->set('time', $time);
-			$event->set('date', $date);
-			// Track the event
-			$owa->trackEvent($event);
-		}
 		$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, 5);
+		curl_setopt($ch, CURLOPT_TIMEOUT, 10);
 		$page = curl_exec($ch);
-		if (curl_errno($ch)) {
-			tripPlanForm("Trip planner temporarily unavailable: " . curl_errno($ch) . " " . curl_error($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($triplan, true));
+			debug(print_r($tripplan, true));
 			echo "<h1> From: {$tripplan->plan->from->name} To: {$tripplan->plan->to->name} </h1>";
-			echo "<h1> At: {$tripplan->plan->date} </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) {