Fix service alert filtering
--- a/include/common-template.inc.php
+++ b/include/common-template.inc.php
@@ -185,17 +185,20 @@
$serviceAlerts = Array();
$globalAlerts = getServiceAlertsAsArray("agency", "0");
if ($globalAlerts != nullarray) {
+ // echo "getting alerts due to network wide";
$serviceAlerts = array_merge($serviceAlerts, $globalAlerts);
}
if (isset($stopid)) {
$stopAlerts = getServiceAlertsAsArray("stop", $stopid);
if ($stopAlerts != nullarray) {
+ // echo "getting alerts due to stop $stopid";
$serviceAlerts = array_merge($serviceAlerts, $stopAlerts);
}
}
if (isset($routeid)) {
$routeAlerts = getServiceAlertsAsArray("route", $routeid);
if ($routeAlerts != nullarray) {
+ // echo "getting alerts due to route $routeid";
$serviceAlerts = array_merge($serviceAlerts, $routeAlerts);
}
}
--- a/include/common-transit.inc.php
+++ b/include/common-transit.inc.php
@@ -152,12 +152,14 @@
$current_alerts = getCurrentAlerts();
$informed_count = 0;
if (sizeof($current_alerts) > 0) {
+
$fm = new transit_realtime\FeedMessage();
$fh = new transit_realtime\FeedHeader();
$fh->setGtfsRealtimeVersion(1);
$fh->setTimestamp(time());
$fm->setHeader($fh);
foreach ($current_alerts as $current_alert) {
+ $affectsFilteredEntities = false;
$fe = new transit_realtime\FeedEntity();
$fe->setId($current_alert['id']);
$fe->setIsDeleted(false);
@@ -168,6 +170,8 @@
$alert->addActivePeriod($tr);
$informedEntities = getInformedAlerts($current_alert['id'], $filter_class, $filter_id);
if (sizeof($informedEntities) > 0) {
+
+ $affectsFilteredEntities = true;
$informed_count++;
$informed = Array();
$es = new transit_realtime\EntitySelector();
@@ -218,7 +222,9 @@
$alert->setDescriptionText($tsDescriptionText);
}
$fe->setAlert($alert);
- $fm->addEntity($fe);
+ if ($affectsFilteredEntities) {
+ $fm->addEntity($fe);
+ }
}
if ($informed_count > 0) {
return $fm;
@@ -230,7 +236,7 @@
}
function getServiceAlertsAsArray($filter_class = "", $filter_id = "") {
-
+
$alerts = getServiceAlerts($filter_class, $filter_id);
if ($alerts != null) {
$codec = new DrSlump\Protobuf\Codec\PhpArray();
--- a/include/db/servicealert-dao.inc.php
+++ b/include/db/servicealert-dao.inc.php
@@ -44,17 +44,19 @@
return $query->fetch(PDO :: FETCH_ASSOC);
}
-function updateServiceAlert($alertID, $start, $end, $header, $description, $url) {
+function updateServiceAlert($alertID, $alert) {
global $conn;
- $query = 'update servicealerts_alerts set start=:start, "end"=:end, header=:header, description=:description, url=:url where id = :servicealert_id';
+ $query = 'update servicealerts_alerts set start=:start, "end"=:end, header=:header, description=:description, url=:url, cause=:cause, effect=:effect where id = :servicealert_id';
debug($query, "database");
$query = $conn->prepare($query);
- $query->bindParam(":servicealert_id", $alertID);
- $query->bindParam(":start", $start);
- $query->bindParam(":end", $end);
- $query->bindParam(":header", $header);
- $query->bindParam(":description", $description);
- $query->bindParam(":url", $url);
+ $query->bindValue(":servicealert_id", $alertID);
+ $query->bindValue(":start", $alert['startdate']);
+ $query->bindValue(":end", $alert['enddate']);
+ $query->bindValue(":header", $alert['header']);
+ $query->bindValue(":description", $alert['description']);
+ $query->bindValue(":url", $alert['url']);
+ $query->bindValue(":cause", $alert['cause']);
+ $query->bindValue(":effect", $alert['effect']);
$query->execute();
print_r($conn->errorInfo());
@@ -65,16 +67,19 @@
return $query->fetch(PDO :: FETCH_ASSOC);
}
-function addServiceAlert($start, $end, $header, $description, $url) {
+function addServiceAlert($alert) {
global $conn;
- $query = 'INSERT INTO servicealerts_alerts (start, "end", header, description, url) VALUES (:start, :end, :header, :description, :url) ';
+ $query = 'INSERT INTO servicealerts_alerts (start, "end", header, description, url,cause,effect) VALUES (:start, :end, :header, :description, :url,:cause,:effect) ';
debug($query, "database");
$query = $conn->prepare($query);
- $query->bindParam(":start", $start);
- $query->bindParam(":end", $end);
- $query->bindParam(":header", $header);
- $query->bindParam(":description", $description);
- $query->bindParam(":url", $url);
+ //print_r($alert);
+ $query->bindValue(":start", $alert['startdate']);
+ $query->bindValue(":end", $alert['enddate']);
+ $query->bindValue(":header", $alert['header']);
+ $query->bindValue(":description", $alert['description']);
+ $query->bindValue(":url", $alert['url']);
+ $query->bindValue(":cause", $alert['cause']);
+ $query->bindValue(":effect", $alert['effect']);
$query->execute();
print_r($conn->errorInfo());
@@ -114,6 +119,7 @@
function getInformedAlerts($id, $filter_class, $filter_id) {
global $conn;
+ //echo "$id, $filter_class, $filter_id\n";
$query = "SELECT * from servicealerts_informed where servicealert_id = :servicealert_id";
if ($filter_class != "") {
@@ -158,12 +164,14 @@
function addInformedAlert($serviceAlertID, $class, $id, $action) {
global $conn;
- $query = 'INSERT INTO servicealerts_informed (servicealert_id , informed_class , informed_id) VALUES(:servicealert_id ,:informed_class, :informed_id)';
+ $query = 'INSERT INTO servicealerts_informed (servicealert_id , informed_class , informed_id, informed_action)
+ VALUES(:servicealert_id ,:informed_class, :informed_id, :informed_action)';
debug($query, "database");
$query = $conn->prepare($query);
$query->bindParam(":servicealert_id", $serviceAlertID);
$query->bindParam(":informed_class", $class);
$query->bindParam(":informed_id", $id);
+ $query->bindParam(":informed_action", $action);
$query->execute();
print_r($conn->errorInfo());
--- a/include/db/stop-dao.inc.php
+++ b/include/db/stop-dao.inc.php
@@ -89,7 +89,7 @@
$query = "Select * from stops where stop_name LIKE :name;";
debug($query, "database");
$query = $conn->prepare($query);
- $name = "%" . $name . ";%";
+ $name = $name . "%";
$query->bindParam(":name", $name);
$query->execute();
if (!$query) {
--- /dev/null
+++ b/servicealerts/gtfs-realtime.php
@@ -1,1 +1,53 @@
+<?php
+/*
+ * Copyright 2010,2011 Alexander Sadleir
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ */
+include ('include/common.inc.php');
+function accept_header($header = false) {
+ // http://jrgns.net/parse_http_accept_header
+ $toret = null;
+ $header = $header ? $header : (array_key_exists('HTTP_ACCEPT', $_SERVER) ? $_SERVER['HTTP_ACCEPT']: false);
+ if ($header) {
+ $types = explode(',', $header);
+ $types = array_map('trim', $types);
+ foreach ($types as $one_type) {
+ $one_type = explode(';', $one_type);
+ $type = array_shift($one_type);
+ if ($type) {
+ list($precedence, $tokens) = self::accept_header_options($one_type);
+ list($main_type, $sub_type) = array_map('trim', explode('/', $type));
+ $toret[] = array('main_type' => $main_type, 'sub_type' => $sub_type, 'precedence' => (float)$precedence, 'tokens' => $tokens);
+ }
+ }
+ usort($toret, array('Parser', 'compare_media_ranges'));
+ }
+ return $toret;
+}
+$json_types = Array("application/json","application/x-javascript","text/javascript","text/x-javascript","text/x-json");
+if ($_REQUEST['json']) {
+ $return = getServiceAlertsAsJSON($_REQUEST['filter_class'], $_REQUEST['filter_id']);
+ header('Content-Type: application/json; 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 = '(' . $return . ');'; //must wrap in parens and end with semicolon
+ //print_r($_GET['callback'] . $json); //callback is prepended for json-p
+ }
+ else
+ echo $return;
+}
+?>
--- a/servicealerts/servicealert_editor.php
+++ b/servicealerts/servicealert_editor.php
@@ -27,10 +27,11 @@
*/
if (isset($_REQUEST['saveedit'])) {
- if ($_REQUEST['saveedit'] != "")
- updateServiceAlert($_REQUEST['saveedit'], $_REQUEST['startdate'], $_REQUEST['enddate'], $_REQUEST['header'], $_REQUEST['description'], $_REQUEST['url']);
- else
- addServiceAlert($_REQUEST['startdate'], $_REQUEST['enddate'], $_REQUEST['header'], $_REQUEST['description'], $_REQUEST['url']);
+ if ($_REQUEST['saveedit'] != "") {
+ updateServiceAlert($_REQUEST['saveedit'], $_REQUEST);
+ } else {
+ addServiceAlert($_REQUEST);
+ }
echo "Saved " . $_REQUEST['saveedit'];
die();
}
@@ -61,26 +62,27 @@
if ($_REQUEST['streetsearch']) {
echo "Informing stops of street<br>\n";
- foreach (getStopByName() as $stop) {
- addInformedAlert($_REQUEST['stopsearch'], "stop", $_REQUEST['stopid'], "inform");
- echo "Added stop inform for" . $_REQUEST['stopsearch'] . ", stop" . $_REQUEST['stopid'] . "<br>\n";
+ foreach (getStopsByName($_REQUEST['street']) as $stop) {
+ addInformedAlert($_REQUEST['streetsearch'], "stop", $stop['stop_id'], "inform");
+ echo "Added stop inform for" . $_REQUEST['streetsearch'] . ", stop" . $stop['stop_id'] . " ". $stop['stop_name']."<br>\n";
foreach ($service_periods as $sp) {
echo "Informing $sp routes<br>\n";
- foreach (getStopRoutes($_REQUEST['stopid'], $sp) as $route) {
- addInformedAlert($_REQUEST['stopsearch'], "route", $route['route_id'], "inform");
- echo "Added route inform for stop" . $_REQUEST['stopsearch'] . ", route" . $route['route_id'] . "<br>\n";
+ foreach (getStopRoutes($stop['stop_id'], $sp) as $route) {
+ addInformedAlert($_REQUEST['streetsearch'], "route", $route['route_id'], "inform");
+ echo "Added route inform for stop" . $_REQUEST['streetsearch'] . ", route" . $route['route_id'] . "<br>\n";
}
}
+ }
+
die();
- }
}
?>
Active and Future Alerts:
<table>
<?php
foreach (getFutureAlerts() as $alert) {
- echo "<tr><td>{$alert['start']}</td><td>{$alert['end']}</td><td>" . substr($alert['description'], 0, 999) . '</td><td><a href="?edit=' . $alert['id'] . '">edit</a></td></tr>';
+ echo "<tr><td>" . date("c", $alert['start']) . "</td><td>" . date("c", $alert['end']) . "</td><td>" . substr($alert['description'], 0, 999) . '</td><td><a href="?edit=' . $alert['id'] . '">edit</a></td></tr>';
}
?>
</table>
@@ -94,7 +96,7 @@
<label for="startdate"> Start Date</label>
<input type="text" name="startdate" id="startdate" value="<?php
if ($alert['start'])
- echo $alert['start'];
+ echo date("c", $alert['start']);
else
echo date("c", strtotime("0:00"));
?>" />
@@ -102,10 +104,10 @@
<div data-role="fieldcontain">
<label for="enddate"> End Date </label>
<input type="text" name="enddate" id="enddate" value="<?php
- if ($alert['end'])
- echo $alert['end'];
- else
- echo date("c", strtotime("23:59"));
+ if ($alert['end'])
+ echo date("c", $alert['end']);
+ else
+ echo date("c", strtotime("23:59"));
?>" />
</div>
<div data-role="fieldcontain">
@@ -115,12 +117,31 @@
<div data-role="fieldcontain">
<label for="description">Description</label>
<textarea name="description">
-<?php echo $alert['description']; ?></textarea>
+ <?php echo $alert['description']; ?></textarea>
</div>
<div data-role="fieldcontain">
<label for="url">URL</label>
<input type="text" name="url" id="url" value="<?php echo $alert['url']; ?>" />
</div>
+ <div data-role="fieldcontain">
+ <label for="cause"> Cause: </label>
+ <select name="cause" id="cause">
+
+ <?php
+ foreach ($serviceAlertCause as $key => $value) {
+ echo "<option value=\"$key\"" . ($key === $alert['cause'] ? " SELECTED" : "") . '>' . $value . '</option>';
+ }
+ ?>
+ </select></div>
+ <div data-role="fieldcontain">
+ <label for="effect"> Effect: </label>
+ <select name="effect" id="effect">
+ <?php
+ foreach ($serviceAlertEffect as $key => $value) {
+ echo "<option value=\"$key\"" . ($key === $alert['effect'] ? " SELECTED" : "") . '>' . $value . '</option>';
+ }
+ ?>
+ </select></div>
<input type="hidden" name="saveedit" value="<?php echo $_REQUEST['edit']; ?>"/>
<input type="submit" value="Save"/>
</div></form>
--- /dev/null
+++ b/servicealerts/siri.php
@@ -1,1 +1,8 @@
+<?php
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+?>
+
--- a/servicealerts_api.php
+++ /dev/null
@@ -1,34 +1,1 @@
-<?php
-/*
- * Copyright 2010,2011 Alexander Sadleir
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-include ('include/common.inc.php');
-
-if (basename(__FILE__) == "servicealerts_api.php") {
- $return = getServiceAlertsAsJSON($_REQUEST['filter_class'], $_REQUEST['filter_id']);
- 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 = '(' . $return . ');'; //must wrap in parens and end with semicolon
- //print_r($_GET['callback'] . $json); //callback is prepended for json-p
- }
- else
- echo $return;
-}
-?>
-