First prototype
diff --git a/inc/GPBMetadata/Proto/Gtfs.php b/inc/GPBMetadata/Proto/Gtfs.php
new file mode 100644
index 0000000..d65da4d
--- /dev/null
+++ b/inc/GPBMetadata/Proto/Gtfs.php
@@ -0,0 +1,178 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace GPBMetadata\Proto;
+
+class Gtfs
+{
+ public static $is_initialized = false;
+
+ public static function initOnce() {
+ $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool();
+
+ if (static::$is_initialized == true) {
+ return;
+ }
+ \GPBMetadata\Google\Protobuf\Any::initOnce();
+ $pool->internalAddGeneratedFile(hex2bin(
+ "0af0230a1070726f746f2f677466732e70726f746f12046774667322510a" .
+ "0b466565644d65737361676512200a0668656164657218012001280b3210" .
+ "2e677466732e4665656448656164657212200a06656e7469747918022003" .
+ "280b32102e677466732e46656564456e7469747922e6010a0a4665656448" .
+ "656164657212140a0c677466735f76657273696f6e180120012809121b0a" .
+ "13666565645f7075626c69736865725f6e616d65180220012809121a0a12" .
+ "666565645f7075626c69736865725f75726c18032001280912110a096665" .
+ "65645f6c616e6718042001280912170a0f666565645f73746172745f6461" .
+ "746518052001280912150a0d666565645f656e645f646174651806200128" .
+ "0912140a0c666565645f76657273696f6e18072001280912280a09657874" .
+ "656e73696f6e18d00f2001280b32142e676f6f676c652e70726f746f6275" .
+ "662e416e794a0608e80710d00f2291040a0a46656564456e74697479120a" .
+ "0a02696418012001280912120a0a69735f64656c65746564180220012808" .
+ "121e0a066167656e637918032001280b320c2e677466732e4167656e6379" .
+ "4800121a0a0473746f7018042001280b320a2e677466732e53746f704800" .
+ "121c0a05726f75746518052001280b320b2e677466732e526f7574654800" .
+ "121a0a047472697018062001280b320a2e677466732e5472697048001223" .
+ "0a0973746f705f74696d6518072001280b320e2e677466732e53746f7054" .
+ "696d65480012220a0863616c656e64617218082001280b320e2e67746673" .
+ "2e43616c656e6461724800122b0a0d63616c656e6461725f646174651809" .
+ "2001280b32122e677466732e43616c656e646172446174654800122d0a0e" .
+ "666172655f617474726962757465180a2001280b32132e677466732e4661" .
+ "7265417474726962757465480012230a09666172655f72756c65180b2001" .
+ "280b320e2e677466732e4661726552756c654800121c0a05736861706518" .
+ "0c2001280b320b2e677466732e5368617065480012240a09667265717565" .
+ "6e6379180d2001280b320f2e677466732e4672657175656e637948001222" .
+ "0a087472616e73666572180e2001280b320e2e677466732e5472616e7366" .
+ "6572480012280a09657874656e73696f6e18d00f2001280b32142e676f6f" .
+ "676c652e70726f746f6275662e416e7942090a07656c656d656e744a0608" .
+ "e80710d00f22d3010a064167656e637912110a096167656e63795f696418" .
+ "012001280912130a0b6167656e63795f6e616d6518022001280912120a0a" .
+ "6167656e63795f75726c18032001280912170a0f6167656e63795f74696d" .
+ "657a6f6e6518042001280912130a0b6167656e63795f6c616e6718052001" .
+ "280912140a0c6167656e63795f70686f6e6518062001280912170a0f6167" .
+ "656e63795f666172655f75726c18072001280912280a09657874656e7369" .
+ "6f6e18d00f2001280b32142e676f6f676c652e70726f746f6275662e416e" .
+ "794a0608e80710d00f2288040a0453746f70120f0a0773746f705f696418" .
+ "012001280912110a0973746f705f636f646518022001280912110a097374" .
+ "6f705f6e616d6518032001280912110a0973746f705f6465736318042001" .
+ "280912100a086c6174697475646518052001280212110a096c6f6e676974" .
+ "756465180620012802120f0a077a6f6e655f696418072001280912100a08" .
+ "73746f705f75726c180820012809122e0a0d6c6f636174696f6e5f747970" .
+ "6518092001280e32172e677466732e53746f702e4c6f636174696f6e5479" .
+ "706512160a0e706172656e745f73746174696f6e180a2001280912170a0f" .
+ "6167656e63795f74696d657a6f6e65180b20012809123a0a13776865656c" .
+ "63686169725f626f617264696e67180c2001280e321d2e677466732e5374" .
+ "6f702e576865656c6368616972426f617264696e6712280a09657874656e" .
+ "73696f6e18d00f2001280b32142e676f6f676c652e70726f746f6275662e" .
+ "416e7922580a0c4c6f636174696f6e5479706512080a0453544f50100012" .
+ "0b0a0753544154494f4e1001120c0a08454e5452414e4345100212100a0c" .
+ "47454e455249435f4e4f4445100312110a0d424f415244494e475f415245" .
+ "41100422450a12576865656c6368616972426f617264696e67120b0a0755" .
+ "4e4b4e4f574e1000120e0a0a41434345535349424c45100112120a0e4e4f" .
+ "545f41434345535349424c4510024a0608e80710d00f22fd020a05526f75" .
+ "746512100a08726f7574655f696418012001280912110a096167656e6379" .
+ "5f696418022001280912180a10726f7574655f73686f72745f6e616d6518" .
+ "032001280912170a0f726f7574655f6c6f6e675f6e616d65180420012809" .
+ "12120a0a726f7574655f6465736318052001280912290a0a726f7574655f" .
+ "7479706518062001280e32152e677466732e526f7574652e526f75746554" .
+ "79706512110a09726f7574655f75726c18072001280912130a0b726f7574" .
+ "655f636f6c6f7218082001280912180a10726f7574655f746578745f636f" .
+ "6c6f7218092001280912280a09657874656e73696f6e18d00f2001280b32" .
+ "142e676f6f676c652e70726f746f6275662e416e7922690a09526f757465" .
+ "5479706512080a045452414d1000120a0a06535542574159100112080a04" .
+ "5241494c100212070a03425553100312090a0546455252591004120c0a08" .
+ "4341424c454341521005120b0a07474f4e444f4c411006120d0a0946554e" .
+ "4943554c415210074a0608e80710d00f2297020a045472697012100a0872" .
+ "6f7574655f696418012001280912120a0a736572766963655f6964180220" .
+ "012809120f0a07747269705f696418032001280912150a0d747269705f68" .
+ "6561647369676e18042001280912170a0f747269705f73686f72745f6e61" .
+ "6d65180520012809122a0a0c646972656374696f6e5f696418062001280e" .
+ "32142e677466732e547269702e446972656374696f6e12100a08626c6f63" .
+ "6b5f696418072001280912100a0873686170655f69641808200128091228" .
+ "0a09657874656e73696f6e18d00f2001280b32142e676f6f676c652e7072" .
+ "6f746f6275662e416e7922260a09446972656374696f6e120c0a084f5554" .
+ "424f554e441000120b0a07494e424f554e4410014a0608e80710d00f2290" .
+ "030a0853746f7054696d65120f0a07747269705f69641801200128091214" .
+ "0a0c6172726976616c5f74696d6518022001280912160a0e646570617274" .
+ "7572655f74696d65180320012809120f0a0773746f705f69641804200128" .
+ "0912150a0d73746f705f73657175656e636518052001280912150a0d7374" .
+ "6f705f686561647369676e18062001280912340a0b7069636b75705f7479" .
+ "706518072001280e321f2e677466732e53746f7054696d652e417661696c" .
+ "6162696c6974795479706512360a0d64726f705f6f66665f747970651808" .
+ "2001280e321f2e677466732e53746f7054696d652e417661696c6162696c" .
+ "69747954797065121b0a1373686170655f646973745f74726176656c6564" .
+ "18092001280212280a09657874656e73696f6e18d00f2001280b32142e67" .
+ "6f6f676c652e70726f746f6275662e416e7922490a10417661696c616269" .
+ "6c69747954797065120b0a07524547554c4152100012110a0d4e4f545f41" .
+ "5641494c41424c45100112090a0550484f4e451002120a0a064452495645" .
+ "5210034a0608e80710d00f22e3030a0843616c656e64617212120a0a7365" .
+ "72766963655f6964180120012809122a0a066d6f6e64617918022001280e" .
+ "321a2e677466732e43616c656e6461722e43616c656e646172446179122b" .
+ "0a077475657364617918032001280e321a2e677466732e43616c656e6461" .
+ "722e43616c656e646172446179122d0a097765646e657364617918042001" .
+ "280e321a2e677466732e43616c656e6461722e43616c656e646172446179" .
+ "122c0a08746875727364617918052001280e321a2e677466732e43616c65" .
+ "6e6461722e43616c656e646172446179122a0a0666726964617918062001" .
+ "280e321a2e677466732e43616c656e6461722e43616c656e646172446179" .
+ "122c0a08736174757264617918072001280e321a2e677466732e43616c65" .
+ "6e6461722e43616c656e646172446179122a0a0673756e64617918082001" .
+ "280e321a2e677466732e43616c656e6461722e43616c656e646172446179" .
+ "12120a0a73746172745f6461746518092001280912100a08656e645f6461" .
+ "7465180a2001280912280a09657874656e73696f6e18d00f2001280b3214" .
+ "2e676f6f676c652e70726f746f6275662e416e79222f0a0b43616c656e64" .
+ "617244617912110a0d4e4f545f415641494c41424c451000120d0a094156" .
+ "41494c41424c4510014a0608e80710d00f22d9010a0c43616c656e646172" .
+ "4461746512120a0a736572766963655f6964180120012809120c0a046461" .
+ "746518022001280912380a0e657863657074696f6e5f7479706518032001" .
+ "280e32202e677466732e43616c656e646172446174652e45786365707469" .
+ "6f6e5479706512280a09657874656e73696f6e18d00f2001280b32142e67" .
+ "6f6f676c652e70726f746f6275662e416e79223b0a0d457863657074696f" .
+ "6e5479706512120a0e554e555345445f554e4b4e4f574e100012090a0541" .
+ "444445441001120b0a0752454d4f56454410024a0608e80710d00f22e802" .
+ "0a0d46617265417474726962757465120f0a07666172655f696418012001" .
+ "2809120d0a05707269636518022001280212150a0d63757272656e63795f" .
+ "7479706518032001280912390a0e7061796d656e745f6d6574686f641804" .
+ "2001280e32212e677466732e466172654174747269627574652e5061796d" .
+ "656e744d6574686f6412300a097472616e736665727318052001280e321d" .
+ "2e677466732e466172654174747269627574652e5472616e736665727312" .
+ "190a117472616e736665725f6475726174696f6e18062001280512280a09" .
+ "657874656e73696f6e18d00f2001280b32142e676f6f676c652e70726f74" .
+ "6f6275662e416e79222d0a0d5061796d656e744d6574686f64120b0a074f" .
+ "4e424f4152441000120f0a0b505245424f415244494e47100122370a0954" .
+ "72616e736665727312060a024e4f100012080a044f4e4345100112090a05" .
+ "54574943451002120d0a09554e4c494d4954454410034a0608e80710d00f" .
+ "229f010a084661726552756c65120f0a07666172655f6964180120012809" .
+ "12100a08726f7574655f696418022001280912110a096f726967696e5f69" .
+ "6418032001280912160a0e64657374696e6174696f6e5f69641804200128" .
+ "0912130a0b636f6e7461696e735f696418052001280912280a0965787465" .
+ "6e73696f6e18d00f2001280b32142e676f6f676c652e70726f746f627566" .
+ "2e416e794a0608e80710d00f22af010a05536861706512100a0873686170" .
+ "655f696418012001280912140a0c73686170655f70745f6c617418022001" .
+ "280212140a0c73686170655f70745f6c6f6e18032001280212190a117368" .
+ "6170655f70745f73657175656e6365180420012805121b0a137368617065" .
+ "5f646973745f74726176656c656418052001280212280a09657874656e73" .
+ "696f6e18d00f2001280b32142e676f6f676c652e70726f746f6275662e41" .
+ "6e794a0608e80710d00f22eb010a094672657175656e6379120f0a077472" .
+ "69705f696418012001280912120a0a73746172745f74696d651802200128" .
+ "0912100a08656e645f74696d6518032001280912140a0c68656164776179" .
+ "5f7365637318042001280512310a0b65786163745f74696d657318052001" .
+ "280e321c2e677466732e4672657175656e63792e5363686564756c655479" .
+ "706512280a09657874656e73696f6e18d00f2001280b32142e676f6f676c" .
+ "652e70726f746f6275662e416e79222c0a0c5363686564756c6554797065" .
+ "120f0a0b4e4f545f45584143544c591000120b0a0745584143544c591001" .
+ "4a0608e80710d00f2280020a085472616e7366657212140a0c66726f6d5f" .
+ "73746f705f696418012001280912120a0a746f5f73746f705f6964180220" .
+ "01280912320a0d7472616e736665725f7479706518032001280e321b2e67" .
+ "7466732e5472616e736665722e5472616e736665725479706512190a116d" .
+ "696e5f7472616e736665725f74696d6518042001280512280a0965787465" .
+ "6e73696f6e18d00f2001280b32142e676f6f676c652e70726f746f627566" .
+ "2e416e7922490a0c5472616e7366657254797065120f0a0b5245434f4d4d" .
+ "454e444544100012090a0554494d45441001120b0a074d494e494d554d10" .
+ "0212100a0c4e4f545f504f535349424c4510034a0608e80710d00f620670" .
+ "726f746f33"
+ ), true);
+
+ static::$is_initialized = true;
+ }
+}
+
diff --git a/inc/Gtfs/Agency.php b/inc/Gtfs/Agency.php
new file mode 100644
index 0000000..43f1f3c
--- /dev/null
+++ b/inc/Gtfs/Agency.php
@@ -0,0 +1,307 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.Agency</code>
+ */
+class Agency extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The agency_id field is an ID that uniquely identifies a transit agency.
+ *
+ * Generated from protobuf field <code>string agency_id = 1;</code>
+ */
+ protected $agency_id = '';
+ /**
+ * The agency_name field contains the full name of the transit agency.
+ *
+ * Generated from protobuf field <code>string agency_name = 2;</code>
+ */
+ protected $agency_name = '';
+ /**
+ * The agency_url field contains the URL of the transit agency.
+ *
+ * Generated from protobuf field <code>string agency_url = 3;</code>
+ */
+ protected $agency_url = '';
+ /**
+ * The agency_timezone field contains the timezone where the transit agency is located.
+ *
+ * Generated from protobuf field <code>string agency_timezone = 4;</code>
+ */
+ protected $agency_timezone = '';
+ /**
+ * The agency_lang field contains a two-letter ISO 639-1 code for the primary language used by this transit agency.
+ *
+ * Generated from protobuf field <code>string agency_lang = 5;</code>
+ */
+ protected $agency_lang = '';
+ /**
+ * The agency_phone field contains a single voice telephone number for the specified agency.
+ *
+ * Generated from protobuf field <code>string agency_phone = 6;</code>
+ */
+ protected $agency_phone = '';
+ /**
+ * The agency_fare_url specifies the URL of a web page that allows a rider to purchase tickets or other fare instruments for that agency online.
+ *
+ * Generated from protobuf field <code>string agency_fare_url = 7;</code>
+ */
+ protected $agency_fare_url = '';
+ /**
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ */
+ protected $extension = null;
+
+ /**
+ * Constructor.
+ *
+ * @param array $data {
+ * Optional. Data for populating the Message object.
+ *
+ * @type string $agency_id
+ * The agency_id field is an ID that uniquely identifies a transit agency.
+ * @type string $agency_name
+ * The agency_name field contains the full name of the transit agency.
+ * @type string $agency_url
+ * The agency_url field contains the URL of the transit agency.
+ * @type string $agency_timezone
+ * The agency_timezone field contains the timezone where the transit agency is located.
+ * @type string $agency_lang
+ * The agency_lang field contains a two-letter ISO 639-1 code for the primary language used by this transit agency.
+ * @type string $agency_phone
+ * The agency_phone field contains a single voice telephone number for the specified agency.
+ * @type string $agency_fare_url
+ * The agency_fare_url specifies the URL of a web page that allows a rider to purchase tickets or other fare instruments for that agency online.
+ * @type \Google\Protobuf\Any $extension
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ * }
+ */
+ public function __construct($data = NULL) {
+ \GPBMetadata\Proto\Gtfs::initOnce();
+ parent::__construct($data);
+ }
+
+ /**
+ * The agency_id field is an ID that uniquely identifies a transit agency.
+ *
+ * Generated from protobuf field <code>string agency_id = 1;</code>
+ * @return string
+ */
+ public function getAgencyId()
+ {
+ return $this->agency_id;
+ }
+
+ /**
+ * The agency_id field is an ID that uniquely identifies a transit agency.
+ *
+ * Generated from protobuf field <code>string agency_id = 1;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setAgencyId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->agency_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The agency_name field contains the full name of the transit agency.
+ *
+ * Generated from protobuf field <code>string agency_name = 2;</code>
+ * @return string
+ */
+ public function getAgencyName()
+ {
+ return $this->agency_name;
+ }
+
+ /**
+ * The agency_name field contains the full name of the transit agency.
+ *
+ * Generated from protobuf field <code>string agency_name = 2;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setAgencyName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->agency_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The agency_url field contains the URL of the transit agency.
+ *
+ * Generated from protobuf field <code>string agency_url = 3;</code>
+ * @return string
+ */
+ public function getAgencyUrl()
+ {
+ return $this->agency_url;
+ }
+
+ /**
+ * The agency_url field contains the URL of the transit agency.
+ *
+ * Generated from protobuf field <code>string agency_url = 3;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setAgencyUrl($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->agency_url = $var;
+
+ return $this;
+ }
+
+ /**
+ * The agency_timezone field contains the timezone where the transit agency is located.
+ *
+ * Generated from protobuf field <code>string agency_timezone = 4;</code>
+ * @return string
+ */
+ public function getAgencyTimezone()
+ {
+ return $this->agency_timezone;
+ }
+
+ /**
+ * The agency_timezone field contains the timezone where the transit agency is located.
+ *
+ * Generated from protobuf field <code>string agency_timezone = 4;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setAgencyTimezone($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->agency_timezone = $var;
+
+ return $this;
+ }
+
+ /**
+ * The agency_lang field contains a two-letter ISO 639-1 code for the primary language used by this transit agency.
+ *
+ * Generated from protobuf field <code>string agency_lang = 5;</code>
+ * @return string
+ */
+ public function getAgencyLang()
+ {
+ return $this->agency_lang;
+ }
+
+ /**
+ * The agency_lang field contains a two-letter ISO 639-1 code for the primary language used by this transit agency.
+ *
+ * Generated from protobuf field <code>string agency_lang = 5;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setAgencyLang($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->agency_lang = $var;
+
+ return $this;
+ }
+
+ /**
+ * The agency_phone field contains a single voice telephone number for the specified agency.
+ *
+ * Generated from protobuf field <code>string agency_phone = 6;</code>
+ * @return string
+ */
+ public function getAgencyPhone()
+ {
+ return $this->agency_phone;
+ }
+
+ /**
+ * The agency_phone field contains a single voice telephone number for the specified agency.
+ *
+ * Generated from protobuf field <code>string agency_phone = 6;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setAgencyPhone($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->agency_phone = $var;
+
+ return $this;
+ }
+
+ /**
+ * The agency_fare_url specifies the URL of a web page that allows a rider to purchase tickets or other fare instruments for that agency online.
+ *
+ * Generated from protobuf field <code>string agency_fare_url = 7;</code>
+ * @return string
+ */
+ public function getAgencyFareUrl()
+ {
+ return $this->agency_fare_url;
+ }
+
+ /**
+ * The agency_fare_url specifies the URL of a web page that allows a rider to purchase tickets or other fare instruments for that agency online.
+ *
+ * Generated from protobuf field <code>string agency_fare_url = 7;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setAgencyFareUrl($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->agency_fare_url = $var;
+
+ return $this;
+ }
+
+ /**
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @return \Google\Protobuf\Any
+ */
+ public function getExtension()
+ {
+ return $this->extension;
+ }
+
+ /**
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @param \Google\Protobuf\Any $var
+ * @return $this
+ */
+ public function setExtension($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+ $this->extension = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/inc/Gtfs/Calendar.php b/inc/Gtfs/Calendar.php
new file mode 100644
index 0000000..2536d81
--- /dev/null
+++ b/inc/Gtfs/Calendar.php
@@ -0,0 +1,350 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.Calendar</code>
+ */
+class Calendar extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+ *
+ * Generated from protobuf field <code>string service_id = 1;</code>
+ */
+ protected $service_id = '';
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay monday = 2;</code>
+ */
+ protected $monday = 0;
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay tuesday = 3;</code>
+ */
+ protected $tuesday = 0;
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay wednesday = 4;</code>
+ */
+ protected $wednesday = 0;
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay thursday = 5;</code>
+ */
+ protected $thursday = 0;
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay friday = 6;</code>
+ */
+ protected $friday = 0;
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay saturday = 7;</code>
+ */
+ protected $saturday = 0;
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay sunday = 8;</code>
+ */
+ protected $sunday = 0;
+ /**
+ * Generated from protobuf field <code>string start_date = 9;</code>
+ */
+ protected $start_date = '';
+ /**
+ * Generated from protobuf field <code>string end_date = 10;</code>
+ */
+ protected $end_date = '';
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ */
+ protected $extension = null;
+
+ /**
+ * Constructor.
+ *
+ * @param array $data {
+ * Optional. Data for populating the Message object.
+ *
+ * @type string $service_id
+ * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+ * @type int $monday
+ * @type int $tuesday
+ * @type int $wednesday
+ * @type int $thursday
+ * @type int $friday
+ * @type int $saturday
+ * @type int $sunday
+ * @type string $start_date
+ * @type string $end_date
+ * @type \Google\Protobuf\Any $extension
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ * }
+ */
+ public function __construct($data = NULL) {
+ \GPBMetadata\Proto\Gtfs::initOnce();
+ parent::__construct($data);
+ }
+
+ /**
+ * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+ *
+ * Generated from protobuf field <code>string service_id = 1;</code>
+ * @return string
+ */
+ public function getServiceId()
+ {
+ return $this->service_id;
+ }
+
+ /**
+ * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+ *
+ * Generated from protobuf field <code>string service_id = 1;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setServiceId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->service_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay monday = 2;</code>
+ * @return int
+ */
+ public function getMonday()
+ {
+ return $this->monday;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay monday = 2;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setMonday($var)
+ {
+ GPBUtil::checkEnum($var, \Gtfs\Calendar_CalendarDay::class);
+ $this->monday = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay tuesday = 3;</code>
+ * @return int
+ */
+ public function getTuesday()
+ {
+ return $this->tuesday;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay tuesday = 3;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setTuesday($var)
+ {
+ GPBUtil::checkEnum($var, \Gtfs\Calendar_CalendarDay::class);
+ $this->tuesday = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay wednesday = 4;</code>
+ * @return int
+ */
+ public function getWednesday()
+ {
+ return $this->wednesday;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay wednesday = 4;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setWednesday($var)
+ {
+ GPBUtil::checkEnum($var, \Gtfs\Calendar_CalendarDay::class);
+ $this->wednesday = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay thursday = 5;</code>
+ * @return int
+ */
+ public function getThursday()
+ {
+ return $this->thursday;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay thursday = 5;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setThursday($var)
+ {
+ GPBUtil::checkEnum($var, \Gtfs\Calendar_CalendarDay::class);
+ $this->thursday = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay friday = 6;</code>
+ * @return int
+ */
+ public function getFriday()
+ {
+ return $this->friday;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay friday = 6;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setFriday($var)
+ {
+ GPBUtil::checkEnum($var, \Gtfs\Calendar_CalendarDay::class);
+ $this->friday = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay saturday = 7;</code>
+ * @return int
+ */
+ public function getSaturday()
+ {
+ return $this->saturday;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay saturday = 7;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setSaturday($var)
+ {
+ GPBUtil::checkEnum($var, \Gtfs\Calendar_CalendarDay::class);
+ $this->saturday = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay sunday = 8;</code>
+ * @return int
+ */
+ public function getSunday()
+ {
+ return $this->sunday;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar.CalendarDay sunday = 8;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setSunday($var)
+ {
+ GPBUtil::checkEnum($var, \Gtfs\Calendar_CalendarDay::class);
+ $this->sunday = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string start_date = 9;</code>
+ * @return string
+ */
+ public function getStartDate()
+ {
+ return $this->start_date;
+ }
+
+ /**
+ * Generated from protobuf field <code>string start_date = 9;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setStartDate($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->start_date = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string end_date = 10;</code>
+ * @return string
+ */
+ public function getEndDate()
+ {
+ return $this->end_date;
+ }
+
+ /**
+ * Generated from protobuf field <code>string end_date = 10;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setEndDate($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->end_date = $var;
+
+ return $this;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @return \Google\Protobuf\Any
+ */
+ public function getExtension()
+ {
+ return $this->extension;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @param \Google\Protobuf\Any $var
+ * @return $this
+ */
+ public function setExtension($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+ $this->extension = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/inc/Gtfs/Calendar/CalendarDay.php b/inc/Gtfs/Calendar/CalendarDay.php
new file mode 100644
index 0000000..12b6667
--- /dev/null
+++ b/inc/Gtfs/Calendar/CalendarDay.php
@@ -0,0 +1,51 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\Calendar;
+
+use UnexpectedValueException;
+
+/**
+ * Protobuf type <code>gtfs.Calendar.CalendarDay</code>
+ */
+class CalendarDay
+{
+ /**
+ * Generated from protobuf enum <code>NOT_AVAILABLE = 0;</code>
+ */
+ const NOT_AVAILABLE = 0;
+ /**
+ * Generated from protobuf enum <code>AVAILABLE = 1;</code>
+ */
+ const AVAILABLE = 1;
+
+ private static $valueToName = [
+ self::NOT_AVAILABLE => 'NOT_AVAILABLE',
+ self::AVAILABLE => 'AVAILABLE',
+ ];
+
+ public static function name($value)
+ {
+ if (!isset(self::$valueToName[$value])) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no name defined for value %s', __CLASS__, $value));
+ }
+ return self::$valueToName[$value];
+ }
+
+
+ public static function value($name)
+ {
+ $const = __CLASS__ . '::' . strtoupper($name);
+ if (!defined($const)) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no value defined for name %s', __CLASS__, $name));
+ }
+ return constant($const);
+ }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(CalendarDay::class, \Gtfs\Calendar_CalendarDay::class);
+
diff --git a/inc/Gtfs/CalendarDate.php b/inc/Gtfs/CalendarDate.php
new file mode 100644
index 0000000..a3f9240
--- /dev/null
+++ b/inc/Gtfs/CalendarDate.php
@@ -0,0 +1,161 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.CalendarDate</code>
+ */
+class CalendarDate extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+ *
+ * Generated from protobuf field <code>string service_id = 1;</code>
+ */
+ protected $service_id = '';
+ /**
+ * Generated from protobuf field <code>string date = 2;</code>
+ */
+ protected $date = '';
+ /**
+ * Generated from protobuf field <code>.gtfs.CalendarDate.ExceptionType exception_type = 3;</code>
+ */
+ protected $exception_type = 0;
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ */
+ protected $extension = null;
+
+ /**
+ * Constructor.
+ *
+ * @param array $data {
+ * Optional. Data for populating the Message object.
+ *
+ * @type string $service_id
+ * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+ * @type string $date
+ * @type int $exception_type
+ * @type \Google\Protobuf\Any $extension
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ * }
+ */
+ public function __construct($data = NULL) {
+ \GPBMetadata\Proto\Gtfs::initOnce();
+ parent::__construct($data);
+ }
+
+ /**
+ * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+ *
+ * Generated from protobuf field <code>string service_id = 1;</code>
+ * @return string
+ */
+ public function getServiceId()
+ {
+ return $this->service_id;
+ }
+
+ /**
+ * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+ *
+ * Generated from protobuf field <code>string service_id = 1;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setServiceId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->service_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string date = 2;</code>
+ * @return string
+ */
+ public function getDate()
+ {
+ return $this->date;
+ }
+
+ /**
+ * Generated from protobuf field <code>string date = 2;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setDate($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->date = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.CalendarDate.ExceptionType exception_type = 3;</code>
+ * @return int
+ */
+ public function getExceptionType()
+ {
+ return $this->exception_type;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.CalendarDate.ExceptionType exception_type = 3;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setExceptionType($var)
+ {
+ GPBUtil::checkEnum($var, \Gtfs\CalendarDate_ExceptionType::class);
+ $this->exception_type = $var;
+
+ return $this;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @return \Google\Protobuf\Any
+ */
+ public function getExtension()
+ {
+ return $this->extension;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @param \Google\Protobuf\Any $var
+ * @return $this
+ */
+ public function setExtension($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+ $this->extension = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/inc/Gtfs/CalendarDate/ExceptionType.php b/inc/Gtfs/CalendarDate/ExceptionType.php
new file mode 100644
index 0000000..11a0024
--- /dev/null
+++ b/inc/Gtfs/CalendarDate/ExceptionType.php
@@ -0,0 +1,56 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\CalendarDate;
+
+use UnexpectedValueException;
+
+/**
+ * Protobuf type <code>gtfs.CalendarDate.ExceptionType</code>
+ */
+class ExceptionType
+{
+ /**
+ * Generated from protobuf enum <code>UNUSED_UNKNOWN = 0;</code>
+ */
+ const UNUSED_UNKNOWN = 0;
+ /**
+ * Generated from protobuf enum <code>ADDED = 1;</code>
+ */
+ const ADDED = 1;
+ /**
+ * Generated from protobuf enum <code>REMOVED = 2;</code>
+ */
+ const REMOVED = 2;
+
+ private static $valueToName = [
+ self::UNUSED_UNKNOWN => 'UNUSED_UNKNOWN',
+ self::ADDED => 'ADDED',
+ self::REMOVED => 'REMOVED',
+ ];
+
+ public static function name($value)
+ {
+ if (!isset(self::$valueToName[$value])) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no name defined for value %s', __CLASS__, $value));
+ }
+ return self::$valueToName[$value];
+ }
+
+
+ public static function value($name)
+ {
+ $const = __CLASS__ . '::' . strtoupper($name);
+ if (!defined($const)) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no value defined for name %s', __CLASS__, $name));
+ }
+ return constant($const);
+ }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(ExceptionType::class, \Gtfs\CalendarDate_ExceptionType::class);
+
diff --git a/inc/Gtfs/CalendarDate_ExceptionType.php b/inc/Gtfs/CalendarDate_ExceptionType.php
new file mode 100644
index 0000000..46dcd0c
--- /dev/null
+++ b/inc/Gtfs/CalendarDate_ExceptionType.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+ /**
+ * This class is deprecated. Use Gtfs\CalendarDate\ExceptionType instead.
+ * @deprecated
+ */
+ class CalendarDate_ExceptionType {}
+}
+class_exists(CalendarDate\ExceptionType::class);
+@trigger_error('Gtfs\CalendarDate_ExceptionType is deprecated and will be removed in the next major release. Use Gtfs\CalendarDate\ExceptionType instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/Calendar_CalendarDay.php b/inc/Gtfs/Calendar_CalendarDay.php
new file mode 100644
index 0000000..00964cc
--- /dev/null
+++ b/inc/Gtfs/Calendar_CalendarDay.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+ /**
+ * This class is deprecated. Use Gtfs\Calendar\CalendarDay instead.
+ * @deprecated
+ */
+ class Calendar_CalendarDay {}
+}
+class_exists(Calendar\CalendarDay::class);
+@trigger_error('Gtfs\Calendar_CalendarDay is deprecated and will be removed in the next major release. Use Gtfs\Calendar\CalendarDay instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/FareAttribute.php b/inc/Gtfs/FareAttribute.php
new file mode 100644
index 0000000..81e62ec
--- /dev/null
+++ b/inc/Gtfs/FareAttribute.php
@@ -0,0 +1,235 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.FareAttribute</code>
+ */
+class FareAttribute extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Generated from protobuf field <code>string fare_id = 1;</code>
+ */
+ protected $fare_id = '';
+ /**
+ * Generated from protobuf field <code>float price = 2;</code>
+ */
+ protected $price = 0.0;
+ /**
+ * Generated from protobuf field <code>string currency_type = 3;</code>
+ */
+ protected $currency_type = '';
+ /**
+ * Generated from protobuf field <code>.gtfs.FareAttribute.PaymentMethod payment_method = 4;</code>
+ */
+ protected $payment_method = 0;
+ /**
+ * Generated from protobuf field <code>.gtfs.FareAttribute.Transfers transfers = 5;</code>
+ */
+ protected $transfers = 0;
+ /**
+ * Generated from protobuf field <code>int32 transfer_duration = 6;</code>
+ */
+ protected $transfer_duration = 0;
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ */
+ protected $extension = null;
+
+ /**
+ * Constructor.
+ *
+ * @param array $data {
+ * Optional. Data for populating the Message object.
+ *
+ * @type string $fare_id
+ * @type float $price
+ * @type string $currency_type
+ * @type int $payment_method
+ * @type int $transfers
+ * @type int $transfer_duration
+ * @type \Google\Protobuf\Any $extension
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ * }
+ */
+ public function __construct($data = NULL) {
+ \GPBMetadata\Proto\Gtfs::initOnce();
+ parent::__construct($data);
+ }
+
+ /**
+ * Generated from protobuf field <code>string fare_id = 1;</code>
+ * @return string
+ */
+ public function getFareId()
+ {
+ return $this->fare_id;
+ }
+
+ /**
+ * Generated from protobuf field <code>string fare_id = 1;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setFareId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->fare_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>float price = 2;</code>
+ * @return float
+ */
+ public function getPrice()
+ {
+ return $this->price;
+ }
+
+ /**
+ * Generated from protobuf field <code>float price = 2;</code>
+ * @param float $var
+ * @return $this
+ */
+ public function setPrice($var)
+ {
+ GPBUtil::checkFloat($var);
+ $this->price = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string currency_type = 3;</code>
+ * @return string
+ */
+ public function getCurrencyType()
+ {
+ return $this->currency_type;
+ }
+
+ /**
+ * Generated from protobuf field <code>string currency_type = 3;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setCurrencyType($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->currency_type = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.FareAttribute.PaymentMethod payment_method = 4;</code>
+ * @return int
+ */
+ public function getPaymentMethod()
+ {
+ return $this->payment_method;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.FareAttribute.PaymentMethod payment_method = 4;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setPaymentMethod($var)
+ {
+ GPBUtil::checkEnum($var, \Gtfs\FareAttribute_PaymentMethod::class);
+ $this->payment_method = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.FareAttribute.Transfers transfers = 5;</code>
+ * @return int
+ */
+ public function getTransfers()
+ {
+ return $this->transfers;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.FareAttribute.Transfers transfers = 5;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setTransfers($var)
+ {
+ GPBUtil::checkEnum($var, \Gtfs\FareAttribute_Transfers::class);
+ $this->transfers = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>int32 transfer_duration = 6;</code>
+ * @return int
+ */
+ public function getTransferDuration()
+ {
+ return $this->transfer_duration;
+ }
+
+ /**
+ * Generated from protobuf field <code>int32 transfer_duration = 6;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setTransferDuration($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->transfer_duration = $var;
+
+ return $this;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @return \Google\Protobuf\Any
+ */
+ public function getExtension()
+ {
+ return $this->extension;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @param \Google\Protobuf\Any $var
+ * @return $this
+ */
+ public function setExtension($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+ $this->extension = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/inc/Gtfs/FareAttribute/PaymentMethod.php b/inc/Gtfs/FareAttribute/PaymentMethod.php
new file mode 100644
index 0000000..12d828f
--- /dev/null
+++ b/inc/Gtfs/FareAttribute/PaymentMethod.php
@@ -0,0 +1,51 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\FareAttribute;
+
+use UnexpectedValueException;
+
+/**
+ * Protobuf type <code>gtfs.FareAttribute.PaymentMethod</code>
+ */
+class PaymentMethod
+{
+ /**
+ * Generated from protobuf enum <code>ONBOARD = 0;</code>
+ */
+ const ONBOARD = 0;
+ /**
+ * Generated from protobuf enum <code>PREBOARDING = 1;</code>
+ */
+ const PREBOARDING = 1;
+
+ private static $valueToName = [
+ self::ONBOARD => 'ONBOARD',
+ self::PREBOARDING => 'PREBOARDING',
+ ];
+
+ public static function name($value)
+ {
+ if (!isset(self::$valueToName[$value])) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no name defined for value %s', __CLASS__, $value));
+ }
+ return self::$valueToName[$value];
+ }
+
+
+ public static function value($name)
+ {
+ $const = __CLASS__ . '::' . strtoupper($name);
+ if (!defined($const)) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no value defined for name %s', __CLASS__, $name));
+ }
+ return constant($const);
+ }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(PaymentMethod::class, \Gtfs\FareAttribute_PaymentMethod::class);
+
diff --git a/inc/Gtfs/FareAttribute/Transfers.php b/inc/Gtfs/FareAttribute/Transfers.php
new file mode 100644
index 0000000..66d3f0e
--- /dev/null
+++ b/inc/Gtfs/FareAttribute/Transfers.php
@@ -0,0 +1,61 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\FareAttribute;
+
+use UnexpectedValueException;
+
+/**
+ * Protobuf type <code>gtfs.FareAttribute.Transfers</code>
+ */
+class Transfers
+{
+ /**
+ * Generated from protobuf enum <code>NO = 0;</code>
+ */
+ const NO = 0;
+ /**
+ * Generated from protobuf enum <code>ONCE = 1;</code>
+ */
+ const ONCE = 1;
+ /**
+ * Generated from protobuf enum <code>TWICE = 2;</code>
+ */
+ const TWICE = 2;
+ /**
+ * Generated from protobuf enum <code>UNLIMITED = 3;</code>
+ */
+ const UNLIMITED = 3;
+
+ private static $valueToName = [
+ self::NO => 'NO',
+ self::ONCE => 'ONCE',
+ self::TWICE => 'TWICE',
+ self::UNLIMITED => 'UNLIMITED',
+ ];
+
+ public static function name($value)
+ {
+ if (!isset(self::$valueToName[$value])) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no name defined for value %s', __CLASS__, $value));
+ }
+ return self::$valueToName[$value];
+ }
+
+
+ public static function value($name)
+ {
+ $const = __CLASS__ . '::' . strtoupper($name);
+ if (!defined($const)) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no value defined for name %s', __CLASS__, $name));
+ }
+ return constant($const);
+ }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(Transfers::class, \Gtfs\FareAttribute_Transfers::class);
+
diff --git a/inc/Gtfs/FareAttribute_PaymentMethod.php b/inc/Gtfs/FareAttribute_PaymentMethod.php
new file mode 100644
index 0000000..216c76b
--- /dev/null
+++ b/inc/Gtfs/FareAttribute_PaymentMethod.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+ /**
+ * This class is deprecated. Use Gtfs\FareAttribute\PaymentMethod instead.
+ * @deprecated
+ */
+ class FareAttribute_PaymentMethod {}
+}
+class_exists(FareAttribute\PaymentMethod::class);
+@trigger_error('Gtfs\FareAttribute_PaymentMethod is deprecated and will be removed in the next major release. Use Gtfs\FareAttribute\PaymentMethod instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/FareAttribute_Transfers.php b/inc/Gtfs/FareAttribute_Transfers.php
new file mode 100644
index 0000000..8dffd82
--- /dev/null
+++ b/inc/Gtfs/FareAttribute_Transfers.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+ /**
+ * This class is deprecated. Use Gtfs\FareAttribute\Transfers instead.
+ * @deprecated
+ */
+ class FareAttribute_Transfers {}
+}
+class_exists(FareAttribute\Transfers::class);
+@trigger_error('Gtfs\FareAttribute_Transfers is deprecated and will be removed in the next major release. Use Gtfs\FareAttribute\Transfers instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/FareRule.php b/inc/Gtfs/FareRule.php
new file mode 100644
index 0000000..bc5f0ac
--- /dev/null
+++ b/inc/Gtfs/FareRule.php
@@ -0,0 +1,208 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.FareRule</code>
+ */
+class FareRule extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Generated from protobuf field <code>string fare_id = 1;</code>
+ */
+ protected $fare_id = '';
+ /**
+ * Generated from protobuf field <code>string route_id = 2;</code>
+ */
+ protected $route_id = '';
+ /**
+ * Generated from protobuf field <code>string origin_id = 3;</code>
+ */
+ protected $origin_id = '';
+ /**
+ * Generated from protobuf field <code>string destination_id = 4;</code>
+ */
+ protected $destination_id = '';
+ /**
+ * Generated from protobuf field <code>string contains_id = 5;</code>
+ */
+ protected $contains_id = '';
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ */
+ protected $extension = null;
+
+ /**
+ * Constructor.
+ *
+ * @param array $data {
+ * Optional. Data for populating the Message object.
+ *
+ * @type string $fare_id
+ * @type string $route_id
+ * @type string $origin_id
+ * @type string $destination_id
+ * @type string $contains_id
+ * @type \Google\Protobuf\Any $extension
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ * }
+ */
+ public function __construct($data = NULL) {
+ \GPBMetadata\Proto\Gtfs::initOnce();
+ parent::__construct($data);
+ }
+
+ /**
+ * Generated from protobuf field <code>string fare_id = 1;</code>
+ * @return string
+ */
+ public function getFareId()
+ {
+ return $this->fare_id;
+ }
+
+ /**
+ * Generated from protobuf field <code>string fare_id = 1;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setFareId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->fare_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string route_id = 2;</code>
+ * @return string
+ */
+ public function getRouteId()
+ {
+ return $this->route_id;
+ }
+
+ /**
+ * Generated from protobuf field <code>string route_id = 2;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setRouteId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->route_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string origin_id = 3;</code>
+ * @return string
+ */
+ public function getOriginId()
+ {
+ return $this->origin_id;
+ }
+
+ /**
+ * Generated from protobuf field <code>string origin_id = 3;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setOriginId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->origin_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string destination_id = 4;</code>
+ * @return string
+ */
+ public function getDestinationId()
+ {
+ return $this->destination_id;
+ }
+
+ /**
+ * Generated from protobuf field <code>string destination_id = 4;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setDestinationId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->destination_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string contains_id = 5;</code>
+ * @return string
+ */
+ public function getContainsId()
+ {
+ return $this->contains_id;
+ }
+
+ /**
+ * Generated from protobuf field <code>string contains_id = 5;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setContainsId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->contains_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @return \Google\Protobuf\Any
+ */
+ public function getExtension()
+ {
+ return $this->extension;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @param \Google\Protobuf\Any $var
+ * @return $this
+ */
+ public function setExtension($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+ $this->extension = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/inc/Gtfs/FeedEntity.php b/inc/Gtfs/FeedEntity.php
new file mode 100644
index 0000000..b77caca
--- /dev/null
+++ b/inc/Gtfs/FeedEntity.php
@@ -0,0 +1,445 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * A definition (or update) of an entity in the transit feed.
+ *
+ * Generated from protobuf message <code>gtfs.FeedEntity</code>
+ */
+class FeedEntity extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The ids are used only to provide incrementality support. The id should be
+ * unique within a FeedMessage. Consequent FeedMessages may contain
+ * FeedEntities with the same id. In case of a DIFFERENTIAL update the new
+ * FeedEntity with some id will replace the old FeedEntity with the same id
+ * (or delete it - see is_deleted below).
+ * The actual GTFS entities (e.g. stations, routes, trips) referenced by the
+ * feed must be specified by explicit selectors (see EntitySelector below for
+ * more info).
+ *
+ * Generated from protobuf field <code>string id = 1;</code>
+ */
+ protected $id = '';
+ /**
+ * Whether this entity is to be deleted. Relevant only for incremental
+ * fetches.
+ *
+ * Generated from protobuf field <code>bool is_deleted = 2;</code>
+ */
+ protected $is_deleted = false;
+ /**
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ */
+ protected $extension = null;
+ protected $element;
+
+ /**
+ * Constructor.
+ *
+ * @param array $data {
+ * Optional. Data for populating the Message object.
+ *
+ * @type string $id
+ * The ids are used only to provide incrementality support. The id should be
+ * unique within a FeedMessage. Consequent FeedMessages may contain
+ * FeedEntities with the same id. In case of a DIFFERENTIAL update the new
+ * FeedEntity with some id will replace the old FeedEntity with the same id
+ * (or delete it - see is_deleted below).
+ * The actual GTFS entities (e.g. stations, routes, trips) referenced by the
+ * feed must be specified by explicit selectors (see EntitySelector below for
+ * more info).
+ * @type bool $is_deleted
+ * Whether this entity is to be deleted. Relevant only for incremental
+ * fetches.
+ * @type \Gtfs\Agency $agency
+ * @type \Gtfs\Stop $stop
+ * @type \Gtfs\Route $route
+ * @type \Gtfs\Trip $trip
+ * @type \Gtfs\StopTime $stop_time
+ * @type \Gtfs\Calendar $calendar
+ * @type \Gtfs\CalendarDate $calendar_date
+ * @type \Gtfs\FareAttribute $fare_attribute
+ * @type \Gtfs\FareRule $fare_rule
+ * @type \Gtfs\Shape $shape
+ * @type \Gtfs\Frequency $frequency
+ * @type \Gtfs\Transfer $transfer
+ * @type \Google\Protobuf\Any $extension
+ * }
+ */
+ public function __construct($data = NULL) {
+ \GPBMetadata\Proto\Gtfs::initOnce();
+ parent::__construct($data);
+ }
+
+ /**
+ * The ids are used only to provide incrementality support. The id should be
+ * unique within a FeedMessage. Consequent FeedMessages may contain
+ * FeedEntities with the same id. In case of a DIFFERENTIAL update the new
+ * FeedEntity with some id will replace the old FeedEntity with the same id
+ * (or delete it - see is_deleted below).
+ * The actual GTFS entities (e.g. stations, routes, trips) referenced by the
+ * feed must be specified by explicit selectors (see EntitySelector below for
+ * more info).
+ *
+ * Generated from protobuf field <code>string id = 1;</code>
+ * @return string
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * The ids are used only to provide incrementality support. The id should be
+ * unique within a FeedMessage. Consequent FeedMessages may contain
+ * FeedEntities with the same id. In case of a DIFFERENTIAL update the new
+ * FeedEntity with some id will replace the old FeedEntity with the same id
+ * (or delete it - see is_deleted below).
+ * The actual GTFS entities (e.g. stations, routes, trips) referenced by the
+ * feed must be specified by explicit selectors (see EntitySelector below for
+ * more info).
+ *
+ * Generated from protobuf field <code>string id = 1;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->id = $var;
+
+ return $this;
+ }
+
+ /**
+ * Whether this entity is to be deleted. Relevant only for incremental
+ * fetches.
+ *
+ * Generated from protobuf field <code>bool is_deleted = 2;</code>
+ * @return bool
+ */
+ public function getIsDeleted()
+ {
+ return $this->is_deleted;
+ }
+
+ /**
+ * Whether this entity is to be deleted. Relevant only for incremental
+ * fetches.
+ *
+ * Generated from protobuf field <code>bool is_deleted = 2;</code>
+ * @param bool $var
+ * @return $this
+ */
+ public function setIsDeleted($var)
+ {
+ GPBUtil::checkBool($var);
+ $this->is_deleted = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Agency agency = 3;</code>
+ * @return \Gtfs\Agency
+ */
+ public function getAgency()
+ {
+ return $this->readOneof(3);
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Agency agency = 3;</code>
+ * @param \Gtfs\Agency $var
+ * @return $this
+ */
+ public function setAgency($var)
+ {
+ GPBUtil::checkMessage($var, \Gtfs\Agency::class);
+ $this->writeOneof(3, $var);
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Stop stop = 4;</code>
+ * @return \Gtfs\Stop
+ */
+ public function getStop()
+ {
+ return $this->readOneof(4);
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Stop stop = 4;</code>
+ * @param \Gtfs\Stop $var
+ * @return $this
+ */
+ public function setStop($var)
+ {
+ GPBUtil::checkMessage($var, \Gtfs\Stop::class);
+ $this->writeOneof(4, $var);
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Route route = 5;</code>
+ * @return \Gtfs\Route
+ */
+ public function getRoute()
+ {
+ return $this->readOneof(5);
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Route route = 5;</code>
+ * @param \Gtfs\Route $var
+ * @return $this
+ */
+ public function setRoute($var)
+ {
+ GPBUtil::checkMessage($var, \Gtfs\Route::class);
+ $this->writeOneof(5, $var);
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Trip trip = 6;</code>
+ * @return \Gtfs\Trip
+ */
+ public function getTrip()
+ {
+ return $this->readOneof(6);
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Trip trip = 6;</code>
+ * @param \Gtfs\Trip $var
+ * @return $this
+ */
+ public function setTrip($var)
+ {
+ GPBUtil::checkMessage($var, \Gtfs\Trip::class);
+ $this->writeOneof(6, $var);
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.StopTime stop_time = 7;</code>
+ * @return \Gtfs\StopTime
+ */
+ public function getStopTime()
+ {
+ return $this->readOneof(7);
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.StopTime stop_time = 7;</code>
+ * @param \Gtfs\StopTime $var
+ * @return $this
+ */
+ public function setStopTime($var)
+ {
+ GPBUtil::checkMessage($var, \Gtfs\StopTime::class);
+ $this->writeOneof(7, $var);
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar calendar = 8;</code>
+ * @return \Gtfs\Calendar
+ */
+ public function getCalendar()
+ {
+ return $this->readOneof(8);
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Calendar calendar = 8;</code>
+ * @param \Gtfs\Calendar $var
+ * @return $this
+ */
+ public function setCalendar($var)
+ {
+ GPBUtil::checkMessage($var, \Gtfs\Calendar::class);
+ $this->writeOneof(8, $var);
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.CalendarDate calendar_date = 9;</code>
+ * @return \Gtfs\CalendarDate
+ */
+ public function getCalendarDate()
+ {
+ return $this->readOneof(9);
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.CalendarDate calendar_date = 9;</code>
+ * @param \Gtfs\CalendarDate $var
+ * @return $this
+ */
+ public function setCalendarDate($var)
+ {
+ GPBUtil::checkMessage($var, \Gtfs\CalendarDate::class);
+ $this->writeOneof(9, $var);
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.FareAttribute fare_attribute = 10;</code>
+ * @return \Gtfs\FareAttribute
+ */
+ public function getFareAttribute()
+ {
+ return $this->readOneof(10);
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.FareAttribute fare_attribute = 10;</code>
+ * @param \Gtfs\FareAttribute $var
+ * @return $this
+ */
+ public function setFareAttribute($var)
+ {
+ GPBUtil::checkMessage($var, \Gtfs\FareAttribute::class);
+ $this->writeOneof(10, $var);
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.FareRule fare_rule = 11;</code>
+ * @return \Gtfs\FareRule
+ */
+ public function getFareRule()
+ {
+ return $this->readOneof(11);
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.FareRule fare_rule = 11;</code>
+ * @param \Gtfs\FareRule $var
+ * @return $this
+ */
+ public function setFareRule($var)
+ {
+ GPBUtil::checkMessage($var, \Gtfs\FareRule::class);
+ $this->writeOneof(11, $var);
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Shape shape = 12;</code>
+ * @return \Gtfs\Shape
+ */
+ public function getShape()
+ {
+ return $this->readOneof(12);
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Shape shape = 12;</code>
+ * @param \Gtfs\Shape $var
+ * @return $this
+ */
+ public function setShape($var)
+ {
+ GPBUtil::checkMessage($var, \Gtfs\Shape::class);
+ $this->writeOneof(12, $var);
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Frequency frequency = 13;</code>
+ * @return \Gtfs\Frequency
+ */
+ public function getFrequency()
+ {
+ return $this->readOneof(13);
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Frequency frequency = 13;</code>
+ * @param \Gtfs\Frequency $var
+ * @return $this
+ */
+ public function setFrequency($var)
+ {
+ GPBUtil::checkMessage($var, \Gtfs\Frequency::class);
+ $this->writeOneof(13, $var);
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Transfer transfer = 14;</code>
+ * @return \Gtfs\Transfer
+ */
+ public function getTransfer()
+ {
+ return $this->readOneof(14);
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Transfer transfer = 14;</code>
+ * @param \Gtfs\Transfer $var
+ * @return $this
+ */
+ public function setTransfer($var)
+ {
+ GPBUtil::checkMessage($var, \Gtfs\Transfer::class);
+ $this->writeOneof(14, $var);
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @return \Google\Protobuf\Any
+ */
+ public function getExtension()
+ {
+ return $this->extension;
+ }
+
+ /**
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @param \Google\Protobuf\Any $var
+ * @return $this
+ */
+ public function setExtension($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+ $this->extension = $var;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getElement()
+ {
+ return $this->whichOneof("element");
+ }
+
+}
+
diff --git a/inc/Gtfs/FeedHeader.php b/inc/Gtfs/FeedHeader.php
new file mode 100644
index 0000000..88ae19e
--- /dev/null
+++ b/inc/Gtfs/FeedHeader.php
@@ -0,0 +1,314 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Metadata about a feed, included in feed messages.
+ *
+ * Generated from protobuf message <code>gtfs.FeedHeader</code>
+ */
+class FeedHeader extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Version of the feed specification.
+ * The current version is 1.0.
+ *
+ * Generated from protobuf field <code>string gtfs_version = 1;</code>
+ */
+ protected $gtfs_version = '';
+ /**
+ * The feed_publisher_name field contains the full name of the organization that publishes the feed.
+ *
+ * Generated from protobuf field <code>string feed_publisher_name = 2;</code>
+ */
+ protected $feed_publisher_name = '';
+ /**
+ * The feed_publisher_url field contains the URL of the feed publishing organization's website.
+ *
+ * Generated from protobuf field <code>string feed_publisher_url = 3;</code>
+ */
+ protected $feed_publisher_url = '';
+ /**
+ * The feed_lang field contains a IETF BCP 47 language code specifying the default language used for the text in this feed.
+ *
+ * Generated from protobuf field <code>string feed_lang = 4;</code>
+ */
+ protected $feed_lang = '';
+ /**
+ * The feed provides complete and reliable schedule information for service in the period from the beginning of the
+ * feed_start_date day to the end of the feed_end_date day in YYYYMMDD
+ *
+ * Generated from protobuf field <code>string feed_start_date = 5;</code>
+ */
+ protected $feed_start_date = '';
+ /**
+ * Generated from protobuf field <code>string feed_end_date = 6;</code>
+ */
+ protected $feed_end_date = '';
+ /**
+ * The feed publisher can specify a string here that indicates the current version of their GTFS feed.
+ *
+ * Generated from protobuf field <code>string feed_version = 7;</code>
+ */
+ protected $feed_version = '';
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ */
+ protected $extension = null;
+
+ /**
+ * Constructor.
+ *
+ * @param array $data {
+ * Optional. Data for populating the Message object.
+ *
+ * @type string $gtfs_version
+ * Version of the feed specification.
+ * The current version is 1.0.
+ * @type string $feed_publisher_name
+ * The feed_publisher_name field contains the full name of the organization that publishes the feed.
+ * @type string $feed_publisher_url
+ * The feed_publisher_url field contains the URL of the feed publishing organization's website.
+ * @type string $feed_lang
+ * The feed_lang field contains a IETF BCP 47 language code specifying the default language used for the text in this feed.
+ * @type string $feed_start_date
+ * The feed provides complete and reliable schedule information for service in the period from the beginning of the
+ * feed_start_date day to the end of the feed_end_date day in YYYYMMDD
+ * @type string $feed_end_date
+ * @type string $feed_version
+ * The feed publisher can specify a string here that indicates the current version of their GTFS feed.
+ * @type \Google\Protobuf\Any $extension
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ * }
+ */
+ public function __construct($data = NULL) {
+ \GPBMetadata\Proto\Gtfs::initOnce();
+ parent::__construct($data);
+ }
+
+ /**
+ * Version of the feed specification.
+ * The current version is 1.0.
+ *
+ * Generated from protobuf field <code>string gtfs_version = 1;</code>
+ * @return string
+ */
+ public function getGtfsVersion()
+ {
+ return $this->gtfs_version;
+ }
+
+ /**
+ * Version of the feed specification.
+ * The current version is 1.0.
+ *
+ * Generated from protobuf field <code>string gtfs_version = 1;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setGtfsVersion($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->gtfs_version = $var;
+
+ return $this;
+ }
+
+ /**
+ * The feed_publisher_name field contains the full name of the organization that publishes the feed.
+ *
+ * Generated from protobuf field <code>string feed_publisher_name = 2;</code>
+ * @return string
+ */
+ public function getFeedPublisherName()
+ {
+ return $this->feed_publisher_name;
+ }
+
+ /**
+ * The feed_publisher_name field contains the full name of the organization that publishes the feed.
+ *
+ * Generated from protobuf field <code>string feed_publisher_name = 2;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setFeedPublisherName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->feed_publisher_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The feed_publisher_url field contains the URL of the feed publishing organization's website.
+ *
+ * Generated from protobuf field <code>string feed_publisher_url = 3;</code>
+ * @return string
+ */
+ public function getFeedPublisherUrl()
+ {
+ return $this->feed_publisher_url;
+ }
+
+ /**
+ * The feed_publisher_url field contains the URL of the feed publishing organization's website.
+ *
+ * Generated from protobuf field <code>string feed_publisher_url = 3;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setFeedPublisherUrl($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->feed_publisher_url = $var;
+
+ return $this;
+ }
+
+ /**
+ * The feed_lang field contains a IETF BCP 47 language code specifying the default language used for the text in this feed.
+ *
+ * Generated from protobuf field <code>string feed_lang = 4;</code>
+ * @return string
+ */
+ public function getFeedLang()
+ {
+ return $this->feed_lang;
+ }
+
+ /**
+ * The feed_lang field contains a IETF BCP 47 language code specifying the default language used for the text in this feed.
+ *
+ * Generated from protobuf field <code>string feed_lang = 4;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setFeedLang($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->feed_lang = $var;
+
+ return $this;
+ }
+
+ /**
+ * The feed provides complete and reliable schedule information for service in the period from the beginning of the
+ * feed_start_date day to the end of the feed_end_date day in YYYYMMDD
+ *
+ * Generated from protobuf field <code>string feed_start_date = 5;</code>
+ * @return string
+ */
+ public function getFeedStartDate()
+ {
+ return $this->feed_start_date;
+ }
+
+ /**
+ * The feed provides complete and reliable schedule information for service in the period from the beginning of the
+ * feed_start_date day to the end of the feed_end_date day in YYYYMMDD
+ *
+ * Generated from protobuf field <code>string feed_start_date = 5;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setFeedStartDate($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->feed_start_date = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string feed_end_date = 6;</code>
+ * @return string
+ */
+ public function getFeedEndDate()
+ {
+ return $this->feed_end_date;
+ }
+
+ /**
+ * Generated from protobuf field <code>string feed_end_date = 6;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setFeedEndDate($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->feed_end_date = $var;
+
+ return $this;
+ }
+
+ /**
+ * The feed publisher can specify a string here that indicates the current version of their GTFS feed.
+ *
+ * Generated from protobuf field <code>string feed_version = 7;</code>
+ * @return string
+ */
+ public function getFeedVersion()
+ {
+ return $this->feed_version;
+ }
+
+ /**
+ * The feed publisher can specify a string here that indicates the current version of their GTFS feed.
+ *
+ * Generated from protobuf field <code>string feed_version = 7;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setFeedVersion($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->feed_version = $var;
+
+ return $this;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @return \Google\Protobuf\Any
+ */
+ public function getExtension()
+ {
+ return $this->extension;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @param \Google\Protobuf\Any $var
+ * @return $this
+ */
+ public function setExtension($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+ $this->extension = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/inc/Gtfs/FeedMessage.php b/inc/Gtfs/FeedMessage.php
new file mode 100644
index 0000000..26ace5f
--- /dev/null
+++ b/inc/Gtfs/FeedMessage.php
@@ -0,0 +1,99 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.FeedMessage</code>
+ */
+class FeedMessage extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Metadata about this feed and feed message.
+ *
+ * Generated from protobuf field <code>.gtfs.FeedHeader header = 1;</code>
+ */
+ protected $header = null;
+ /**
+ * Contents of the feed.
+ *
+ * Generated from protobuf field <code>repeated .gtfs.FeedEntity entity = 2;</code>
+ */
+ private $entity;
+
+ /**
+ * Constructor.
+ *
+ * @param array $data {
+ * Optional. Data for populating the Message object.
+ *
+ * @type \Gtfs\FeedHeader $header
+ * Metadata about this feed and feed message.
+ * @type \Gtfs\FeedEntity[]|\Google\Protobuf\Internal\RepeatedField $entity
+ * Contents of the feed.
+ * }
+ */
+ public function __construct($data = NULL) {
+ \GPBMetadata\Proto\Gtfs::initOnce();
+ parent::__construct($data);
+ }
+
+ /**
+ * Metadata about this feed and feed message.
+ *
+ * Generated from protobuf field <code>.gtfs.FeedHeader header = 1;</code>
+ * @return \Gtfs\FeedHeader
+ */
+ public function getHeader()
+ {
+ return $this->header;
+ }
+
+ /**
+ * Metadata about this feed and feed message.
+ *
+ * Generated from protobuf field <code>.gtfs.FeedHeader header = 1;</code>
+ * @param \Gtfs\FeedHeader $var
+ * @return $this
+ */
+ public function setHeader($var)
+ {
+ GPBUtil::checkMessage($var, \Gtfs\FeedHeader::class);
+ $this->header = $var;
+
+ return $this;
+ }
+
+ /**
+ * Contents of the feed.
+ *
+ * Generated from protobuf field <code>repeated .gtfs.FeedEntity entity = 2;</code>
+ * @return \Google\Protobuf\Internal\RepeatedField
+ */
+ public function getEntity()
+ {
+ return $this->entity;
+ }
+
+ /**
+ * Contents of the feed.
+ *
+ * Generated from protobuf field <code>repeated .gtfs.FeedEntity entity = 2;</code>
+ * @param \Gtfs\FeedEntity[]|\Google\Protobuf\Internal\RepeatedField $var
+ * @return $this
+ */
+ public function setEntity($var)
+ {
+ $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Gtfs\FeedEntity::class);
+ $this->entity = $arr;
+
+ return $this;
+ }
+
+}
+
diff --git a/inc/Gtfs/Frequency.php b/inc/Gtfs/Frequency.php
new file mode 100644
index 0000000..6d53d50
--- /dev/null
+++ b/inc/Gtfs/Frequency.php
@@ -0,0 +1,208 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.Frequency</code>
+ */
+class Frequency extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Generated from protobuf field <code>string trip_id = 1;</code>
+ */
+ protected $trip_id = '';
+ /**
+ * Generated from protobuf field <code>string start_time = 2;</code>
+ */
+ protected $start_time = '';
+ /**
+ * Generated from protobuf field <code>string end_time = 3;</code>
+ */
+ protected $end_time = '';
+ /**
+ * Generated from protobuf field <code>int32 headway_secs = 4;</code>
+ */
+ protected $headway_secs = 0;
+ /**
+ * Generated from protobuf field <code>.gtfs.Frequency.ScheduleType exact_times = 5;</code>
+ */
+ protected $exact_times = 0;
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ */
+ protected $extension = null;
+
+ /**
+ * Constructor.
+ *
+ * @param array $data {
+ * Optional. Data for populating the Message object.
+ *
+ * @type string $trip_id
+ * @type string $start_time
+ * @type string $end_time
+ * @type int $headway_secs
+ * @type int $exact_times
+ * @type \Google\Protobuf\Any $extension
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ * }
+ */
+ public function __construct($data = NULL) {
+ \GPBMetadata\Proto\Gtfs::initOnce();
+ parent::__construct($data);
+ }
+
+ /**
+ * Generated from protobuf field <code>string trip_id = 1;</code>
+ * @return string
+ */
+ public function getTripId()
+ {
+ return $this->trip_id;
+ }
+
+ /**
+ * Generated from protobuf field <code>string trip_id = 1;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setTripId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->trip_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string start_time = 2;</code>
+ * @return string
+ */
+ public function getStartTime()
+ {
+ return $this->start_time;
+ }
+
+ /**
+ * Generated from protobuf field <code>string start_time = 2;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setStartTime($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->start_time = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string end_time = 3;</code>
+ * @return string
+ */
+ public function getEndTime()
+ {
+ return $this->end_time;
+ }
+
+ /**
+ * Generated from protobuf field <code>string end_time = 3;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setEndTime($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->end_time = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>int32 headway_secs = 4;</code>
+ * @return int
+ */
+ public function getHeadwaySecs()
+ {
+ return $this->headway_secs;
+ }
+
+ /**
+ * Generated from protobuf field <code>int32 headway_secs = 4;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setHeadwaySecs($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->headway_secs = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Frequency.ScheduleType exact_times = 5;</code>
+ * @return int
+ */
+ public function getExactTimes()
+ {
+ return $this->exact_times;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Frequency.ScheduleType exact_times = 5;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setExactTimes($var)
+ {
+ GPBUtil::checkEnum($var, \Gtfs\Frequency_ScheduleType::class);
+ $this->exact_times = $var;
+
+ return $this;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @return \Google\Protobuf\Any
+ */
+ public function getExtension()
+ {
+ return $this->extension;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @param \Google\Protobuf\Any $var
+ * @return $this
+ */
+ public function setExtension($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+ $this->extension = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/inc/Gtfs/Frequency/ScheduleType.php b/inc/Gtfs/Frequency/ScheduleType.php
new file mode 100644
index 0000000..2fa70da
--- /dev/null
+++ b/inc/Gtfs/Frequency/ScheduleType.php
@@ -0,0 +1,51 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\Frequency;
+
+use UnexpectedValueException;
+
+/**
+ * Protobuf type <code>gtfs.Frequency.ScheduleType</code>
+ */
+class ScheduleType
+{
+ /**
+ * Generated from protobuf enum <code>NOT_EXACTLY = 0;</code>
+ */
+ const NOT_EXACTLY = 0;
+ /**
+ * Generated from protobuf enum <code>EXACTLY = 1;</code>
+ */
+ const EXACTLY = 1;
+
+ private static $valueToName = [
+ self::NOT_EXACTLY => 'NOT_EXACTLY',
+ self::EXACTLY => 'EXACTLY',
+ ];
+
+ public static function name($value)
+ {
+ if (!isset(self::$valueToName[$value])) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no name defined for value %s', __CLASS__, $value));
+ }
+ return self::$valueToName[$value];
+ }
+
+
+ public static function value($name)
+ {
+ $const = __CLASS__ . '::' . strtoupper($name);
+ if (!defined($const)) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no value defined for name %s', __CLASS__, $name));
+ }
+ return constant($const);
+ }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(ScheduleType::class, \Gtfs\Frequency_ScheduleType::class);
+
diff --git a/inc/Gtfs/Frequency_ScheduleType.php b/inc/Gtfs/Frequency_ScheduleType.php
new file mode 100644
index 0000000..679bb8c
--- /dev/null
+++ b/inc/Gtfs/Frequency_ScheduleType.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+ /**
+ * This class is deprecated. Use Gtfs\Frequency\ScheduleType instead.
+ * @deprecated
+ */
+ class Frequency_ScheduleType {}
+}
+class_exists(Frequency\ScheduleType::class);
+@trigger_error('Gtfs\Frequency_ScheduleType is deprecated and will be removed in the next major release. Use Gtfs\Frequency\ScheduleType instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/Route.php b/inc/Gtfs/Route.php
new file mode 100644
index 0000000..091ae1e
--- /dev/null
+++ b/inc/Gtfs/Route.php
@@ -0,0 +1,380 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.Route</code>
+ */
+class Route extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The route_id field contains an ID that uniquely identifies a route.
+ * The route_id is dataset unique.
+ *
+ * Generated from protobuf field <code>string route_id = 1;</code>
+ */
+ protected $route_id = '';
+ /**
+ * The agency_id field defines an agency for the specified route.
+ *
+ * Generated from protobuf field <code>string agency_id = 2;</code>
+ */
+ protected $agency_id = '';
+ /**
+ * The route_short_name contains the short name of a route.
+ *
+ * Generated from protobuf field <code>string route_short_name = 3;</code>
+ */
+ protected $route_short_name = '';
+ /**
+ * The route_long_name contains the full name of a route.
+ *
+ * Generated from protobuf field <code>string route_long_name = 4;</code>
+ */
+ protected $route_long_name = '';
+ /**
+ * The route_desc field contains a description of a route.
+ *
+ * Generated from protobuf field <code>string route_desc = 5;</code>
+ */
+ protected $route_desc = '';
+ /**
+ * Generated from protobuf field <code>.gtfs.Route.RouteType route_type = 6;</code>
+ */
+ protected $route_type = 0;
+ /**
+ * The route_url field contains the URL of a web page about that particular route.
+ *
+ * Generated from protobuf field <code>string route_url = 7;</code>
+ */
+ protected $route_url = '';
+ /**
+ * In systems that have colors assigned to routes, the route_color field defines a color that corresponds to a route.
+ * The color must be provided as a six-character hexadecimal number, for example, 00FFFF.
+ *
+ * Generated from protobuf field <code>string route_color = 8;</code>
+ */
+ protected $route_color = '';
+ /**
+ * The route_text_color field can be used to specify a legible color to use for text drawn against a background of route_color.
+ *
+ * Generated from protobuf field <code>string route_text_color = 9;</code>
+ */
+ protected $route_text_color = '';
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ */
+ protected $extension = null;
+
+ /**
+ * Constructor.
+ *
+ * @param array $data {
+ * Optional. Data for populating the Message object.
+ *
+ * @type string $route_id
+ * The route_id field contains an ID that uniquely identifies a route.
+ * The route_id is dataset unique.
+ * @type string $agency_id
+ * The agency_id field defines an agency for the specified route.
+ * @type string $route_short_name
+ * The route_short_name contains the short name of a route.
+ * @type string $route_long_name
+ * The route_long_name contains the full name of a route.
+ * @type string $route_desc
+ * The route_desc field contains a description of a route.
+ * @type int $route_type
+ * @type string $route_url
+ * The route_url field contains the URL of a web page about that particular route.
+ * @type string $route_color
+ * In systems that have colors assigned to routes, the route_color field defines a color that corresponds to a route.
+ * The color must be provided as a six-character hexadecimal number, for example, 00FFFF.
+ * @type string $route_text_color
+ * The route_text_color field can be used to specify a legible color to use for text drawn against a background of route_color.
+ * @type \Google\Protobuf\Any $extension
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ * }
+ */
+ public function __construct($data = NULL) {
+ \GPBMetadata\Proto\Gtfs::initOnce();
+ parent::__construct($data);
+ }
+
+ /**
+ * The route_id field contains an ID that uniquely identifies a route.
+ * The route_id is dataset unique.
+ *
+ * Generated from protobuf field <code>string route_id = 1;</code>
+ * @return string
+ */
+ public function getRouteId()
+ {
+ return $this->route_id;
+ }
+
+ /**
+ * The route_id field contains an ID that uniquely identifies a route.
+ * The route_id is dataset unique.
+ *
+ * Generated from protobuf field <code>string route_id = 1;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setRouteId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->route_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The agency_id field defines an agency for the specified route.
+ *
+ * Generated from protobuf field <code>string agency_id = 2;</code>
+ * @return string
+ */
+ public function getAgencyId()
+ {
+ return $this->agency_id;
+ }
+
+ /**
+ * The agency_id field defines an agency for the specified route.
+ *
+ * Generated from protobuf field <code>string agency_id = 2;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setAgencyId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->agency_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The route_short_name contains the short name of a route.
+ *
+ * Generated from protobuf field <code>string route_short_name = 3;</code>
+ * @return string
+ */
+ public function getRouteShortName()
+ {
+ return $this->route_short_name;
+ }
+
+ /**
+ * The route_short_name contains the short name of a route.
+ *
+ * Generated from protobuf field <code>string route_short_name = 3;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setRouteShortName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->route_short_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The route_long_name contains the full name of a route.
+ *
+ * Generated from protobuf field <code>string route_long_name = 4;</code>
+ * @return string
+ */
+ public function getRouteLongName()
+ {
+ return $this->route_long_name;
+ }
+
+ /**
+ * The route_long_name contains the full name of a route.
+ *
+ * Generated from protobuf field <code>string route_long_name = 4;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setRouteLongName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->route_long_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The route_desc field contains a description of a route.
+ *
+ * Generated from protobuf field <code>string route_desc = 5;</code>
+ * @return string
+ */
+ public function getRouteDesc()
+ {
+ return $this->route_desc;
+ }
+
+ /**
+ * The route_desc field contains a description of a route.
+ *
+ * Generated from protobuf field <code>string route_desc = 5;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setRouteDesc($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->route_desc = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Route.RouteType route_type = 6;</code>
+ * @return int
+ */
+ public function getRouteType()
+ {
+ return $this->route_type;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Route.RouteType route_type = 6;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setRouteType($var)
+ {
+ GPBUtil::checkEnum($var, \Gtfs\Route_RouteType::class);
+ $this->route_type = $var;
+
+ return $this;
+ }
+
+ /**
+ * The route_url field contains the URL of a web page about that particular route.
+ *
+ * Generated from protobuf field <code>string route_url = 7;</code>
+ * @return string
+ */
+ public function getRouteUrl()
+ {
+ return $this->route_url;
+ }
+
+ /**
+ * The route_url field contains the URL of a web page about that particular route.
+ *
+ * Generated from protobuf field <code>string route_url = 7;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setRouteUrl($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->route_url = $var;
+
+ return $this;
+ }
+
+ /**
+ * In systems that have colors assigned to routes, the route_color field defines a color that corresponds to a route.
+ * The color must be provided as a six-character hexadecimal number, for example, 00FFFF.
+ *
+ * Generated from protobuf field <code>string route_color = 8;</code>
+ * @return string
+ */
+ public function getRouteColor()
+ {
+ return $this->route_color;
+ }
+
+ /**
+ * In systems that have colors assigned to routes, the route_color field defines a color that corresponds to a route.
+ * The color must be provided as a six-character hexadecimal number, for example, 00FFFF.
+ *
+ * Generated from protobuf field <code>string route_color = 8;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setRouteColor($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->route_color = $var;
+
+ return $this;
+ }
+
+ /**
+ * The route_text_color field can be used to specify a legible color to use for text drawn against a background of route_color.
+ *
+ * Generated from protobuf field <code>string route_text_color = 9;</code>
+ * @return string
+ */
+ public function getRouteTextColor()
+ {
+ return $this->route_text_color;
+ }
+
+ /**
+ * The route_text_color field can be used to specify a legible color to use for text drawn against a background of route_color.
+ *
+ * Generated from protobuf field <code>string route_text_color = 9;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setRouteTextColor($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->route_text_color = $var;
+
+ return $this;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @return \Google\Protobuf\Any
+ */
+ public function getExtension()
+ {
+ return $this->extension;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @param \Google\Protobuf\Any $var
+ * @return $this
+ */
+ public function setExtension($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+ $this->extension = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/inc/Gtfs/Route/RouteType.php b/inc/Gtfs/Route/RouteType.php
new file mode 100644
index 0000000..9e9f6cc
--- /dev/null
+++ b/inc/Gtfs/Route/RouteType.php
@@ -0,0 +1,99 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\Route;
+
+use UnexpectedValueException;
+
+/**
+ * The route_type field describes the type of transportation used on a route.
+ *
+ * Protobuf type <code>gtfs.Route.RouteType</code>
+ */
+class RouteType
+{
+ /**
+ * Tram, Streetcar, Light rail. Any light rail or street level system within a metropolitan area.
+ *
+ * Generated from protobuf enum <code>TRAM = 0;</code>
+ */
+ const TRAM = 0;
+ /**
+ * Subway, Metro. Any underground rail system within a metropolitan area.
+ *
+ * Generated from protobuf enum <code>SUBWAY = 1;</code>
+ */
+ const SUBWAY = 1;
+ /**
+ * Rail. Used for intercity or long-distance travel.
+ *
+ * Generated from protobuf enum <code>RAIL = 2;</code>
+ */
+ const RAIL = 2;
+ /**
+ * Bus. Used for short- and long-distance bus routes.
+ *
+ * Generated from protobuf enum <code>BUS = 3;</code>
+ */
+ const BUS = 3;
+ /**
+ * Ferry. Used for short- and long-distance boat service.
+ *
+ * Generated from protobuf enum <code>FERRY = 4;</code>
+ */
+ const FERRY = 4;
+ /**
+ * Cable car. Used for street-level cable cars where the cable runs beneath the car.
+ *
+ * Generated from protobuf enum <code>CABLECAR = 5;</code>
+ */
+ const CABLECAR = 5;
+ /**
+ * Gondola, Suspended cable car. Typically used for aerial cable cars where the car is suspended from the cable.
+ *
+ * Generated from protobuf enum <code>GONDOLA = 6;</code>
+ */
+ const GONDOLA = 6;
+ /**
+ * Funicular. Any rail system designed for steep inclines.
+ *
+ * Generated from protobuf enum <code>FUNICULAR = 7;</code>
+ */
+ const FUNICULAR = 7;
+
+ private static $valueToName = [
+ self::TRAM => 'TRAM',
+ self::SUBWAY => 'SUBWAY',
+ self::RAIL => 'RAIL',
+ self::BUS => 'BUS',
+ self::FERRY => 'FERRY',
+ self::CABLECAR => 'CABLECAR',
+ self::GONDOLA => 'GONDOLA',
+ self::FUNICULAR => 'FUNICULAR',
+ ];
+
+ public static function name($value)
+ {
+ if (!isset(self::$valueToName[$value])) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no name defined for value %s', __CLASS__, $value));
+ }
+ return self::$valueToName[$value];
+ }
+
+
+ public static function value($name)
+ {
+ $const = __CLASS__ . '::' . strtoupper($name);
+ if (!defined($const)) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no value defined for name %s', __CLASS__, $name));
+ }
+ return constant($const);
+ }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(RouteType::class, \Gtfs\Route_RouteType::class);
+
diff --git a/inc/Gtfs/Route_RouteType.php b/inc/Gtfs/Route_RouteType.php
new file mode 100644
index 0000000..3b8a42c
--- /dev/null
+++ b/inc/Gtfs/Route_RouteType.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+ /**
+ * This class is deprecated. Use Gtfs\Route\RouteType instead.
+ * @deprecated
+ */
+ class Route_RouteType {}
+}
+class_exists(Route\RouteType::class);
+@trigger_error('Gtfs\Route_RouteType is deprecated and will be removed in the next major release. Use Gtfs\Route\RouteType instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/Shape.php b/inc/Gtfs/Shape.php
new file mode 100644
index 0000000..5396c4f
--- /dev/null
+++ b/inc/Gtfs/Shape.php
@@ -0,0 +1,208 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.Shape</code>
+ */
+class Shape extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Generated from protobuf field <code>string shape_id = 1;</code>
+ */
+ protected $shape_id = '';
+ /**
+ * Generated from protobuf field <code>float shape_pt_lat = 2;</code>
+ */
+ protected $shape_pt_lat = 0.0;
+ /**
+ * Generated from protobuf field <code>float shape_pt_lon = 3;</code>
+ */
+ protected $shape_pt_lon = 0.0;
+ /**
+ * Generated from protobuf field <code>int32 shape_pt_sequence = 4;</code>
+ */
+ protected $shape_pt_sequence = 0;
+ /**
+ * Generated from protobuf field <code>float shape_dist_traveled = 5;</code>
+ */
+ protected $shape_dist_traveled = 0.0;
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ */
+ protected $extension = null;
+
+ /**
+ * Constructor.
+ *
+ * @param array $data {
+ * Optional. Data for populating the Message object.
+ *
+ * @type string $shape_id
+ * @type float $shape_pt_lat
+ * @type float $shape_pt_lon
+ * @type int $shape_pt_sequence
+ * @type float $shape_dist_traveled
+ * @type \Google\Protobuf\Any $extension
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ * }
+ */
+ public function __construct($data = NULL) {
+ \GPBMetadata\Proto\Gtfs::initOnce();
+ parent::__construct($data);
+ }
+
+ /**
+ * Generated from protobuf field <code>string shape_id = 1;</code>
+ * @return string
+ */
+ public function getShapeId()
+ {
+ return $this->shape_id;
+ }
+
+ /**
+ * Generated from protobuf field <code>string shape_id = 1;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setShapeId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->shape_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>float shape_pt_lat = 2;</code>
+ * @return float
+ */
+ public function getShapePtLat()
+ {
+ return $this->shape_pt_lat;
+ }
+
+ /**
+ * Generated from protobuf field <code>float shape_pt_lat = 2;</code>
+ * @param float $var
+ * @return $this
+ */
+ public function setShapePtLat($var)
+ {
+ GPBUtil::checkFloat($var);
+ $this->shape_pt_lat = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>float shape_pt_lon = 3;</code>
+ * @return float
+ */
+ public function getShapePtLon()
+ {
+ return $this->shape_pt_lon;
+ }
+
+ /**
+ * Generated from protobuf field <code>float shape_pt_lon = 3;</code>
+ * @param float $var
+ * @return $this
+ */
+ public function setShapePtLon($var)
+ {
+ GPBUtil::checkFloat($var);
+ $this->shape_pt_lon = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>int32 shape_pt_sequence = 4;</code>
+ * @return int
+ */
+ public function getShapePtSequence()
+ {
+ return $this->shape_pt_sequence;
+ }
+
+ /**
+ * Generated from protobuf field <code>int32 shape_pt_sequence = 4;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setShapePtSequence($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->shape_pt_sequence = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>float shape_dist_traveled = 5;</code>
+ * @return float
+ */
+ public function getShapeDistTraveled()
+ {
+ return $this->shape_dist_traveled;
+ }
+
+ /**
+ * Generated from protobuf field <code>float shape_dist_traveled = 5;</code>
+ * @param float $var
+ * @return $this
+ */
+ public function setShapeDistTraveled($var)
+ {
+ GPBUtil::checkFloat($var);
+ $this->shape_dist_traveled = $var;
+
+ return $this;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @return \Google\Protobuf\Any
+ */
+ public function getExtension()
+ {
+ return $this->extension;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @param \Google\Protobuf\Any $var
+ * @return $this
+ */
+ public function setExtension($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+ $this->extension = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/inc/Gtfs/Stop.php b/inc/Gtfs/Stop.php
new file mode 100644
index 0000000..ae0170b
--- /dev/null
+++ b/inc/Gtfs/Stop.php
@@ -0,0 +1,454 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.Stop</code>
+ */
+class Stop extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The stop_id field contains an ID that uniquely identifies a stop or station.
+ * Multiple routes may use the same stop. stop_id is dataset unique.
+ *
+ * Generated from protobuf field <code>string stop_id = 1;</code>
+ */
+ protected $stop_id = '';
+ /**
+ * The stop_code field contains short text or a number that uniquely identifies the stop for passengers.
+ *
+ * Generated from protobuf field <code>string stop_code = 2;</code>
+ */
+ protected $stop_code = '';
+ /**
+ * The stop_name field contains the name of a stop or station.
+ *
+ * Generated from protobuf field <code>string stop_name = 3;</code>
+ */
+ protected $stop_name = '';
+ /**
+ * The stop_desc field contains a description of a stop.
+ *
+ * Generated from protobuf field <code>string stop_desc = 4;</code>
+ */
+ protected $stop_desc = '';
+ /**
+ * Degrees North, in the WGS-84 coordinate system.
+ *
+ * Generated from protobuf field <code>float latitude = 5;</code>
+ */
+ protected $latitude = 0.0;
+ /**
+ * Degrees East, in the WGS-84 coordinate system.
+ *
+ * Generated from protobuf field <code>float longitude = 6;</code>
+ */
+ protected $longitude = 0.0;
+ /**
+ * Generated from protobuf field <code>string zone_id = 7;</code>
+ */
+ protected $zone_id = '';
+ /**
+ * Generated from protobuf field <code>string stop_url = 8;</code>
+ */
+ protected $stop_url = '';
+ /**
+ * Generated from protobuf field <code>.gtfs.Stop.LocationType location_type = 9;</code>
+ */
+ protected $location_type = 0;
+ /**
+ * Generated from protobuf field <code>string parent_station = 10;</code>
+ */
+ protected $parent_station = '';
+ /**
+ * Generated from protobuf field <code>string agency_timezone = 11;</code>
+ */
+ protected $agency_timezone = '';
+ /**
+ * The exact status of the vehicle with respect to the current stop.
+ * Ignored if current_stop_sequence is missing.
+ *
+ * Generated from protobuf field <code>.gtfs.Stop.WheelchairBoarding wheelchair_boarding = 12;</code>
+ */
+ protected $wheelchair_boarding = 0;
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ */
+ protected $extension = null;
+
+ /**
+ * Constructor.
+ *
+ * @param array $data {
+ * Optional. Data for populating the Message object.
+ *
+ * @type string $stop_id
+ * The stop_id field contains an ID that uniquely identifies a stop or station.
+ * Multiple routes may use the same stop. stop_id is dataset unique.
+ * @type string $stop_code
+ * The stop_code field contains short text or a number that uniquely identifies the stop for passengers.
+ * @type string $stop_name
+ * The stop_name field contains the name of a stop or station.
+ * @type string $stop_desc
+ * The stop_desc field contains a description of a stop.
+ * @type float $latitude
+ * Degrees North, in the WGS-84 coordinate system.
+ * @type float $longitude
+ * Degrees East, in the WGS-84 coordinate system.
+ * @type string $zone_id
+ * @type string $stop_url
+ * @type int $location_type
+ * @type string $parent_station
+ * @type string $agency_timezone
+ * @type int $wheelchair_boarding
+ * The exact status of the vehicle with respect to the current stop.
+ * Ignored if current_stop_sequence is missing.
+ * @type \Google\Protobuf\Any $extension
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ * }
+ */
+ public function __construct($data = NULL) {
+ \GPBMetadata\Proto\Gtfs::initOnce();
+ parent::__construct($data);
+ }
+
+ /**
+ * The stop_id field contains an ID that uniquely identifies a stop or station.
+ * Multiple routes may use the same stop. stop_id is dataset unique.
+ *
+ * Generated from protobuf field <code>string stop_id = 1;</code>
+ * @return string
+ */
+ public function getStopId()
+ {
+ return $this->stop_id;
+ }
+
+ /**
+ * The stop_id field contains an ID that uniquely identifies a stop or station.
+ * Multiple routes may use the same stop. stop_id is dataset unique.
+ *
+ * Generated from protobuf field <code>string stop_id = 1;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setStopId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->stop_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The stop_code field contains short text or a number that uniquely identifies the stop for passengers.
+ *
+ * Generated from protobuf field <code>string stop_code = 2;</code>
+ * @return string
+ */
+ public function getStopCode()
+ {
+ return $this->stop_code;
+ }
+
+ /**
+ * The stop_code field contains short text or a number that uniquely identifies the stop for passengers.
+ *
+ * Generated from protobuf field <code>string stop_code = 2;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setStopCode($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->stop_code = $var;
+
+ return $this;
+ }
+
+ /**
+ * The stop_name field contains the name of a stop or station.
+ *
+ * Generated from protobuf field <code>string stop_name = 3;</code>
+ * @return string
+ */
+ public function getStopName()
+ {
+ return $this->stop_name;
+ }
+
+ /**
+ * The stop_name field contains the name of a stop or station.
+ *
+ * Generated from protobuf field <code>string stop_name = 3;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setStopName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->stop_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * The stop_desc field contains a description of a stop.
+ *
+ * Generated from protobuf field <code>string stop_desc = 4;</code>
+ * @return string
+ */
+ public function getStopDesc()
+ {
+ return $this->stop_desc;
+ }
+
+ /**
+ * The stop_desc field contains a description of a stop.
+ *
+ * Generated from protobuf field <code>string stop_desc = 4;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setStopDesc($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->stop_desc = $var;
+
+ return $this;
+ }
+
+ /**
+ * Degrees North, in the WGS-84 coordinate system.
+ *
+ * Generated from protobuf field <code>float latitude = 5;</code>
+ * @return float
+ */
+ public function getLatitude()
+ {
+ return $this->latitude;
+ }
+
+ /**
+ * Degrees North, in the WGS-84 coordinate system.
+ *
+ * Generated from protobuf field <code>float latitude = 5;</code>
+ * @param float $var
+ * @return $this
+ */
+ public function setLatitude($var)
+ {
+ GPBUtil::checkFloat($var);
+ $this->latitude = $var;
+
+ return $this;
+ }
+
+ /**
+ * Degrees East, in the WGS-84 coordinate system.
+ *
+ * Generated from protobuf field <code>float longitude = 6;</code>
+ * @return float
+ */
+ public function getLongitude()
+ {
+ return $this->longitude;
+ }
+
+ /**
+ * Degrees East, in the WGS-84 coordinate system.
+ *
+ * Generated from protobuf field <code>float longitude = 6;</code>
+ * @param float $var
+ * @return $this
+ */
+ public function setLongitude($var)
+ {
+ GPBUtil::checkFloat($var);
+ $this->longitude = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string zone_id = 7;</code>
+ * @return string
+ */
+ public function getZoneId()
+ {
+ return $this->zone_id;
+ }
+
+ /**
+ * Generated from protobuf field <code>string zone_id = 7;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setZoneId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->zone_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string stop_url = 8;</code>
+ * @return string
+ */
+ public function getStopUrl()
+ {
+ return $this->stop_url;
+ }
+
+ /**
+ * Generated from protobuf field <code>string stop_url = 8;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setStopUrl($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->stop_url = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Stop.LocationType location_type = 9;</code>
+ * @return int
+ */
+ public function getLocationType()
+ {
+ return $this->location_type;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Stop.LocationType location_type = 9;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setLocationType($var)
+ {
+ GPBUtil::checkEnum($var, \Gtfs\Stop_LocationType::class);
+ $this->location_type = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string parent_station = 10;</code>
+ * @return string
+ */
+ public function getParentStation()
+ {
+ return $this->parent_station;
+ }
+
+ /**
+ * Generated from protobuf field <code>string parent_station = 10;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setParentStation($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->parent_station = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string agency_timezone = 11;</code>
+ * @return string
+ */
+ public function getAgencyTimezone()
+ {
+ return $this->agency_timezone;
+ }
+
+ /**
+ * Generated from protobuf field <code>string agency_timezone = 11;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setAgencyTimezone($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->agency_timezone = $var;
+
+ return $this;
+ }
+
+ /**
+ * The exact status of the vehicle with respect to the current stop.
+ * Ignored if current_stop_sequence is missing.
+ *
+ * Generated from protobuf field <code>.gtfs.Stop.WheelchairBoarding wheelchair_boarding = 12;</code>
+ * @return int
+ */
+ public function getWheelchairBoarding()
+ {
+ return $this->wheelchair_boarding;
+ }
+
+ /**
+ * The exact status of the vehicle with respect to the current stop.
+ * Ignored if current_stop_sequence is missing.
+ *
+ * Generated from protobuf field <code>.gtfs.Stop.WheelchairBoarding wheelchair_boarding = 12;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setWheelchairBoarding($var)
+ {
+ GPBUtil::checkEnum($var, \Gtfs\Stop_WheelchairBoarding::class);
+ $this->wheelchair_boarding = $var;
+
+ return $this;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @return \Google\Protobuf\Any
+ */
+ public function getExtension()
+ {
+ return $this->extension;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @param \Google\Protobuf\Any $var
+ * @return $this
+ */
+ public function setExtension($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+ $this->extension = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/inc/Gtfs/Stop/LocationType.php b/inc/Gtfs/Stop/LocationType.php
new file mode 100644
index 0000000..204d537
--- /dev/null
+++ b/inc/Gtfs/Stop/LocationType.php
@@ -0,0 +1,76 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\Stop;
+
+use UnexpectedValueException;
+
+/**
+ * Protobuf type <code>gtfs.Stop.LocationType</code>
+ */
+class LocationType
+{
+ /**
+ * Stop (or Platform). A location where passengers board or disembark from a transit vehicle. Is called a platform when defined within a parent_station.
+ *
+ * Generated from protobuf enum <code>STOP = 0;</code>
+ */
+ const STOP = 0;
+ /**
+ * Station. A physical structure or area that contains one or more platform.
+ *
+ * Generated from protobuf enum <code>STATION = 1;</code>
+ */
+ const STATION = 1;
+ /**
+ * Entrance/Exit. A location where passengers can enter or exit a station from the street. If an entrance/exit belongs to multiple stations, it can be linked by pathways to both, but the data provider must pick one of them as parent.
+ *
+ * Generated from protobuf enum <code>ENTRANCE = 2;</code>
+ */
+ const ENTRANCE = 2;
+ /**
+ * Generic Node. A location within a station, not matching any other location_type, which can be used to link together pathways define in pathways.txt.
+ *
+ * Generated from protobuf enum <code>GENERIC_NODE = 3;</code>
+ */
+ const GENERIC_NODE = 3;
+ /**
+ * Boarding Area. A specific location on a platform, where passengers can board and/or alight vehicles.
+ *
+ * Generated from protobuf enum <code>BOARDING_AREA = 4;</code>
+ */
+ const BOARDING_AREA = 4;
+
+ private static $valueToName = [
+ self::STOP => 'STOP',
+ self::STATION => 'STATION',
+ self::ENTRANCE => 'ENTRANCE',
+ self::GENERIC_NODE => 'GENERIC_NODE',
+ self::BOARDING_AREA => 'BOARDING_AREA',
+ ];
+
+ public static function name($value)
+ {
+ if (!isset(self::$valueToName[$value])) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no name defined for value %s', __CLASS__, $value));
+ }
+ return self::$valueToName[$value];
+ }
+
+
+ public static function value($name)
+ {
+ $const = __CLASS__ . '::' . strtoupper($name);
+ if (!defined($const)) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no value defined for name %s', __CLASS__, $name));
+ }
+ return constant($const);
+ }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(LocationType::class, \Gtfs\Stop_LocationType::class);
+
diff --git a/inc/Gtfs/Stop/WheelchairBoarding.php b/inc/Gtfs/Stop/WheelchairBoarding.php
new file mode 100644
index 0000000..460a6dc
--- /dev/null
+++ b/inc/Gtfs/Stop/WheelchairBoarding.php
@@ -0,0 +1,62 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\Stop;
+
+use UnexpectedValueException;
+
+/**
+ * Protobuf type <code>gtfs.Stop.WheelchairBoarding</code>
+ */
+class WheelchairBoarding
+{
+ /**
+ * no accessibility information for the stop
+ *
+ * Generated from protobuf enum <code>UNKNOWN = 0;</code>
+ */
+ const UNKNOWN = 0;
+ /**
+ * some vehicles at this stop can be boarded by a rider in a wheelchair
+ *
+ * Generated from protobuf enum <code>ACCESSIBLE = 1;</code>
+ */
+ const ACCESSIBLE = 1;
+ /**
+ * wheelchair boarding is not possible at this stop
+ *
+ * Generated from protobuf enum <code>NOT_ACCESSIBLE = 2;</code>
+ */
+ const NOT_ACCESSIBLE = 2;
+
+ private static $valueToName = [
+ self::UNKNOWN => 'UNKNOWN',
+ self::ACCESSIBLE => 'ACCESSIBLE',
+ self::NOT_ACCESSIBLE => 'NOT_ACCESSIBLE',
+ ];
+
+ public static function name($value)
+ {
+ if (!isset(self::$valueToName[$value])) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no name defined for value %s', __CLASS__, $value));
+ }
+ return self::$valueToName[$value];
+ }
+
+
+ public static function value($name)
+ {
+ $const = __CLASS__ . '::' . strtoupper($name);
+ if (!defined($const)) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no value defined for name %s', __CLASS__, $name));
+ }
+ return constant($const);
+ }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(WheelchairBoarding::class, \Gtfs\Stop_WheelchairBoarding::class);
+
diff --git a/inc/Gtfs/StopTime.php b/inc/Gtfs/StopTime.php
new file mode 100644
index 0000000..c1605c9
--- /dev/null
+++ b/inc/Gtfs/StopTime.php
@@ -0,0 +1,323 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.StopTime</code>
+ */
+class StopTime extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+ *
+ * Generated from protobuf field <code>string trip_id = 1;</code>
+ */
+ protected $trip_id = '';
+ /**
+ * Generated from protobuf field <code>string arrival_time = 2;</code>
+ */
+ protected $arrival_time = '';
+ /**
+ * Generated from protobuf field <code>string departure_time = 3;</code>
+ */
+ protected $departure_time = '';
+ /**
+ * Generated from protobuf field <code>string stop_id = 4;</code>
+ */
+ protected $stop_id = '';
+ /**
+ * Generated from protobuf field <code>string stop_sequence = 5;</code>
+ */
+ protected $stop_sequence = '';
+ /**
+ * Generated from protobuf field <code>string stop_headsign = 6;</code>
+ */
+ protected $stop_headsign = '';
+ /**
+ * Generated from protobuf field <code>.gtfs.StopTime.AvailabilityType pickup_type = 7;</code>
+ */
+ protected $pickup_type = 0;
+ /**
+ * Generated from protobuf field <code>.gtfs.StopTime.AvailabilityType drop_off_type = 8;</code>
+ */
+ protected $drop_off_type = 0;
+ /**
+ * Generated from protobuf field <code>float shape_dist_traveled = 9;</code>
+ */
+ protected $shape_dist_traveled = 0.0;
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ */
+ protected $extension = null;
+
+ /**
+ * Constructor.
+ *
+ * @param array $data {
+ * Optional. Data for populating the Message object.
+ *
+ * @type string $trip_id
+ * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+ * @type string $arrival_time
+ * @type string $departure_time
+ * @type string $stop_id
+ * @type string $stop_sequence
+ * @type string $stop_headsign
+ * @type int $pickup_type
+ * @type int $drop_off_type
+ * @type float $shape_dist_traveled
+ * @type \Google\Protobuf\Any $extension
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ * }
+ */
+ public function __construct($data = NULL) {
+ \GPBMetadata\Proto\Gtfs::initOnce();
+ parent::__construct($data);
+ }
+
+ /**
+ * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+ *
+ * Generated from protobuf field <code>string trip_id = 1;</code>
+ * @return string
+ */
+ public function getTripId()
+ {
+ return $this->trip_id;
+ }
+
+ /**
+ * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+ *
+ * Generated from protobuf field <code>string trip_id = 1;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setTripId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->trip_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string arrival_time = 2;</code>
+ * @return string
+ */
+ public function getArrivalTime()
+ {
+ return $this->arrival_time;
+ }
+
+ /**
+ * Generated from protobuf field <code>string arrival_time = 2;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setArrivalTime($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->arrival_time = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string departure_time = 3;</code>
+ * @return string
+ */
+ public function getDepartureTime()
+ {
+ return $this->departure_time;
+ }
+
+ /**
+ * Generated from protobuf field <code>string departure_time = 3;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setDepartureTime($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->departure_time = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string stop_id = 4;</code>
+ * @return string
+ */
+ public function getStopId()
+ {
+ return $this->stop_id;
+ }
+
+ /**
+ * Generated from protobuf field <code>string stop_id = 4;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setStopId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->stop_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string stop_sequence = 5;</code>
+ * @return string
+ */
+ public function getStopSequence()
+ {
+ return $this->stop_sequence;
+ }
+
+ /**
+ * Generated from protobuf field <code>string stop_sequence = 5;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setStopSequence($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->stop_sequence = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string stop_headsign = 6;</code>
+ * @return string
+ */
+ public function getStopHeadsign()
+ {
+ return $this->stop_headsign;
+ }
+
+ /**
+ * Generated from protobuf field <code>string stop_headsign = 6;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setStopHeadsign($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->stop_headsign = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.StopTime.AvailabilityType pickup_type = 7;</code>
+ * @return int
+ */
+ public function getPickupType()
+ {
+ return $this->pickup_type;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.StopTime.AvailabilityType pickup_type = 7;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setPickupType($var)
+ {
+ GPBUtil::checkEnum($var, \Gtfs\StopTime_AvailabilityType::class);
+ $this->pickup_type = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.StopTime.AvailabilityType drop_off_type = 8;</code>
+ * @return int
+ */
+ public function getDropOffType()
+ {
+ return $this->drop_off_type;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.StopTime.AvailabilityType drop_off_type = 8;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setDropOffType($var)
+ {
+ GPBUtil::checkEnum($var, \Gtfs\StopTime_AvailabilityType::class);
+ $this->drop_off_type = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>float shape_dist_traveled = 9;</code>
+ * @return float
+ */
+ public function getShapeDistTraveled()
+ {
+ return $this->shape_dist_traveled;
+ }
+
+ /**
+ * Generated from protobuf field <code>float shape_dist_traveled = 9;</code>
+ * @param float $var
+ * @return $this
+ */
+ public function setShapeDistTraveled($var)
+ {
+ GPBUtil::checkFloat($var);
+ $this->shape_dist_traveled = $var;
+
+ return $this;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @return \Google\Protobuf\Any
+ */
+ public function getExtension()
+ {
+ return $this->extension;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @param \Google\Protobuf\Any $var
+ * @return $this
+ */
+ public function setExtension($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+ $this->extension = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/inc/Gtfs/StopTime/AvailabilityType.php b/inc/Gtfs/StopTime/AvailabilityType.php
new file mode 100644
index 0000000..6f876cc
--- /dev/null
+++ b/inc/Gtfs/StopTime/AvailabilityType.php
@@ -0,0 +1,69 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\StopTime;
+
+use UnexpectedValueException;
+
+/**
+ * Protobuf type <code>gtfs.StopTime.AvailabilityType</code>
+ */
+class AvailabilityType
+{
+ /**
+ * Tram, Streetcar, Light rail. Any light rail or street level system within a metropolitan area.
+ *
+ * Generated from protobuf enum <code>REGULAR = 0;</code>
+ */
+ const REGULAR = 0;
+ /**
+ * Subway, Metro. Any underground rail system within a metropolitan area.
+ *
+ * Generated from protobuf enum <code>NOT_AVAILABLE = 1;</code>
+ */
+ const NOT_AVAILABLE = 1;
+ /**
+ * Rail. Used for intercity or long-distance travel.
+ *
+ * Generated from protobuf enum <code>PHONE = 2;</code>
+ */
+ const PHONE = 2;
+ /**
+ * Bus. Used for short- and long-distance bus routes.
+ *
+ * Generated from protobuf enum <code>DRIVER = 3;</code>
+ */
+ const DRIVER = 3;
+
+ private static $valueToName = [
+ self::REGULAR => 'REGULAR',
+ self::NOT_AVAILABLE => 'NOT_AVAILABLE',
+ self::PHONE => 'PHONE',
+ self::DRIVER => 'DRIVER',
+ ];
+
+ public static function name($value)
+ {
+ if (!isset(self::$valueToName[$value])) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no name defined for value %s', __CLASS__, $value));
+ }
+ return self::$valueToName[$value];
+ }
+
+
+ public static function value($name)
+ {
+ $const = __CLASS__ . '::' . strtoupper($name);
+ if (!defined($const)) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no value defined for name %s', __CLASS__, $name));
+ }
+ return constant($const);
+ }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(AvailabilityType::class, \Gtfs\StopTime_AvailabilityType::class);
+
diff --git a/inc/Gtfs/StopTime_AvailabilityType.php b/inc/Gtfs/StopTime_AvailabilityType.php
new file mode 100644
index 0000000..73c70ed
--- /dev/null
+++ b/inc/Gtfs/StopTime_AvailabilityType.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+ /**
+ * This class is deprecated. Use Gtfs\StopTime\AvailabilityType instead.
+ * @deprecated
+ */
+ class StopTime_AvailabilityType {}
+}
+class_exists(StopTime\AvailabilityType::class);
+@trigger_error('Gtfs\StopTime_AvailabilityType is deprecated and will be removed in the next major release. Use Gtfs\StopTime\AvailabilityType instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/Stop_LocationType.php b/inc/Gtfs/Stop_LocationType.php
new file mode 100644
index 0000000..18cfb9e
--- /dev/null
+++ b/inc/Gtfs/Stop_LocationType.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+ /**
+ * This class is deprecated. Use Gtfs\Stop\LocationType instead.
+ * @deprecated
+ */
+ class Stop_LocationType {}
+}
+class_exists(Stop\LocationType::class);
+@trigger_error('Gtfs\Stop_LocationType is deprecated and will be removed in the next major release. Use Gtfs\Stop\LocationType instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/Stop_WheelchairBoarding.php b/inc/Gtfs/Stop_WheelchairBoarding.php
new file mode 100644
index 0000000..1fbb1a9
--- /dev/null
+++ b/inc/Gtfs/Stop_WheelchairBoarding.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+ /**
+ * This class is deprecated. Use Gtfs\Stop\WheelchairBoarding instead.
+ * @deprecated
+ */
+ class Stop_WheelchairBoarding {}
+}
+class_exists(Stop\WheelchairBoarding::class);
+@trigger_error('Gtfs\Stop_WheelchairBoarding is deprecated and will be removed in the next major release. Use Gtfs\Stop\WheelchairBoarding instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/Transfer.php b/inc/Gtfs/Transfer.php
new file mode 100644
index 0000000..c3ee43b
--- /dev/null
+++ b/inc/Gtfs/Transfer.php
@@ -0,0 +1,181 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.Transfer</code>
+ */
+class Transfer extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * Generated from protobuf field <code>string from_stop_id = 1;</code>
+ */
+ protected $from_stop_id = '';
+ /**
+ * Generated from protobuf field <code>string to_stop_id = 2;</code>
+ */
+ protected $to_stop_id = '';
+ /**
+ * Generated from protobuf field <code>.gtfs.Transfer.TransferType transfer_type = 3;</code>
+ */
+ protected $transfer_type = 0;
+ /**
+ * Generated from protobuf field <code>int32 min_transfer_time = 4;</code>
+ */
+ protected $min_transfer_time = 0;
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ */
+ protected $extension = null;
+
+ /**
+ * Constructor.
+ *
+ * @param array $data {
+ * Optional. Data for populating the Message object.
+ *
+ * @type string $from_stop_id
+ * @type string $to_stop_id
+ * @type int $transfer_type
+ * @type int $min_transfer_time
+ * @type \Google\Protobuf\Any $extension
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ * }
+ */
+ public function __construct($data = NULL) {
+ \GPBMetadata\Proto\Gtfs::initOnce();
+ parent::__construct($data);
+ }
+
+ /**
+ * Generated from protobuf field <code>string from_stop_id = 1;</code>
+ * @return string
+ */
+ public function getFromStopId()
+ {
+ return $this->from_stop_id;
+ }
+
+ /**
+ * Generated from protobuf field <code>string from_stop_id = 1;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setFromStopId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->from_stop_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>string to_stop_id = 2;</code>
+ * @return string
+ */
+ public function getToStopId()
+ {
+ return $this->to_stop_id;
+ }
+
+ /**
+ * Generated from protobuf field <code>string to_stop_id = 2;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setToStopId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->to_stop_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Transfer.TransferType transfer_type = 3;</code>
+ * @return int
+ */
+ public function getTransferType()
+ {
+ return $this->transfer_type;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Transfer.TransferType transfer_type = 3;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setTransferType($var)
+ {
+ GPBUtil::checkEnum($var, \Gtfs\Transfer_TransferType::class);
+ $this->transfer_type = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>int32 min_transfer_time = 4;</code>
+ * @return int
+ */
+ public function getMinTransferTime()
+ {
+ return $this->min_transfer_time;
+ }
+
+ /**
+ * Generated from protobuf field <code>int32 min_transfer_time = 4;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setMinTransferTime($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->min_transfer_time = $var;
+
+ return $this;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @return \Google\Protobuf\Any
+ */
+ public function getExtension()
+ {
+ return $this->extension;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @param \Google\Protobuf\Any $var
+ * @return $this
+ */
+ public function setExtension($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+ $this->extension = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/inc/Gtfs/Transfer/TransferType.php b/inc/Gtfs/Transfer/TransferType.php
new file mode 100644
index 0000000..f78300f
--- /dev/null
+++ b/inc/Gtfs/Transfer/TransferType.php
@@ -0,0 +1,61 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\Transfer;
+
+use UnexpectedValueException;
+
+/**
+ * Protobuf type <code>gtfs.Transfer.TransferType</code>
+ */
+class TransferType
+{
+ /**
+ * Generated from protobuf enum <code>RECOMMENDED = 0;</code>
+ */
+ const RECOMMENDED = 0;
+ /**
+ * Generated from protobuf enum <code>TIMED = 1;</code>
+ */
+ const TIMED = 1;
+ /**
+ * Generated from protobuf enum <code>MINIMUM = 2;</code>
+ */
+ const MINIMUM = 2;
+ /**
+ * Generated from protobuf enum <code>NOT_POSSIBLE = 3;</code>
+ */
+ const NOT_POSSIBLE = 3;
+
+ private static $valueToName = [
+ self::RECOMMENDED => 'RECOMMENDED',
+ self::TIMED => 'TIMED',
+ self::MINIMUM => 'MINIMUM',
+ self::NOT_POSSIBLE => 'NOT_POSSIBLE',
+ ];
+
+ public static function name($value)
+ {
+ if (!isset(self::$valueToName[$value])) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no name defined for value %s', __CLASS__, $value));
+ }
+ return self::$valueToName[$value];
+ }
+
+
+ public static function value($name)
+ {
+ $const = __CLASS__ . '::' . strtoupper($name);
+ if (!defined($const)) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no value defined for name %s', __CLASS__, $name));
+ }
+ return constant($const);
+ }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(TransferType::class, \Gtfs\Transfer_TransferType::class);
+
diff --git a/inc/Gtfs/Transfer_TransferType.php b/inc/Gtfs/Transfer_TransferType.php
new file mode 100644
index 0000000..8efb526
--- /dev/null
+++ b/inc/Gtfs/Transfer_TransferType.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+ /**
+ * This class is deprecated. Use Gtfs\Transfer\TransferType instead.
+ * @deprecated
+ */
+ class Transfer_TransferType {}
+}
+class_exists(Transfer\TransferType::class);
+@trigger_error('Gtfs\Transfer_TransferType is deprecated and will be removed in the next major release. Use Gtfs\Transfer\TransferType instead', E_USER_DEPRECATED);
+
diff --git a/inc/Gtfs/Trip.php b/inc/Gtfs/Trip.php
new file mode 100644
index 0000000..0452c4f
--- /dev/null
+++ b/inc/Gtfs/Trip.php
@@ -0,0 +1,346 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Generated from protobuf message <code>gtfs.Trip</code>
+ */
+class Trip extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * The route_id field contains an ID that uniquely identifies a route.
+ *
+ * Generated from protobuf field <code>string route_id = 1;</code>
+ */
+ protected $route_id = '';
+ /**
+ * The service_id contains an ID that uniquely identifies a set of dates when service is available for one or more routes.
+ *
+ * Generated from protobuf field <code>string service_id = 2;</code>
+ */
+ protected $service_id = '';
+ /**
+ * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+ *
+ * Generated from protobuf field <code>string trip_id = 3;</code>
+ */
+ protected $trip_id = '';
+ /**
+ * The trip_headsign field contains the text that appears on a sign that identifies the trip's destination to passengers.
+ *
+ * Generated from protobuf field <code>string trip_headsign = 4;</code>
+ */
+ protected $trip_headsign = '';
+ /**
+ * The trip_short_name field contains the text that appears in schedules and sign boards to identify the trip to passengers.
+ *
+ * Generated from protobuf field <code>string trip_short_name = 5;</code>
+ */
+ protected $trip_short_name = '';
+ /**
+ * Generated from protobuf field <code>.gtfs.Trip.Direction direction_id = 6;</code>
+ */
+ protected $direction_id = 0;
+ /**
+ * The block_id field identifies the block to which the trip belongs.
+ * A block consists of two or more sequential trips made using the same vehicle,
+ * where a passenger can transfer from one trip to the next just by staying in the vehicle.
+ *
+ * Generated from protobuf field <code>string block_id = 7;</code>
+ */
+ protected $block_id = '';
+ /**
+ * The shape_id field contains an ID that defines a shape for the trip.
+ *
+ * Generated from protobuf field <code>string shape_id = 8;</code>
+ */
+ protected $shape_id = '';
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ */
+ protected $extension = null;
+
+ /**
+ * Constructor.
+ *
+ * @param array $data {
+ * Optional. Data for populating the Message object.
+ *
+ * @type string $route_id
+ * The route_id field contains an ID that uniquely identifies a route.
+ * @type string $service_id
+ * The service_id contains an ID that uniquely identifies a set of dates when service is available for one or more routes.
+ * @type string $trip_id
+ * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+ * @type string $trip_headsign
+ * The trip_headsign field contains the text that appears on a sign that identifies the trip's destination to passengers.
+ * @type string $trip_short_name
+ * The trip_short_name field contains the text that appears in schedules and sign boards to identify the trip to passengers.
+ * @type int $direction_id
+ * @type string $block_id
+ * The block_id field identifies the block to which the trip belongs.
+ * A block consists of two or more sequential trips made using the same vehicle,
+ * where a passenger can transfer from one trip to the next just by staying in the vehicle.
+ * @type string $shape_id
+ * The shape_id field contains an ID that defines a shape for the trip.
+ * @type \Google\Protobuf\Any $extension
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ * }
+ */
+ public function __construct($data = NULL) {
+ \GPBMetadata\Proto\Gtfs::initOnce();
+ parent::__construct($data);
+ }
+
+ /**
+ * The route_id field contains an ID that uniquely identifies a route.
+ *
+ * Generated from protobuf field <code>string route_id = 1;</code>
+ * @return string
+ */
+ public function getRouteId()
+ {
+ return $this->route_id;
+ }
+
+ /**
+ * The route_id field contains an ID that uniquely identifies a route.
+ *
+ * Generated from protobuf field <code>string route_id = 1;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setRouteId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->route_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The service_id contains an ID that uniquely identifies a set of dates when service is available for one or more routes.
+ *
+ * Generated from protobuf field <code>string service_id = 2;</code>
+ * @return string
+ */
+ public function getServiceId()
+ {
+ return $this->service_id;
+ }
+
+ /**
+ * The service_id contains an ID that uniquely identifies a set of dates when service is available for one or more routes.
+ *
+ * Generated from protobuf field <code>string service_id = 2;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setServiceId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->service_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+ *
+ * Generated from protobuf field <code>string trip_id = 3;</code>
+ * @return string
+ */
+ public function getTripId()
+ {
+ return $this->trip_id;
+ }
+
+ /**
+ * The trip_id field contains an ID that identifies a trip. The trip_id is dataset unique.
+ *
+ * Generated from protobuf field <code>string trip_id = 3;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setTripId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->trip_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The trip_headsign field contains the text that appears on a sign that identifies the trip's destination to passengers.
+ *
+ * Generated from protobuf field <code>string trip_headsign = 4;</code>
+ * @return string
+ */
+ public function getTripHeadsign()
+ {
+ return $this->trip_headsign;
+ }
+
+ /**
+ * The trip_headsign field contains the text that appears on a sign that identifies the trip's destination to passengers.
+ *
+ * Generated from protobuf field <code>string trip_headsign = 4;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setTripHeadsign($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->trip_headsign = $var;
+
+ return $this;
+ }
+
+ /**
+ * The trip_short_name field contains the text that appears in schedules and sign boards to identify the trip to passengers.
+ *
+ * Generated from protobuf field <code>string trip_short_name = 5;</code>
+ * @return string
+ */
+ public function getTripShortName()
+ {
+ return $this->trip_short_name;
+ }
+
+ /**
+ * The trip_short_name field contains the text that appears in schedules and sign boards to identify the trip to passengers.
+ *
+ * Generated from protobuf field <code>string trip_short_name = 5;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setTripShortName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->trip_short_name = $var;
+
+ return $this;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Trip.Direction direction_id = 6;</code>
+ * @return int
+ */
+ public function getDirectionId()
+ {
+ return $this->direction_id;
+ }
+
+ /**
+ * Generated from protobuf field <code>.gtfs.Trip.Direction direction_id = 6;</code>
+ * @param int $var
+ * @return $this
+ */
+ public function setDirectionId($var)
+ {
+ GPBUtil::checkEnum($var, \Gtfs\Trip_Direction::class);
+ $this->direction_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The block_id field identifies the block to which the trip belongs.
+ * A block consists of two or more sequential trips made using the same vehicle,
+ * where a passenger can transfer from one trip to the next just by staying in the vehicle.
+ *
+ * Generated from protobuf field <code>string block_id = 7;</code>
+ * @return string
+ */
+ public function getBlockId()
+ {
+ return $this->block_id;
+ }
+
+ /**
+ * The block_id field identifies the block to which the trip belongs.
+ * A block consists of two or more sequential trips made using the same vehicle,
+ * where a passenger can transfer from one trip to the next just by staying in the vehicle.
+ *
+ * Generated from protobuf field <code>string block_id = 7;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setBlockId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->block_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The shape_id field contains an ID that defines a shape for the trip.
+ *
+ * Generated from protobuf field <code>string shape_id = 8;</code>
+ * @return string
+ */
+ public function getShapeId()
+ {
+ return $this->shape_id;
+ }
+
+ /**
+ * The shape_id field contains an ID that defines a shape for the trip.
+ *
+ * Generated from protobuf field <code>string shape_id = 8;</code>
+ * @param string $var
+ * @return $this
+ */
+ public function setShapeId($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->shape_id = $var;
+
+ return $this;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @return \Google\Protobuf\Any
+ */
+ public function getExtension()
+ {
+ return $this->extension;
+ }
+
+ /**
+ * The extensions namespace allows 3rd-party developers to extend the
+ * GTFS specification in order to add and evaluate new features and
+ * modifications to the spec.
+ *
+ * Generated from protobuf field <code>.google.protobuf.Any extension = 2000;</code>
+ * @param \Google\Protobuf\Any $var
+ * @return $this
+ */
+ public function setExtension($var)
+ {
+ GPBUtil::checkMessage($var, \Google\Protobuf\Any::class);
+ $this->extension = $var;
+
+ return $this;
+ }
+
+}
+
diff --git a/inc/Gtfs/Trip/Direction.php b/inc/Gtfs/Trip/Direction.php
new file mode 100644
index 0000000..d446b74
--- /dev/null
+++ b/inc/Gtfs/Trip/Direction.php
@@ -0,0 +1,53 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs\Trip;
+
+use UnexpectedValueException;
+
+/**
+ * The direction_id field contains a binary value that indicates the direction of travel for a trip.
+ *
+ * Protobuf type <code>gtfs.Trip.Direction</code>
+ */
+class Direction
+{
+ /**
+ * Generated from protobuf enum <code>OUTBOUND = 0;</code>
+ */
+ const OUTBOUND = 0;
+ /**
+ * Generated from protobuf enum <code>INBOUND = 1;</code>
+ */
+ const INBOUND = 1;
+
+ private static $valueToName = [
+ self::OUTBOUND => 'OUTBOUND',
+ self::INBOUND => 'INBOUND',
+ ];
+
+ public static function name($value)
+ {
+ if (!isset(self::$valueToName[$value])) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no name defined for value %s', __CLASS__, $value));
+ }
+ return self::$valueToName[$value];
+ }
+
+
+ public static function value($name)
+ {
+ $const = __CLASS__ . '::' . strtoupper($name);
+ if (!defined($const)) {
+ throw new UnexpectedValueException(sprintf(
+ 'Enum %s has no value defined for name %s', __CLASS__, $name));
+ }
+ return constant($const);
+ }
+}
+
+// Adding a class alias for backwards compatibility with the previous class name.
+class_alias(Direction::class, \Gtfs\Trip_Direction::class);
+
diff --git a/inc/Gtfs/Trip_Direction.php b/inc/Gtfs/Trip_Direction.php
new file mode 100644
index 0000000..b626b3c
--- /dev/null
+++ b/inc/Gtfs/Trip_Direction.php
@@ -0,0 +1,16 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: proto/gtfs.proto
+
+namespace Gtfs;
+
+if (false) {
+ /**
+ * This class is deprecated. Use Gtfs\Trip\Direction instead.
+ * @deprecated
+ */
+ class Trip_Direction {}
+}
+class_exists(Trip\Direction::class);
+@trigger_error('Gtfs\Trip_Direction is deprecated and will be removed in the next major release. Use Gtfs\Trip\Direction instead', E_USER_DEPRECATED);
+
diff --git a/inc/api.php b/inc/api.php
new file mode 100644
index 0000000..fd9b40f
--- /dev/null
+++ b/inc/api.php
@@ -0,0 +1,106 @@
+<?php
+class api {
+ private function writeJSON($array) {
+ echo json_encode($array);
+ }
+
+ private function error($error = null) {
+ self::writeJSON(["status" => "error", "error" => $error]);
+ exit();
+ }
+
+ private function returnData($data) {
+ self::writeJSON(["status" => "ok", "data" => $data]);
+ exit();
+ }
+
+ private function transformRouteShortName($name) {
+ if ($name == "L9N") return "L9";
+ if ($name == "L10N") return "L10";
+ return $name;
+ }
+
+ public static function handleRequest() {
+ global $_GET, $_POST, $conf;
+
+ header("Content-Type: application/json");
+
+ if (!isset($_GET["action"])) self::error("actionNotProvided");
+
+ $gtfs = new gtfs();
+
+ switch ($_GET["action"]) {
+ case "routes":
+ self::returnData($gtfs->getRoutes());
+ break;
+
+ case "trips":
+ if (!isset($_GET["route"])) self::error("missingArguments");
+ $route = $_GET["route"];
+
+ self::returnData($gtfs->getTrips($route));
+ break;
+
+ case "stations":
+ self::returnData($gtfs->getStations(true));
+
+ /*$estacionsFull = tmbApi::request("transit/linies/metro/".$linia."/estacions");
+ if ($estacionsFull === false || !isset($estacionsFull["features"])) self::error("unexpected");
+
+ $estacions = [];
+ foreach ($estacionsFull["features"] as $estacio) {
+ if (!isset($estacio["properties"])) self::error("unexpected");
+ $estacions[] = [
+ "id" => $estacio["properties"]["CODI_ESTACIO"] ?? null,
+ "nom" => $estacio["properties"]["NOM_ESTACIO"] ?? "",
+ "color" => $estacio["properties"]["COLOR_LINIA"] ?? "000",
+ "ordre" => $estacio["properties"]["ORDRE_ESTACIO"] ?? 0
+ ];
+ }
+
+ usort($estacions, function ($a, $b) {
+ return $a["ordre"] - $b["ordre"];
+ });*/
+ break;
+
+ case "getTimes":
+ if (!isset($_GET["stop"])) self::error("missingArguments");
+
+ $stop = $gtfs->getStop($_GET["stop"]);
+ $times = $gtfs->getStopTimes($_GET["stop"]);
+
+ $schedules = [];
+ $routes = [];
+ foreach ($times as $time) {
+ if ($time["trip_headsign"] == $stop["stop_name"]) continue;
+ $schedules[] = [
+ "destination" => $time["trip_headsign"],
+ "arrivalTime" => gtfs::time2seconds($time["arrival_time"]),
+ "departureTime" => gtfs::time2seconds($time["departure_time"]),
+ "route" => self::transformRouteShortName($time["route_short_name"]),
+ "color" => $time["route_color"],
+ "textColor" => $time["route_text_color"]
+ ];
+
+ if (!in_array($time["route_short_name"], $routes)) $routes[] = $time["route_short_name"];
+ }
+
+ $timeSinceMidnight = gtfs::timeSinceMidnight();
+
+ usort($schedules, function($a, $b) use ($timeSinceMidnight) {
+ return ($a["departureTime"] - $b["departureTime"]) % (24*60*60);
+ });
+
+ $data = [
+ "schedules" => $schedules,
+ "numRoutes" => count($routes)
+ ];
+
+ self::returnData($data);
+ break;
+
+ default:
+ self::error("actionNotImplemented");
+ }
+ }
+}
diff --git a/inc/csv.php b/inc/csv.php
new file mode 100644
index 0000000..d974713
--- /dev/null
+++ b/inc/csv.php
@@ -0,0 +1,29 @@
+<?php
+class csv {
+ public static $fields = ["dni", "name", "category", "email", "companies"];
+
+ public static function csv2array($file, $check = null, $onlyField = null) {
+ $return = [];
+
+ $flag = true;
+ $headers = [];
+ while (($line = fgetcsv($file, null, ",")) !== false) {
+ if ($flag) {
+ $headers = $line;
+ $flag = false;
+ } else {
+ $item = [];
+
+ foreach ($headers as $j => $field) {
+ $item[$field] = trim($line[$j]);
+ }
+
+ if ($check === null || $check($item)) $return[] = ($onlyField === null ? $item : ($item[$onlyField] ?? null));
+ }
+ }
+
+ fclose($file);
+
+ return $return;
+ }
+}
diff --git a/inc/gtfs.php b/inc/gtfs.php
new file mode 100644
index 0000000..b4c49da
--- /dev/null
+++ b/inc/gtfs.php
@@ -0,0 +1,190 @@
+<?php
+class gtfs {
+ //private static $files = ["calendar_dates", "calendar", "routes", "stop_times", "stops", "trips"];
+
+ private $db;
+
+ private static $dow = ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"];
+
+ function __construct($path = null) {
+ global $conf;
+
+ try {
+ $this->db = new PDO('sqlite:'.($conf["databaseFile"]));
+ } catch (PDOException $e) {
+ die("SQLite error: $e\n");
+ }
+ }
+
+ static function timeSinceMidnight() {
+ //return 8*60*60 + 9*60; //TESTING
+ return (time() - mktime(0, 0, 0));
+ }
+
+ static function today() {
+ return date("Ymd");
+ }
+
+ static function time2seconds($time) {
+ $timeSinceMidnight = self::timeSinceMidnight();
+
+ $boom = explode(":", $time);
+ if (count($boom) != 3) return null;
+
+ return ((($boom[0]*60) + $boom[1])*60 + $boom[2]) % (24*60*60);
+ }
+
+ private function fetchAll($sql) {
+ $query = $this->db->query($sql);
+ if (!$query) return false;
+
+ return $query->fetchAll(PDO::FETCH_ASSOC);
+ }
+
+ private function fetchAllPrepared($sql, $values) {
+ $query = $this->db->prepare($sql);
+ if (!$query) return false;
+
+ $query->execute($values);
+ return $query->fetchAll(PDO::FETCH_ASSOC);
+ }
+
+ private function fetchTable($table, $filters = [], $orderedField = null) {
+ $order = ($orderedField === null ? "" : " ORDER BY $orderedField");
+
+ if (!count($filters)) {
+ return $this->fetchAll("SELECT * FROM $table".$order);
+ }
+
+ $whereConditions = [];
+ $values = [];
+ foreach ($filters as $filter) {
+ $whereConditions[] = $filter[0]." = ?";
+ $values[] = $filter[1];
+ }
+
+ return $this->fetchAllPrepared("SELECT * FROM $table WHERE ".implode(" AND ", $whereConditions).$order, $values);
+ }
+
+ function getRoutes() {
+ return $this->fetchTable("routes");
+ }
+
+ function getTrips($route) {
+ return $this->fetchTable("trips", [["route_id", $route]]);
+ }
+
+ function getStations($ordered = false) {
+ return $this->fetchTable("stops", [["location_type", Gtfs\Stop\LocationType::STATION]], ($ordered ? "stop_name" : null));
+ }
+
+ function getStop($stop) {
+ $results = $this->fetchTable("stops", [["stop_id", $stop]]);
+
+ if (!count($results)) return null;
+
+ return $results[0];
+ }
+
+ function getPlatforms($stop) {
+ $results = $this->fetchTable("stops", [["parent_station", $stop], ["location_type", Gtfs\Stop\LocationType::STOP]], "stop_id");
+
+ return $results;
+ }
+
+ const TIME_LIMIT = 160;
+ function getStopTimes($stop, $timeLimit = self::TIME_LIMIT) {
+ $stops = $this->getPlatforms($stop);
+
+ $values = [];
+ foreach ($stops as $s) {
+ $values[] = $s["stop_id"]; // Stops
+ }
+
+ $rdow = (int)date("w");
+ $dow = self::$dow[$rdow]; // Today's day of week
+ $dow2 = self::$dow[($rdow + 1) % 7]; // Tomorrow's day of week
+
+ if (!count($stops)) return [];
+
+ $sql = "SELECT st.*, t.*, r.*, c.*, cd.*, strftime('%Y%m%d', 'now', 'localtime') as today, strftime('%Y%m%d', 'now', 'localtime', '1 day') as tomorrow, time('now', 'localtime') as now
+ FROM stop_times st
+ INNER JOIN trips t
+ ON st.trip_id = t.trip_id
+ INNER JOIN routes r
+ ON t.route_id = r.route_id
+ LEFT JOIN calendar c
+ ON t.service_id = c.service_id
+ LEFT JOIN calendar_dates cd
+ ON t.service_id = cd.service_id
+ WHERE
+ st.stop_id IN (".implode(", ", array_fill(0, count($stops), "?")).") AND
+ (
+ cd.service_id IS NULL OR
+ cd.exception_type = ".(int)Gtfs\CalendarDate\ExceptionType::ADDED."
+ ) AND
+ (
+ (
+ (
+ (
+ time(now) < time('00:00:00', '-".(int)$timeLimit." minutes') AND
+ st.departure_time BETWEEN time(now) AND time(now, '".(int)$timeLimit." minutes')
+ ) OR
+ (
+ time(now) >= time('00:00:00', '-".(int)$timeLimit." minutes') AND
+ st.departure_time BETWEEN time(now) AND strftime('24:%M:%S', now, '".(int)$timeLimit." minutes')
+ )
+ ) AND
+ (
+ c.service_id IS NULL OR
+ (
+ c.start_date <= today AND
+ c.end_date >= today AND
+ c.$dow = ".(int)Gtfs\Calendar\CalendarDay::AVAILABLE."
+ )
+ ) AND
+ (
+ cd.service_id IS NULL OR
+ cd.date = today
+ )
+ ) OR
+ (
+ (
+ (
+ time(now) < time('00:00:00', '-".(int)$timeLimit." minutes') AND
+ st.departure_time BETWEEN ((strftime('%H', now) + 24) || strftime(':%M:%S', now)) AND ((strftime('%H', now, '".(int)$timeLimit." minutes') + 24) || strftime(':%M:%S', now, '".(int)$timeLimit." minutes'))
+ ) OR
+ (
+ time(now) >= time('00:00:00', '-".(int)$timeLimit." minutes') AND
+ st.departure_time BETWEEN time(now) AND strftime('24:%M:%S', now, '".(int)$timeLimit." minutes')
+ )
+ ) AND
+ (
+ c.service_id IS NULL OR
+ (
+ c.start_date <= tomorrow AND
+ c.end_date >= tomorrow AND
+ c.$dow2 = ".(int)Gtfs\Calendar\CalendarDay::AVAILABLE."
+ )
+ ) AND
+ (
+ cd.service_id IS NULL OR
+ cd.date = tomorrow
+ )
+ )
+ )
+ ORDER BY departure_time ASC";
+
+ $result = $this->fetchAllPrepared($sql, $values);
+ if ($result === false) {
+ echo implode("\n", $this->db->errorInfo());
+ exit();
+ }
+
+ return $result;
+ }
+
+ function __destruct() {
+ $this->db = null;
+ }
+}
diff --git a/inc/gtfsHandler.php b/inc/gtfsHandler.php
new file mode 100644
index 0000000..a6d8aa1
--- /dev/null
+++ b/inc/gtfsHandler.php
@@ -0,0 +1,321 @@
+<?php
+class gtfsHandler {
+ public static $databases = [
+ "agency" => [
+ "columns" => [
+ "agency_id" => "TEXT",
+ "agency_name" => "TEXT NOT NULL",
+ "agency_url" => "TEXT NOT NULL",
+ "agency_timezone" => "TEXT NOT NULL",
+ "agency_lang" => "TEXT",
+ "agency_phone" => "TEXT",
+ "agency_fare_url" => "TEXT",
+ "agency_email" => "TEXT"
+ ]
+ ],
+ "attributions" => [
+ "columns" => [
+ "attribution_id" => "TEXT PRIMARY KEY",
+ "agency_id" => "TEXT",
+ "route_id" => "TEXT",
+ "trip_id" => "TEXT",
+ "organization_name" => "TEXT NOT NULL",
+ "is_producer" => "INT",
+ "is_operator" => "INT",
+ "is_authority" => "INT",
+ "attribution_url" => "TEXT",
+ "attribution_email" => "TEXT",
+ "attribution_phone" => "TEXT"
+ ]
+ ],
+ "stops" => [
+ "columns" => [
+ "stop_id" => "TEXT PRIMARY KEY",
+ "stop_code" => "TEXT",
+ "stop_name" => "TEXT",
+ "stop_desc" => "TEXT",
+ "stop_lat" => "TEXT",
+ "stop_lon" => "TEXT",
+ "zone_id" => "TEXT",
+ "stop_url" => "TEXT",
+ "location_type" => "INT",
+ "parent_station" => "TEXT",
+ "stop_timezone" => "TEXT",
+ "wheelchair_boarding" => "INT",
+ "level_id" => "TEXT",
+ "platform_code" => "TEXT"
+ ],
+ "indexes" => ["parent_station"]
+ ],
+ "routes" => [
+ "columns" => [
+ "route_id" => "TEXT PRIMARY KEY",
+ "agency_id" => "TEXT",
+ "route_short_name" => "TEXT",
+ "route_long_name" => "TEXT",
+ "route_desc" => "TEXT",
+ "route_type" => "INT NOT NULL",
+ "route_url" => "TEXT",
+ "route_color" => "TEXT",
+ "route_text_color" => "TEXT",
+ "route_sort_order" => "INT"
+ ]
+ ],
+ "trips" => [
+ "columns" => [
+ "route_id" => "TEXT NOT NULL",
+ "service_id" => "TEXT NOT NULL",
+ "trip_id" => "TEXT PRIMARY KEY",
+ "trip_headsign" => "TEXT",
+ "trip_short_name" => "TEXT",
+ "direction_id" => "INT",
+ "block_id" => "TEXT",
+ "shape_id" => "TEXT",
+ "wheelchair_accessible" => "INT",
+ "bikes_allowed" => "INT"
+ ],
+ "indexes" => ["route_id", "service_id"]
+ ],
+ "stop_times" => [
+ "columns" => [
+ "trip_id" => "TEXT NOT NULL",
+ "arrival_time" => "TEXT",
+ "departure_time" => "TEXT",
+ "stop_id" => "TEXT NOT NULL",
+ "stop_sequence" => "INT NOT NULL",
+ "stop_headsign" => "TEXT",
+ "pickup_type" => "INT",
+ "drop_off_type" => "INT",
+ "shape_dist_traveled" => "INT",
+ "timepoint" => "INT"
+ ],
+ "indexes" => ["trip_id", "stop_id"],
+ "times" => ["arrival_time", "departure_time"]
+ ],
+ "calendar" => [
+ "columns" => [
+ "service_id" => "TEXT PRIMARY KEY",
+ "monday" => "INT NOT NULL",
+ "tuesday" => "INT NOT NULL",
+ "wednesday" => "INT NOT NULL",
+ "thursday" => "INT NOT NULL",
+ "friday" => "INT NOT NULL",
+ "saturday" => "INT NOT NULL",
+ "sunday" => "INT NOT NULL",
+ "start_date" => "INT NOT NULL",
+ "end_date" => "INT NOT NULL"
+ ],
+ "indexes" => ["start_date", "end_date"]
+ ],
+ "calendar_dates" => [
+ "columns" => [
+ "service_id" => "TEXT NOT NULL",
+ "date" => "INT NOT NULL",
+ "exception_type" => "INT NOT NULL"
+ ],
+ "indexes" => ["service_id", "date"]
+ ],
+ "fare_attributes" => [
+ "columns" => [
+ "fare_id" => "TEXT NOT NULL PRIMARY KEY",
+ "price" => "FLOAT NOT NULL",
+ "currency_type" => "INT NOT NULL",
+ "payment_method" => "INT NOT NULL",
+ "transfers" => "TEXT NOT NULL",
+ "agency_id" => "TEXT",
+ "transfer_duration" => "INT"
+ ]
+ ],
+ "fare_rules" => [
+ "columns" => [
+ "fare_id" => "TEXT NOT NULL",
+ "route_id" => "TEXT",
+ "origin_id" => "TEXT",
+ "destination_id" => "TEXT",
+ "contains_id" => "TEXT",
+ ]
+ ],
+ "shapes" => [
+ "columns" => [
+ "shape_id" => "TEXT PRIMARY KEY",
+ "shape_pt_lat" => "FLOAT NOT NULL",
+ "shape_pt_lon" => "FLOAT NOT NULL",
+ "shape_pt_sequence" => "INT NOT NULL",
+ "shape_dist_traveled" => "FLOAT NOT NULL"
+ ]
+ ],
+ "frequencies" => [
+ "columns" => [
+ "trip_id" => "TEXT NOT NULL",
+ "start_time" => "TEXT NOT NULL",
+ "end_time" => "TEXT NOT NULL",
+ "headway_secs" => "INT NOT NULL",
+ "exact_times" => "INT"
+ ],
+ "indexes" => ["trip_id"]
+ ],
+ "transfers" => [
+ "columns" => [
+ "from_stop_id" => "TEXT NOT NULL",
+ "to_stop_id" => "TEXT NOT NULL",
+ "transfer_type" => "INT NOT NULL",
+ "min_transfer_time" => "INT"
+ ],
+ "indexes" => ["from_stop_id", "to_stop_id"]
+ ],
+ "pathways" => [
+ "columns" => [
+ "pathway_id" => "TEXT PRIMARY KEY",
+ "from_stop_id" => "TEXT NOT NULL",
+ "to_stop_id" => "TEXT NOT NULL",
+ "pathway_mode" => "INT NOT NULL",
+ "is_bidirectional" => "INT NOT NULL",
+ "length" => "FLOAT",
+ "traversal_time" => "INT",
+ "stair_count" => "INT",
+ "max_slope" => "FLOAT",
+ "min_width" => "FLOAT",
+ "signposted_as" => "TEXT",
+ "reversed_signposted_as" => "TEXT"
+ ]
+ ],
+ "levels" => [
+ "columns" => [
+ "level_id" => "TEXT PRIMARY KEY",
+ "level_index" => "FLOAT NOT NULL",
+ "level_name" => "TEXT"
+ ]
+ ],
+ "feed_info" => [
+ "columns" => [
+ "feed_publisher_name" => "TEXT NOT NULL",
+ "feed_publisher_url" => "TEXT NOT NULL",
+ "feed_lang" => "TEXT NOT NULL",
+ "feed_start_date" => "INT",
+ "feed_end_date" => "INT",
+ "feed_version" => "TEXT",
+ "feed_contact_email" => "TEXT",
+ "feed_contact_url" => "TEXT"
+ ]
+ ]
+ ];
+
+ public static function fixTime($time) {
+ return str_pad($time, 8, "0", STR_PAD_LEFT);
+ }
+
+ public static function underscoreToCamelCase($string) {
+ return lcfirst(str_replace('_', '', ucwords($string, '_')));
+ }
+
+ public static function camelCaseToUnderscore($string) {
+ return strtolower(preg_replace("/([a-z])([A-Z])/", "$1_$2", $name));
+ }
+
+ public static function getFieldType($table, $field) {
+ if (!isset(self::$databases[$table]) || !isset(self::$databases[$table]["columns"][$field])) return false;
+
+ $definition = self::$databases[$table]["columns"][$field];
+
+ return explode(",", explode(" ", $definition)[0])[0];
+ }
+
+ private static function addRowsToTable($dbName, &$dbTemplate, &$stream) {
+ global $db;
+
+ $db->beginTransaction();
+
+ $query = null;
+
+ $headers = [];
+ $times = [];
+ $flag = true;
+ while (($line = fgetcsv($stream, null, ",")) !== false) {
+ if ($flag) {
+ $headers = $line;
+ $sql = "INSERT INTO $dbName (".implode(", ", $headers).") VALUES (".implode(", ", array_fill(0, count($headers), "?")).")";
+ if (isset($dbTemplate["times"])) {
+ foreach ($dbTemplate["times"] as $field) {
+ $times[] = array_search($field, $headers);
+ }
+ }
+ $query = $db->prepare($sql);
+ $flag = false;
+ continue;
+ }
+
+ $values = array_map(function($value) {
+ return trim($value);
+ }, $line);
+
+ foreach ($times as $time) {
+ $values[$time] = self::fixTime($values[$time]);
+ }
+
+ $query->execute($values);
+ }
+
+ $db->commit();
+
+ fclose($stream);
+ }
+
+ private static function setUpDatabase(&$zip) {
+ global $conf, $db;
+
+ @unlink($conf["databaseFile"]);
+ $db = new PDO('sqlite:'.($conf["databaseFile"]));
+
+ $db->beginTransaction();
+
+ foreach (self::$databases as $dbName => $dbTemplate) {
+ $definitions = [];
+ foreach ($dbTemplate["columns"] as $column => $definition) {
+ $definitions[] = $column." ".$definition;
+ }
+
+ $sql = "CREATE TABLE $dbName (".implode(", ", $definitions).")";
+ if ($db->query($sql)) {
+ echo "[info] Created table $dbName.\n";
+ } else {
+ echo "[error] Couldn't create table $dbName:\n".implode("\n", $db->errorInfo())."\n";
+ $db->rollBack();
+ exit();
+ }
+
+ if (isset($dbTemplate["indexes"])) {
+ foreach ($dbTemplate["indexes"] as $index) {
+ $sql = "CREATE INDEX ${dbName}_${index} ON $dbName ($index)";
+ if ($db->query($sql)) {
+ echo "[info] Created index $index.\n";
+ } else {
+ echo "[error] Couldn't create index $index:\n".implode("\n", $db->errorInfo())."\n";
+ $db->rollBack();
+ exit();
+ }
+ }
+ }
+ }
+
+ $db->commit();
+
+ foreach (self::$databases as $dbName => $dbTemplate) {
+ $stream = $zip->getStream($dbName.".txt");
+ if (!$stream) {
+ echo "[warning] The $dbName file does not exist.\n";
+ continue;
+ }
+
+ self::addRowsToTable($dbName, $dbTemplate, $stream);
+ echo "[info] Added rows to $dbName.\n";
+ }
+ }
+
+ public static function createDatabase($file) {
+ $zip = new ZipArchive();
+ $zip->open($file);
+
+ echo "[info] Setting up database:\n";
+ self::setUpDatabase($zip);
+ }
+}
diff --git a/inc/security.php b/inc/security.php
new file mode 100644
index 0000000..d90629f
--- /dev/null
+++ b/inc/security.php
@@ -0,0 +1,6 @@
+<?php
+class security {
+ public static function htmlsafe($string) {
+ return htmlspecialchars($string);
+ }
+}
diff --git a/inc/tmbApi.php b/inc/tmbApi.php
new file mode 100644
index 0000000..8c7aab7
--- /dev/null
+++ b/inc/tmbApi.php
@@ -0,0 +1,44 @@
+<?php
+class tmbApi {
+ const API_ENDPOINT = "https://api.tmb.cat/v1/";
+
+ public static function httpRequest($url, $method = "GET", $params = [], $file = null) {
+ $curl = curl_init();
+ curl_setopt_array($curl, [
+ CURLOPT_RETURNTRANSFER => 1,
+ CURLOPT_URL => $url
+ ]);
+
+ if ($method === "POST") {
+ curl_setopt($curl, CURLOPT_POST, 1);
+ if (!empty($params)) curl_setopt($curl, CURLOPT_POST_PARAMS, $params);
+ }
+
+
+ if ($file !== null) {
+ curl_setopt($curl, CURLOPT_FILE, $file);
+ }
+
+ $response = curl_exec($curl);
+ curl_close($curl);
+
+ if ($file === null) return $response;
+ return true;
+ }
+
+ public static function httpJSONRequest($url, $method = "GET", $params = []) {
+ $json = json_decode(self::httpRequest($url, $method, $params), true);
+ if (json_last_error() !== JSON_ERROR_NONE) return false;
+
+ return $json;
+ }
+
+ public static function request($action, $file = null) {
+ global $conf;
+
+ $url = self::API_ENDPOINT.$action."?app_id=".urlencode($conf["tmbApi"]["appId"])."&app_key=".urlencode($conf["tmbApi"]["appKey"]);
+
+ if ($file === null) return self::httpJSONRequest($url);
+ self::httpRequest($url, "GET", [], $file);
+ }
+}
diff --git a/inc/views.php b/inc/views.php
new file mode 100644
index 0000000..f1683e3
--- /dev/null
+++ b/inc/views.php
@@ -0,0 +1,26 @@
+<?php
+class views {
+ const VIEW_L9N_OLD = 0;
+ const VIEW_L9N_NEW = 1;
+ const VIEW_L9S = 2;
+
+ public static $views = [self::VIEW_L9N_OLD, self::VIEW_L9N_NEW, self::VIEW_L9S];
+ public static $viewsNames = [
+ self::VIEW_L9N_OLD => "VIEW_L9N_OLD",
+ self::VIEW_L9N_NEW => "VIEW_L9N_NEW",
+ self::VIEW_L9S => "VIEW_L9S"
+ ];
+ public static $viewsInclude = [
+ self::VIEW_L9N_OLD => "l9n.php",
+ self::VIEW_L9N_NEW => "l9n.php",
+ self::VIEW_L9S => "l9s.php"
+ ];
+
+ public static function renderPage($view) {
+ if (!in_array($view, self::$views)) return;
+
+ $gtfs = new gtfs();
+
+ require_once(__DIR__."/../views/".self::$viewsInclude[$view]);
+ }
+}