From: Maxious Date: Fri, 10 Feb 2012 07:18:59 +0000 Subject: Rename servicealerts to local terminology "Real Time Passenger Information System" X-Git-Url: http://maxious.lambdacomplex.org/git/?p=busui.git&a=commitdiff&h=cb89db41c3da2fa7bf5e6c7e419ec23c728ec1d4 --- Rename servicealerts to local terminology "Real Time Passenger Information System" --- --- a/about.php +++ b/about.php @@ -34,8 +34,9 @@
Some icons by Joseph Wain / glyphish.com
Native clients also available for iPhone(cbrTimetable by Sandor Kolotenko - , ACT Buses by David Sullivan) - , Android (MyBus 2.0 by Imagine Team) + , ACT Buses by David Sullivan, Bus Trips ACT by Molson Chengalath) + , Android (MyBus 2.0 by Imagine Team, GetMe2 Canberra by +Colin Thompson ) and Windows Phone 7 (TransHub Canberra by Soul Solutions) Other web clients include iTranzit.
GTFS-realtime API: --- a/aws/busuidb.sh +++ b/aws/busuidb.sh @@ -7,7 +7,8 @@ psql -d transitdata -f /var/www/transitdata.cbrfeed.sql #createuser transitdata -SDRP #password transitdata -#psql -d transitdata -c "GRANT SELECT ON TABLE agency,calendar,calendar_dates,routes,stop_times,stops,trips TO transitdata;" +#psql -d transitdata -c "GRANT SELECT ON TABLE agency,calendar,calendar_dates,routes,stop_times,stops,trips\ +#,servicealerts_alerts,servicealerts_informed TO transitdata;" #psql -d transitdata -c "GRANT SELECT,INSERT ON TABLE myway_observations,myway_routes,myway_stops,myway_timingdeltas TO transitdata;" #psql -d transitdata -c "GRANT SELECT,INSERT,UPDATE ON TABLE myway_routes,myway_stops TO transitdata;" ##psql -d transitdata -c "GRANT SELECT ON ALL TABLES IN SCHEMA public TO transitdata;" @@ -15,3 +16,4 @@ ##SELECT '', 'public', 'shapes', 'shape_pt', ST_CoordDim(shape_pt), ST_SRID(shape_pt), GeometryType(shape_pt) ##FROM shapes LIMIT 1; php /var/www/updatedb.php + --- a/geo/route.kml.php +++ b/geo/route.kml.php @@ -1,30 +1,105 @@ '; echo ' - + + + '; + + + '; $route = getRoute($routeid); - echo "\n\n"; - $link = curPageURL()."/../trip.php?routeid=".htmlspecialchars ($route["route_id"]); - echo "".$route['route_short_name'].""; - echo ''; - echo ''.$route['route_short_name']." ".$route['route_long_name']."]]> "; -echo "#yellowLineGreenPoly"; +echo "\n\n"; +$_REQUEST['time'] = "12:00"; +$trip = getRouteNextTrip($routeid, 0); +$link = curPageURL() . "/../trip.php?routeid=" . htmlspecialchars($route["route_id"]. "&directionid=0&tripid=".$trip['trip_id']) ; +echo "" . $route['route_short_name'] . " Direction 0 "; +echo ''; +echo '' . $route['route_short_name'] . " Direction 0]]> "; +echo "#yellowLineYellowPoly"; - $trips = getRouteTrips($routeid); - echo getTripShape($trips[0]['trip_id']); +echo getTripShape($trip['trip_id']); + echo "\n"; +$stops = Array(); +foreach (getTripStops($trip['trip_id']) as $stop) { + $stop['style'] = "#ylw-pushpin"; + $stops[$stop['stop_id']] = $stop; +} -echo "\n\n"; + +echo "\n\n"; +$trip = getRouteNextTrip($routeid, 1); +$link = curPageURL() . "/../trip.php?routeid=" . htmlspecialchars($route["route_id"]. "&directionid=1&tripid=".$trip['trip_id']) ; +echo "" . $route['route_short_name'] . " Direction 1 "; +echo ''; +echo '' . $route['route_short_name'] . " Direction 1]]> "; +echo "#blueLineBluePoly"; + +echo getTripShape($trip['trip_id']); + echo "\n"; +foreach (getTripStops($trip['trip_id']) as $stop) { + if (isset($stops[$stop['stop_id']])) { + $stop['style'] = "#grn-pushpin"; + } else { + $stop['style'] = "#blue-pushpin"; + } + $stops[$stop['stop_id']] = $stop; +} +foreach ($stops as $stop) { + echo "\n\n"; + $link = curPageURL() . '/../stop.php?stopid=' . htmlspecialchars($stop['stop_id']); + echo "" . htmlspecialchars($stop['stop_name']) . ""; + echo ''; + echo '' . htmlspecialchars($stop['stop_name']) . "]]> "; + echo "" . $stop['style'] . ""; + echo $stop['positionkml']; + echo "\n"; +} + +echo "\n"; ?> --- a/geo/stops.kml.php +++ b/geo/stops.kml.php @@ -1,11 +1,13 @@ createElementNS('http://earth.google.com/kml/2.1', 'kml'); +$node = $dom->createElementNS('http://www.opengis.net/kml/2.2', 'kml'); $parNode = $dom->appendChild($node); // Creates a KML Document element and append it to the KML element. $dnode = $dom->createElement('Document'); @@ -13,7 +15,7 @@ if ($suburb != "") $result_stops = getStopsBySuburb($suburb); else $result_stops = getStops(); foreach ($result_stops as $stop) { - $description = 'http://bus.lambdacomplex.org/' . 'stop.php?stopid=' . $stop['stop_id'] . "
"; + $description = 'View stop page
'; // Creates a Placemark and append it to the Document. $node = $dom->createElement('Placemark'); $placeNode = $docNode->appendChild($node); --- /dev/null +++ b/geo/trip.kml.php @@ -1,1 +1,70 @@ + +'; +echo ' + + + + '; +$trip = getTrip($tripid); +echo "\n\n"; +$link = curPageURL() . "/../trip.php?tripid=" . htmlspecialchars($$tripid); +echo "" . $tripid . ""; +echo ''; +echo '' . $tripid . "]]> "; +echo "#yellowLineGreenPoly"; + +echo getTripShape($tripid); + +echo "\n"; +foreach (getTripStopTimes($tripid) as $stop) { + echo "\n\n"; + $link = curPageURL() . '/../trip.php?tripid=' . htmlspecialchars($tripid); + echo "" . $stop['arrival_time'] . " @ " . htmlspecialchars($stop['stop_name']) . ""; + echo ''; + echo '' . htmlspecialchars($stop['stop_name']) . "]]> "; + echo "#blue-pushpin"; + echo "" . $stop['stop_lon'] . "," . $stop['stop_lat'] . ""; + + echo "\n"; +} +echo "\n"; +?> + + --- a/include/common-auth.inc.php +++ b/include/common-auth.inc.php @@ -30,4 +30,4 @@ login(); } } -?> + --- a/include/common-db.inc.php +++ b/include/common-db.inc.php @@ -27,12 +27,13 @@ } function databaseError($errMsg) { - die($errMsg); + if ($errMsg[1] != "") { + die(print_r($errMsg,true)); + } } include ('db/route-dao.inc.php'); include ('db/trip-dao.inc.php'); include ('db/stop-dao.inc.php'); include ('db/servicealert-dao.inc.php'); -?> --- a/include/common-geo.inc.php +++ b/include/common-geo.inc.php @@ -168,5 +168,3 @@ return $contents->features[0]->properties->name; } -?> - --- a/include/common-net.inc.php +++ b/include/common-net.inc.php @@ -35,7 +35,6 @@ debug(print_r($page, true), "json"); return $page; } - function curPageURL() { $isHTTPS = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on"); $port = (isset($_SERVER["SERVER_PORT"]) && ((!$isHTTPS && $_SERVER["SERVER_PORT"] != "80") || ($isHTTPS && $_SERVER["SERVER_PORT"] != "443"))); @@ -44,5 +43,4 @@ return $url; } -?> --- a/include/common-request.inc.php +++ b/include/common-request.inc.php @@ -57,16 +57,25 @@ if (isset($_REQUEST['stopids'])) { $stopids = explode(",", filter_var($_REQUEST['stopids'], FILTER_SANITIZE_STRING)); } +if (isset($_REQUEST['filterIncludeRoutes'])) { + $filterIncludeRoutes = explode(",", filter_var($_REQUEST['filterIncludeRoutes'], FILTER_SANITIZE_STRING)); +} +if (isset($_REQUEST['filterHasStop'])) { + $filterHasStop = filter_var($_REQUEST['filterHasStop'], FILTER_SANITIZE_STRING); +} if (isset($_REQUEST['tripid'])) { $tripid = filter_var($_REQUEST['tripid'], FILTER_SANITIZE_STRING); +} +if (isset($_REQUEST['routeid'])) { + $routeid = filter_var($_REQUEST['routeid'], FILTER_SANITIZE_STRING); +} +if (isset($_REQUEST['directionid'])) { + $directionid = filter_var($_REQUEST['directionid'], FILTER_SANITIZE_STRING); } if (isset($_REQUEST['stopid'])) { $stopid = filter_var($_REQUEST['stopid'], FILTER_SANITIZE_NUMBER_INT); } -if (isset($_REQUEST['routeid'])) { - $routeid = filter_var($_REQUEST['routeid'], FILTER_SANITIZE_NUMBER_INT); -} if (isset($_REQUEST['geolocate'])) { $geolocate = filter_var($_REQUEST['geolocate'], FILTER_SANITIZE_URL); } -?> + --- a/include/common-session.inc.php +++ b/include/common-session.inc.php @@ -17,14 +17,6 @@ */ // you have to open the session to be able to modify or remove it session_start(); -if (isset($_REQUEST['service_period'])) { - $_SESSION['service_period'] = filter_var($_REQUEST['service_period'], FILTER_SANITIZE_STRING); - sessionUpdated(); -} -if (isset($_REQUEST['time'])) { - $_SESSION['time'] = filter_var($_REQUEST['time'], FILTER_SANITIZE_STRING); - sessionUpdated(); -} if (isset($_REQUEST['geolocate']) && $_REQUEST['geolocate'] != "Enter co-ordinates or address here") { $geocoded = false; if (isset($_REQUEST['lat']) && isset($_REQUEST['lon'])) { @@ -69,9 +61,10 @@ } //debug(print_r($_SESSION, true) , "session"); -function current_time() { - return ($_SESSION['time'] ? $_SESSION['time'] : date("H:i:s")); +function current_time($time = "") { + if (isset($_REQUEST['time'])) return $_REQUEST['time']; + else if ($time != "") date("H:i:s",$time); + else return date("H:i:s"); } -?> --- a/include/common-template.inc.php +++ b/include/common-template.inc.php @@ -42,7 +42,7 @@ } function include_header($pageTitle, $pageType, $opendiv = true, $geolocate = false, $datepicker = false) { - global $basePath, $GTFSREnabled; + global $basePath, $GTFSREnabled, $stopid, $routeid; echo ' @@ -54,19 +54,18 @@ '; - $jqmVersion = "1.0"; + $jqmVersion = "1.0.1"; if (isDebugServer()) { $jqmcss = $basePath . "css/jquery.mobile-$jqmVersion.css"; $jqjs = $basePath . "js/jquery-1.6.4.min.js"; $jqmjs = $basePath . "js/jquery.mobile-$jqmVersion.js"; - + $jqmcss = $basePath . "css/jquery.mobile-b90eab4935.css"; $jqmjs = $basePath . "js/jquery.mobile-b90eab4935.js"; } else { $jqmcss = "//code.jquery.com/mobile/$jqmVersion/jquery.mobile-$jqmVersion.min.css"; $jqjs = "//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"; $jqmjs = "//code.jquery.com/mobile/$jqmVersion/jquery.mobile-$jqmVersion.min.js"; - } echo ' @@ -108,7 +107,7 @@ }'; echo ''; echo ''; - if (isIOSDevice()){ + if (isIOSDevice()) { echo ' @@ -174,19 +173,41 @@
'; if ($GTFSREnabled) { - $overrides = getServiceOverride(); - if ($overrides['service_id']) { - if ($overrides['service_id'] == "noservice") { - echo '
Buses are not running today due to industrial action/public holiday. See Buses are not running today due to industrial action/public holiday. See http://www.action.act.gov.au for details.
'; - } else { - echo '
Buses are running on an altered timetable today due to industrial action/public holiday. See http://www.action.act.gov.au for details.
'; - } - } - $serviceAlerts = getServiceAlertsAsArray("agency", "0"); + } else { + echo '
Buses are running on an altered timetable today due to industrial action/public holiday. See http://www.action.act.gov.au for details.
'; + } + } + $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); + } + } if (isset($serviceAlerts['entity']) && sizeof($serviceAlerts['entity']) > 0) { foreach ($serviceAlerts['entity'] as $entity) { - echo "
" . date("F j, g:i a", strtotime($entity['alert']['active_period'][0]['start'])) . " to " . date("F j, g:i a", strtotime($entity['alert']['active_period'][0]['end'])) . "{$entity['alert']['header_text']['translation'][0]['text']}
Warning: {$entity['alert']['description_text']['translation'][0]['text']} + echo "
{$entity['alert']['header_text']['translation'][0]['text']} " + . date("F jS Y, g:i a", $entity['alert']['active_period'][0]['start']) . " to " + . date("F jS Y, g:i a", $entity['alert']['active_period'][0]['end']) . " +
Warning: {$entity['alert']['description_text']['translation'][0]['text']}
Source
"; } } @@ -213,8 +234,38 @@ echo "\n
"; } +function timeSettings() { + global $service_periods; + echo '
+

Change Time (' . (isset($_REQUEST['time']) ? $_REQUEST['time'] : "Current Time,") . ' ' . ucwords(service_period()) . ')...

+
+ + + + +
+
+ + + Current Time? +
+
+ + + +
+ + +
+
'; +} + function placeSettings() { - global $service_periods; + $geoerror = false; $geoerror = !isset($_SESSION['lat']) || !isset($_SESSION['lat']) || $_SESSION['lat'] == "" || $_SESSION['lon'] == ""; @@ -247,14 +298,15 @@ //stop list collapsing function stopCompare($stopName) { - return substr(trim(preg_replace("/\(Platform.*/", "", $stopName)),0,9); -} -function stopGroupTitle($stopName,$stopdesc) { - if (preg_match("/Dr |Cct |Cir |Av |St |Cr |Parade |Way |Bank /",$stopName)) { - $descParts = explode("
",$stopdesc); - return trim(str_replace("Street: ","",$descParts[0])); + return substr(trim(preg_replace("/\(Platform.*/", "", $stopName)), 0, 9); +} + +function stopGroupTitle($stopName, $stopdesc) { + if (preg_match("/Dr |Cct |Cir |Av |St |Cr |Parade |Way |Bank /", $stopName)) { + $descParts = explode("
", $stopdesc); + return trim(str_replace("Street: ", "", $descParts[0])); } else { - return trim(preg_replace("/\(Platform.*/", "",$stopName)); + return trim(preg_replace("/\(Platform.*/", "", $stopName)); } } @@ -276,5 +328,4 @@ return ""; } } -?> - + --- a/include/common-transit.inc.php +++ b/include/common-transit.inc.php @@ -23,15 +23,18 @@ function service_period($date = "") { - if (isset($_SESSION['service_period'])) - return $_SESSION['service_period']; + if (isset($_REQUEST['service_period'])) { + return $_REQUEST['service_period']; + } + $override = getServiceOverride($date); - if ($override['service_id']) { - $idParts = explode("-",$override['service_id']); - return strtolower($idParts[2]); - } - - switch (date('w', ($date != "" ? $date : time()))) { + if (isset($override['service_id'])) { + return strtolower($override['service_id']); + } + $date = ($date != "" ? $date : time()); + $dow = date('w', $date); + + switch ($dow) { case 0: return 'sunday'; case 6: @@ -40,16 +43,28 @@ return 'weekday'; } } -function service_ids($service_period) { + +function service_ids($service_period, $date = "") { switch ($service_period) { case 'sunday': - return Array("2010-TUGGSUN-Sunday-20","2010-BELCSUN-Sunday-19"); + return Array("Sunday", "Sunday"); case 'saturday': - return Array("2010-BELCSAT-Saturday-19","2010-TUGGSAT-Saturday-19"); + return Array("Saturday", "Saturday"); default: - //return 'weekday'; - return Array("2010-BELCMAST-Weekday-15","2010-TUGGMAST-Weekday-14"); - } + $date = ($date != "" ? $date : time()); +// school holidays + $ymd = date('Ymd', $date); + $dow = date('w', $date); + if (intval($ymd) < "20120203" && $dow != 0 && $dow != 6) { + return Array("Weekday-SchoolVacation", "Weekday-SchoolVacation"); + } else { + return Array("Weekday", "Weekday"); + } + } +} + +function valid_service_ids() { + return array_merge(service_ids(""), service_ids('saturday'), service_ids('sunday')); } function midnight_seconds($time = "") { @@ -134,69 +149,102 @@ street inform: route inform, trip inform, stop inform route patch: trip remove */ - $fm = new transit_realtime\FeedMessage(); - $fh = new transit_realtime\FeedHeader(); - $fh->setGtfsRealtimeVersion(1); - $fh->setTimestamp(time()); - $fm->setHeader($fh); - foreach (getCurrentAlerts() as $alert) { - $fe = new transit_realtime\FeedEntity(); - $fe->setId($alert['id']); - $fe->setIsDeleted(false); - $alert = new transit_realtime\Alert(); - $tr = new transit_realtime\TimeRange(); - $tr->setStart($alert['start']); - $tr->setEnd($alert['end']); - $alert->addActivePeriod($tr); - $informedEntities = getInformedAlerts($alert['id'], $_REQUEST['filter_class'], $_REQUEST['filter_id']); - if (sizeof($informedEntities) > 0) { - $informed = Array(); - $es = new transit_realtime\EntitySelector(); - if ($informedEntity['informed_class'] == "agency") { - $es->setAgencyId($informedEntity['informed_id']); - } - if ($informedEntity['informed_class'] == "stop") { - $es->setStopId($informedEntity['informed_id']); - } - if ($informedEntity['informed_class'] == "route") { - $es->setRouteId($informedEntity['informed_id']); - } - if ($informedEntity['informed_class'] == "trip") { - $td = new transit_realtime\TripDescriptor(); - $td->setTripId($informedEntity['informed_id']); - $es->setTrip($td); - } - $alert->addInformedEntity($es); - } - $alert->setCause(constant("transit_realtime\Alert\Cause::" . $alert['cause'])); - $alert->setEffect(constant("transit_realtime\Alert\Effect::" . $alert['effect'])); - $tsUrl = new transit_realtime\TranslatedString(); - $tUrl = new transit_realtime\TranslatedString\Translation(); - $tUrl->setText($alert['url']); - $tUrl->setLanguage("en"); - $tsUrl->addTranslation($tUrl); - $alert->setUrl($tsUrl); - $tsHeaderText = new transit_realtime\TranslatedString(); - $tHeaderText = new transit_realtime\TranslatedString\Translation(); - $tHeaderText->setText($alert['header']); - $tHeaderText->setLanguage("en"); - $tsHeaderText->addTranslation($tHeaderText); - $alert->setHeaderText($tsHeaderText); - $tsDescriptionText = new transit_realtime\TranslatedString(); - $tDescriptionText = new transit_realtime\TranslatedString\Translation(); - $tDescriptionText->setText($alert['description']); - $tDescriptionText->setLanguage("en"); - $tsDescriptionText->addTranslation($tDescriptionText); - $alert->setDescriptionText($tsDescriptionText); - $fe->setAlert($alert); - $fm->addEntity($fe); + $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); + $alert = new transit_realtime\Alert(); + $tr = new transit_realtime\TimeRange(); + $tr->setStart($current_alert['start']); + $tr->setEnd($current_alert['end']); + $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(); + if ($informedEntity['informed_class'] == "agency") { + $es->setAgencyId($informedEntity['informed_id']); + } + if ($informedEntity['informed_class'] == "stop") { + $es->setStopId($informedEntity['informed_id']); + } + if ($informedEntity['informed_class'] == "route") { + $es->setRouteId($informedEntity['informed_id']); + } + if ($informedEntity['informed_class'] == "trip") { + $td = new transit_realtime\TripDescriptor(); + $td->setTripId($informedEntity['informed_id']); + $es->setTrip($td); + } + $alert->addInformedEntity($es); + } + if ($current_alert['cause'] != "") { + $alert->setCause(constant("transit_realtime\Alert\Cause::" . $current_alert['cause'])); + } + if ($current_alert['effect'] != "") { + $alert->setEffect(constant("transit_realtime\Alert\Effect::" . $current_alert['effect'])); + } + if ($current_alert['url'] != "") { + $tsUrl = new transit_realtime\TranslatedString(); + $tUrl = new transit_realtime\TranslatedString\Translation(); + $tUrl->setText($current_alert['url']); + $tUrl->setLanguage("en"); + $tsUrl->addTranslation($tUrl); + $alert->setUrl($tsUrl); + } + if ($current_alert['header'] != "") { + $tsHeaderText = new transit_realtime\TranslatedString(); + $tHeaderText = new transit_realtime\TranslatedString\Translation(); + $tHeaderText->setText($current_alert['header']); + $tHeaderText->setLanguage("en"); + $tsHeaderText->addTranslation($tHeaderText); + $alert->setHeaderText($tsHeaderText); + } + if ($current_alert['description'] != "") { + $tsDescriptionText = new transit_realtime\TranslatedString(); + $tDescriptionText = new transit_realtime\TranslatedString\Translation(); + $tDescriptionText->setText($current_alert['description']); + $tDescriptionText->setLanguage("en"); + $tsDescriptionText->addTranslation($tDescriptionText); + $alert->setDescriptionText($tsDescriptionText); + } + $fe->setAlert($alert); + if ($affectsFilteredEntities) { + $fm->addEntity($fe); + } + } + if ($informed_count > 0) { + return $fm; + } else { + return null; + } + } else + return null; + } + + function getServiceAlertsAsArray($filter_class = "", $filter_id = "") { + + $alerts = getServiceAlerts($filter_class, $filter_id); + if ($alerts != null) { + $codec = new DrSlump\Protobuf\Codec\PhpArray(); + + return $codec->encode($alerts); + } else { + return nullarray; } - return $fm; - } - - function getServiceAlertsAsArray($filter_class = "", $filter_id = "") { - $codec = new DrSlump\Protobuf\Codec\PhpArray(); - return $codec->encode(getServiceAlerts($filter_class, $filter_id)); } function getServiceAlertsAsBinary($filter_class = "", $filter_id = "") { @@ -286,5 +334,4 @@ } } -?> - + --- a/include/common.inc.php +++ b/include/common.inc.php @@ -57,7 +57,7 @@ function isDebugServer() { return php_sapi_name() == "cli" || strstr(php_uname('n'),"actbus") || isset($_SERVER['SERVER_NAME']) && ( $_SERVER['SERVER_NAME'] == "azusa" || $_SERVER['SERVER_NAME'] == "vanille" - || $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "192.168.1.8"); + || $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "192.168.1.8" || $_SERVER['SERVER_NAME'] == "192.168.178.24"); } include_once ("common-geo.inc.php"); @@ -201,6 +201,3 @@ return implode($glue, $retVal); } - -?> - --- a/include/db/route-dao.inc.php +++ b/include/db/route-dao.inc.php @@ -29,6 +29,7 @@ } return $query->fetch(PDO :: FETCH_ASSOC); } + function getRoutesByShortName($routeShortName) { global $conn; $query = "Select distinct route_id, route_short_name from routes where route_short_name = :routeShortName"; @@ -45,8 +46,11 @@ function getRouteHeadsigns($routeID) { global $conn; - $query = "select distinct stops.stop_name, trip_headsign,direction_id from routes join trips on trips.route_id = routes.route_id -join stop_times on stop_times.trip_id = trips.trip_id join stops on stop_times.stop_id = stops.stop_id where trips.route_id = :routeID and stop_times.stop_sequence = 1"; + $query = "select stops.stop_name, trip_headsign, direction_id,max(service_id) as service_id, count(*) + from routes join trips on trips.route_id = routes.route_id +join stop_times on stop_times.trip_id = trips.trip_id join stops on +stop_times.stop_id = stops.stop_id where trips.route_id = :routeID +and stop_times.stop_sequence = 1 group by stops.stop_name, trip_headsign, direction_id having count(*) > 2"; debug($query, "database"); $query = $conn->prepare($query); $query->bindParam(":routeID", $routeID); @@ -55,9 +59,14 @@ databaseError($conn->errorInfo()); return Array(); } -return $query->fetchAll(); -} - + return $query->fetchAll(); +} +function getRouteDescription($routeID, $directionID) { + $trip = getRouteNextTrip($routeID, $directionID); + $start = getTripStartingPoint($trip['trip_id']); + $end = getTripDestination($trip['trip_id']); + return "From ".$start['stop_name']." to ".$end['stop_name']; +} function getRouteByFullName($routeFullName) { global $conn; $query = "Select * from routes where route_short_name||route_long_name = :routeFullName LIMIT 1"; @@ -85,34 +94,10 @@ return $query->fetchAll(); } -function getRoutesByNumber($routeNumber = "") { - global $conn; - if ($routeNumber != "") { - $query = "Select distinct routes.route_id,routes.route_short_name,routes.route_long_name,service_id from routes join trips on trips.route_id = -routes.route_id join stop_times on stop_times.trip_id = trips.trip_id -where route_short_name = :routeNumber OR route_short_name LIKE :routeNumber2 order by route_short_name;"; - } else { - $query = "SELECT DISTINCT route_short_name from routes order by route_short_name"; - } - debug($query, "database"); - $query = $conn->prepare($query); - if ($routeNumber != "") { - $query->bindParam(":routeNumber", $routeNumber); - $routeNumber2 = "% " . $routeNumber; - $query->bindParam(":routeNumber2", $routeNumber2); - } - $query->execute(); - if (!$query) { - databaseError($conn->errorInfo()); - return Array(); - } - return $query->fetchAll(); -} - function getRoutesByNumberSeries($routeNumberSeries = "") { global $conn; if (strlen($routeNumberSeries) == 1) { - return getRoutesByNumber($routeNumberSeries); + return getRoute($routeNumberSeries); } $seriesMin = substr($routeNumberSeries, 0, -1) . "0"; $seriesMax = substr($routeNumberSeries, 0, -1) . "9"; @@ -132,31 +117,43 @@ return $query->fetchAll(); } -function getRouteNextTrip($routeID) { - global $conn; - $query = "select * from routes join trips on trips.route_id = routes.route_id -join stop_times on stop_times.trip_id = trips.trip_id where -arrival_time > :currentTime and routes.route_id = :routeID order by +function getRouteNextTrip($routeID, $directionID) { + global $conn; + + $query = "select routes.route_id,direction_id,trips.trip_id,trip_headsign,departure_time from routes join trips on trips.route_id = routes.route_id +join stop_times on stop_times.trip_id = trips.trip_id where arrival_time between :currentTime and :futureTime +and routes.route_id = :routeID and trips.direction_id = :directionID order by arrival_time limit 1"; debug($query, "database"); $query = $conn->prepare($query); $query->bindParam(":currentTime", current_time()); + $futureTime = current_time(strtotime(current_time() ." +2h")); + if (date("h",strtotime(current_time()) > 22)) $futureTime = "23:59:59"; + $query->bindParam(":futureTime", $futureTime); $query->bindParam(":routeID", $routeID); - $query->execute(); + $query->bindParam(":directionID", $directionID); + $query->execute(); + databaseError($conn->errorInfo()); if (!$query) { databaseError($conn->errorInfo()); return Array(); } $r = $query->fetch(PDO :: FETCH_ASSOC); - - // past last trip of the day special case - if (sizeof($r) < 16) { - $query = "select * from routes join trips on trips.route_id = routes.route_id -join stop_times on stop_times.trip_id = trips.trip_id where routes.route_id = :routeID order by + return $r; +} + +function getRouteFirstTrip($routeID,$directionID) { + global $conn; + + $query = "select * from routes join trips on trips.route_id = routes.route_id +join stop_times on stop_times.trip_id = trips.trip_id where routes.route_id = :routeID +and trips.direction_id = :directionID order by arrival_time DESC limit 1"; debug($query, "database"); $query = $conn->prepare($query); $query->bindParam(":routeID", $routeID); + + $query->bindParam(":directionID", $directionID); $query->execute(); if (!$query) { databaseError($conn->errorInfo()); @@ -164,12 +161,11 @@ } $r = $query->fetch(PDO :: FETCH_ASSOC); - } - return $r; -} - -function getRouteAtStop($routeID, $stop_id) { - $nextTrip = getRouteNextTrip($routeID); + return $r; +} + +function getRouteAtStop($routeID, $directionID, $stop_id) { + $nextTrip = getRouteNextTrip($routeID, $directionID); if ($nextTrip['trip_id']) { foreach (getTripStopTimes($nextTrip['trip_id']) as $tripStop) { if ($tripStop['stop_id'] == $stop_id) @@ -179,40 +175,59 @@ return Array(); } -function getRouteTrips($routeID) { - global $conn; - $query = "select routes.route_id,trips.trip_id,service_id,arrival_time, stop_id, stop_sequence from routes join trips on trips.route_id = routes.route_id -join stop_times on stop_times.trip_id = trips.trip_id where routes.route_id = :routeID and stop_sequence = '1' order by -arrival_time "; - debug($query, "database"); - $query = $conn->prepare($query); - $query->bindParam(":routeID", $routeID); - $query->execute(); - if (!$query) { - databaseError($conn->errorInfo()); - return Array(); - } - return $query->fetchAll(); -} - -function getRoutesByDestination($destination = "", $service_period = "") { +function getRouteTrips($routeID, $directionID = "", $service_period = "") { global $conn; if ($service_period == "") $service_period = service_period(); + $service_ids = service_ids($service_period); + $sidA = $service_ids[0]; + $sidB = $service_ids[1]; + $directionSQL = ""; + if ($directionID != "") + $directionSQL = " and direction_id = :directionID "; + $query = "select routes.route_id,trips.trip_id,service_id,arrival_time, stop_id, stop_sequence from routes join trips on trips.route_id = routes.route_id +join stop_times on stop_times.trip_id = trips.trip_id where (service_id=:service_periodA OR service_id=:service_periodB) +AND (routes.route_id = :routeID) " . $directionSQL . " and stop_sequence = '1' order by +arrival_time "; + debug($query, "database"); + $query = $conn->prepare($query); + $query->bindParam(":routeID", $routeID); + $query->bindParam(":service_periodA", $sidA); + $query->bindParam(":service_periodB", $sidB); + if ($directionSQL != "") + $query->bindParam(":directionID", $directionID); + $query->execute(); + if (!$query) { + databaseError($conn->errorInfo()); + return Array(); + } + return $query->fetchAll(); +} + +function getRoutesByDestination($destination = "", $service_period = "") { + global $conn; + if ($service_period == "") + $service_period = service_period(); + $service_ids = service_ids($service_period); + $sidA = $service_ids[0]; + $sidB = $service_ids[1]; if ($destination != "") { - $query = "SELECT DISTINCT trips.route_id,route_short_name,route_long_name, service_id + /* $query = "SELECT DISTINCT trips.route_id,route_short_name,route_long_name, service_id FROM stop_times join trips on trips.trip_id = stop_times.trip_id join routes on trips.route_id = routes.route_id -WHERE route_long_name = :destination AND service_id=:service_period order by route_short_name"; +WHERE route_long_name = :destination AND (service_id=:service_periodA OR service_id=:service_periodB) + order by route_short_name";*/ + $query = "select route_id, direction_id, stop_name, b.trip_id, b.stop_sequence from (select route_id, direction_id, max(stop_sequence) as stop_sequence, max(a.trip_id) as trip_id from stop_times inner join (SELECT route_id, direction_id, max(trip_id) as trip_id + from trips group by route_id,direction_id) as a on stop_times.trip_id = a.trip_id group by route_id, direction_id) as b inner join stop_times on b.trip_id = stop_times.trip_id inner join stops on stop_times.stop_id = stops.stop_id where stop_times.stop_sequence = b.stop_sequence and stop_name = :destination order by route_id;"; } else { - $query = "SELECT DISTINCT route_long_name -FROM stop_times join trips on trips.trip_id = -stop_times.trip_id join routes on trips.route_id = routes.route_id -WHERE service_id= :service_period order by route_long_name"; - } - debug($query, "database"); - $query = $conn->prepare($query); - $query->bindParam(":service_period", $service_period); + $query = "select stop_name from (select route_id, direction_id, max(stop_sequence) as stop_sequence, max(a.trip_id) as trip_id from stop_times inner join (SELECT route_id, direction_id, max(trip_id) as trip_id + from trips group by route_id,direction_id) as a on stop_times.trip_id = a.trip_id group by route_id, direction_id) as b inner join stop_times on b.trip_id = stop_times.trip_id inner join stops on stop_times.stop_id = stops.stop_id where stop_times.stop_sequence = b.stop_sequence group by stop_name order by stop_name;"; + } + debug($query, "database"); + $query = $conn->prepare($query); + + //$query->bindParam(":service_periodA", $sidA); + //$query->bindParam(":service_periodB", $sidB); if ($destination != "") $query->bindParam(":destination", $destination); $query->execute(); @@ -226,35 +241,41 @@ function getRoutesBySuburb($suburb, $service_period = "") { if ($service_period == "") $service_period = service_period(); + $service_ids = service_ids($service_period); + $sidA = $service_ids[0]; + $sidB = $service_ids[1]; + global $conn; $query = "SELECT DISTINCT service_id,trips.route_id,route_short_name,route_long_name FROM stop_times join trips on trips.trip_id = stop_times.trip_id join routes on trips.route_id = routes.route_id join stops on stops.stop_id = stop_times.stop_id -WHERE zone_id LIKE ':suburb AND service_id=:service_period ORDER BY route_short_name"; - debug($query, "database"); - $query = $conn->prepare($query); - $query->bindParam(":service_period", $service_period); - $suburb = "%" . $suburb . ";%"; +WHERE stop_desc LIKE :suburb AND (service_id=:service_periodA OR service_id=:service_periodB) + ORDER BY route_short_name"; + debug($query, "database"); + $query = $conn->prepare($query); + $query->bindParam(":service_periodA", $sidA); + $query->bindParam(":service_periodB", $sidB); + $suburb = "%Suburb: %" . $suburb . "%"; $query->bindParam(":suburb", $suburb); $query->execute(); - if (!$query) { - databaseError($conn->errorInfo()); - return Array(); - } + + databaseError($conn->errorInfo()); + return $query->fetchAll(); } function getRoutesNearby($lat, $lng, $limit = "", $distance = 500) { - if ($service_period == "") + // if ($service_period == "") $service_period = service_period(); - $service_ids = service_ids($service_period); + $service_ids = service_ids($service_period); $sidA = $service_ids[0]; $sidB = $service_ids[1]; - if ($limit != "") + $limitSQL = ""; + if ($limit != "") $limitSQL = " LIMIT :limit "; global $conn; - $query = "SELECT service_id,trips.route_id,route_short_name,route_long_name,min(stops.stop_id) as stop_id, + $query = "SELECT service_id,trips.route_id,trips.direction_id,route_short_name,route_long_name,min(stops.stop_id) as stop_id, min(ST_Distance(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), FALSE)) as distance FROM stop_times join trips on trips.trip_id = stop_times.trip_id @@ -262,7 +283,7 @@ join stops on stops.stop_id = stop_times.stop_id WHERE (service_id=:service_periodA OR service_id=:service_periodB) AND ST_DWithin(position, ST_GeographyFromText('SRID=4326;POINT($lng $lat)'), :distance, FALSE) - group by service_id,trips.route_id,route_short_name,route_long_name + group by service_id,trips.route_id,trips.direction_id,route_short_name,route_long_name order by distance $limitSQL"; debug($query, "database"); $query = $conn->prepare($query); @@ -279,4 +300,3 @@ return $query->fetchAll(); } -?> --- 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()); @@ -174,4 +182,3 @@ return null; } -?> --- a/include/db/stop-dao.inc.php +++ b/include/db/stop-dao.inc.php @@ -46,7 +46,7 @@ } } $query .= " order by stop_name;"; - debug($query,"database"); + debug($query, "database"); $query = $conn->prepare($query); if ($firstLetter != "") $query->bindParam(":firstLetter", $firstLetter); @@ -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) { @@ -167,16 +167,16 @@ if ($service_period == "") { $service_period = service_period(); } - $service_ids = service_ids($service_period); + $service_ids = service_ids($service_period); $sidA = $service_ids[0]; $sidB = $service_ids[1]; $limitSQL = ""; if ($limit != "") $limitSQL .= " LIMIT :limit "; - + global $conn; if ($afterTime != "") { - $query = " SELECT stop_times.trip_id,stop_times.arrival_time,stop_times.stop_id,stop_sequence,service_id,trips.route_id,route_short_name,route_long_name,end_times.arrival_time as end_time + $query = " SELECT stop_times.trip_id,stop_times.arrival_time,stop_times.stop_id,stop_sequence,service_id,trips.route_id,trips.direction_id,trips.trip_headsign,route_short_name,route_long_name,end_times.arrival_time as end_time FROM stop_times join trips on trips.trip_id = stop_times.trip_id @@ -184,7 +184,7 @@ WHERE stop_times.arrival_time IS NOT NULL group by trip_id) as end_times WHERE stop_times.stop_id = :stopID AND stop_times.trip_id = end_times.trip_id -AND (service_id=:service_periodA OR service_id=:service_periodB) ".($route_short_name != "" ? " AND route_short_name = :route_short_name ":"")." +AND (service_id=:service_periodA OR service_id=:service_periodB) " . ($route_short_name != "" ? " AND route_short_name = :route_short_name " : "") . " AND end_times.arrival_time > :afterTime ORDER BY end_time $limitSQL"; } else { @@ -194,7 +194,7 @@ stop_times.trip_id join routes on trips.route_id = routes.route_id WHERE stop_times.stop_id = :stopID -AND (service_id=:service_periodA OR service_id=:service_periodB) ".($route_short_name != "" ? " AND route_short_name = :route_short_name ":"")." +AND (service_id=:service_periodA OR service_id=:service_periodB) " . ($route_short_name != "" ? " AND route_short_name = :route_short_name " : "") . " ORDER BY arrival_time $limitSQL"; } debug($query, "database"); @@ -247,4 +247,3 @@ return $timedTrips; } -?> --- a/include/db/trip-dao.inc.php +++ b/include/db/trip-dao.inc.php @@ -35,7 +35,7 @@ } function getTripStops($tripID) { global $conn; - $query = "SELECT stop_id, stop_name, ST_AsKML(position) as positionkml, + $query = "SELECT stops.stop_id, stop_name, ST_AsKML(position) as positionkml, stop_sequence, trips.trip_id FROM stop_times join trips on trips.trip_id = stop_times.trip_id @@ -49,8 +49,27 @@ databaseError($conn->errorInfo()); return Array(); } - return $query->fetchColumn(0); -} + return $query->fetchAll(); +} + +function getTripHasStop($tripID, $stopID) { + global $conn; + $query = "SELECT stop_id +FROM stop_times +join trips on trips.trip_id = stop_times.trip_id +WHERE trips.trip_id = :tripID and stop_times.stop_id = :stopID"; + debug($query, "database"); + $query = $conn->prepare($query); + $query->bindParam(":tripID", $tripID); + $query->bindParam(":stopID", $stopID); + $query->execute(); + if (!$query) { + databaseError($conn->errorInfo()); + return Array(); + } + return ($query->fetchColumn() > 0); +} + function getTripShape($tripID) { // todo, use shapes table if shape_id specified global $conn; @@ -78,7 +97,7 @@ join trips on trips.trip_id = stop_times.trip_id join routes on trips.route_id = routes.route_id join stops on stops.stop_id = stop_times.stop_id -WHERE trips.trip_id = :tripID $range ORDER BY stop_sequence"; +WHERE trips.trip_id = :tripID ORDER BY stop_sequence"; debug($query, "database"); $query = $conn->prepare($query); $query->bindParam(":tripID", $tripID); @@ -132,6 +151,22 @@ } $r = $query->fetch(PDO :: FETCH_ASSOC); return $r['arrival_time']; +} +function getTripStartingPoint($tripID) { + global $conn; + $query = "SELECT stops.stop_id, stops.stop_name, stops.stop_desc + from stop_times inner join stops on stop_times.stop_id = stops.stop_id + WHERE trip_id = :tripID and stop_sequence = '1' limit 1"; + debug($query, "database"); + $query = $conn->prepare($query); + $query->bindParam(":tripID", $tripID); + $query->execute(); + if (!$query) { + databaseError($conn->errorInfo()); + return Array(); + } + $r = $query->fetch(PDO :: FETCH_ASSOC); + return $r; } function getTripDestination($tripID) { @@ -187,6 +222,3 @@ } return $query->fetchAll(); } - - -?> --- a/index.php +++ b/index.php @@ -20,7 +20,7 @@
-

busness time


Canberra Bus Timetables and Trip Planner +

busness time


Canberra Bus Timetables and Trip Planner
Launch Trip Planner... @@ -37,9 +37,9 @@
  • Routes By Suburb
  • Nearby Routes
  • + Busness R&D + MyWay Balance and Timeliness Survey Results Busness R&D'; - echo ' MyWay Balance and Timeliness Survey Results'; include_footer(true) ?> --- a/labs/busstopdensity.tile.php +++ b/labs/busstopdensity.tile.php @@ -1,6 +1,6 @@ "; $trips = getStopTripsWithTimes($stop['stop_id'], "", "", "", 3); --- a/myway/myway_api.json.php +++ b/myway/myway_api.json.php @@ -84,6 +84,9 @@ curl_setopt($ch, CURLOPT_REFERER, "https://www.transport.act.gov.au/ARTS/getbalance.asp"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_TIMEOUT, 30); + // ssl ignore + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); //execute post $pageHTML = curl_exec($ch); if (curl_errno($ch)) --- a/myway/myway_timeliness.php +++ b/myway/myway_timeliness.php @@ -41,8 +41,18 @@ $labels = Array(); $lastRoute = ""; foreach ($query->fetchAll() as $delta) { + /*$routeIDParts = explode(" ",$delta['route_name']); + $routeNumber = $routeIDParts[0]; + $routeDirection = $routeIDParts[1]; + if (preg_match('/31./',$routeName)) { + $routeName = "312-319"." ".$routeDirection; + } else { + $routeName = $delta['route_name']; + }*/ + $routeName = $delta['route_name']; - if (preg_match('/z/',$routeName)) { + + if (preg_match('/31./',$routeName)) { $routeName = "312-319"; } else { $routeName = preg_replace('/\D/', '', $routeName); --- a/myway/myway_timeliness_calculate.php +++ b/myway/myway_timeliness_calculate.php @@ -58,10 +58,18 @@ $search_time = date("H:i:s", strtotime($obsv['time']) - (60 * 60)); // 30 minutes margin $date = date("c", strtotime($obsv['time'])); $timing_period = service_period(strtotime($date)); + + // little hack for public holidays nolonger active; weekdays and 900+ route numbers don't make sense + if ($timing_period == "weekday" && preg_match('/9../',$obsv["route_short_name"])) { + echo "Potential public holiday detected, trying Sunday timetable.
    "; + + $timing_period = "sunday"; + } + if (isset($obsv["stop_id"]) && $obsv["stop_id"] != "" && $obsv["stop_id"] != "*") { $potentialStops = Array(getStop($obsv["stop_id"])); } else { - echo "Potential stops are a bus station
    "; + echo "No stop_id recorded for this stop_name, potential stops are a bus station
    "; $potentialStops = getStops("", trim(str_replace(Array("Arrival","Arrivals","Arrive Platform 3 Set down only.","Arrive","Set Down Only"), "", $obsv["myway_stop"]))); } //:get myway_stops records @@ -87,7 +95,7 @@ } $timeDeltas = Array(); foreach ($potentialRoutes as $potentialRoute) { - echo "Matched route: {$potentialRoute['route_id']} {$potentialRoute['route_short_name']}{$potentialRoute['route_long_name']} {$timing_period}
    "; + echo "Matched route: {$potentialRoute['route_id']} {$potentialRoute['route_short_name']} {$timing_period}
    "; foreach ($potentialStops as $potentialStop) { $stopRoutes = getStopRoutes($potentialStop['stop_id'], $timing_period); $foundRoute = Array(); @@ -110,7 +118,7 @@ "timeDiff" => $timeDiff, "stop_id" => $potentialStop['stop_id'], "stop_sequence" => $trip['stop_sequence'], - "route_name" => "{$trip['route_short_name']} {$trip['route_long_name']} {$trip['direction']}", + "route_name" => "{$trip['route_short_name']} {$trip['trip_headsign']}", "route_id" => $trip['route_id'] ); echo "Found trip {$trip['trip_id']} at stop {$potentialStop['stop_id']} (#{$potentialStop['stop_name']}, sequence #{$trip['stop_sequence']})
    "; --- a/routeList.php +++ b/routeList.php @@ -18,6 +18,7 @@ include ('include/common.inc.php'); function navbar() { + echo '
      @@ -28,6 +29,39 @@
    '; +} + +function displayRoutes($routes) { + echo '
      '; + foreach ($routes as $route) { + foreach (getRouteHeadsigns($route['route_id']) as $headsign) { + + //print_r($route); + echo '
    • ' . $route['route_id'] . "

      + +

      " . $headsign['trip_headsign'] . (strstr($headsign['trip_headsign'], "bound") === false ? "bound" : "") . ", starting at " . $headsign['stop_name'] . " (" . ucwords($headsign['service_id']) . ")

      "; + + echo"
    • \n"; + } + } +} + +function displayNearbyRoutes($routes) { + echo ' '; -} else if (isset($nearby) || isset($suburb)) { - $routes = Array(); +} else if (isset($suburb)) { + if ($suburb) { include_header($suburb . " - " . ucwords(service_period()), "routeList"); navbar(); - timePlaceSettings(); + timeSettings(); trackEvent("Route Lists", "Routes By Suburb", $suburb); - $routes = getRoutesBySuburb($suburb); + displayRoutes(getRoutesBySuburb($suburb)); } - if (isset($nearby)) { - include_header("Routes Nearby", "routeList", true, true); - trackEvent("Route Lists", "Routes Nearby", $_SESSION['lat'] . "," . $_SESSION['lon']); - navbar(); - placeSettings(); - if (!isset($_SESSION['lat']) || !isset($_SESSION['lat']) || $_SESSION['lat'] == "" || $_SESSION['lon'] == "") { - include_footer(); - die(); - } - $routes = getRoutesNearby($_SESSION['lat'], $_SESSION['lon']); +} else if (isset($nearby)) { + $routes = Array(); + include_header("Routes Nearby", "routeList", true, true); + if (isset($_SESSION['lat'])) trackEvent("Route Lists", "Routes Nearby", $_SESSION['lat'] . "," . $_SESSION['lon']); + navbar(); + placeSettings(); + if (!isset($_SESSION['lat']) || !isset($_SESSION['lat']) || $_SESSION['lat'] == "" || $_SESSION['lon'] == "") { + include_footer(); + die(); } - echo '
        '; - if ($routes) { - foreach ($routes as $route) { - echo '
      • ' . $route['route_short_name'] . "

        " . $route['route_long_name'] . " (" . ucwords($route['service_id']) . ")

        "; - if (isset($nearby)) { - $time = getRouteAtStop($route['route_id'], $route['stop_id']); - echo '' . ($time['arrival_time'] ? $time['arrival_time'] : "No more trips today") . "
        " . floor($route['distance']) . 'm away
        '; - } - echo "
      • \n"; - } + $routes = getRoutesNearby($_SESSION['lat'], $_SESSION['lon']); + + + if (sizeof($routes) > 0) { + displayNearbyRoutes($routes); } else { + echo '
          '; echo "
        • No routes nearby.
        • "; } } else if (isset($bynumber) || isset($numberSeries)) { @@ -84,7 +113,7 @@ navbar(); echo '
            '; if (isset($bynumber)) { - $routes = getRoutesByNumber(); + $routes = getRoutes(); $routeSeries = Array(); $seriesRange = Array(); foreach ($routes as $key => $routeNumber) { @@ -118,22 +147,17 @@ } } else if ($numberSeries) { - $routes = getRoutesByNumberSeries($numberSeries); - foreach ($routes as $route) { - echo '
          • ' . $route['route_short_name'] . "

            " . $route['route_long_name'] . " (" . ucwords($route['service_id']) . ")

          • \n"; - } + displayRoutes(getRoutesByNumberSeries($numberSeries)); } } else { include_header("Routes by Destination", "routeList"); navbar(); echo '
              '; if (isset($routeDestination)) { - foreach (getRoutesByDestination($routeDestination) as $route) { - echo '
            • ' . $route["route_short_name"] . '

              ' . $route["route_long_name"] . " (" . ucwords($route['service_id']) . ")

            • \n"; - } + displayRoutes(getRoutesByDestination($routeDestination)); } else { foreach (getRoutesByDestination() as $destination) { - echo '
            • ' . $destination['route_long_name'] . "...
            • \n"; + echo '
            • ' . $destination['stop_name'] . "...
            • \n"; } } } --- /dev/null +++ b/rtpis/gtfs-realtime.php @@ -1,1 +1,53 @@ + $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; +} +?> --- /dev/null +++ b/rtpis/importer.py @@ -1,1 +1,104 @@ +# info +# http://stackoverflow.com/questions/4206882/named-entity-recognition-with-preset-list-of-names-for-python-php/4207128#4207128 +# http://alias-i.com/lingpipe/demos/tutorial/ne/read-me.html approximate dist +# http://streamhacker.com/2008/12/29/how-to-train-a-nltk-chunker/ more training +# http://www.postgresql.org/docs/9.1/static/pgtrgm.html +# data sources +# http://twitter.com/#!/ACTEmergencyInf instant site wide +# http://twitter.com/#!/ACTPol_Traffic +# http://esa.act.gov.au/feeds/currentincidents.xml + +# source: https://gist.github.com/322906/90dea659c04570757cccf0ce1e6d26c9d06f9283 +# to install python -m nltk.downloader punkt +import nltk +import tweepy +import psycopg2 +import pickle + +from iniparse import INIConfig + +def insert_service_alert_sitewide(heading, message, url): + print "NaN" + +def insert_service_alert_for_street(streets, heading, message, url): + conn_string = "host='localhost' dbname='energymapper' user='postgres' password='snmc'" + # print the connection string we will use to connect + print "Connecting to database\n ->%s" % (conn_string) + try: + # get a connection, if a connect cannot be made an exception will be raised here + conn = psycopg2.connect(conn_string) + + # conn.cursor will return a cursor object, you can use this cursor to perform queries + cursor = conn.cursor() + + # execute our Query + cursor.execute("") + + # retrieve the records from the database + records = cursor.fetchall() + + for record in records: + ys.append(record[0]) + # >>> cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (42, 'bar')) + #>>> cur.statusmessage + #'INSERT 0 1' + except: + # Get the most recent exception + exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() + # Exit the script and print an error telling what happened. + sys.exit("Database connection failed!\n ->%s" % (exceptionValue)) + + +def extract_entity_names(t): + entity_names = [] + + if hasattr(t, 'node') and t.node: + if t.node == 'NE': + entity_names.append(' '.join([child[0] for child in t])) + else: + for child in t: + entity_names.extend(extract_entity_names(child)) + + return entity_names + +def extract_names(sample): + sentences = nltk.sent_tokenize(sample) + tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences] + tagged_sentences = [nltk.pos_tag(sentence) for sentence in tokenized_sentences] + chunked_sentences = nltk.batch_ne_chunk(tagged_sentences, binary=True) + # chunked/tagged may be enough to just find and match the nouns + + entity_names = [] + for tree in chunked_sentences: + # Print results per sentence + # print extract_entity_names(tree) + + entity_names.extend(extract_entity_names(tree)) + + # Print all entity names + #print entity_names + + # Print unique entity names + print set(entity_names) + +cfg = INIConfig(open('/tmp/aws.ini')) + +auth = tweepy.OAuthHandler(cfg.api_keys.twitter_consumer_key, cfg.api_keys.twitter_consumer_secret) +auth.set_access_token(cfg.api_keys.twitter_access_token, cfg.api_keys.twitter_access_token_secret) + +#api = tweepy.API(auth) +api = tweepy.API() +# If the authentication was successful, you should +# see the name of the account print out +#print api.me().name +# https://github.com/tweepy/tweepy/blob/master/tweepy/api.py +for status in api.user_timeline(screen_name="ACTPol_Traffic",exclude_replies='true'): + print status.text + print status.created_at + print extract_names(status.text) +# print api.update_status(status="test") + +last_tweet_ids = { "lion": "111", "kitty": "2222" } +pickle.dump( last_tweet_ids, open( "save.p", "wb" ) ) +last_tweet_ids = pickle.load( open( "save.p", "rb" ) ) --- /dev/null +++ b/rtpis/index.php @@ -1,1 +1,21 @@ +'; + + if ($_SESSION['authed'] == true) { + echo'
            • servicealert_editor

              +

              servicealert_editor

            • '; + } + echo'
            • Service Alert Viewer

              +

              Browse current network alerts

            • '; + + echo'
            '; + +?>
    + + + --- /dev/null +++ b/rtpis/punkt.zip --- /dev/null +++ b/rtpis/servicealert_editor.php @@ -1,1 +1,187 @@ +\n"; + die(); +} +if ($_REQUEST['networkinform']) { + addInformedAlert($_REQUEST['networkinform'], "agency", "0", "inform"); + echo "Added network inform for" . $_REQUEST['networkinform']; + die(); +} +if ($_REQUEST['stopsearch']) { + addInformedAlert($_REQUEST['stopsearch'], "stop", $_REQUEST['stopid'], "remove"); + echo "Added stop remove for" . $_REQUEST['stopsearch'] . ", stop" . $_REQUEST['stopid'] . "
    \n"; + + foreach ($service_periods as $sp) { + echo "Remove from $sp routes
    \n"; + foreach (getStopRoutes($_REQUEST['stopid'], $sp) as $route) { + addInformedAlert($_REQUEST['stopsearch'], "route", $route['route_id'], "patch"); + echo "Added route patch for" . $_REQUEST['stopsearch'] . ", route" . $route['route_id'] . "
    \n"; + } + } + die(); +} +if ($_REQUEST['streetsearch']) { + + echo "Informing stops of street
    \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']."
    \n"; + + foreach ($service_periods as $sp) { + echo "Informing $sp routes
    \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'] . "
    \n"; + } + } + } + + die(); +} +?> +Active and Future Alerts: + + '; + } + ?> +
    " . date("c", $alert['start']) . "" . date("c", $alert['end']) . "" . substr($alert['description'], 0, 999) . 'edit
    + +
    + +
    + + " /> +
    +
    + + " /> +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + +
    + + +
    + +'; + foreach (getInformedAlerts($_REQUEST['edit'], "", "") as $informed) { + echo "{$informed['informed_class']}{$informed['informed_id']}{$informed['informed_action']}" . 'delete'; + } + echo ''; + ?> +
    + + +
    +
    +
    + + +
    + + +
    +
    +
    + + +
    + + +
    + --- /dev/null +++ b/rtpis/servicealert_viewer.php @@ -1,1 +1,53 @@ + +Active and Future Alerts: + + '; + } + ?> +
    {$alert['header']}" . substr($alert['description'], 0, 999) . 'View
    +{$alert['header']} +

    From ".date("c",$alert['start'])." to ".date("c",$alert['end'])."

    +{$alert['description']}
    +Source: {$alert['url']}
    "; + echo "Informed Entities for ID {$_REQUEST['view']}:"; + echo ''; + foreach (getInformedAlerts($_REQUEST['view'], "", "") as $informed) { + echo "'; + } + echo '
    {$informed['informed_class']}{$informed['informed_id']}{$informed['informed_action']}" . '
    '; +} +include_footer(); +?> --- /dev/null +++ b/rtpis/siri.php @@ -1,1 +1,8 @@ + + --- a/servicealerts/importer.py +++ /dev/null @@ -1,88 +1,1 @@ -#dependencies http://code.google.com/p/python-twitter/ -# info -# http://stackoverflow.com/questions/4206882/named-entity-recognition-with-preset-list-of-names-for-python-php/4207128#4207128 -# http://alias-i.com/lingpipe/demos/tutorial/ne/read-me.html approximate dist -# http://streamhacker.com/2008/12/29/how-to-train-a-nltk-chunker/ more training -# http://www.postgresql.org/docs/9.1/static/pgtrgm.html - -# data sources -# http://twitter.com/#!/ACTEmergencyInf instant site wide -# http://twitter.com/#!/ACTPol_Traffic -# http://esa.act.gov.au/feeds/currentincidents.xml - -# source: https://gist.github.com/322906/90dea659c04570757cccf0ce1e6d26c9d06f9283 -import nltk -import twitter -import psycopg2 -def insert_service_alert_sitewide(heading, message, url): - -def insert_service_alert_for_street(streets, heading, message, url): - conn_string = "host='localhost' dbname='energymapper' user='postgres' password='snmc'" - # print the connection string we will use to connect - print "Connecting to database\n ->%s" % (conn_string) - try: - # get a connection, if a connect cannot be made an exception will be raised here - conn = psycopg2.connect(conn_string) - - # conn.cursor will return a cursor object, you can use this cursor to perform queries - cursor = conn.cursor() - - # execute our Query - cursor.execute("select max(value), extract(dow from max(time)) as dow, \ -extract(year from max(time))::text || lpad(extract(month from max(time))::text,2,'0') \ -|| lpad(extract(month from max(time))::text,2,'0') as yearmonthweek, to_char(max(time),'J') \ -from environmentdata_values where \"dataSourceID\"='NSWAEMODemand' \ -group by extract(dow from time), extract(year from time), extract(week from time) \ -order by extract(year from time), extract(week from time), extract(dow from time)") - - # retrieve the records from the database - records = cursor.fetchall() - - for record in records: - ys.append(record[0]) -# >>> cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (42, 'bar')) -#>>> cur.statusmessage -#'INSERT 0 1' - except: - # Get the most recent exception - exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() - # Exit the script and print an error telling what happened. - sys.exit("Database connection failed!\n ->%s" % (exceptionValue)) - -def get_tweets(user): - tapi = twitter.Api() - return tapi.GetUserTimeline(user) - -def extract_entity_names(t): - entity_names = [] - - if hasattr(t, 'node') and t.node: - if t.node == 'NE': - entity_names.append(' '.join([child[0] for child in t])) - else: - for child in t: - entity_names.extend(extract_entity_names(child)) - - return entity_names - -def extract_names(sample): - sentences = nltk.sent_tokenize(sample) - tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences] - tagged_sentences = [nltk.pos_tag(sentence) for sentence in tokenized_sentences] - chunked_sentences = nltk.batch_ne_chunk(tagged_sentences, binary=True) - # chunked/tagged may be enough to just find and match the nouns - - entity_names = [] - for tree in chunked_sentences: - # Print results per sentence - # print extract_entity_names(tree) - - entity_names.extend(extract_entity_names(tree)) - - # Print all entity names - #print entity_names - - # Print unique entity names - print set(entity_names) - --- a/servicealerts/index.php +++ /dev/null @@ -1,21 +1,1 @@ -'; - - if ($_SESSION['authed'] == true) { - echo'
  • servicealert_editor

    -

    servicealert_editor

  • '; - } - echo'
  • Service Alert Viewer

    -

    Browse current network alerts

  • '; - - echo' '; - -?> - - - --- a/servicealerts/servicealert_editor.php +++ /dev/null @@ -1,166 +1,1 @@ -\n"; - die(); -} -if ($_REQUEST['networkinform']) { - addInformedAlert($_REQUEST['networkinform'], "agency", "0", "inform"); - echo "Added network inform for" . $_REQUEST['networkinform']; - die(); -} -if ($_REQUEST['stopsearch']) { - addInformedAlert($_REQUEST['stopsearch'], "stop", $_REQUEST['stopid'], "remove"); - echo "Added stop remove for" . $_REQUEST['stopsearch'] . ", stop" . $_REQUEST['stopid'] . "
    \n"; - - foreach ($service_periods as $sp) { - echo "Remove from $sp routes
    \n"; - foreach (getStopRoutes($_REQUEST['stopid'], $sp) as $route) { - addInformedAlert($_REQUEST['stopsearch'], "route", $route['route_id'], "patch"); - echo "Added route patch for" . $_REQUEST['stopsearch'] . ", route" . $route['route_id'] . "
    \n"; - } - } - die(); -} -if ($_REQUEST['streetsearch']) { - - echo "Informing stops of street
    \n"; - foreach (getStopByName() as $stop) { - addInformedAlert($_REQUEST['stopsearch'], "stop", $_REQUEST['stopid'], "inform"); - echo "Added stop inform for" . $_REQUEST['stopsearch'] . ", stop" . $_REQUEST['stopid'] . "
    \n"; - - foreach ($service_periods as $sp) { - echo "Informing $sp routes
    \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'] . "
    \n"; - } - } - die(); - } -} -?> -Active and Future Alerts: - - '; - } - ?> -
    {$alert['start']}{$alert['end']}" . substr($alert['description'], 0, 999) . 'edit
    - -
    - -
    - - " /> -
    -
    - - " /> -
    -
    - - -
    -
    - - -
    -
    - - -
    - - -
    - -'; - foreach (getInformedAlerts($_REQUEST['edit'], "", "") as $informed) { - echo "{$informed['informed_class']}{$informed['informed_id']}{$informed['informed_action']}" . 'delete'; - } - echo ''; - ?> -
    - - -
    -
    -
    - - -
    - - -
    -
    -
    - - -
    - - -
    - --- a/servicealerts/servicealert_viewer.php +++ /dev/null @@ -1,53 +1,1 @@ - -Active and Future Alerts: - - '; - } - ?> -
    {$alert['header']}" . substr($alert['description'], 0, 999) . 'View
    -{$alert['header']} -

    From ".date("c",$alert['start'])." to ".date("c",$alert['end'])."

    -{$alert['description']}
    -Source: {$alert['url']}
    "; - echo "Informed Entities for ID {$_REQUEST['view']}:"; - echo ''; - foreach (getInformedAlerts($_REQUEST['view'], "", "") as $informed) { - echo "'; - } - echo '
    {$informed['informed_class']}{$informed['informed_id']}{$informed['informed_action']}" . '
    '; -} -include_footer(); -?> --- a/servicealerts_api.php +++ /dev/null @@ -1,34 +1,1 @@ - - --- a/stop.php +++ b/stop.php @@ -73,8 +73,12 @@ //} } } -include_header($stop['stop_name'], "stop"); - +if (sizeof($stops) > 0) { + $stopDescParts = explode("
    ", $stop['stop_desc']); + include_header(trim(str_replace("Street: ", "", $stopDescParts[0])), "stop"); +} else { + include_header($stop['stop_name'], "stop"); +} /* $serviceAlerts = json_decode(getPage(curPageURL() . "/servicealerts_api.php?filter_class=stop&filter_id=".$stopid) , true); foreach($serviceAlerts['entities'] as $serviceAlert) { @@ -96,29 +100,7 @@ )); } -// time settings -echo '
    -

    Change Time (' . (isset($_SESSION['time']) ? $_SESSION['time'] : "Current Time,") . ' ' . ucwords(service_period()) . ')...

    -
    -
    -
    - - - Current Time? -
    -
    - - - -
    - - -
    -
    '; +timeSettings(); echo ''; echo ' '; --- a/stopList.php +++ b/stopList.php @@ -36,8 +36,8 @@ navbar(); echo '