Start of service alerts API
Start of service alerts API

--- a/include/common-geo.inc.php
+++ b/include/common-geo.inc.php
@@ -1,7 +1,7 @@
 <?php
 // SELECT array_to_string(array(SELECT REPLACE(name_2006, ',', '\,') as name FROM suburbs order by name), ',')
 $suburbs = explode(",", "Acton,Ainslie,Amaroo,Aranda,Banks,Barton,Belconnen,Bonner,Bonython,Braddon,Bruce,Calwell,Campbell,Chapman,Charnwood,Chifley,Chisholm,City,Conder,Cook,Curtin,Deakin,Dickson,Downer,Duffy,Dunlop,Evatt,Fadden,Farrer,Fisher,Florey,Flynn,Forrest,Franklin,Fraser,Fyshwick,Garran,Gilmore,Giralang,Gordon,Gowrie,Greenway,Griffith,Gungahlin,Hackett,Hall,Harrison,Hawker,Higgins,Holder,Holt,Hughes,Hume,Isaacs,Isabella Plains,Kaleen,Kambah,Kingston,Latham,Lawson,Lyneham,Lyons,Macarthur,Macgregor,Macquarie,Mawson,McKellar,Melba,Mitchell,Monash,Narrabundah,Ngunnawal,Nicholls,Oaks Estate,O'Connor,O'Malley,Oxley,Page,Palmerston,Parkes,Pearce,Phillip,Pialligo,Red Hill,Reid,Richardson,Rivett,Russell,Scullin,Spence,Stirling,Symonston,Tharwa,Theodore,Torrens,Turner,Wanniassa,Waramanga,Watson,Weetangera,Weston,Yarralumla");
-function staticmap($mapPoints, $zoom = 0, $markerImage = "iconb", $collapsible = true)
+function staticmap($mapPoints, $zoom = 0, $markerImage = "iconb", $collapsible = true, $twotone = false)
 {
 	global $labsPath;
 	$width = 300;
@@ -17,7 +17,7 @@
 	// $metersperpixel[17]=1.193*$width;
 	$center = "";
 	$markers = "";
-	$mapwidthinmeters = 50; 
+	$mapwidthinmeters = 50;
 	if (sizeof($mapPoints) < 1) return "map error";
 	if (sizeof($mapPoints) === 1) {
 		if ($zoom == 0) $zoom = 14;
@@ -26,25 +26,30 @@
 	}
 	else {
 		foreach ($mapPoints as $index => $mapPoint) {
-			$markers.= $mapPoint[0] . "," . $mapPoint[1] . "," . $markerImage . ($index + 1);
+			if ($twotone && $index == 0) {
+				$markers.= $mapPoint[0] . "," . $mapPoint[1] . "," . "iconr" . ($index + 1);
+				$center = "{$mapPoints[0][0]},{$mapPoints[0][1]}";
+			}
+			else {
+				$markers.= $mapPoint[0] . "," . $mapPoint[1] . "," . $markerImage . ($index + 1);
+			}
 			if ($index + 1 != sizeof($mapPoints)) $markers.= "|";
-			$dist = distance($mapPoints[0][0], $mapPoint[0][1],$mapPoint[0], $mapPoint[1]);
-			$mapwidthinmeters = ($dist>$mapwidthinmeters ? $dist : $mapwidthinmeters);
+			$dist = distance($mapPoints[0][0], $mapPoint[0][1], $mapPoint[0], $mapPoint[1]);
+			$mapwidthinmeters = ($dist > $mapwidthinmeters ? $dist : $mapwidthinmeters);
 			$totalLat+= $mapPoint[0];
 			$totalLon+= $mapPoint[1];
 		}
 		if ($zoom == 0) {
 			$mapwidthinmeters = distance($minlat, $minlon, $minlat, $maxlon);
 			foreach (array_reverse($metersperpixel, true) as $zoomLevel => $maxdistance) {
-				if ($zoom == 0 && $mapwidthinmeters*1.5 < ($maxdistance)) $zoom = $zoomLevel;
+				if ($zoom == 0 && $mapwidthinmeters * 1.5 < ($maxdistance)) $zoom = $zoomLevel;
 			}
 		}
 		$center = $totalLat / sizeof($mapPoints) . "," . $totalLon / sizeof($mapPoints);
 	}
 	$output = "";
 	if ($collapsible) $output.= '<div class="map" data-role="collapsible" data-collapsed="true"><h3>Open Map...</h3>';
-	$output.= '<img class="map" src="' . curPageURL() . '/'. $labsPath. '/lib/staticmaplite/staticmap.php?center=' . $center . '&amp;zoom=' . $zoom . '&amp;size=' . $width . 'x' . $height . '&amp;markers=' . 
-$markers . '" width=' . $width . ' height=' . $height . '>';
+	$output.= '<img class="map" src="' . curPageURL() . '/' . $labsPath . '/lib/staticmaplite/staticmap.php?center=' . $center . '&amp;zoom=' . $zoom . '&amp;size=' . $width . 'x' . $height . '&amp;markers=' . $markers . '" width=' . $width . ' height=' . $height . '>';
 	if ($collapsible) $output.= '</div>';
 	return $output;
 }
