diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 35963f8..0000000 --- a/.gitattributes +++ /dev/null @@ -1,6 +0,0 @@ -*.html linguist-language=html -*.css linguist-language=css -*.php linguist-language=php - -*.sql linguist-detectable=true -*.sql linguist-language=sql diff --git a/.gitignore b/.gitignore index 9ae2976..83c64de 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,8 @@ +# PhpStorm configuration .idea -src/Core/db.ini + +# Composer venders +vendor/ + +# Application configuration and secrets +.env diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index ea745df..0000000 --- a/LICENSE.txt +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) Custom Php Mvc - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..b1897b6 --- /dev/null +++ b/composer.json @@ -0,0 +1,15 @@ +{ + "name": "sigmanificient/custom_php_mvc", + "autoload": { + "psr-4": { + "mvc\\": "src/" + } + }, + "authors": [ + { + "name": "Yohann Boniface", + "email": "edhyjox@gmail.com" + } + ], + "require": {} +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..dad229e --- /dev/null +++ b/composer.lock @@ -0,0 +1,18 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "f681c065ef586e5134758d1fbbc1dce3", + "packages": [], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.1.0" +} diff --git a/src/Controllers/AdminController.php b/src/Controllers/AdminController.php deleted file mode 100644 index 947666b..0000000 --- a/src/Controllers/AdminController.php +++ /dev/null @@ -1,19 +0,0 @@ -[^\S ]+/s', // strip whitespaces after tags, except space - '/[^\S ]+\/' // Remove HTML comments - ); - - $replace = array('>', '<', '\\1', ''); - return preg_replace($search, $replace, $buffer); -} \ No newline at end of file diff --git a/src/Controllers/ErrorController.php b/src/Controllers/ErrorController.php deleted file mode 100644 index 7cd75d3..0000000 --- a/src/Controllers/ErrorController.php +++ /dev/null @@ -1,18 +0,0 @@ -render('404'); - } - - public function forbidden() - { - $this->render('403'); - } -} diff --git a/src/Controllers/GlobalController.php b/src/Controllers/GlobalController.php deleted file mode 100644 index ebb9b46..0000000 --- a/src/Controllers/GlobalController.php +++ /dev/null @@ -1,18 +0,0 @@ -render('index'); - } - - public function about() - { - $this->render('about'); - } -} diff --git a/src/Controllers/UserController.php b/src/Controllers/UserController.php deleted file mode 100644 index f7b2daa..0000000 --- a/src/Controllers/UserController.php +++ /dev/null @@ -1,18 +0,0 @@ -render('login', ['error' => $error]); - } - -} diff --git a/src/Core/Router.php b/src/Core/Router.php deleted file mode 100644 index 8d34a8e..0000000 --- a/src/Core/Router.php +++ /dev/null @@ -1,92 +0,0 @@ -$action(); - return; - } - - $this->set_404(); - return; - } - - require_once ROOT . '/Controllers/' . $controller . '.php'; - $controller = new $controller(); - - $action = (isset($params[0])) ? array_shift($params) : $controller->default_action; - $action = method_exists($controller, $action) ? $action : $controller->default_action; - - if ($action === '404') { - self::set_404(); - return; - } - - empty($params) ? $controller->$action() : $controller->$action($params); - } - - public function prettify(): string - { - $uri = $_SERVER['REQUEST_URI']; - - if ($uri === '/') - return $this::_index; - - $uri = substr($uri, 1); - - if ($uri === $this::_index) { - $this->redirect(SITE); - return $uri; - } - - if (substr($uri, 0, strlen($this::_global)) === $this::_global) { - $this->redirect(SITE . substr($uri, strlen($this::_global))); - } - - if ($uri[-1] !== '/') - return $uri; - - $new_uri = substr($uri, 0, -1); - $this->redirect(SITE . '/' . $new_uri); - return $new_uri; - - } - - public static function redirect($url, $code = 301) - { - http_response_code($code); - header('Location: ' . $url); - } - - public static function set_404() - { - $controller = 'ErrorController'; - - require_once ROOT . '/Controllers/' . $controller . '.php'; - $controller = new $controller(); - - $controller->not_found(); - } -} diff --git a/src/Public/index.php b/src/Public/index.php deleted file mode 100644 index 2fe2679..0000000 --- a/src/Public/index.php +++ /dev/null @@ -1,13 +0,0 @@ -route(); diff --git a/src/Views/Error/403.html b/src/Views/Error/403.html deleted file mode 100644 index 01755a5..0000000 --- a/src/Views/Error/403.html +++ /dev/null @@ -1,5 +0,0 @@ -

