Viewing of grouped stops
Viewing of grouped stops

file:a/stop.php -> file:b/stop.php
--- a/stop.php
+++ b/stop.php
@@ -1,17 +1,48 @@
 <?php
 include ('common.inc.php');
 $stopid = filter_var($_REQUEST['stopid'], FILTER_SANITIZE_NUMBER_INT);
-$stopcode = filter_var($_REQUEST['stopid'], FILTER_SANITIZE_STRING);
+$stopcode = filter_var($_REQUEST['stopcode'], FILTER_SANITIZE_STRING);
 $url = $APIurl . "/json/stop?stop_id=" . $stopid;
 $stop = json_decode(getPage($url));
-if ($stop[5] != $stopcode) {
+if ($stopcode != ""  && $stop[5] != $stopcode) {
 	$url = $APIurl . "/json/stopcodesearch?q=" . $stopcode;
 	$stopsearch = json_decode(getPage($url));
 	$stopid = $stopsearch[0][0];
 	$url = $APIurl . "/json/stop?stop_id=" . $stopid;
 	$stop = json_decode(getPage($url));
 }
+if (!startsWith($stop[5], "Wj") && strpos($stop[1],"Platform") === false) {
+    // expand out to all platforms
+}
+$stops = Array();
+$stopPositions = Array();
+$tripStopNumbers = Array();
+$allStopsTrips = Array();
+$stopLinks = "";
+if (isset($_REQUEST['stopids'])) {
+    $stopids = explode(",",filter_var($_REQUEST['stopids'], FILTER_SANITIZE_STRING));
+    foreach ($stopids as $sub_stopid) {
+        $url = $APIurl . "/json/stop?stop_id=" . $sub_stopid;
+        $stop = json_decode(getPage($url));
+        $stops[] = $stop;
+    }
+    $stop = $stops[0];
+    $stopid = $stops[0][0];
+    $stopLinks .= "Individual stop pages: ";
+    foreach ($stops as $key => $sub_stop) {
+        $stopLinks .= '<a href="stop.php?stopid='.$sub_stop[0].'&stopcode='.$sub_stop[5].'">'.$sub_stop[1].' Stop #'.($key+1).'</a> ';
+        $stopPositions[$key] = Array($sub_stop[2],$sub_stop[3]);
+        $url = $APIurl . "/json/stoptrips?stop=" . $sub_stop[0] . "&time=" . midnight_seconds() . "&service_period=" . service_period();
+        $trips = json_decode(getPage($url));
+        foreach ($trips as $trip) {
+            if (!isset($allStopTrips[$row[1][0]])) $allStopTrips[$row[1][0]] = $trip;
+            $tripStopNumbers[$row[1][0]][] = $key;
+        }
+    }
+}
+
 include_header($stop[1], "stop");
+
 if (isMetricsOn()) {
 	// Create a new Instance of the tracker
 	$owa = new owa_php();
@@ -27,12 +58,18 @@
 	$owa->trackEvent($event);
 }
 timePlaceSettings();
-echo '<div data-role="content" class="ui-content" role="main"><p>' . staticmap(Array(
+echo '<div data-role="content" class="ui-content" role="main">';
+echo $stopLinks;
+if (sizeof($stops) > 0) {
+    echo '<p>' . staticmap($stopPositions) . '</p>';
+} else {
+    echo '<p>' . staticmap(Array(
 	0 => Array(
 		$stop[2],
 		$stop[3]
 	)
 )) . '</p>';
+}
 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));

--- a/stopList.php
+++ b/stopList.php
@@ -72,30 +72,64 @@
 $('.noscriptnav').hide();
         </script>";
 	echo '  <ul data-role="listview" data-filter="true" data-inset="true" >';
-	$contents = json_decode(getPage($url));
-	foreach ($contents as $key => $row) {
+	$stops = json_decode(getPage($url));
+	foreach ($stops as $key => $row) {
 		$stopName[$key] = $row[1];
 	}
 	// Sort the stops by name
-	array_multisort($stopName, SORT_ASC, $contents);
+	array_multisort($stopName, SORT_ASC, $stops);
 	$firstletter = "";
-	foreach ($contents as $row) {
+	$stopsGrouped = Array();
+	foreach ($stops as $key => $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>';
+		if (($stops[$key][1] != $stops[$key + 1][1]) || $key + 1 >= sizeof($stops)) {
+			if (sizeof($stopsGrouped) > 0) {
+				// print and empty grouped stops
+				// subsequent duplicates
+				$stopsGrouped["stop_ids"][] = $row[0];
+				echo '<li><a href="stop.php?stopids=' . implode(",", $stopsGrouped['stop_ids']) . '">';
+				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].'('.sizeof($stopsGrouped["stop_ids"]).' stops)');
+				echo "</a></li>\n";
+				$stopsGrouped = Array();
+			}
+			else {
+				// just a normal stop
+					echo '<li>';
+			if (!startsWith($row[5], "Wj")) echo '<img src="css/images/time.png" alt="Timing Point" class="ui-li-icon">';
+		
+				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>\n";
+			}
 		}
-		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],
+					"stop_ids" => Array(
+						$row[0]
+					)
+				);
+			}
+			else {
+				// subsequent duplicates
+				$stopsGrouped["stop_ids"][] = $row[0];
+			}
+		}
 	}
 	echo '</ul>';
 }
 include_footer();
 ?>
-
-

file:a/trip.php -> file:b/trip.php
--- a/trip.php
+++ b/trip.php
@@ -61,7 +61,7 @@
 			// subsequent duplicates
 			$stopsGrouped["stop_ids"][] = $row[0];
 			$stopsGrouped["endTime"] = $times[$key];
-			echo '<a href="stop.php?stopids=' . $stopsGrouped['stop_ids'] . '">';
+			echo '<a href="stop.php?stopids=' . implode(",",$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>';