Max F 5 роки тому
батько
коміт
2439f734a1

+ 0 - 21
bin/console.old.php

@@ -1,21 +0,0 @@
-#!/usr/bin/php
-<?php
-
-// CONFIG
-define('APP_DIR', realpath(__DIR__ . '/..'));
-define('VENDOR_DIR', APP_DIR . '/vendor');
-
-
-// AUTOLOAD
-$loader = require VENDOR_DIR . '/autoload.php';
-$loader->setPsr4('App\\', APP_DIR . '/src');
-
-
-\KarmaFW\App::boot();
-
-
-//\KarmaFW\App::getDb()->execute("set names utf8");
-
-
-// APP ROUTE & GO
-\KarmaFW\App::routeCommand($argv);

+ 0 - 54
bin/karmafw.php

@@ -1,54 +0,0 @@
-<?php
-
-echo "DEPRECATED" . PHP_EOL; exit;
-
-
-function help($exit=false) {
-	echo "Usage: php karmakw.php <action> [options]" . PHP_EOL;
-	echo PHP_EOL;
-	echo "  actions:" . PHP_EOL;
-	echo "     new-controller <item_name_single> <item_name_plural>" . PHP_EOL;
-	echo "     new-model <item_name_single> <item_name_plural>" . PHP_EOL;
-	echo "     new-migration <migration_name>" . PHP_EOL;
-	echo PHP_EOL;
-	echo "  example:" . PHP_EOL;
-	echo "     php karmakw.php new-controller user users" . PHP_EOL;
-	echo PHP_EOL;
-
-	if ($exit) {
-		exit();
-	}
-}
-
-function pre($var, $exit = false, $prefix = '') {
-	echo "<pre>";
-	if (!empty($prefix)) {
-		echo $prefix;
-	}
-	if (is_null($var)) {
-		echo "NULL";
-	} else if ($var === true) {
-		echo "TRUE";
-	} else if ($var === false) {
-		echo "FALSE";
-	} else if (is_string($var)) {
-		echo '"' . $var . '"';
-	} else {
-		print_r($var);
-	}
-	echo "</pre>";
-
-	if ($exit) {
-		exit;
-	}
-}
-
-
-/* ###### */
-
-if (empty($argv[1])) {
-	help(true);
-}
-
-$action = $argv[1];
-

+ 3 - 3
config/routes.php

@@ -6,8 +6,8 @@ use \KarmaFW\Routing\Router;
 
 
 // Homepage
-//Router::get('/', ['App\\Controllers\\HoomeController', 'homepage'])->setName('home');
+//Router::get('/', ['App\\Controllers\\HomeController', 'homepage'])->setName('home');
 
 // Assets minimifier
-Router::get('(/assets/js/[^/]+.js).phpmin.js$', ['KarmaFW\\Controllers\\MinimifierController', 'minimifier_js'], 'regex', ['file_url'])->setName('minimifier_js');
-Router::get('(/assets/css/[^/]+.css).phpmin.css$', ['KarmaFW\\Controllers\\MinimifierController', 'minimifier_css'], 'regex', ['file_url'])->setName('minimifier_css');
+Router::get('(/assets/js/[^/]+.js).phpmin.js$', ['\\KarmaFW\\Controllers\\MinimifierController', 'minimifier_js'], 'regex', ['file_url'])->setName('minimifier_js');
+Router::get('(/assets/css/[^/]+.css).phpmin.css$', ['\\KarmaFW\\Controllers\\MinimifierController', 'minimifier_css'], 'regex', ['file_url'])->setName('minimifier_css');

+ 4 - 13
bin/console.php → example/bin/console.php

@@ -11,9 +11,9 @@ $loader = require VENDOR_DIR . '/autoload.php';
 $loader->setPsr4('App\\', APP_DIR . '/src');
 
 
-use \KarmaFW\App;
-use \KarmaFW\App\Request;
-use \KarmaFW\App\Response;
+use \KarmaFW\Kernel;
+use \KarmaFW\Http\Request;
+use \KarmaFW\Http\Response;
 use \KarmaFW\App\Middlewares as KarmaMiddlewares;
 
 