@@ -62,11 +67,11 @@
 	$c = 2 * atan2(sqrt($a) , sqrt(1 - $a));
 	$km = $r * $c;
 	if ($roundLargeValues) {
-	  if ($km < 1) return floor($km * 1000);
-	  else return round($km,2)."k";
-	} else return floor($km * 1000);
+		if ($km < 1) return floor($km * 1000);
+		else return round($km, 2) . "k";
+	}
+	else return floor($km * 1000);
 }
-
 function decodePolylineToArray($encoded)
 {
 	// source: http://latlongeeks.com/forum/viewtopic.php?f=4&t=5

--- a/include/db/servicealert-dao.inc.php
+++ b/include/db/servicealert-dao.inc.php
@@ -12,4 +12,33 @@
 	}
 	return $query->fetch(PDO::FETCH_ASSOC);
 }
+
+function getCurrentAlerts() {
+		global $conn;
+	$query = "SELECT * from servicealerts_alerts";
+	debug($query, "database");
+	$query = $conn->prepare($query);
+	//if ($stop_sequence != "") $query->bindParam(":stop_sequence", $stop_sequence);
+	$query->execute();
+	if (!$query) {
+		databaseError($conn->errorInfo());
+		return Array();
+	}
+	return $query->fetchAll();
+}
+function getInformedAlerts($id,$filter_class,$filter_id) {
+	
+		global $conn;
+	$query = "SELECT * from servicealerts_informed where servicealert_id = :id";
+	debug($query, "database");
+	$query = $conn->prepare($query);
+	$query->bindParam(":id", $id);
+	$query->execute();
+	if (!$query) {
+		databaseError($conn->errorInfo());
+		return Array();
+	}
+	return $query->fetchAll();
+}
+
 ?>

--- a/servicealerts_api.php
+++ b/servicealerts_api.php
@@ -6,48 +6,43 @@
          - add,remove,patch
             - stop
             - trip
+            - network
           - patterns (WHERE=)
             - route (short_name or route_id)
             - street
             - stop
             - trip */
-/* header {
-  gtrtfs_version: "1"
-  timestamp: 1307926866
+$return = Array();
+$return['header']['gtrtfs_version'] = "1";
+$return['header']['timestamp'] = time();
+$return['entities'] = Array();
+foreach(getCurrentAlerts() as $alert) {
+	$informedEntities = getInformedAlerts($alert['id'],$filter_class,$filter_id);
+	if (sizeof($informedEntities) >0) {
+		$entity = Array();
+		$entity['id'] = $alert['id'];
+		$entity['alert']['active_period']['start'] = $alert['start'];
+		$entity['alert']['active_period']['start'] = $alert['end'];
+		$entity['alert']['url']['translation'] = $alert['url'];
+		$entity['alert']['description']['translation'] = $alert['description'];
+		
+		foreach ($informedEntities as $informedEntity) {
+			$informed = Array();
+			$informed[$informedEntity['informed_class']."_id"] = $informedEntity['informed_id'];
+			if ($informedEntity['informed_action'] != "") $informed["x-action"] = $informedEntity['informed_action'];
+			//$informed[$informedEntity['class']."_type"] = $informedEntity['type'];
+			$entity['informed'][] = $informed; 
+		}
+		$return['entities'][] = $entity;
+	}
 }
-entity {
-  id: "21393"
-  alert {
-    active_period {
-      start: 1307955600
-      end: 1307988000
-    }
-    informed_entity {
-      route_id: "100"
-      route_type: 1
-    }
-    url {
-      translation {
-        text: "http://trimet.org/alerts/"
-      }
-    }
-    description_text {
-      translation {
-        text: "Rose Festival fleet departures will cause bridge lifts until around 10 a.m. Expect delays."
-      }
-    }
-  }
-}*/
-$return = Array();
-
-header('Content-Type: text/javascript; charset=utf8');
+//header('Content-Type: text/javascript; charset=utf8');
 // header('Access-Control-Allow-Origin: http://bus.lambdacomplex.org/');
 header('Access-Control-Max-Age: 3628800');
 header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
 if (isset($_GET['callback'])) {
 	$json = '(' . json_encode($return) . ');'; //must wrap in parens and end with semicolon
-	print_r($_GET['callback'] . $json); //callback is prepended for json-p
-	
+	//print_r($_GET['callback'] . $json); //callback is prepended for json-p
 }
 else echo json_encode($return);
             ?>

