Grouping of identical stops on trip view
Grouping of identical stops on trip view

--- a/common-net.inc.php
+++ b/common-net.inc.php
@@ -9,6 +9,7 @@
 	$page = curl_exec($ch);
 	if (curl_errno($ch)) echo "<font color=red> Database temporarily unavailable: " . curl_errno($ch) . " " . curl_error($ch) . "</font><br>";
 	curl_close($ch);
+	debug(print_r($page,true),"json");
 	return $page;
 }
 function curPageURL()

--- a/common-template.inc.php
+++ b/common-template.inc.php
@@ -6,7 +6,7 @@
 <html> 
 	<head> 
 	<title>' . $pageTitle . '</title>';
-	if (isDebug()) echo '<link rel="stylesheet"  href="css/jquery-mobile-1.0a3.css" />
+	if (isDebugServer()) 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" />

--- a/routeList.php
+++ b/routeList.php
@@ -14,7 +14,6 @@
 echo '  <ul data-role="listview"  data-inset="true">';
 $url = $APIurl . "/json/routes";
 $contents = json_decode(getPage($url));
-debug(print_r($contents, true));
 function printRoutes($routes)
 {
 	foreach ($routes as $row) {

file:a/stop.php -> file:b/stop.php
--- a/stop.php
+++ b/stop.php
@@ -36,7 +36,6 @@
 echo '  <ul data-role="listview"  data-inset="true">';
 $url = $APIurl . "/json/stoptrips?stop=" . $stopid . "&time=" . midnight_seconds() . "&service_period=" . service_period();
 $trips = json_decode(getPage($url));
-debug(print_r($trips, true));
 foreach ($trips as $row) {
 	echo '<li>';
 	echo '<h3><a href="trip.php?stopid=' . $stopid . '&tripid=' . $row[1][0] . '">' . $row[1][1];

--- a/stopList.php
+++ b/stopList.php
@@ -1,8 +1,8 @@
 <?php
-include('common.inc.php');
-
-function navbar() {
-   echo'
+include ('common.inc.php');
+function navbar()
+{
+	echo '
 		<div data-role="navbar">
 			<ul> 
 				<li><a href="stopList.php">Timing Points</a></li>
@@ -15,87 +15,85 @@
 }
 // By suburb
 if (isset($_REQUEST['suburbs'])) {
-   include_header("Stops by Suburb","stopList");
-   navbar();
-   echo '  <ul data-role="listview" data-filter="true" data-inset="true" >';
-   foreach ($suburbs as $suburb) {
-         echo  '<li><a href="stopList.php?suburb='.urlencode($suburb).'">'.$suburb.'</a></li>';
-   }
-echo '</ul>';
-} else {
-// Timing Points / All stops
-
-if ($_REQUEST['allstops']) {
-   $url = $APIurl."/json/stops";
-   include_header("All Stops","stopList");
-   navbar();
-   	timePlaceSettings();
-} else if ($_REQUEST['nearby']) {
-   $url = $APIurl."/json/neareststops?lat={$_SESSION['lat']}&lon={$_SESSION['lon']}&limit=15";
-include_header("Nearby Stops","stopList");
-   navbar();
-   timePlaceSettings(true);
-} else if ($_REQUEST['suburb']) {
-   $suburb = filter_var($_REQUEST['suburb'], FILTER_SANITIZE_STRING);
-   $url = $APIurl."/json/stopzonesearch?q=".$suburb;
-include_header("Stops in ".ucwords($suburb),"stopList");
-if (isMetricsOn()) {
-// Create a new Instance of the tracker
-$owa = new owa_php($config);
-// 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_stop_list_suburb');
-// Set a property
-$event->set('stop_list_suburb',$suburb);
-// Track the event
-$owa->trackEvent($event);
-    }
-   navbar();
-} else {
-   $url = $APIurl."/json/timingpoints";
-   include_header("Timing Points / Major Stops","stopList");
-   navbar();
-   	timePlaceSettings();
+	include_header("Stops by Suburb", "stopList");
+	navbar();
+	echo '  <ul data-role="listview" data-filter="true" data-inset="true" >';
+	foreach ($suburbs as $suburb) {
+		echo '<li><a href="stopList.php?suburb=' . urlencode($suburb) . '">' . $suburb . '</a></li>';
+	}
+	echo '</ul>';
 }
-        echo '<div class="noscriptnav"> Go to letter: ';
-foreach(range('A','Z') as $letter) 
-{ 
-   echo "<a href=\"#$letter\">$letter</a>&nbsp;"; 
-}
-echo "</div>
+else {
+	// Timing Points / All stops
+	if ($_REQUEST['allstops']) {
+		$url = $APIurl . "/json/stops";
+		include_header("All Stops", "stopList");
+		navbar();
+		timePlaceSettings();
+	}
+	else if ($_REQUEST['nearby']) {
+		$url = $APIurl . "/json/neareststops?lat={$_SESSION['lat']}&lon={$_SESSION['lon']}&limit=15";
+		include_header("Nearby Stops", "stopList");
+		navbar();
+		timePlaceSettings(true);
+	}
+	else if ($_REQUEST['suburb']) {
+		$suburb = filter_var($_REQUEST['suburb'], FILTER_SANITIZE_STRING);
+		$url = $APIurl . "/json/stopzonesearch?q=" . $suburb;
+		include_header("Stops in " . ucwords($suburb) , "stopList");
+		if (isMetricsOn()) {
+			// Create a new Instance of the tracker
+			$owa = new owa_php($config);
+			// 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_stop_list_suburb');
+			// Set a property
+			$event->set('stop_list_suburb', $suburb);
+			// Track the event
+			$owa->trackEvent($event);
+		}
+		navbar();
+	}
+	else {
+		$url = $APIurl . "/json/timingpoints";
+		include_header("Timing Points / Major Stops", "stopList");
+		navbar();
+		timePlaceSettings();
+	}
+	echo '<div class="noscriptnav"> Go to letter: ';
+	foreach (range('A', 'Z') as $letter) {
+		echo "<a href=\"#$letter\">$letter</a>&nbsp;";
+	}
+	echo "</div>
 	<script>
 $('.noscriptnav').hide();
         </script>";
-echo '  <ul data-role="listview" data-filter="true" data-inset="true" >';
-$contents = json_decode(getPage($url));
-debug(print_r($contents,true));
-foreach ($contents as $key => $row) {
-    $stopName[$key]  = $row[1];
-}
-
-// Sort the stops by name
-array_multisort($stopName, SORT_ASC, $contents);
-
-$firstletter = "";
-foreach ($contents as $row)
-{
-    if (substr($row[1],0,1) != $firstletter){
-        echo "<a name=$firstletter></a>";
-        $firstletter = substr($row[1],0,1);
-    }
-      echo  '<li>';
-   if (!startsWith($row[5],"Wj")) echo '<img src="css/images/time.png" alt="Timing Point" class="ui-li-icon">';
-      echo '<a href="stop.php?stopid='.$row[0].(startsWith($row[5],"Wj") ? '&stopcode='. $row[5] : "") .'">';
-      if (isset($_SESSION['lat']) && isset($_SESSION['lon'])){
-	 echo '<span class="ui-li-count">'.floor(distance($row[2], $row[3], $_SESSION['lat'], $_SESSION['lon'])).'m away</span>';
-      }
-      echo bracketsMeanNewLine($row[1]);
-      echo '</a></li>';
-        }
-echo '</ul>';
+	echo '  <ul data-role="listview" data-filter="true" data-inset="true" >';
+	$contents = json_decode(getPage($url));
+	foreach ($contents as $key => $row) {
+		$stopName[$key] = $row[1];
+	}
+	// Sort the stops by name
+	array_multisort($stopName, SORT_ASC, $contents);
+	$firstletter = "";
+	foreach ($contents as $row) {
+		if (substr($row[1], 0, 1) != $firstletter) {
+			echo "<a name=$firstletter></a>";
+			$firstletter = substr($row[1], 0, 1);
+		}
+		echo '<li>';
+		if (!startsWith($row[5], "Wj")) echo '<img src="css/images/time.png" alt="Timing Point" class="ui-li-icon">';
+		echo '<a href="stop.php?stopid=' . $row[0] . (startsWith($row[5], "Wj") ? '&stopcode=' . $row[5] : "") . '">';
+		if (isset($_SESSION['lat']) && isset($_SESSION['lon'])) {
+			echo '<span class="ui-li-count">' . floor(distance($row[2], $row[3], $_SESSION['lat'], $_SESSION['lon'])) . 'm away</span>';
+		}
+		echo bracketsMeanNewLine($row[1]);
+		echo '</a></li>';
+	}
+	echo '</ul>';
 }
 include_footer();
 ?>

file:a/trip.php -> file:b/trip.php
--- a/trip.php
+++ b/trip.php
@@ -3,21 +3,25 @@
 $tripid = filter_var($_REQUEST['tripid'], FILTER_SANITIZE_NUMBER_INT);
 $stopid = filter_var($_REQUEST['stopid'], FILTER_SANITIZE_NUMBER_INT);
 $routeid = filter_var($_REQUEST['routeid'], FILTER_SANITIZE_NUMBER_INT);
+$routetrips = Array();
 if ($_REQUEST['routeid']) {
 	$url = $APIurl . "/json/routetrips?route_id=" . $routeid;
-	$trips = json_decode(getPage($url));
-	debug(print_r($trips, true));
-	foreach ($trips as $trip) {
+	$routetrips = json_decode(getPage($url));
+	foreach ($routetrips as $trip) {
 		if ($trip[0] < midnight_seconds()) {
 			$tripid = $trip[1];
 			break;
 		}
 	}
-	if (!($tripid > 0)) $tripid = $trips[0][1];
+	if (!($tripid > 0)) $tripid = $routetrip[0][1];
 }
 $url = $APIurl . "/json/triprows?trip=" . $tripid;
 $trips = array_flatten(json_decode(getPage($url)));
-debug(print_r($trips, true));
+if (sizeof($routetrips) == 0) {
+	$routeid = $trips[1]->route_id;
+	$url = $APIurl . "/json/routetrips?route_id=" . $trips[1]->route_id;
+	$routetrips = json_decode(getPage($url));
+}
 include_header("Stops on " . $trips[1]->route_short_name . ' ' . $trips[1]->route_long_name, "trip");
 if (isMetricsOn()) {
 	// Create a new Instance of the tracker
@@ -36,19 +40,59 @@
 	$owa->trackEvent($event);
 }
 timePlaceSettings();
+echo '<p> Other Trips: ';
+foreach ($routetrips as $othertrip) {
+	echo '<a href="trip.php?tripid=' . $othertrip[1] . "&routeid=" . $routeid . '">' . midnight_seconds_to_time($othertrip[0]) . '</a> ';
+}
+echo '</p> Other directions/timing periods: ';
 echo '  <ul data-role="listview"  data-inset="true">';
 $url = $APIurl . "/json/tripstoptimes?trip=" . $tripid;
 $json = json_decode(getPage($url));
-debug(print_r($json, true));
 $stops = $json[0];
 $times = $json[1];
+echo '<li data-role="list-divider">' . midnight_seconds_to_time($times[0]) . '-' . midnight_seconds_to_time($times[sizeof($times) - 1]) . '</li>';
+$stopsGrouped = Array();
 foreach ($stops as $key => $row) {
-	echo '<li>';
-	echo '<h3><a href="stop.php?stopid=' . $row[0] . '">' . bracketsMeanNewLine($row[1]);
-	if ($row[0] == $stopid) echo "<br><small> Current Location</small>";
-	echo '</a></h3>';
-	echo '<p class="ui-li-aside">' . midnight_seconds_to_time($times[$key]) . '</p>';
-	echo '</li>';
+	if (($stops[$key][1] != $stops[$key + 1][1]) || $key + 1 >= sizeof($stops)) {
+		echo '<li>';
+		if (!startsWith($row[5], "Wj")) echo '<img src="css/images/time.png" alt="Timing Point" class="ui-li-icon">';
+		if (sizeof($stopsGrouped) > 0) {
+			// print and empty grouped stops
+			// subsequent duplicates
+			$stopsGrouped["stop_ids"][] = $row[0];
+			$stopsGrouped["endTime"] = $times[$key];
+			echo '<a href="stop.php?stopids=' . $stopsGrouped['stop_ids'] . '">';
+			echo '<p class="ui-li-aside">' . midnight_seconds_to_time($stopsGrouped['startTime']) . ' to ' . midnight_seconds_to_time($stopsGrouped['endTime']) . '</p>';
+			echo bracketsMeanNewLine($row[1]);
+			echo '</a></li>';
+			$stopsGrouped = Array();
+		}
+		else {
+			// just a normal stop
+			echo '<a href="stop.php?stopid=' . $row[0] . (startsWith($row[5], "Wj") ? '&stopcode=' . $row[5] : "") . '">';
+			echo '<p class="ui-li-aside">' . midnight_seconds_to_time($times[$key]) . '</p>';
+			echo bracketsMeanNewLine($row[1]);
+			echo '</a></li>';
+		}
+	}
+	else {
+		// this is a duplicated line item
+		if ($key - 1 <= 0 || ($stops[$key][1] != $stops[$key - 1][1])) {
+			// first duplicate
+			$stopsGrouped = Array(
+				"name" => $row[1],
+				"startTime" => $times[$key],
+				"stop_ids" => Array(
+					$row[0]
+				)
+			);
+		}
+		else {
+			// subsequent duplicates
+			$stopsGrouped["stop_ids"][] = $row[0];
+			$stopsGrouped["endTime"] = $times[$key];
+		}
+	}
 }
 echo '</ul>';
 include_footer();