UnAuthorized

-
-

Code 403

-

You dont have the permission to access the ressource at this location

-
\ No newline at end of file diff --git a/src/Views/Error/404.html b/src/Views/Error/404.html deleted file mode 100644 index e9c699a..0000000 --- a/src/Views/Error/404.html +++ /dev/null @@ -1,6 +0,0 @@ -

Page Not Found !

-
-

Code 404

-

The resource you requested does not exist at this location...

-

Did you misspell anything ?

-
\ No newline at end of file diff --git a/src/Views/Global/about.html b/src/Views/Global/about.html deleted file mode 100644 index bacf911..0000000 --- a/src/Views/Global/about.html +++ /dev/null @@ -1,47 +0,0 @@ -

About

-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ad aspernatur, beatae, consequatur deleniti deserunt - doloremque dolores dolorum ea eius enim eum eveniet ex facilis fugiat ipsam iste itaque laboriosam laudantium - maiores nesciunt nobis omnis optio perferendis perspiciatis porro provident quia quis quos reiciendis reprehenderit - sint tenetur totam ut velit veritatis? -

- -
-

Lorem ipsum dolor sit amet.

-

- Ad aliquam blanditiis debitis eligendi est iste minima molestiae, nisi - odit placeat quae sapiente sed suscipit, tempore vel. A adipisci at blanditiis culpa deserunt dolorum eveniet - exercitationem facere, illum in, ipsum libero magnam mollitia nulla officiis placeat praesentium rem voluptas - voluptate voluptatum? Atque dolor excepturi ipsam, sapiente soluta vero voluptatum? -

-

- Accusamus assumenda - dolores esse minima quae, vero. Cupiditate itaque, sapiente! Accusantium aliquam autem dolorum eius esse - excepturi - exercitationem, facilis minima officia placeat possimus, quaerat qui quod reiciendis rem temporibus tenetur unde - velit voluptatem voluptates. Accusamus asperiores dicta numquam optio quo! Ab at delectus ipsum minus, nostrum - porro - quasi sit voluptas? -

-
-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ad aspernatur, beatae, consequatur deleniti deserunt - doloremque dolores dolorum ea eius enim eum eveniet ex facilis fugiat ipsam iste itaque laboriosam laudantium - maiores nesciunt nobis omnis optio perferendis perspiciatis porro provident quia quis quos reiciendis reprehenderit - sint tenetur totam ut velit veritatis? -

-

- Ad aliquam blanditiis debitis eligendi est iste minima molestiae, nisi - odit placeat quae sapiente sed suscipit, tempore vel. A adipisci at blanditiis culpa deserunt dolorum eveniet - exercitationem facere, illum in, ipsum libero magnam mollitia nulla officiis placeat praesentium rem voluptas - voluptate voluptatum? Atque dolor excepturi ipsam, sapiente soluta vero voluptatum? -

-

- Accusamus assumenda - dolores esse minima quae, vero. Cupiditate itaque, sapiente! Accusantium aliquam autem dolorum eius esse - excepturi - exercitationem, facilis minima officia placeat possimus, quaerat qui quod reiciendis rem temporibus tenetur unde - velit voluptatem voluptates. Accusamus asperiores dicta numquam optio quo! Ab at delectus ipsum minus, nostrum - porro - quasi sit voluptas? -

\ No newline at end of file diff --git a/src/Views/Global/index.html b/src/Views/Global/index.html deleted file mode 100644 index de83acb..0000000 --- a/src/Views/Global/index.html +++ /dev/null @@ -1,12 +0,0 @@ -

Welcome

- -
-

Lorem Ipsum

-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ad aspernatur, beatae, consequatur deleniti deserunt - doloremque dolores dolorum ea eius enim eum eveniet ex facilis fugiat ipsam iste itaque laboriosam laudantium - maiores nesciunt nobis omnis optio perferendis perspiciatis porro provident quia quis quos reiciendis - reprehenderit - sint tenetur totam ut velit veritatis? -