--- a/stopList.php
+++ b/stopList.php
@@ -47,12 +47,26 @@
 		include_header("Nearby Stops", "stopList", true, true);
 		trackEvent("Stop Lists", "Stops Nearby", $_SESSION['lat'] . "," . $_SESSION['lon']);
 		navbar();
-		timePlaceSettings(true);
 		if (!isset($_SESSION['lat']) || !isset($_SESSION['lat']) || $_SESSION['lat'] == "" || $_SESSION['lon'] == "") {
+			timePlaceSettings(true);
 			include_footer();
 			die();
 		}
 		$stops = getNearbyStops($_SESSION['lat'], $_SESSION['lon'], 15);
+		echo '<span class="content-secondary">';
+		$stopPositions[] = Array(
+			$_SESSION['lat'],
+			$_SESSION['lon']
+		);
+		foreach ($stops as $sub_stop) {
+			$stopPositions[] = Array(
+				$sub_stop["stop_lat"],
+				$sub_stop["stop_lon"]
+			);
+		}
+		echo staticmap($stopPositions, 0, "iconb", true, true);
+		timePlaceSettings(true);
+		echo '</span><span class="content-primary">';
 	}
 	else if (isset($suburb)) {
 		$stops = getStopsBySuburb($suburb);
@@ -129,6 +143,7 @@
 		}
 	}
 	echo '</ul>';
+	if (isset($nearby)) echo '</span>';
 }
 include_footer();
 ?>

file:a/trip.php -> file:b/trip.php
--- a/trip.php
+++ b/trip.php
@@ -9,15 +9,23 @@
 	$trip = getTrip($tripid);
 	$routeid = $trip["route_id"];
 }
-$routetrips = getRouteTrips($routeid);
+
 include_header("Stops on " . $trip['route_short_name'] . ' ' . $trip['route_long_name'], "trip");
 trackEvent("Route/Trip View", "View Route", $trip['route_short_name'] . ' ' . $trip['route_long_name'], $routeid);
 echo '<span class="content-secondary">';
 echo '<a href="' . $trip['route_url'] . '">View Original Timetable/Map</a>';
 echo '<h2>Via:</h2> <small>' . viaPointNames($tripid) . '</small>';
 echo '<h2>Other Trips:</h2> ';
-foreach (getRouteTrips($routeid) as $othertrip) {
+$routeTrips = getRouteTrips($routeid);
+foreach ($routeTrips as $key => $othertrip) {
+    if ($othertrip['trip_id']!= $tripid) {
 	echo '<a href="trip.php?tripid=' . $othertrip['trip_id'] . "&amp;routeid=" . $routeid . '">' . str_replace("  ", ":00", str_replace(":00", " ", $othertrip['arrival_time'])) . '</a> ';
+    } else {
+        // skip this trip but look forward/back
+        if ($key-1 > 0) $prevTrip = $routeTrips[$key-1]['trip_id'];
+        if ($key+1 < sizeof($routeTrips)) $nextTrip = $routeTrips[$key+1]['trip_id'];
+        
+    }
 }
 flush();
 @ob_flush();
@@ -33,6 +41,10 @@
 echo '</span><span class="content-primary">';
 flush();
 @ob_flush();
+echo "<div class='ui-header' style='overflow: visible; height: 1.5em'>";
+if($nextTrip) echo '<a href="trip.php?tripid=' . $nextTrip . "&amp;routeid=" . $routeid . '" data-icon="arrow-r" class="ui-btn-right">Next Trip</a>';
+if($prevTrip) echo '<a href="trip.php?tripid=' . $prevTrip . "&amp;routeid=" . $routeid . '" data-icon="arrow-l" class="ui-btn-left">Previous Trip</a>';
+echo "</div>";
 echo '  <ul data-role="listview"  data-inset="true">';
 $stopsGrouped = Array();
 $tripStopTimes = getTimeInterpolatedTrip($tripid);