--- a/include/common-transit.inc.php +++ b/include/common-transit.inc.php @@ -4,10 +4,17 @@ 'saturday', 'weekday' ); -function service_period() + +function service_period($date = "") { + if (isset($_SESSION['service_period'])) return $_SESSION['service_period']; - switch (date('w')) { + $override = getServiceOverride($date); + if ($override['service_id']){ + return $override['service_id']; + } + + switch (date('w',($date != "" ? $date : time()))) { case 0: return 'sunday'; case 6: @@ -16,9 +23,12 @@ return 'weekday'; } } -function midnight_seconds() +function midnight_seconds($time = "") { // from http://www.perturb.org/display/Perlfunc__Seconds_Since_Midnight.html + if ($time != "") { + return (date("G", $time) * 3600) + (date("i", $time) * 60) + date("s", $time); + } if (isset($_SESSION['time'])) { $time = strtotime($_SESSION['time']); return (date("G", $time) * 3600) + (date("i", $time) * 60) + date("s", $time); @@ -35,39 +45,122 @@ return ""; } } -function viaPoints($tripid, $stopid, $timingPointsOnly = false) -{ - global $APIurl; - $url = $APIurl . "/json/tripstoptimes?trip=" . $tripid; - $json = json_decode(getPage($url)); - debug(print_r($json, true)); - $stops = $json[0]; - $times = $json[1]; - $foundStop = false; - $viaPoints = Array(); - foreach ($stops as $key => $row) { - if ($foundStop) { - if (!$timingPointsOnly || !startsWith($row[5], "Wj")) { - $viaPoints[] = Array( - "id" => $row[0], - "name" => $row[1], - "time" => $times[$key] - ); + +$serviceAlertCause = Array( +UNKNOWN_CAUSE +OTHER_CAUSE +TECHNICAL_PROBLEM +STRIKE +DEMONSTRATION +ACCIDENT +HOLIDAY +WEATHER +MAINTENANCE +CONSTRUCTION +POLICE_ACTIVITY +MEDICAL_EMERGENCY + +Unknown cause +Other cause (not represented by any of these options) +Technical problem +Strike +Demonstration +Accident +Holiday +Weather +Maintenance +Construction +Police activity +Medical emergency +); +$serviceAlertEffect = Array( +NO_SERVICE +REDUCED_SERVICE +SIGNIFICANT_DELAYS +DETOUR +ADDITIONAL_SERVICE +MODIFIED_SERVICE +OTHER_EFFECT +UNKNOWN_EFFECT +STOP_MOVED + +No service +Reduced service +Significant delays (insignificant delays should only be provided through Trip updates). +Detour +Additional service +Modified service +Stop moved +Other effect (not represented by any of these options) +Unknown effect); + +function getServiceAlerts($filter_class, $filter_id) { +/* + + also need last modified epoch of client gtfs + + - add,remove,patch,inform (null) + - stop + - trip + - network + - classes (WHERE=) + - route (short_name or route_id) + - street + - stop + - trip + Currently support: + network inform + trip patch: stop remove + street inform: route inform, trip inform, stop inform + route patch: trip remove + */ +$return = Array(); +$return['header']['gtfs_realtime_version'] = "1"; +$return['header']['timestamp'] = time(); +$return['header']['incrementality'] = "FULL_DATASET"; +$return['entities'] = Array(); +foreach(getCurrentAlerts() as $alert) { + $informedEntities = getInformedAlerts($alert['id'],$_REQUEST['filter_class'],$_REQUEST['filter_id']); + if (sizeof($informedEntities) >0) { + $entity = Array(); + $entity['id'] = $alert['id']; + $entity['alert']['active_period']['start'] = $alert['start']; + $entity['alert']['active_period']['end'] = $alert['end']; + $entity['alert']['url']['translation']['text'] = $alert['url']; + $entity['alert']['url']['translation']['language'] = 'en'; + $entity['alert']['header_text']['translation']['text'] = $alert['header']; + $entity['alert']['header_text']['translation']['language'] = 'en'; + $entity['alert']['description_text']['translation']['text'] = $alert['description']; + $entity['alert']['description_text']['translation']['language'] = 'en'; + + 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; + } +} +return $return; +} +function getServiceAlertsByClass() { + $return = Array(); + $alerts = getServiceAlerts("",""); + foreach ($alerts['entities'] as $entity) { + foreach ($entity['informed'] as $informed) { + foreach($informed as $key => $value){ + if (strpos("_id",$key) > 0) { + $parts = explode($key); + $class = $parts[0]; + $id = $value; + } } - } - else { - if ($row[0] == $stopid) $foundStop = true; - } + $return[$class][$id][]['entity'] = $entity; + $return[$class][$id][]['action'] = $informed["x-action"]; } - return $viaPoints; -} -function viaPointNames($tripid, $stopid) -{ - $points = viaPoints($tripid, $stopid, true); - $pointNames = Array(); - foreach ($points as $point) { - $pointNames[] = $point['name']; } - return implode(", ", $pointNames); } ?> +