-
diff --git a/src/Views/template.phtml b/src/Views/template.phtml deleted file mode 100644 index 83c7077..0000000 --- a/src/Views/template.phtml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - Custom Php MVC - - - - - - - -
-
- Home - -
-
-
-
- -
-
- - - \ No newline at end of file diff --git a/src/app/controllers/AuthController.php b/src/app/controllers/AuthController.php new file mode 100644 index 0000000..fe63412 --- /dev/null +++ b/src/app/controllers/AuthController.php @@ -0,0 +1,15 @@ +render( + 'user/login', + ['error' => Session::getInstance()->flash] + ); + } +} diff --git a/src/app/controllers/ErrorController.php b/src/app/controllers/ErrorController.php new file mode 100644 index 0000000..9fa5e84 --- /dev/null +++ b/src/app/controllers/ErrorController.php @@ -0,0 +1,11 @@ +render('_404'); + } +} diff --git a/src/app/controllers/SiteController.php b/src/app/controllers/SiteController.php new file mode 100644 index 0000000..40ec146 --- /dev/null +++ b/src/app/controllers/SiteController.php @@ -0,0 +1,16 @@ +render('index'); + } + + public function about(): string + { + return $this->render('about'); + } +} diff --git a/src/app/views/layouts/base.php b/src/app/views/layouts/base.php new file mode 100644 index 0000000..ebf472e --- /dev/null +++ b/src/app/views/layouts/base.php @@ -0,0 +1,40 @@ + + + + + + + Custom Php MVC + + + + + + + +
+
+ Home + +
+
+
+
+ {{content}} +
+
+ + + diff --git a/src/app/views/pages/_404.php b/src/app/views/pages/_404.php new file mode 100644 index 0000000..9bc20ca --- /dev/null +++ b/src/app/views/pages/_404.php @@ -0,0 +1 @@ +

Not Found

\ No newline at end of file diff --git a/src/app/views/pages/about.php b/src/app/views/pages/about.php new file mode 100644 index 0000000..d00685c --- /dev/null +++ b/src/app/views/pages/about.php @@ -0,0 +1,42 @@ +

About

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ad aspernatur, beatae, consequatur deleniti deserunt + doloremque dolores dolorum ea eius enim eum eveniet ex facilis fugiat ipsam iste itaque laboriosam laudantium + maiores nesciunt nobis omnis optio perferendis perspiciatis porro provident quia quis quos reiciendis reprehenderit + sint tenetur totam ut velit veritatis? +

+ +
+

Lorem ipsum dolor sit amet.

+

+ Ad aliquam blanditiis debitis eligendi est iste minima molestiae, nisi odit placeat quae sapiente sed suscipit, + tempore vel. A adipisci at blanditiis culpa deserunt dolorum eveniet exercitationem facere, illum in, ipsum + libero magnam mollitia nulla officiis placeat praesentium rem voluptas voluptate voluptatum? Atque dolor + excepturi ipsam, sapiente soluta vero voluptatum? +

+

+ Accusamus assumenda dolores esse minima quae, vero. Cupiditate itaque, sapiente! Accusantium aliquam autem + dolorum eius esse excepturi exercitationem, facilis minima officia placeat possimus, quaerat qui quod reiciendis + rem temporibus tenetur unde velit voluptatem voluptates. Accusamus asperiores dicta numquam optio quo! Ab at + delectus ipsum minus, nostrum porro quasi sit voluptas? +

+
+ +

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ad aspernatur, beatae, consequatur deleniti deserunt + doloremque dolores dolorum ea eius enim eum eveniet ex facilis fugiat ipsam iste itaque laboriosam laudantium + maiores nesciunt nobis omnis optio perferendis perspiciatis porro provident quia quis quos reiciendis reprehenderit + sint tenetur totam ut velit veritatis? +

+

+ Ad aliquam blanditiis debitis eligendi est iste minima molestiae, nisi odit placeat quae sapiente sed suscipit, + tempore vel. A adipisci at blanditiis culpa deserunt dolorum eveniet exercitationem facere, illum in, ipsum libero + magnam mollitia nulla officiis placeat praesentium rem voluptas voluptate voluptatum? Atque dolor excepturi ipsam, + sapiente soluta vero voluptatum? +

+

+ Accusamus assumenda dolores esse minima quae, vero. Cupiditate itaque, sapiente! Accusantium aliquam autem dolorum + eius esse excepturi exercitationem, facilis minima officia placeat possimus, quaerat qui quod reiciendis rem + temporibus tenetur unde velit voluptatem voluptates. Accusamus asperiores dicta numquam optio quo! Ab at delectus + ipsum minus, nostrum porro quasi sit voluptas? +

diff --git a/src/app/views/pages/index.php b/src/app/views/pages/index.php new file mode 100644 index 0000000..1a92de7 --- /dev/null +++ b/src/app/views/pages/index.php @@ -0,0 +1 @@ +

This is an index page.

