Fix service alert filtering
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.
+ */
+?>
+

file:a/servicealerts_api.php (deleted)
--- 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;
-}
-?>
-