First prototype
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");
+ }
+ }
+}