\ No newline at end of file diff --git a/src/Views/User/login.php b/src/app/views/pages/user/login.php similarity index 84% rename from src/Views/User/login.php rename to src/app/views/pages/user/login.php index f54c737..e5a1934 100644 --- a/src/Views/User/login.php +++ b/src/app/views/pages/user/login.php @@ -1,9 +1,5 @@ - -

Connexion

-
+ @@ -24,7 +20,7 @@ -
\ No newline at end of file + diff --git a/src/core/Application.php b/src/core/Application.php new file mode 100644 index 0000000..46c340d --- /dev/null +++ b/src/core/Application.php @@ -0,0 +1,23 @@ +request = new Request(); + $this->response = new Response(); + + $this->router = new Router($this->request, $this->response); + } + + public function run() + { + echo $this->router->resolve(); + } +} diff --git a/src/core/Request.php b/src/core/Request.php new file mode 100644 index 0000000..44f2979 --- /dev/null +++ b/src/core/Request.php @@ -0,0 +1,25 @@ +request = $request; + $this->response = $response; + } + + public function get($uri, $controller, $method) + { + $this->routes['get'][$uri] = [$controller, $method]; + } + + public function post($uri, $controller, $method) + { + $this->routes['post'][$uri] = [$controller, $method]; + } + + public function resolve() + { + $path = $this->request->getPath(); + $method = $this->request->getMethod(); + + $callback = $this->routes[$method][$path] ?? false; + + if ($callback === false) { + $this->response->setStatusCode(404); + $callback = $this->routes['get']['404'] ?? '404 Not Found'; + } + + if (is_string($callback)) { + return $callback; + } + + $controllerName = ucfirst(array_shift($callback)) . 'Controller'; + include ROOT_DIR . "/app/controllers/$controllerName.php"; + $controller = new $controllerName; + + $method = array_shift($callback); + + return $controller->$method(); + } +} diff --git a/src/core/Session.php b/src/core/Session.php new file mode 100644 index 0000000..35e5d09 --- /dev/null +++ b/src/core/Session.php @@ -0,0 +1,36 @@ +flash = $_SESSION['flash']; + $this->pop('flash'); + } + } + + public function add($key, $val) + { + $_SESSION[$key] = $val; + } + + public function get($key) + { + return $_SESSION[$key] ?? []; + } + + public function pop($key) + { + unset($_SESSION[$key]); + } +} diff --git a/src/core/abc/Controller.php b/src/core/abc/Controller.php new file mode 100644 index 0000000..1234c2b --- /dev/null +++ b/src/core/abc/Controller.php @@ -0,0 +1,27 @@ +layoutContent(); + $viewContent = $this->renderOnlyView($view, $params); + return str_replace('{{content}}', $viewContent, $layoutContent); + } + + public function layoutContent() + { + ob_start(); + include_once ROOT_DIR . "/app/views/layouts/base.php"; + return ob_get_clean(); + } + + protected function renderOnlyView($view, $data) + { + ob_start(); + include_once ROOT_DIR . "/app/views/pages/$view.php"; + return ob_get_clean(); + } +} diff --git a/src/Core/Singleton.php b/src/core/abc/Singleton.php similarity index 92% rename from src/Core/Singleton.php rename to src/core/abc/Singleton.php index cde3de3..060639e 100644 --- a/src/Core/Singleton.php +++ b/src/core/abc/Singleton.php @@ -1,5 +1,7 @@ Header set Cache-Control "max-age=604800, public" diff --git a/src/Public/css/main.css b/src/public/css/main.css similarity index 99% rename from src/Public/css/main.css rename to src/public/css/main.css index 331df33..55cb40b 100644 --- a/src/Public/css/main.css +++ b/src/public/css/main.css @@ -172,4 +172,4 @@ label[for="actions"] { .button:hover { background-color: var(--secondary-color-500); -} \ No newline at end of file +} diff --git a/src/public/index.php b/src/public/index.php new file mode 100644 index 0000000..1ea9a00 --- /dev/null +++ b/src/public/index.php @@ -0,0 +1,15 @@ +router->get('/', 'site', 'index'); +$app->router->get('/about', 'site', 'about'); +$app->router->get('/login', 'auth', 'login'); +$app->router->get('404', 'error', 'notFound'); + +$app->run(); diff --git a/src/Public/svg/github_icon.svg b/src/public/svg/github_icon.svg similarity index 100% rename from src/Public/svg/github_icon.svg rename to src/public/svg/github_icon.svg diff --git a/src/runtime/.gitignore b/src/runtime/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/src/runtime/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore