diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000000000000000000000000000000000000..f97815c26fd0f4799935b9159c06cba58e5cb0d6 --- /dev/null +++ b/.htaccess @@ -0,0 +1,4 @@ +Options -MultiViews +RewriteEngine On +RewriteCond %{REQUEST_FILENAME} !-f +RewriteRule ^ public/index.php [QSA,L] \ No newline at end of file diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000000000000000000000000000000000000..24fcb561951799b6f84459acf5e4fac06abc5066 --- /dev/null +++ b/public/index.php @@ -0,0 +1,14 @@ +<?php + + $env = getenv('DAGOJEK_ENV'); + if (!$env || $env == "development") { + $env = "development"; + error_reporting(E_ALL); + ini_set('display_errors', 1); + } + + require __DIR__.'/../src/app.php'; + + $App = DagoJek::Instance(); + $App->prepareRouting(); + $App->Start(); \ No newline at end of file diff --git a/public/main.css b/public/main.css new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/public/scripts.js b/public/scripts.js new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/app.php b/src/app.php new file mode 100644 index 0000000000000000000000000000000000000000..0bdcc30d18bb88c5e01a038f8c1cc6da37eb56c8 --- /dev/null +++ b/src/app.php @@ -0,0 +1,63 @@ +<?php + + +/** + * DagoJek is a singleton class that representing DagoJek application + */ +class DagoJek { + + private $routingTable = array(); + + private function __construct() { + // empty constructor + } + + public static function Instance() { + static $instance = null; + if ($instance === null) { + $instance = new DagoJek(); + } + + $instance->includeAllController(); + + return $instance; + } + + private function includeAllController() { + foreach (scandir(dirname(__FILE__)."/controller") as $filename) { + $path = dirname(__FILE__)."/controller" . '/' . $filename; + if (is_file($path)) { + require_once $path; + } + } + } + + public function prepareRouting() { + require __DIR__.'/route.php'; + } + + private function getCurrentUri() { + $basepath = implode('/', array_slice(explode('/', $_SERVER['SCRIPT_NAME']), 0, -1)) . '/'; + $uri = substr($_SERVER['REQUEST_URI'], strlen($basepath)); + if (strstr($uri, '?')) $uri = substr($uri, 0, strpos($uri, '?')); + $uri = '/' . trim($uri, '/'); + return $uri; + } + + public function addRoute($route, $function) { + $data = array( + $route => $function, + ); + $this->routingTable += $data; + } + + public function Start() { + $base_url = $this->getCurrentUri(); + if (array_key_exists ($base_url, $this->routingTable)) { + $this->routingTable[$base_url](); + } else { + die ("404 Page not Found"); + } + } + +} diff --git a/src/controller/MainController.php b/src/controller/MainController.php new file mode 100644 index 0000000000000000000000000000000000000000..c0fa8167c4d80d68f33d6ea3e1411852efec3e28 --- /dev/null +++ b/src/controller/MainController.php @@ -0,0 +1,13 @@ +<?php + +class MainController { + + public static function LoginHandler() { + echo "This is login handler"; + } + + public static function DefaultHandler() { + echo "This is default handler"; + } + +} \ No newline at end of file diff --git a/src/route.php b/src/route.php new file mode 100644 index 0000000000000000000000000000000000000000..0b033a3664aaf90ff47110e1a6ed2f17ea3019e6 --- /dev/null +++ b/src/route.php @@ -0,0 +1,15 @@ +<?php + +// ---------------------------- LIST OF ALL BASIC ROUTES ---------------------------- + +$AppInstance = Dagojek::Instance(); + +$AppInstance->addRoute("/", 'MainController::LoginHandler'); +$AppInstance->addRoute("/login", 'MainController::LoginHandler'); +$AppInstance->addRoute("/register", 'MainController::DefaultHandler'); +$AppInstance->addRoute("/main/profil", 'MainController::DefaultHandler'); +$AppInstance->addRoute("/main/profil/edit", 'MainController::DefaultHandler'); +$AppInstance->addRoute("/main/history", 'MainController::DefaultHandler'); +$AppInstance->addRoute("/main/order/", 'MainController::DefaultHandler'); +$AppInstance->addRoute("/main/order/select", 'MainController::DefaultHandler'); +$AppInstance->addRoute("/main/order/finish", 'MainController::DefaultHandler');