add binary protobuf GTFSRT format
--- a/include/common-transit.inc.php
+++ b/include/common-transit.inc.php
@@ -172,7 +172,8 @@
if (sizeof($informedEntities) > 0) {
$affectsFilteredEntities = true;
- $informed_count++;
+ foreach ($informedEntities as $informedEntity) {
+ $informed_count++;
$informed = Array();
$es = new transit_realtime\EntitySelector();
if ($informedEntity['informed_class'] == "agency") {
@@ -190,6 +191,7 @@
$es->setTrip($td);
}
$alert->addInformedEntity($es);
+}
}
if ($current_alert['cause'] != "") {
$alert->setCause(constant("transit_realtime\Alert\Cause::" . $current_alert['cause']));
@@ -216,7 +218,7 @@
if ($current_alert['description'] != "") {
$tsDescriptionText = new transit_realtime\TranslatedString();
$tDescriptionText = new transit_realtime\TranslatedString\Translation();
- $tDescriptionText->setText($current_alert['description']);
+ $tDescriptionText->setText(trim($current_alert['description']));
$tDescriptionText->setLanguage("en");
$tsDescriptionText->addTranslation($tDescriptionText);
$alert->setDescriptionText($tsDescriptionText);
--- a/include/common.inc.php
+++ b/include/common.inc.php
@@ -51,8 +51,9 @@
|| strstr($_SERVER['PHP_SELF'], "lib/")
|| strstr($_SERVER['PHP_SELF'], "geo/")
|| strstr($_SERVER['PHP_SELF'], "include/")
- || strstr($_SERVER['PHP_SELF'], "servicealerts/"))
+ || strstr($_SERVER['PHP_SELF'], "rtpis/")) {
$basePath = "../";
+}
function isDebugServer() {
--- a/rtpis/gtfs-realtime.php
+++ b/rtpis/gtfs-realtime.php
@@ -15,7 +15,7 @@
See the License for the specific language governing permissions and
limitations under the License.
*/
-include ('include/common.inc.php');
+include ('../include/common.inc.php');
function accept_header($header = false) {
// http://jrgns.net/parse_http_accept_header
$toret = null;
@@ -36,9 +36,23 @@
}
return $toret;
}
+function usage() {
+echo "Usage notes: Must specify format json/protobuf and gtfs-realtime feedtype alerts/updates. If callback is specified, will provide jsonp. Can filter with parmaters filter_class route/stop and filter_id with the id specified in GTFS.";
+die();
+}
+
+$filter_class = (isset($_REQUEST['filter_class']) ? $_REQUEST['filter_class'] : "");
+$filter_id = (isset($_REQUEST['filter_id']) ? $_REQUEST['filter_id']:"");
+
$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']);
+if ($_REQUEST['alerts']) {
+ $return = getServiceAlertsAsJSON($filter_class,$filter_id);
+} else if ($_REQUEST['updates']) {
+ $return = getTripUpdatesAsJSON($filter_class,$filter_id);
+} else {
+ usage();
+}
header('Content-Type: application/json; charset=utf8');
// header('Access-Control-Allow-Origin: http://bus.lambdacomplex.org/');
header('Access-Control-Max-Age: 3628800');
@@ -47,7 +61,25 @@
$json = '(' . $return . ');'; //must wrap in parens and end with semicolon
//print_r($_GET['callback'] . $json); //callback is prepended for json-p
}
- else
+ else {
echo $return;
+ }
+} else if ($_REQUEST['protobuf']) {
+if ($_REQUEST['alerts']) {
+ $return = getServiceAlertsAsBinary($filter_class,$filter_id);
+} else if ($_REQUEST['updates']) {
+ $return = getTripUpdatesAsBinary($filter_class,$filter_id);
+} else {
+ usage();
+}
+ header('Content-Type: application/x-protobuf');
+header('Content-Disposition: attachment; filename="'.(isset($_REQUEST['updates'])?"updates.":"alerts.").date("c").'.protobuf"');
+// header('Access-Control-Allow-Origin: http://bus.lambdacomplex.org/');
+ header('Access-Control-Max-Age: 3628800');
+ header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
+ echo $return;
+} else {
+usage();
}
?>
+
--- a/rtpis/servicealert_editor.php
+++ b/rtpis/servicealert_editor.php
@@ -116,8 +116,7 @@
</div>
<div data-role="fieldcontain">
<label for="description">Description</label>
- <textarea name="description">
- <?php echo $alert['description']; ?></textarea>
+ <textarea name="description"><?php echo $alert['description']; ?></textarea>
</div>
<div data-role="fieldcontain">
<label for="url">URL</label>
@@ -185,3 +184,4 @@
}
include_footer();
?>
+
--- a/rtpis/siri.php
+++ b/rtpis/siri.php
@@ -1,8 +1,80 @@
<?php
/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
+ * 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;
+}
+function usage() {
+echo "Usage notes: Must specify format json/xml. If callback is specified, will provide jsonp. Can filter with parmaters filter_class route/stop and filter_id with the id specified in GTFS."
+die();
+}
+$json_types = Array("application/json","application/x-javascript","text/javascript","text/x-javascript","text/x-json");
+if ($_REQUEST['json']) {
+if ($_REQUEST['alerts']) {
+ $return = getServiceAlertsAsJSON($_REQUEST['filter_class'], $_REQUEST['filter_id']);
+} else if ($_REQUEST['updates']) {
+ $return = getTripUpdatesAsJSON($_REQUEST['filter_class'], $_REQUEST['filter_id']);
+} else {
+ usage();
+}
+ 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;
+ }
+} else if ($_REQUEST['xml']) {
+if ($_REQUEST['alerts']) {
+ $return = getServiceAlertsAsBinary($_REQUEST['filter_class'], $_REQUEST['filter_id']);
+} else if ($_REQUEST['updates']) {
+ $return = getTripUpdatesAsBinary($_REQUEST['filter_class'], $_REQUEST['filter_id']);
+} else {
+ usage();
+}
+ 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');
+ echo $return;
+} else {
+usage();
+}
?>