--- a/busui/tripPlanner.php +++ b/busui/tripPlanner.php @@ -1,48 +1,115 @@ <?php -include('common.inc.php'); -if ($_REQUEST['time']) { - $toPlace = geocode($_REQUEST['to'],false); - $fromPlace = geocode($_REQUEST['from'],false); - $url = "http://localhost:8080/opentripplanner-api-webapp/ws/plan?_dc=1290254798856&arriveBy=false&date=11%2F17%2F2010&time=1%3A06%20pm&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 ); -curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept: application/json")); -$page = curl_exec($ch); -curl_close($ch); - $tripplan = json_decode($page); - echo "<h1> From: {$tripplan->plan->from->name} </h1>"; - echo "<h1> To: {$tripplan->plan->to->name} </h1>"; - echo "<h1> At: {$tripplan->plan->date} </h1>"; - foreach ($tripplan->plan->itineraries->itinerary as $itineraryNumber => $itinerary ){ - echo "<hr> <h2> Option #".($itineraryNumber+1)."<h2>"; - echo "Duration: ".floor($itinerary->duration/60000)." minutes ({$itinerary->startTime} to {$itinerary->endTime})<br>\n"; - echo "Walking time: ".floor($itinerary->walkTime/60000)." minutes ({$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"; - $legMarkers = Array(); - foreach ($itinerary->legs->leg as $legNumber => $leg ){ - $legMarkers[] = Array($leg->from->lat,$leg->from->lon); - } - echo staticmap($legMarkers)."<br>\n"; - foreach ($itinerary->legs->leg as $legNumber => $leg ){ - echo "Leg #".($legNumber+1)." (from: {$leg->from->name} to {$leg->to->name}, ".floor($leg->duration/60000)." minutes) <br>\n"; - $legArray = object2array($leg); - if ($legArray["@mode"] === "BUS") { - echo "Take bus {$legArray['@route']} ".str_replace("To","towards",$legArray['@headsign'])."<br>"; - } - else { - foreach ($leg->steps->walkSteps as $stepNumber => $step ){ - echo "Walking step $stepNumber $step->absoluteDirection / $step->relativeDirection on $step->streetName for $step->distance meters / ".floor($step->duration/60000)." minutes<br>\n"; - } - } - } - } -} else { - echo '<form> I would like to go from <input type="text" name="from" value="Brigalow"></input> to - <input type="text" name="to" value="Barry"></input> on <input type="text" name="date" value="1:00pm"> at <input type="text" name="time" value="1:00pm"></input> - <input type="submit"></form>'; + include('common.inc.php'); + include_header("Trip Planner"); + 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:ia")); + 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> + <input type="text" name="from" id="from" value="' . $from . '" /> + </div> + <div data-role="fieldcontain"> + <label for="to"> to </label> + <input type="text" name="to" id="to" value="' . $to . '" /> + </div> + <div data-role="fieldcontain"> + <label for="date"> on </label> + <input type="text" name="date" id="date" value="' . $date . '" /> + </div> + <div data-role="fieldcontain"> + <label for="time"> at </label> + <input type="text" name="time" id="time" value="' . $time . '" /> + </div> + <input type="submit" value="Go!"></form>'; + } + + 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 "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"; + -} - include_footer(); + + if (is_array($itinerary->legs->leg)) { + $legMarkers = array(); + foreach ($itinerary->legs->leg as $legNumber => $leg) { + $legMarkers[] = array($leg->from->lat, $leg->from->lon); + } + echo '' . staticmap($legMarkers) . "<br>\n"; + echo '<ul>'; + foreach ($itinerary->legs->leg as $legNumber => $leg) { + echo '<li>'; + processLeg($legNumber, $leg); + echo "</li>"; + } + echo "</ul>"; + } else { + echo '' . staticmap(array(array($itinerary->legs->leg->from->lat, $itinerary->legs->leg->from->lon))) . "<br>\n"; + processLeg(0, $itinerary->legs->leg); + } + + echo "</p></div>"; + } + + function processLeg($legNumber, $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"; + if ($legArray["@mode"] === "BUS") { + echo "Take bus {$legArray['@route']} " . str_replace("To", "towards", $legArray['@headsign']) . "<br>"; + } else { + $walkStepMarkers = array(); + foreach ($leg->steps->walkSteps as $stepNumber => $step) { + $walkStepMarkers[] = array($step->lat, $step->lon); + } + echo "" . staticmap($walkStepMarkers, "icong") . "<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"; + } + } + } + + 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)); + if ($toPlace == "" || $fromPlace == "") { + $errorMessage = ""; + if ($toPlace === "") + $errorMessage .= urlencode($_REQUEST['to']) . " not found.<br>\n"; + if ($fromPlace === "") + $errorMessage .= urlencode($_REQUEST['from']) . " not found.<br>\n"; + tripPlanForm($errorMessage); + } else { + $url = "http://localhost:8080/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="; + $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")); + $page = curl_exec($ch); + curl_close($ch); + $tripplan = json_decode($page); + echo "<h1> From: {$tripplan->plan->from->name} To: {$tripplan->plan->to->name} </h1>"; + echo "<h1> At: {$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); + } + + } + } else { + tripPlanForm(); + } + include_footer(); ?>