@@ -24,20 +24,11 @@ ini_set('display_errors', 1);
 $request = Request::createFromGlobals();
 
 // Init App and Define workflow
-$app = new App([
-    //new KarmaMiddlewares\TrafficLogger,
+$app = new Kernel([
     new KarmaMiddlewares\ErrorHandler,
     //new KarmaMiddlewares\ResponseTime,
-    //new KarmaMiddlewares\ForceHttps,
-    //new KarmaMiddlewares\GzipEncoding,
-    //new KarmaMiddlewares\MaintenanceMode,
     new KarmaMiddlewares\SessionHandler,
-    //'handle404',
-    //'Authentification',
-    //'CacheHtml',
-    //new KarmaMiddlewares\UrlPrefixRouter,
     new KarmaMiddlewares\CommandRouter($argv),
-    //new KarmaMiddlewares\UrlRouter,
 ]);
 
 // Process App workflow/pipe and return a $response

+ 14 - 0
example/config/config.php

@@ -0,0 +1,14 @@
+<?php
+
+ini_set('display_errors', 1);
+
+
+define('APP_NAME', "Demo APP");
+
+define('ENV', "dev");
+
+define('DB_DSN', 'mysql://demo:demo@localhost/demo?charset=UTF8');
+
+define('TPL_DIR', APP_DIR . '/templates');
+
+

+ 33 - 0
example/config/routes.php

@@ -0,0 +1,33 @@
+<?php
+
+use \KarmaFW\Routing\Router;
+
+
+// Homepage
+Router::get('/', ['\\App\\Controllers\\HomeController', 'homepage'])->setName('homepage');
+
+
+// login/logout
+Router::get('/logout', ['\\App\\Controllers\\HomeController', 'logout'])->setName('logout');
+Router::get('/login', ['\\App\\Controllers\\HomeController', 'login'])->setName('login');
+Router::post('/login', ['\\App\\Controllers\\HomeController', 'login_post']);
+
+
+
+// clients
+Router::get('/clients', ['\\App\\Controllers\\Loggued\\ClientController', 'clients_list'])->setName('clients_list');
+Router::get('/clients/nouveau-client', ['\\App\\Controllers\\Loggued\\ClientController', 'client_new'])->setName('client_new');
+Router::get('/clients/([0-9]+)-([^/]+)$', ['\\App\\Controllers\\Loggued\\ClientController', 'client_edit'], 'regex', ['client_id', 'slug'])->setName('client_edit');
+Router::post('/clients/save-client', ['\\App\\Controllers\\Loggued\\ClientController', 'client_save'])->setName('client_save');
+Router::post('/clients/delete-client', ['\\App\\Controllers\\Loggued\\ClientController', 'client_delete'])->setName('client_delete');
+
+
+
+
+
+
+
+// not route found => 404
+Router::error404(['\\App\\Controllers\\ErrorController', 'error404']);
+
+

+ 0 - 0
example/src/Commands/.keep


+ 0 - 0
example/src/Controllers/.keep


+ 0 - 0
example/src/Models/.keep


+ 0 - 0
example/src/helpers/.keep


+ 35 - 0
example/templates/layout_base.tpl.php

@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <!-- Required meta tags -->
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+    <title>{$meta_title}</title>
+
+    <link rel="stylesheet" type="text/css" href="/assets/vendor/bootstrap-4.3.1/bootstrap.min.css">
+    <link rel="stylesheet" type="text/css" href="/assets/vendor/select2-4.0.6-rc.0/select2.min.css" />
+    <link rel="stylesheet" type="text/css" href="/assets/vendor/alertify-1.11.1/css/alertify.css">
+    <link rel="stylesheet" type="text/css" href="/assets/vendor/tui.chart-3.11.2/tui-chart.min.css">
+    <link rel="stylesheet" type="text/css" href="/assets/css/app.css">
+    {$block_extra_css}
+
+    <script type="text/javascript">var onload_actions = []; function registerOnloadAction(func) { onload_actions.push(func); }</script>
+  </head>
+  <body>
+    {$child_content}
+
+    <script type="text/javascript" src="/assets/vendor/jquery-3.2.1/jquery-3.2.1.min.js"></script>
+    <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> -->
+    <script type="text/javascript" src="/assets/vendor/bootstrap-4.3.1/bootstrap.min.js"></script>
+    <script type="text/javascript" src="/assets/vendor/select2-4.0.6-rc.0/select2.min.js"></script>
+    <script type="text/javascript" src="/assets/vendor/alertify-1.11.1/alertify.js"></script>
+    <script type="text/javascript" src="/assets/vendor/raphael.js"></script>
+    <script type="text/javascript" src="/assets/vendor/tui.chart-3.11.2/tui-chart.min.js"></script>
+    <script type="text/javascript" src="/assets/vendor/jQuery-Autocomplete-1.4.11/jquery.autocomplete.min.js"></script>
+    <script type="text/javascript" src="/assets/js/app.js"></script>
+    {$block_extra_js}
+
+    <script type="text/javascript">executeOnloadActions();</script>
+  </body>
+</html>

+ 9 - 0
example/templates/page_error.tpl.php

@@ -0,0 +1,9 @@
+{layout layout_base.tpl.php}
+
+<div class="container-fluid">
+	<h1>{$title}</h1>
+
+	<p>
+		{$message}
+	</p>
+</div>

+ 0 - 0
example/var/.keep


+ 0 - 0
www/.htaccess → example/www/.htaccess


+ 5 - 8
www/index.php → example/www/index.php

@@ -10,9 +10,9 @@ $loader = require VENDOR_DIR . '/autoload.php';
 $loader->setPsr4('App\\', APP_DIR . '/src');
 
 
-use \KarmaFW\App;
-use \KarmaFW\App\Request;
-use \KarmaFW\App\Response;
+use \KarmaFW\Kernel;
+use \KarmaFW\Http\Request;
+use \KarmaFW\Http\Response;
 use \KarmaFW\App\Middlewares as KarmaMiddlewares;
 
 
@@ -23,20 +23,17 @@ ini_set('display_errors', 1);
 $request = Request::createFromGlobals();
 
 // Init App and Define workflow
-$app = new App([
+$app = new Kernel([
     new KarmaMiddlewares\TrafficLogger,
     new KarmaMiddlewares\ErrorHandler,
     new KarmaMiddlewares\ResponseTime,
     //new KarmaMiddlewares\MinimifierHtml,
-    //new KarmaMiddlewares\MinimifierJs,
-    //new KarmaMiddlewares\MinimifierCss,
     //new KarmaMiddlewares\RedirectToDomain('www.mydomain.com', ['mydomain.com', 'mydomain.fr', 'www.mydomain.fr']),
     //new KarmaMiddlewares\ForceHttps(302, ['www.mydomain.com']),
     //new KarmaMiddlewares\GzipEncoding,
     //new KarmaMiddlewares\MaintenanceMode,
     new KarmaMiddlewares\SessionHandler,
-    //'handle404',
-    //'Authentification',
+    //new Authentification, // (not implemented)
     //new KarmaMiddlewares\CacheHtml(APP_DIR . '/var/cache/html', 3600),
     //new KarmaMiddlewares\CommandRouter($argv),
     //new KarmaMiddlewares\UrlGroupRouter,

+ 1 - 1
src/App/Middlewares/ErrorHandler.php

@@ -64,7 +64,7 @@ class ErrorHandler
                 $response_content = '<title>' . $title . '</title><h1>' . $title . '</h1><p>' . $message . '</p>';
             }
 
-            $response->setStatus($http_code)->setHtml($response_content);
+            $response->setHtml($response_content, $http_code);
         }
 
         return $response;

+ 2 - 2
src/App/Middlewares/UrlRouter.php

@@ -69,7 +69,7 @@ class UrlRouter
 				if (empty($error_message)) {
 					$error_message = '<title>Not Found</title><h1>Not Found</h1><p>Page not Found</p>';
 				}
-				return $response->setStatus($error_code)->setHtml($error_message);
+				return $response->setHtml($error_message, $error_code);
 			}
 
 
@@ -96,7 +96,7 @@ class UrlRouter
 
 
 			// else => error 500
-			$response->setStatus(500)->setHtml($response_content);
+			$response->setHtml($response_content, 500);
 		}
 
 		return $response;

+ 16 - 7
src/Http/Request.php

@@ -4,7 +4,6 @@ namespace KarmaFW\Http;
 
 use \KarmaFW\Routing\Route;
 
-// TODO: a remplacer par ou rendre compatible avec GuzzleHttp\Psr7\Request
 
 class Request
 {
@@ -12,8 +11,9 @@ class Request
 	protected $url = null;
 	protected $protocol = null;
 
-	protected $client_ip = null;
 	protected $route = null;
+	protected $client_ip = null;
+	protected $user_agent = null;
 
 	public $GET = null;
 	public $POST = null;
@@ -24,7 +24,6 @@ class Request
 	public $SERVER = null;
 
 
-	//public function __construct($url=null, $method=null)
 	public function __construct($method, $url, array $headers=[], $body=null, $version='1.1')
 	{
 		$this->url = $url;
@@ -41,7 +40,6 @@ class Request
 		// TODO
 		$request = new self(null, null);
 
-
 		$request->GET = isset($_GET) ? $_GET : [];
 		$request->POST = isset($_POST) ? $_POST : [];
 		$request->COOKIE = isset($_COOKIE) ? $_COOKIE : [];
@@ -49,9 +47,6 @@ class Request
 		$request->ENV = isset($_ENV) ? $_ENV : [];
 		$request->FILES = isset($_FILES) ? $_FILES : [];
 		$request->SERVER = isset($_SERVER) ? $_SERVER : [];
-
-		$client_ip = null;
-		$request->setClientIp($client_ip);
 		
 		return $request;
 	}
@@ -93,6 +88,10 @@ class Request
 			$request->SERVER['SERVER_NAME'] = $request->SERVER['HTTP_X_FORWARDED_HOST'];
 		}
 
+		// Set Client User-Agent
+		$user_agent = isset($request->SERVER['HTTP_USER_AGENT']) ? $request->SERVER['HTTP_USER_AGENT'] : null;
+		$request->setUserAgent($user_agent);
+
 		// Set Client IP
 		$client_ip = null;
 		if (! empty($request->SERVER['REMOTE_ADDR'])) {
@@ -127,6 +126,16 @@ class Request
 		$this->client_ip = $client_ip;
 	}
 
+	public function getUserAgent()
+	{
+		return $this->user_agent;
+	}
+
+	public function setUserAgent($user_agent)
+	{
+		$this->user_agent = $user_agent;
+	}
+
 	public function getRoute()
 	{
 		return $this->route;

+ 1 - 1
src/Kernel.php

@@ -122,7 +122,7 @@ class Kernel
             }
 
             //throw $e;
-            $response->setStatus(500)->setHtml($content);
+            $response->setHtml($content, 500);
 		}
 
 		return $response;

+ 0 - 24
www/index.old.php

@@ -1,24 +0,0 @@
-<?php
-
-// CONFIG
-define('APP_DIR', realpath(__DIR__ . '/..'));
-define('VENDOR_DIR', APP_DIR . '/vendor');
-
-
-// AUTOLOAD
-$loader = require VENDOR_DIR . '/autoload.php';
-$loader->setPsr4('App\\', APP_DIR . '/src');
-
-
-use \KarmaFW\App;
-use \KarmaFW\App\Request;
-use \KarmaFW\App\Response;
-use \KarmaFW\App\Middlewares as KarmaMiddlewares;
-
-
-ini_set('display_errors', 1);
-
-
-\KarmaFW\WebApp::boot();
-\KarmaFW\WebApp::routeUrl();
-