Reange and optimize
This commit is contained in:
		
							
								
								
									
										38
									
								
								index.php
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								index.php
									
									
									
									
									
								
							| @@ -1,4 +1,5 @@ | ||||
| <?php | ||||
|  | ||||
| namespace base; | ||||
|  | ||||
| use base\API\APIRouter; | ||||
| @@ -7,38 +8,37 @@ use base\Controller\Site\SiteRouter; | ||||
| use base\Model\BDD; | ||||
|  | ||||
| session_start(); | ||||
| date_default_timezone_set('Europe/Paris'); | ||||
| setlocale(LC_TIME, "fr_FR.UTF-8"); | ||||
| error_reporting(E_ALL); | ||||
| date_default_timezone_set( 'Europe/Paris' ); | ||||
| setlocale( LC_TIME, "fr_FR.UTF-8" ); | ||||
| error_reporting( E_ALL ); | ||||
|  | ||||
| require ('src/lib/functions.php'); | ||||
| require ('src/config.php'); | ||||
| require( 'src/lib/functions.php' ); | ||||
| require( 'src/config.php' ); | ||||
|  | ||||
| require 'src/Autoloader.php'; | ||||
| Autoloader::register(); | ||||
|  | ||||
| new BDD(); | ||||
|  | ||||
| $parts = explode('?', $_SERVER['REQUEST_URI']); | ||||
| $urlA = ltrim($parts[0], '/'); | ||||
| $pages = explode('/', $urlA); | ||||
| $parts = explode( '?', $_SERVER['REQUEST_URI'] ); | ||||
| $urlA  = ltrim( $parts[0], '/' ); | ||||
| $pages = explode( '/', $urlA ); | ||||
|  | ||||
| //Si il y a un / en fin d'url on redirige vers la meme page sans le / | ||||
| if (count($pages) > 1 && $pages[count($pages) - 1] == '') | ||||
| { | ||||
|     $args = (count($parts) > 1 ? '?'.$parts[1] : ''); | ||||
|     header($_SERVER['SERVER_PROTOCOL'].' 301 Moved Permanently'); | ||||
|     header('Location: /'.rtrim($urlA, '/').$args); | ||||
|     exit(); | ||||
| if ( count( $pages ) > 1 && $pages[ count( $pages ) - 1 ] == '' ) { | ||||
| 	$args = ( count( $parts ) > 1 ? '?' . $parts[1] : '' ); | ||||
| 	header( $_SERVER['SERVER_PROTOCOL'] . ' 301 Moved Permanently' ); | ||||
| 	header( 'Location: /' . rtrim( $urlA, '/' ) . $args ); | ||||
| 	exit(); | ||||
| } | ||||
|  | ||||
| if ($pages[0] == 'api' && isset($pages[1]) && preg_match('#^([a-z]+)$#', $pages[1], $api1) && isset($pages[2]) && preg_match('#^([a-z-]+)$#', $pages[2], $api2)) { | ||||
|     new APIRouter($api1[0], $api2[0]); | ||||
| if ( $pages[0] == 'api' && isset( $pages[1] ) && preg_match( '#^([a-z]+)$#', $pages[1], $api1 ) && isset( $pages[2] ) && preg_match( '#^([a-z-]+)$#', $pages[2], $api2 ) ) { | ||||
| 	new APIRouter( $api1[0], $api2[0] ); | ||||
|  | ||||
| } else if (preg_match('#^test\.dev$#', $_SERVER['SERVER_NAME'])) { | ||||
|     new SiteRouter($pages); | ||||
| } else if ( preg_match( '#^test\.dev$#', $_SERVER['SERVER_NAME'] ) ) { | ||||
| 	new SiteRouter( $pages ); | ||||
| } else { | ||||
|     new Error(404); | ||||
| 	new Error( 404 ); | ||||
| } | ||||
|  | ||||
| /* | ||||
|   | ||||
| @@ -6,23 +6,24 @@ use base\Controller\Controller; | ||||
|  | ||||
| class API extends Controller { | ||||
|  | ||||
|     private $declaredFunctions = []; | ||||
| 	private $declaredFunctions = []; | ||||
|  | ||||
|     /** | ||||
|      * API constructor. | ||||
|      * @param array $declaredFunctions | ||||
|      */ | ||||
|     public function __construct(array $declaredFunctions) { | ||||
|         parent::__construct(); | ||||
|         $this->declaredFunctions = $declaredFunctions; | ||||
|     } | ||||
| 	/** | ||||
| 	 * API constructor. | ||||
| 	 * | ||||
| 	 * @param array $declaredFunctions | ||||
| 	 */ | ||||
| 	public function __construct( array $declaredFunctions ) { | ||||
| 		parent::__construct(); | ||||
| 		$this->declaredFunctions = $declaredFunctions; | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * @return array | ||||
|      */ | ||||
|     public function getDeclaredFunctions() { | ||||
|         return $this->declaredFunctions; | ||||
|     } | ||||
| 	/** | ||||
| 	 * @return array | ||||
| 	 */ | ||||
| 	public function getDeclaredFunctions() { | ||||
| 		return $this->declaredFunctions; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| ?> | ||||
| @@ -6,81 +6,87 @@ use base\Controller\Controller; | ||||
|  | ||||
| class APIError extends Controller { | ||||
|  | ||||
|     /** | ||||
|      * APIError constructor. | ||||
|      * @param int $ErrCode | ||||
|      * @param string $devMessage | ||||
|      * @param string $publicMessage | ||||
|      * @param string $code | ||||
|      */ | ||||
|     public function __construct(int $ErrCode = 500, string $devMessage = 'Erreur inconnue', string $publicMessage = 'Une erreur inconnue s\'est produite', string $code = '') { | ||||
|         parent::__construct(); | ||||
| 	/** | ||||
| 	 * APIError constructor. | ||||
| 	 * | ||||
| 	 * @param int $ErrCode | ||||
| 	 * @param string $devMessage | ||||
| 	 * @param string $publicMessage | ||||
| 	 * @param string $code | ||||
| 	 */ | ||||
| 	public function __construct( int $ErrCode = 500, string $devMessage = 'Erreur inconnue', string $publicMessage = 'Une erreur inconnue s\'est produite', string $code = '' ) { | ||||
| 		parent::__construct(); | ||||
|  | ||||
|         $tabCode = [ | ||||
|             //Informational 1xx | ||||
|             100 => ['label' => '100 Continue', 'msg' => '100 Continue'], | ||||
|             101 => ['label' => '101 Switching Protocols', 'msg' => '101 Switching Protocols'], | ||||
|             //Successful 2xx | ||||
|             200 => ['label' => '200 OK', 'msg' => '200 OK'], | ||||
|             201 => ['label' => '201 Created', 'msg' => '201 Created'], | ||||
|             202 => ['label' => '202 Accepted', 'msg' => '202 Accepted'], | ||||
|             203 => ['label' => '203 Non-Authoritative Information', 'msg' => '203 Non-Authoritative Information'], | ||||
|             204 => ['label' => '204 No Content', 'msg' => '204 No Content'], | ||||
|             205 => ['label' => '205 Reset Content', 'msg' => '205 Reset Content'], | ||||
|             206 => ['label' => '206 Partial Content', 'msg' => '206 Partial Content'], | ||||
|             226 => ['label' => '226 IM Used', 'msg' => '226 IM Used'], | ||||
|             //Redirection 3xx | ||||
|             300 => ['label' => '300 Multiple Choices', 'msg' => '300 Multiple Choices'], | ||||
|             301 => ['label' => '301 Moved Permanently', 'msg' => '301 Moved Permanently'], | ||||
|             302 => ['label' => '302 Found', 'msg' => '302 Found'], | ||||
|             303 => ['label' => '303 See Other', 'msg' => '303 See Other'], | ||||
|             304 => ['label' => '304 Not Modified', 'msg' => '304 Not Modified'], | ||||
|             305 => ['label' => '305 Use Proxy', 'msg' => '305 Use Proxy'], | ||||
|             306 => ['label' => '306 (Unused)', 'msg' => '306 (Unused)'], | ||||
|             307 => ['label' => '307 Temporary Redirect', 'msg' => '307 Temporary Redirect'], | ||||
|             //Client Error 4xx | ||||
|             400 => ['label' => '400 Bad Request', 'msg' => '400 Bad Request'], | ||||
|             401 => ['label' => '401 Unauthorized', 'msg' => 'Vous n\'êtes pas autorisé à accéder à cette page'], | ||||
|             402 => ['label' => '402 Payment Required', 'msg' => '402 Payment Required'], | ||||
|             403 => ['label' => '403 Forbidden', 'msg' => '403 Forbidden'], | ||||
|             404 => ['label' => '404 Not Found', 'msg' => 'Page non trouvée'], | ||||
|             405 => ['label' => '405 Method Not Allowed', 'msg' => '405 Method Not Allowed'], | ||||
|             406 => ['label' => '406 Not Acceptable', 'msg' => '406 Not Acceptable'], | ||||
|             407 => ['label' => '407 Proxy Authentication Required', 'msg' => '407 Proxy Authentication Required'], | ||||
|             408 => ['label' => '408 Request Timeout', 'msg' => '408 Request Timeout'], | ||||
|             409 => ['label' => '409 Conflict', 'msg' => '409 Conflict'], | ||||
|             410 => ['label' => '410 Gone', 'msg' => '410 Gone'], | ||||
|             411 => ['label' => '411 Length Required', 'msg' => '411 Length Required'], | ||||
|             412 => ['label' => '412 Precondition Failed', 'msg' => '412 Precondition Failed'], | ||||
|             413 => ['label' => '413 Request Entity Too Large', 'msg' => '413 Request Entity Too Large'], | ||||
|             414 => ['label' => '414 Request-URI Too Long', 'msg' => '414 Request-URI Too Long'], | ||||
|             415 => ['label' => '415 Unsupported Media Type', 'msg' => '415 Unsupported Media Type'], | ||||
|             416 => ['label' => '416 Requested Range Not Satisfiable', 'msg' => '416 Requested Range Not Satisfiable'], | ||||
|             417 => ['label' => '417 Expectation Failed', 'msg' => '417 Expectation Failed'], | ||||
|             418 => ['label' => '418 I\'m a teapot', 'msg' => '418 I\'m a teapot'], | ||||
|             422 => ['label' => '422 Unprocessable Entity', 'msg' => '422 Unprocessable Entity'], | ||||
|             423 => ['label' => '423 Locked', 'msg' => '423 Locked'], | ||||
|             426 => ['label' => '426 Upgrade Required', 'msg' => '426 Upgrade Required'], | ||||
|             428 => ['label' => '428 Precondition Required', 'msg' => '428 Precondition Required'], | ||||
|             429 => ['label' => '429 Too Many Requests', 'msg' => '429 Too Many Requests'], | ||||
|             431 => ['label' => '431 Request Header Fields Too Large', 'msg' => '431 Request Header Fields Too Large'], | ||||
|             //Server Error 5xx | ||||
|             500 => ['label' => '500 Internal Server Error', 'msg' => 'Une erreur est survenue'], | ||||
|             501 => ['label' => '501 Not Implemented', 'msg' => '501 Not Implemented'], | ||||
|             502 => ['label' => '502 Bad Gateway', 'msg' => '502 Bad Gateway'], | ||||
|             503 => ['label' => '503 Service Unavailable', 'msg' => '503 Service Unavailable'], | ||||
|             504 => ['label' => '504 Gateway Timeout', 'msg' => '504 Gateway Timeout'], | ||||
|             505 => ['label' => '505 HTTP Version Not Supported', 'msg' => '505 HTTP Version Not Supported'], | ||||
|             506 => ['label' => '506 Variant Also Negotiates', 'msg' => '506 Variant Also Negotiates'], | ||||
|             510 => ['label' => '510 Not Extended', 'msg' => '510 Not Extended'], | ||||
|             511 => ['label' => '511 Network Authentication Required', 'msg' => '511 Network Authentication Required'] | ||||
|         ]; | ||||
| 		$tabCode = [ | ||||
| 			//Informational 1xx | ||||
| 			100 => [ 'label' => '100 Continue', 'msg' => '100 Continue' ], | ||||
| 			101 => [ 'label' => '101 Switching Protocols', 'msg' => '101 Switching Protocols' ], | ||||
| 			//Successful 2xx | ||||
| 			200 => [ 'label' => '200 OK', 'msg' => '200 OK' ], | ||||
| 			201 => [ 'label' => '201 Created', 'msg' => '201 Created' ], | ||||
| 			202 => [ 'label' => '202 Accepted', 'msg' => '202 Accepted' ], | ||||
| 			203 => [ 'label' => '203 Non-Authoritative Information', 'msg' => '203 Non-Authoritative Information' ], | ||||
| 			204 => [ 'label' => '204 No Content', 'msg' => '204 No Content' ], | ||||
| 			205 => [ 'label' => '205 Reset Content', 'msg' => '205 Reset Content' ], | ||||
| 			206 => [ 'label' => '206 Partial Content', 'msg' => '206 Partial Content' ], | ||||
| 			226 => [ 'label' => '226 IM Used', 'msg' => '226 IM Used' ], | ||||
| 			//Redirection 3xx | ||||
| 			300 => [ 'label' => '300 Multiple Choices', 'msg' => '300 Multiple Choices' ], | ||||
| 			301 => [ 'label' => '301 Moved Permanently', 'msg' => '301 Moved Permanently' ], | ||||
| 			302 => [ 'label' => '302 Found', 'msg' => '302 Found' ], | ||||
| 			303 => [ 'label' => '303 See Other', 'msg' => '303 See Other' ], | ||||
| 			304 => [ 'label' => '304 Not Modified', 'msg' => '304 Not Modified' ], | ||||
| 			305 => [ 'label' => '305 Use Proxy', 'msg' => '305 Use Proxy' ], | ||||
| 			306 => [ 'label' => '306 (Unused)', 'msg' => '306 (Unused)' ], | ||||
| 			307 => [ 'label' => '307 Temporary Redirect', 'msg' => '307 Temporary Redirect' ], | ||||
| 			//Client Error 4xx | ||||
| 			400 => [ 'label' => '400 Bad Request', 'msg' => '400 Bad Request' ], | ||||
| 			401 => [ 'label' => '401 Unauthorized', 'msg' => 'Vous n\'êtes pas autorisé à accéder à cette page' ], | ||||
| 			402 => [ 'label' => '402 Payment Required', 'msg' => '402 Payment Required' ], | ||||
| 			403 => [ 'label' => '403 Forbidden', 'msg' => '403 Forbidden' ], | ||||
| 			404 => [ 'label' => '404 Not Found', 'msg' => 'Page non trouvée' ], | ||||
| 			405 => [ 'label' => '405 Method Not Allowed', 'msg' => '405 Method Not Allowed' ], | ||||
| 			406 => [ 'label' => '406 Not Acceptable', 'msg' => '406 Not Acceptable' ], | ||||
| 			407 => [ 'label' => '407 Proxy Authentication Required', 'msg' => '407 Proxy Authentication Required' ], | ||||
| 			408 => [ 'label' => '408 Request Timeout', 'msg' => '408 Request Timeout' ], | ||||
| 			409 => [ 'label' => '409 Conflict', 'msg' => '409 Conflict' ], | ||||
| 			410 => [ 'label' => '410 Gone', 'msg' => '410 Gone' ], | ||||
| 			411 => [ 'label' => '411 Length Required', 'msg' => '411 Length Required' ], | ||||
| 			412 => [ 'label' => '412 Precondition Failed', 'msg' => '412 Precondition Failed' ], | ||||
| 			413 => [ 'label' => '413 Request Entity Too Large', 'msg' => '413 Request Entity Too Large' ], | ||||
| 			414 => [ 'label' => '414 Request-URI Too Long', 'msg' => '414 Request-URI Too Long' ], | ||||
| 			415 => [ 'label' => '415 Unsupported Media Type', 'msg' => '415 Unsupported Media Type' ], | ||||
| 			416 => [ 'label' => '416 Requested Range Not Satisfiable', 'msg' => '416 Requested Range Not Satisfiable' ], | ||||
| 			417 => [ 'label' => '417 Expectation Failed', 'msg' => '417 Expectation Failed' ], | ||||
| 			418 => [ 'label' => '418 I\'m a teapot', 'msg' => '418 I\'m a teapot' ], | ||||
| 			422 => [ 'label' => '422 Unprocessable Entity', 'msg' => '422 Unprocessable Entity' ], | ||||
| 			423 => [ 'label' => '423 Locked', 'msg' => '423 Locked' ], | ||||
| 			426 => [ 'label' => '426 Upgrade Required', 'msg' => '426 Upgrade Required' ], | ||||
| 			428 => [ 'label' => '428 Precondition Required', 'msg' => '428 Precondition Required' ], | ||||
| 			429 => [ 'label' => '429 Too Many Requests', 'msg' => '429 Too Many Requests' ], | ||||
| 			431 => [ 'label' => '431 Request Header Fields Too Large', 'msg' => '431 Request Header Fields Too Large' ], | ||||
| 			//Server Error 5xx | ||||
| 			500 => [ 'label' => '500 Internal Server Error', 'msg' => 'Une erreur est survenue' ], | ||||
| 			501 => [ 'label' => '501 Not Implemented', 'msg' => '501 Not Implemented' ], | ||||
| 			502 => [ 'label' => '502 Bad Gateway', 'msg' => '502 Bad Gateway' ], | ||||
| 			503 => [ 'label' => '503 Service Unavailable', 'msg' => '503 Service Unavailable' ], | ||||
| 			504 => [ 'label' => '504 Gateway Timeout', 'msg' => '504 Gateway Timeout' ], | ||||
| 			505 => [ 'label' => '505 HTTP Version Not Supported', 'msg' => '505 HTTP Version Not Supported' ], | ||||
| 			506 => [ 'label' => '506 Variant Also Negotiates', 'msg' => '506 Variant Also Negotiates' ], | ||||
| 			510 => [ 'label' => '510 Not Extended', 'msg' => '510 Not Extended' ], | ||||
| 			511 => [ 'label' => '511 Network Authentication Required', 'msg' => '511 Network Authentication Required' ] | ||||
| 		]; | ||||
|  | ||||
|         header('Content-Type: application/json'); | ||||
|         header($_SERVER['SERVER_PROTOCOL'].' '.$tabCode[$ErrCode]['label']); | ||||
|         echo json_encode(['status' => 'echec', 'msg' => $publicMessage, 'devMsg' => $devMessage, 'code' => $code], JSON_PRETTY_PRINT); | ||||
|         exit(); | ||||
|     } | ||||
| 		header( 'Content-Type: application/json' ); | ||||
| 		header( $_SERVER['SERVER_PROTOCOL'] . ' ' . $tabCode[ $ErrCode ]['label'] ); | ||||
| 		echo json_encode( [ | ||||
| 			'status' => 'echec', | ||||
| 			'msg'    => $publicMessage, | ||||
| 			'devMsg' => $devMessage, | ||||
| 			'code'   => $code | ||||
| 		], JSON_PRETTY_PRINT ); | ||||
| 		exit(); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| ?> | ||||
| @@ -6,126 +6,127 @@ use base\Config; | ||||
|  | ||||
| class APIRouter { | ||||
|  | ||||
|     //Les méthodes HTTP gérée par l'API | ||||
|     const HTTP_METHODS = ['GET', 'POST', 'DELETE', 'PUT']; | ||||
| 	//Les méthodes HTTP gérée par l'API | ||||
| 	const HTTP_METHODS = [ 'GET', 'POST', 'DELETE', 'PUT' ]; | ||||
|  | ||||
|     /** | ||||
|      * APIRouter constructor. | ||||
|      * @param string $file | ||||
|      * @param string $action | ||||
|      */ | ||||
|     public function __construct(string $file, string $action) { | ||||
| 	/** | ||||
| 	 * APIRouter constructor. | ||||
| 	 * | ||||
| 	 * @param string $file | ||||
| 	 * @param string $action | ||||
| 	 */ | ||||
| 	public function __construct( string $file, string $action ) { | ||||
|  | ||||
|         //On vérifie que les paramètres ne sont pas vides | ||||
|         if (empty($file) || empty($action)) { | ||||
|             new APIError(); | ||||
|         } | ||||
| 		//On vérifie que les paramètres ne sont pas vides | ||||
| 		if ( empty( $file ) || empty( $action ) ) { | ||||
| 			new APIError(); | ||||
| 		} | ||||
|  | ||||
|         //On vérifie que la classe appelée existe | ||||
|         $fileName = 'API' . ucfirst($file); | ||||
|         if (!file_exists('src/API/' . $fileName . '.php')) { | ||||
|             new APIError(404); | ||||
|         } | ||||
| 		//On vérifie que la classe appelée existe | ||||
| 		$fileName = 'API' . ucfirst( $file ); | ||||
| 		if ( ! file_exists( 'src/API/' . $fileName . '.php' ) ) { | ||||
| 			new APIError( 404 ); | ||||
| 		} | ||||
|  | ||||
|         //On instancie la classe. | ||||
|         $class = '\\' . Config::NAMESPACE . '\\API\\' . $fileName; | ||||
|         $class = new $class($action); | ||||
| 		//On instancie la classe. | ||||
| 		$class = '\\' . Config::NAMESPACE . '\\API\\' . $fileName; | ||||
| 		$class = new $class( $action ); | ||||
|  | ||||
|         //On vérifie que l'action demandé est déclarée | ||||
|         if (!array_key_exists($action, $class->getDeclaredFunctions())) { | ||||
|             new APIError(404); | ||||
|         } | ||||
| 		//On vérifie que l'action demandé est déclarée | ||||
| 		if ( ! array_key_exists( $action, $class->getDeclaredFunctions() ) ) { | ||||
| 			new APIError( 404 ); | ||||
| 		} | ||||
|  | ||||
|         //On reconstruit le nom de la fonction | ||||
|         $array = explode('-', $action); | ||||
|         foreach ($array as $key => $value) { | ||||
|             if ($key == 0) { | ||||
|                 $array[$key] = $value; | ||||
|             } else { | ||||
|                 $array[$key] = ucfirst($value); | ||||
|             } | ||||
|         } | ||||
|         $function = implode('', $array); //le nom de la fonction | ||||
| 		//On reconstruit le nom de la fonction | ||||
| 		$array = explode( '-', $action ); | ||||
| 		foreach ( $array as $key => $value ) { | ||||
| 			if ( $key == 0 ) { | ||||
| 				$array[ $key ] = $value; | ||||
| 			} else { | ||||
| 				$array[ $key ] = ucfirst( $value ); | ||||
| 			} | ||||
| 		} | ||||
| 		$function = implode( '', $array ); //le nom de la fonction | ||||
|  | ||||
|         //On vérifie que la fonction existe dans la classe | ||||
|         if (!method_exists($class, $function)) { | ||||
|             new APIError(500, 'La fonction ' . $function . ' n\'existe pas dans la classe ' . get_class($class)); | ||||
|         } | ||||
| 		//On vérifie que la fonction existe dans la classe | ||||
| 		if ( ! method_exists( $class, $function ) ) { | ||||
| 			new APIError( 500, 'La fonction ' . $function . ' n\'existe pas dans la classe ' . get_class( $class ) ); | ||||
| 		} | ||||
|  | ||||
|         //On vérifie que la méthode d'envoie est référencée | ||||
|         $method = $class->getDeclaredFunctions()[$action]['method']; | ||||
|         if (!in_array($method, self::HTTP_METHODS)) { | ||||
|             new APIError(500, 'méthode http inconnue'); | ||||
|         } | ||||
| 		//On vérifie que la méthode d'envoie est référencée | ||||
| 		$method = $class->getDeclaredFunctions()[ $action ]['method']; | ||||
| 		if ( ! in_array( $method, self::HTTP_METHODS ) ) { | ||||
| 			new APIError( 500, 'méthode http inconnue' ); | ||||
| 		} | ||||
|  | ||||
|         //On vérifie que la méthode requise et la mathode obtenue sont les même | ||||
|         if ($method != $_SERVER['REQUEST_METHOD']) { | ||||
|             new APIError(400, 'La méthode HTTP ne correspond pas à la méthode prévue'); | ||||
|         } | ||||
| 		//On vérifie que la méthode requise et la mathode obtenue sont les même | ||||
| 		if ( $method != $_SERVER['REQUEST_METHOD'] ) { | ||||
| 			new APIError( 400, 'La méthode HTTP ne correspond pas à la méthode prévue' ); | ||||
| 		} | ||||
|  | ||||
|         //On met les paramètres dans le tableau $data | ||||
|         $params = $class->getDeclaredFunctions()[$action]['params']; | ||||
|         $data = []; | ||||
|         if (!empty($params)) { | ||||
|             if ($method == 'DELETE' || $method == 'PUT') { | ||||
|                 parse_str(file_get_contents('php://input'), $data); | ||||
|             } else if($method == 'POST') { | ||||
|                 $data = $_POST; | ||||
|             } else if ($method == 'GET') { | ||||
|                 $data = $_GET; | ||||
|             } | ||||
| 		//On met les paramètres dans le tableau $data | ||||
| 		$params = $class->getDeclaredFunctions()[ $action ]['params']; | ||||
| 		$data   = []; | ||||
| 		if ( ! empty( $params ) ) { | ||||
| 			if ( $method == 'DELETE' || $method == 'PUT' ) { | ||||
| 				parse_str( file_get_contents( 'php://input' ), $data ); | ||||
| 			} else if ( $method == 'POST' ) { | ||||
| 				$data = $_POST; | ||||
| 			} else if ( $method == 'GET' ) { | ||||
| 				$data = $_GET; | ||||
| 			} | ||||
|  | ||||
|             //On boucle sur les paramètres de la doc de la fonction | ||||
|             foreach ($params as $p => $options){ | ||||
|                 if(!isset($options['required'])){ | ||||
|                     $options['required'] = false; | ||||
|                 } | ||||
|                 //Si le paramètre est obligatoire et qu'il est vide ou non fourni on lève une erreur 400 BAD REQUEST | ||||
|                 if ($options['required'] && (!array_key_exists($p, $data) || (empty($data[$p]) && $data[$p] != '0'))) { | ||||
|                     $devMsg = 'Paramètre ' . $p . ' manquant'; | ||||
|                     if (isset($options['devMsg'])) { | ||||
|                         $devMsg = $options['devMsg']; | ||||
|                     } | ||||
|                     $publicMsg = 'Des paramètres obligatoires ne sont pas envoyés ou sont vides'; | ||||
|                     if (isset($options['publicMsg'])) { | ||||
|                         $publicMsg = $options['publicMsg']; | ||||
|                     } | ||||
|                     $code = ''; | ||||
|                     if (isset($options['code'])) { | ||||
|                         $code = $options['code']; | ||||
|                     } | ||||
|                     new APIError(400, $devMsg, $publicMsg, $code); | ||||
|                 } | ||||
| 			//On boucle sur les paramètres de la doc de la fonction | ||||
| 			foreach ( $params as $p => $options ) { | ||||
| 				if ( ! isset( $options['required'] ) ) { | ||||
| 					$options['required'] = false; | ||||
| 				} | ||||
| 				//Si le paramètre est obligatoire et qu'il est vide ou non fourni on lève une erreur 400 BAD REQUEST | ||||
| 				if ( $options['required'] && ( ! array_key_exists( $p, $data ) || ( empty( $data[ $p ] ) && $data[ $p ] != '0' ) ) ) { | ||||
| 					$devMsg = 'Paramètre ' . $p . ' manquant'; | ||||
| 					if ( isset( $options['devMsg'] ) ) { | ||||
| 						$devMsg = $options['devMsg']; | ||||
| 					} | ||||
| 					$publicMsg = 'Des paramètres obligatoires ne sont pas envoyés ou sont vides'; | ||||
| 					if ( isset( $options['publicMsg'] ) ) { | ||||
| 						$publicMsg = $options['publicMsg']; | ||||
| 					} | ||||
| 					$code = ''; | ||||
| 					if ( isset( $options['code'] ) ) { | ||||
| 						$code = $options['code']; | ||||
| 					} | ||||
| 					new APIError( 400, $devMsg, $publicMsg, $code ); | ||||
| 				} | ||||
|  | ||||
|                 //On vérifie que le type donné correspond au typage requis | ||||
|                 if (isset($options['type'])) { | ||||
|                     if ($options['type'] == 'int') { | ||||
|                         if (ctype_digit($data[$p])) { | ||||
|                             $data[$p] = (int) $data[$p]; | ||||
|                         } else { | ||||
|                             new APIError(400, 'Le type donné ne correspond pas au type demandé pour le paramètre '.$p.' : string donné, '.$options['type'].' requis'); | ||||
|                         } | ||||
|                     } else if ($options['type'] == 'bool') { | ||||
|                         if ($data[$p] == 'true' || $data[$p] == '1') { | ||||
|                             $data[$p] = true; | ||||
|                         } else if ($data[$p] == 'false' || $data[$p] == '0') { | ||||
|                             $data[$p] = false; | ||||
|                         } else { | ||||
|                             new APIError(400, 'Le type donné ne correspond pas au type demandé pour le paramètre '.$p.' : string donné, '.$options['type'].' requis'); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
| 				//On vérifie que le type donné correspond au typage requis | ||||
| 				if ( isset( $options['type'] ) ) { | ||||
| 					if ( $options['type'] == 'int' ) { | ||||
| 						if ( ctype_digit( $data[ $p ] ) ) { | ||||
| 							$data[ $p ] = (int) $data[ $p ]; | ||||
| 						} else { | ||||
| 							new APIError( 400, 'Le type donné ne correspond pas au type demandé pour le paramètre ' . $p . ' : string donné, ' . $options['type'] . ' requis' ); | ||||
| 						} | ||||
| 					} else if ( $options['type'] == 'bool' ) { | ||||
| 						if ( $data[ $p ] == 'true' || $data[ $p ] == '1' ) { | ||||
| 							$data[ $p ] = true; | ||||
| 						} else if ( $data[ $p ] == 'false' || $data[ $p ] == '0' ) { | ||||
| 							$data[ $p ] = false; | ||||
| 						} else { | ||||
| 							new APIError( 400, 'Le type donné ne correspond pas au type demandé pour le paramètre ' . $p . ' : string donné, ' . $options['type'] . ' requis' ); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
|  | ||||
|                 //Si un paramètre non obligatoire n'est pas donné par l'utilisateur on lui donne la valeur par défaut d'une chaine vide | ||||
|                 if (!array_key_exists($p, $data)) { | ||||
|                     $data[$p] = ''; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 				//Si un paramètre non obligatoire n'est pas donné par l'utilisateur on lui donne la valeur par défaut d'une chaine vide | ||||
| 				if ( ! array_key_exists( $p, $data ) ) { | ||||
| 					$data[ $p ] = ''; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
|         //On appelle la fonction correspondante pour le traitement | ||||
|         $class->$function($data); | ||||
|     } | ||||
| 		//On appelle la fonction correspondante pour le traitement | ||||
| 		$class->$function( $data ); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| ?> | ||||
| @@ -4,19 +4,21 @@ namespace base; | ||||
|  | ||||
| class Autoloader { | ||||
|  | ||||
|     /** | ||||
|      * Enregistre notre autoloader | ||||
|      */ | ||||
|     static function register() { | ||||
|         spl_autoload_register(array(__CLASS__, 'autoload')); | ||||
|     } | ||||
| 	/** | ||||
| 	 * Enregistre notre autoloader | ||||
| 	 */ | ||||
| 	static function register() { | ||||
| 		spl_autoload_register( array( __CLASS__, 'autoload' ) ); | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * Inclue le fichier correspondant à notre classe | ||||
|      * @param $class string Le nom de la classe à charger | ||||
|      */ | ||||
|     static function autoload($class) { | ||||
|         if (preg_match('#^' . Config::NAMESPACE . '\\\(.+)$#', $class, $matches)) | ||||
|             require 'src/' . str_replace('\\', '/', $matches[1]) . '.php'; | ||||
|     } | ||||
| 	/** | ||||
| 	 * Inclue le fichier correspondant à notre classe | ||||
| 	 * | ||||
| 	 * @param $class string Le nom de la classe à charger | ||||
| 	 */ | ||||
| 	static function autoload( $class ) { | ||||
| 		if ( preg_match( '#^' . Config::NAMESPACE . '\\\(.+)$#', $class, $matches ) ) { | ||||
| 			require 'src/' . str_replace( '\\', '/', $matches[1] ) . '.php'; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -3,12 +3,12 @@ | ||||
| namespace base; | ||||
|  | ||||
| class Config { | ||||
|     const SITE_JS_VERSION = '1.00'; | ||||
|     const SITE_CSS_VERSION = '1.00'; | ||||
| 	const SITE_JS_VERSION = '1.00'; | ||||
| 	const SITE_CSS_VERSION = '1.00'; | ||||
|  | ||||
|     const TITLE_HEADER = 'Mon titre de site'; | ||||
|     const DESCRIPTION_HEADER = 'Ma description pour les robots'; | ||||
|     const NAMESPACE = 'base'; | ||||
| 	const TITLE_HEADER = 'Mon titre de site'; | ||||
| 	const DESCRIPTION_HEADER = 'Ma description pour les robots'; | ||||
| 	const NAMESPACE = 'base'; | ||||
|  | ||||
|     const FAVICON_PATH = '/img/favicon.png'; | ||||
| 	const FAVICON_PATH = '/img/favicon.png'; | ||||
| } | ||||
| @@ -6,35 +6,35 @@ use base\Config; | ||||
|  | ||||
| class Controller { | ||||
|  | ||||
|     private $data; | ||||
| 	private $data; | ||||
|  | ||||
|     public function __construct() { | ||||
|         $this->data=[]; | ||||
|     } | ||||
| 	public function __construct() { | ||||
| 		$this->data = []; | ||||
| 	} | ||||
|  | ||||
|     protected function view() { | ||||
|         ob_start(); | ||||
|         extract($this->data); | ||||
|         require 'src/View/' . str_replace('\\', '/', preg_replace('#^' . Config::NAMESPACE . '\\\Controller\\\#', '', get_class($this))) . '.php'; | ||||
|         ob_end_flush(); | ||||
|         exit(); | ||||
|     } | ||||
| 	protected function view() { | ||||
| 		ob_start(); | ||||
| 		extract( $this->data ); | ||||
| 		require 'src/View/' . str_replace( '\\', '/', preg_replace( '#^' . Config::NAMESPACE . '\\\Controller\\\#', '', get_class( $this ) ) ) . '.php'; | ||||
| 		ob_end_flush(); | ||||
| 		exit(); | ||||
| 	} | ||||
|  | ||||
|     protected function addData($data) { | ||||
|         $this->data += $data; | ||||
|     } | ||||
| 	protected function addData( $data ) { | ||||
| 		$this->data += $data; | ||||
| 	} | ||||
|  | ||||
|     protected function returnJson($data) { | ||||
|         header('Content-Type: application/json'); | ||||
|         echo json_encode($data); | ||||
|         exit(); | ||||
|     } | ||||
| 	protected function returnJson( $data ) { | ||||
| 		header( 'Content-Type: application/json' ); | ||||
| 		echo json_encode( $data ); | ||||
| 		exit(); | ||||
| 	} | ||||
|  | ||||
|     protected function throwError($msg, $code = '') { | ||||
|         header('Content-Type: application/json'); | ||||
|         echo json_encode(['status' => 'echec', 'msg' => $msg, 'code' => $code], JSON_PRETTY_PRINT); | ||||
|         exit(); | ||||
|     } | ||||
| 	protected function throwError( $msg, $code = '' ) { | ||||
| 		header( 'Content-Type: application/json' ); | ||||
| 		echo json_encode( [ 'status' => 'echec', 'msg' => $msg, 'code' => $code ], JSON_PRETTY_PRINT ); | ||||
| 		exit(); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| ?> | ||||
| @@ -6,67 +6,67 @@ use base\Config; | ||||
|  | ||||
| class ControllerSite { | ||||
|  | ||||
|     private $data; | ||||
|     private $head; | ||||
|     private $footer; | ||||
| 	private $data; | ||||
| 	private $head; | ||||
| 	private $footer; | ||||
|  | ||||
|     public function __construct() { | ||||
|         $this->data=[]; | ||||
|         $this->head=[]; | ||||
|         $this->footer=[]; | ||||
|     } | ||||
| 	public function __construct() { | ||||
| 		$this->data   = []; | ||||
| 		$this->head   = []; | ||||
| 		$this->footer = []; | ||||
| 	} | ||||
|  | ||||
|  | ||||
|     protected function view($header = true, $footer = true) { | ||||
|         ob_start(); | ||||
|         extract($this->data); | ||||
| 	protected function view( $header = true, $footer = true ) { | ||||
| 		ob_start(); | ||||
| 		extract( $this->data ); | ||||
|  | ||||
|         if (empty($this->head['title'])) { | ||||
|             $this->head['title'] = Config::TITLE_HEADER; | ||||
|         } | ||||
|         if (empty($this->head['description'])) { | ||||
|             $this->head['description'] = Config::DESCRIPTION_HEADER; | ||||
|         } | ||||
|         if ($header) { | ||||
|             require 'src/View/Site/tpl/head.php'; | ||||
|         } | ||||
| 		if ( empty( $this->head['title'] ) ) { | ||||
| 			$this->head['title'] = Config::TITLE_HEADER; | ||||
| 		} | ||||
| 		if ( empty( $this->head['description'] ) ) { | ||||
| 			$this->head['description'] = Config::DESCRIPTION_HEADER; | ||||
| 		} | ||||
| 		if ( $header ) { | ||||
| 			require 'src/View/Site/tpl/head.php'; | ||||
| 		} | ||||
|  | ||||
|         require 'src/View/'.str_replace('\\', '/', preg_replace('#^' . Config::NAMESPACE . '\\\Controller\\\#', '', get_class($this))) . '.php'; | ||||
| 		require 'src/View/' . str_replace( '\\', '/', preg_replace( '#^' . Config::NAMESPACE . '\\\Controller\\\#', '', get_class( $this ) ) ) . '.php'; | ||||
|  | ||||
|         if ($footer) { | ||||
|             require 'src/View/Site/tpl/footer.php'; | ||||
|         } | ||||
| 		if ( $footer ) { | ||||
| 			require 'src/View/Site/tpl/footer.php'; | ||||
| 		} | ||||
|  | ||||
|         ob_end_flush(); | ||||
|         exit(); | ||||
|     } | ||||
| 		ob_end_flush(); | ||||
| 		exit(); | ||||
| 	} | ||||
|  | ||||
|     protected function addHead($head) { | ||||
|         $this->head += $head; | ||||
|     } | ||||
| 	protected function addHead( $head ) { | ||||
| 		$this->head += $head; | ||||
| 	} | ||||
|  | ||||
|     protected function addData($data) { | ||||
|         $this->data += $data; | ||||
|     } | ||||
| 	protected function addData( $data ) { | ||||
| 		$this->data += $data; | ||||
| 	} | ||||
|  | ||||
|     protected function addFooter($footer) { | ||||
|         $this->footer += $footer; | ||||
|     } | ||||
| 	protected function addFooter( $footer ) { | ||||
| 		$this->footer += $footer; | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * @param $data | ||||
|      */ | ||||
|     protected function returnJson($data) { | ||||
|         header('Content-Type: application/json'); | ||||
|         echo json_encode($data); | ||||
|         exit(); | ||||
|     } | ||||
| 	/** | ||||
| 	 * @param $data | ||||
| 	 */ | ||||
| 	protected function returnJson( $data ) { | ||||
| 		header( 'Content-Type: application/json' ); | ||||
| 		echo json_encode( $data ); | ||||
| 		exit(); | ||||
| 	} | ||||
|  | ||||
|     protected function throwError($msg, $code = '') { | ||||
|         header('Content-Type: application/json'); | ||||
|         echo json_encode(['status' => 'echec', 'msg' => $msg, 'code' => $code], JSON_PRETTY_PRINT); | ||||
|         exit(); | ||||
|     } | ||||
| 	protected function throwError( $msg, $code = '' ) { | ||||
| 		header( 'Content-Type: application/json' ); | ||||
| 		echo json_encode( [ 'status' => 'echec', 'msg' => $msg, 'code' => $code ], JSON_PRETTY_PRINT ); | ||||
| 		exit(); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| ?> | ||||
| @@ -4,95 +4,96 @@ namespace base\Controller; | ||||
|  | ||||
| class Error extends Controller { | ||||
|  | ||||
|     /** | ||||
|      * Error constructor. | ||||
|      * @param int $ErrCode | ||||
|      * @param string $message | ||||
|      */ | ||||
|     public function __construct($ErrCode = 500, $message = '') { | ||||
| 	/** | ||||
| 	 * Error constructor. | ||||
| 	 * | ||||
| 	 * @param int $ErrCode | ||||
| 	 * @param string $message | ||||
| 	 */ | ||||
| 	public function __construct( $ErrCode = 500, $message = '' ) { | ||||
|  | ||||
|         parent::__construct(); | ||||
| 		parent::__construct(); | ||||
|  | ||||
|         $tabCode = [ | ||||
|             //Informational 1xx | ||||
|             100 => ['label' => '100 Continue', 'msg' => '100 Continue'], | ||||
|             101 => ['label' => '101 Switching Protocols', 'msg' => '101 Switching Protocols'], | ||||
|             //Successful 2xx | ||||
|             200 => ['label' => '200 OK', 'msg' => '200 OK'], | ||||
|             201 => ['label' => '201 Created', 'msg' => '201 Created'], | ||||
|             202 => ['label' => '202 Accepted', 'msg' => '202 Accepted'], | ||||
|             203 => ['label' => '203 Non-Authoritative Information', 'msg' => '203 Non-Authoritative Information'], | ||||
|             204 => ['label' => '204 No Content', 'msg' => '204 No Content'], | ||||
|             205 => ['label' => '205 Reset Content', 'msg' => '205 Reset Content'], | ||||
|             206 => ['label' => '206 Partial Content', 'msg' => '206 Partial Content'], | ||||
|             226 => ['label' => '226 IM Used', 'msg' => '226 IM Used'], | ||||
|             //Redirection 3xx | ||||
|             300 => ['label' => '300 Multiple Choices', 'msg' => '300 Multiple Choices'], | ||||
|             301 => ['label' => '301 Moved Permanently', 'msg' => '301 Moved Permanently'], | ||||
|             302 => ['label' => '302 Found', 'msg' => '302 Found'], | ||||
|             303 => ['label' => '303 See Other', 'msg' => '303 See Other'], | ||||
|             304 => ['label' => '304 Not Modified', 'msg' => '304 Not Modified'], | ||||
|             305 => ['label' => '305 Use Proxy', 'msg' => '305 Use Proxy'], | ||||
|             306 => ['label' => '306 (Unused)', 'msg' => '306 (Unused)'], | ||||
|             307 => ['label' => '307 Temporary Redirect', 'msg' => '307 Temporary Redirect'], | ||||
|             //Client Error 4xx | ||||
|             400 => ['label' => '400 Bad Request', 'msg' => '400 Bad Request'], | ||||
|             401 => ['label' => '401 Unauthorized', 'msg' => 'Vous n\'êtes pas autorisé à accéder à cette page'], | ||||
|             402 => ['label' => '402 Payment Required', 'msg' => '402 Payment Required'], | ||||
|             403 => ['label' => '403 Forbidden', 'msg' => '403 Forbidden'], | ||||
|             404 => ['label' => '404 Not Found', 'msg' => 'Page non trouvée'], | ||||
|             405 => ['label' => '405 Method Not Allowed', 'msg' => '405 Method Not Allowed'], | ||||
|             406 => ['label' => '406 Not Acceptable', 'msg' => '406 Not Acceptable'], | ||||
|             407 => ['label' => '407 Proxy Authentication Required', 'msg' => '407 Proxy Authentication Required'], | ||||
|             408 => ['label' => '408 Request Timeout', 'msg' => '408 Request Timeout'], | ||||
|             409 => ['label' => '409 Conflict', 'msg' => '409 Conflict'], | ||||
|             410 => ['label' => '410 Gone', 'msg' => '410 Gone'], | ||||
|             411 => ['label' => '411 Length Required', 'msg' => '411 Length Required'], | ||||
|             412 => ['label' => '412 Precondition Failed', 'msg' => '412 Precondition Failed'], | ||||
|             413 => ['label' => '413 Request Entity Too Large', 'msg' => '413 Request Entity Too Large'], | ||||
|             414 => ['label' => '414 Request-URI Too Long', 'msg' => '414 Request-URI Too Long'], | ||||
|             415 => ['label' => '415 Unsupported Media Type', 'msg' => '415 Unsupported Media Type'], | ||||
|             416 => ['label' => '416 Requested Range Not Satisfiable', 'msg' => '416 Requested Range Not Satisfiable'], | ||||
|             417 => ['label' => '417 Expectation Failed', 'msg' => '417 Expectation Failed'], | ||||
|             418 => ['label' => '418 I\'m a teapot', 'msg' => '418 I\'m a teapot'], | ||||
|             422 => ['label' => '422 Unprocessable Entity', 'msg' => '422 Unprocessable Entity'], | ||||
|             423 => ['label' => '423 Locked', 'msg' => '423 Locked'], | ||||
|             426 => ['label' => '426 Upgrade Required', 'msg' => '426 Upgrade Required'], | ||||
|             428 => ['label' => '428 Precondition Required', 'msg' => '428 Precondition Required'], | ||||
|             429 => ['label' => '429 Too Many Requests', 'msg' => '429 Too Many Requests'], | ||||
|             431 => ['label' => '431 Request Header Fields Too Large', 'msg' => '431 Request Header Fields Too Large'], | ||||
|             //Server Error 5xx | ||||
|             500 => ['label' => '500 Internal Server Error', 'msg' => 'Une erreur est survenue'], | ||||
|             501 => ['label' => '501 Not Implemented', 'msg' => '501 Not Implemented'], | ||||
|             502 => ['label' => '502 Bad Gateway', 'msg' => '502 Bad Gateway'], | ||||
|             503 => ['label' => '503 Service Unavailable', 'msg' => '503 Service Unavailable'], | ||||
|             504 => ['label' => '504 Gateway Timeout', 'msg' => '504 Gateway Timeout'], | ||||
|             505 => ['label' => '505 HTTP Version Not Supported', 'msg' => '505 HTTP Version Not Supported'], | ||||
|             506 => ['label' => '506 Variant Also Negotiates', 'msg' => '506 Variant Also Negotiates'], | ||||
|             510 => ['label' => '510 Not Extended', 'msg' => '510 Not Extended'], | ||||
|             511 => ['label' => '511 Network Authentication Required', 'msg' => '511 Network Authentication Required'] | ||||
|         ]; | ||||
| 		$tabCode = [ | ||||
| 			//Informational 1xx | ||||
| 			100 => [ 'label' => '100 Continue', 'msg' => '100 Continue' ], | ||||
| 			101 => [ 'label' => '101 Switching Protocols', 'msg' => '101 Switching Protocols' ], | ||||
| 			//Successful 2xx | ||||
| 			200 => [ 'label' => '200 OK', 'msg' => '200 OK' ], | ||||
| 			201 => [ 'label' => '201 Created', 'msg' => '201 Created' ], | ||||
| 			202 => [ 'label' => '202 Accepted', 'msg' => '202 Accepted' ], | ||||
| 			203 => [ 'label' => '203 Non-Authoritative Information', 'msg' => '203 Non-Authoritative Information' ], | ||||
| 			204 => [ 'label' => '204 No Content', 'msg' => '204 No Content' ], | ||||
| 			205 => [ 'label' => '205 Reset Content', 'msg' => '205 Reset Content' ], | ||||
| 			206 => [ 'label' => '206 Partial Content', 'msg' => '206 Partial Content' ], | ||||
| 			226 => [ 'label' => '226 IM Used', 'msg' => '226 IM Used' ], | ||||
| 			//Redirection 3xx | ||||
| 			300 => [ 'label' => '300 Multiple Choices', 'msg' => '300 Multiple Choices' ], | ||||
| 			301 => [ 'label' => '301 Moved Permanently', 'msg' => '301 Moved Permanently' ], | ||||
| 			302 => [ 'label' => '302 Found', 'msg' => '302 Found' ], | ||||
| 			303 => [ 'label' => '303 See Other', 'msg' => '303 See Other' ], | ||||
| 			304 => [ 'label' => '304 Not Modified', 'msg' => '304 Not Modified' ], | ||||
| 			305 => [ 'label' => '305 Use Proxy', 'msg' => '305 Use Proxy' ], | ||||
| 			306 => [ 'label' => '306 (Unused)', 'msg' => '306 (Unused)' ], | ||||
| 			307 => [ 'label' => '307 Temporary Redirect', 'msg' => '307 Temporary Redirect' ], | ||||
| 			//Client Error 4xx | ||||
| 			400 => [ 'label' => '400 Bad Request', 'msg' => '400 Bad Request' ], | ||||
| 			401 => [ 'label' => '401 Unauthorized', 'msg' => 'Vous n\'êtes pas autorisé à accéder à cette page' ], | ||||
| 			402 => [ 'label' => '402 Payment Required', 'msg' => '402 Payment Required' ], | ||||
| 			403 => [ 'label' => '403 Forbidden', 'msg' => '403 Forbidden' ], | ||||
| 			404 => [ 'label' => '404 Not Found', 'msg' => 'Page non trouvée' ], | ||||
| 			405 => [ 'label' => '405 Method Not Allowed', 'msg' => '405 Method Not Allowed' ], | ||||
| 			406 => [ 'label' => '406 Not Acceptable', 'msg' => '406 Not Acceptable' ], | ||||
| 			407 => [ 'label' => '407 Proxy Authentication Required', 'msg' => '407 Proxy Authentication Required' ], | ||||
| 			408 => [ 'label' => '408 Request Timeout', 'msg' => '408 Request Timeout' ], | ||||
| 			409 => [ 'label' => '409 Conflict', 'msg' => '409 Conflict' ], | ||||
| 			410 => [ 'label' => '410 Gone', 'msg' => '410 Gone' ], | ||||
| 			411 => [ 'label' => '411 Length Required', 'msg' => '411 Length Required' ], | ||||
| 			412 => [ 'label' => '412 Precondition Failed', 'msg' => '412 Precondition Failed' ], | ||||
| 			413 => [ 'label' => '413 Request Entity Too Large', 'msg' => '413 Request Entity Too Large' ], | ||||
| 			414 => [ 'label' => '414 Request-URI Too Long', 'msg' => '414 Request-URI Too Long' ], | ||||
| 			415 => [ 'label' => '415 Unsupported Media Type', 'msg' => '415 Unsupported Media Type' ], | ||||
| 			416 => [ 'label' => '416 Requested Range Not Satisfiable', 'msg' => '416 Requested Range Not Satisfiable' ], | ||||
| 			417 => [ 'label' => '417 Expectation Failed', 'msg' => '417 Expectation Failed' ], | ||||
| 			418 => [ 'label' => '418 I\'m a teapot', 'msg' => '418 I\'m a teapot' ], | ||||
| 			422 => [ 'label' => '422 Unprocessable Entity', 'msg' => '422 Unprocessable Entity' ], | ||||
| 			423 => [ 'label' => '423 Locked', 'msg' => '423 Locked' ], | ||||
| 			426 => [ 'label' => '426 Upgrade Required', 'msg' => '426 Upgrade Required' ], | ||||
| 			428 => [ 'label' => '428 Precondition Required', 'msg' => '428 Precondition Required' ], | ||||
| 			429 => [ 'label' => '429 Too Many Requests', 'msg' => '429 Too Many Requests' ], | ||||
| 			431 => [ 'label' => '431 Request Header Fields Too Large', 'msg' => '431 Request Header Fields Too Large' ], | ||||
| 			//Server Error 5xx | ||||
| 			500 => [ 'label' => '500 Internal Server Error', 'msg' => 'Une erreur est survenue' ], | ||||
| 			501 => [ 'label' => '501 Not Implemented', 'msg' => '501 Not Implemented' ], | ||||
| 			502 => [ 'label' => '502 Bad Gateway', 'msg' => '502 Bad Gateway' ], | ||||
| 			503 => [ 'label' => '503 Service Unavailable', 'msg' => '503 Service Unavailable' ], | ||||
| 			504 => [ 'label' => '504 Gateway Timeout', 'msg' => '504 Gateway Timeout' ], | ||||
| 			505 => [ 'label' => '505 HTTP Version Not Supported', 'msg' => '505 HTTP Version Not Supported' ], | ||||
| 			506 => [ 'label' => '506 Variant Also Negotiates', 'msg' => '506 Variant Also Negotiates' ], | ||||
| 			510 => [ 'label' => '510 Not Extended', 'msg' => '510 Not Extended' ], | ||||
| 			511 => [ 'label' => '511 Network Authentication Required', 'msg' => '511 Network Authentication Required' ] | ||||
| 		]; | ||||
|  | ||||
|         if (isset($tabCode[$ErrCode])) { | ||||
|             header($_SERVER['SERVER_PROTOCOL'] . ' ' . $tabCode[$ErrCode]['label']); | ||||
|             if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { | ||||
|                 $this->throwError($tabCode[$ErrCode]['msg'], 'Erreur_' . $ErrCode); | ||||
|             } | ||||
|             $erreur = $tabCode[$ErrCode]['msg']; | ||||
|             $this->addData(['erreur' => $erreur]); | ||||
|         } else { | ||||
|             header($_SERVER['SERVER_PROTOCOL'] . ' ' . $tabCode[500]['label']); | ||||
|             if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { | ||||
|                 $this->throwError($tabCode[500]['msg'], 'Erreur_500'); | ||||
|             } | ||||
|             $erreur = $tabCode[500]['msg']; | ||||
|             $this->addData(['erreur' => $erreur]); | ||||
|         } | ||||
| 		if ( isset( $tabCode[ $ErrCode ] ) ) { | ||||
| 			header( $_SERVER['SERVER_PROTOCOL'] . ' ' . $tabCode[ $ErrCode ]['label'] ); | ||||
| 			if ( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) == 'xmlhttprequest' ) { | ||||
| 				$this->throwError( $tabCode[ $ErrCode ]['msg'], 'Erreur_' . $ErrCode ); | ||||
| 			} | ||||
| 			$erreur = $tabCode[ $ErrCode ]['msg']; | ||||
| 			$this->addData( [ 'erreur' => $erreur ] ); | ||||
| 		} else { | ||||
| 			header( $_SERVER['SERVER_PROTOCOL'] . ' ' . $tabCode[500]['label'] ); | ||||
| 			if ( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) == 'xmlhttprequest' ) { | ||||
| 				$this->throwError( $tabCode[500]['msg'], 'Erreur_500' ); | ||||
| 			} | ||||
| 			$erreur = $tabCode[500]['msg']; | ||||
| 			$this->addData( [ 'erreur' => $erreur ] ); | ||||
| 		} | ||||
|  | ||||
|         if (!empty($message)) { | ||||
|             $this->addData(['message' => $message]); | ||||
|         } | ||||
| 		if ( ! empty( $message ) ) { | ||||
| 			$this->addData( [ 'message' => $message ] ); | ||||
| 		} | ||||
|  | ||||
|         $this->view(); | ||||
|     } | ||||
| 		$this->view(); | ||||
| 	} | ||||
| } | ||||
| @@ -6,22 +6,22 @@ use base\Controller\ControllerSite; | ||||
|  | ||||
| class Index extends ControllerSite { | ||||
|  | ||||
|     /** | ||||
|      * Index constructor. | ||||
|      */ | ||||
|     public function __construct() { | ||||
|         parent::__construct(); | ||||
| 	/** | ||||
| 	 * Index constructor. | ||||
| 	 */ | ||||
| 	public function __construct() { | ||||
| 		parent::__construct(); | ||||
|  | ||||
|         $this->addHead([ | ||||
|         ]); | ||||
| 		$this->addHead( [ | ||||
| 		] ); | ||||
|  | ||||
|         $this->addFooter([ | ||||
| 		$this->addFooter( [ | ||||
|  | ||||
|         ]); | ||||
| 		] ); | ||||
|  | ||||
|         $this->addData([]); | ||||
|         $this->view(); | ||||
|     } | ||||
| 		$this->addData( [] ); | ||||
| 		$this->view(); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| ?> | ||||
| @@ -6,100 +6,101 @@ use base\Controller\ControllerSite; | ||||
|  | ||||
| class SiteError extends ControllerSite { | ||||
|  | ||||
|     /** | ||||
|      * SiteError constructor. | ||||
|      * @param int $ErrCode | ||||
|      * @param string $message | ||||
|      */ | ||||
|     public function __construct($ErrCode = 500, $message = '') { | ||||
|         parent::__construct(); | ||||
| 	/** | ||||
| 	 * SiteError constructor. | ||||
| 	 * | ||||
| 	 * @param int $ErrCode | ||||
| 	 * @param string $message | ||||
| 	 */ | ||||
| 	public function __construct( $ErrCode = 500, $message = '' ) { | ||||
| 		parent::__construct(); | ||||
|  | ||||
|         $tabCode = [ | ||||
|             //Informational 1xx | ||||
|             100 => ['label' => '100 Continue', 'msg' => '100 Continue'], | ||||
|             101 => ['label' => '101 Switching Protocols', 'msg' => '101 Switching Protocols'], | ||||
|             //Successful 2xx | ||||
|             200 => ['label' => '200 OK', 'msg' => '200 OK'], | ||||
|             201 => ['label' => '201 Created', 'msg' => '201 Created'], | ||||
|             202 => ['label' => '202 Accepted', 'msg' => '202 Accepted'], | ||||
|             203 => ['label' => '203 Non-Authoritative Information', 'msg' => '203 Non-Authoritative Information'], | ||||
|             204 => ['label' => '204 No Content', 'msg' => '204 No Content'], | ||||
|             205 => ['label' => '205 Reset Content', 'msg' => '205 Reset Content'], | ||||
|             206 => ['label' => '206 Partial Content', 'msg' => '206 Partial Content'], | ||||
|             226 => ['label' => '226 IM Used', 'msg' => '226 IM Used'], | ||||
|             //Redirection 3xx | ||||
|             300 => ['label' => '300 Multiple Choices', 'msg' => '300 Multiple Choices'], | ||||
|             301 => ['label' => '301 Moved Permanently', 'msg' => '301 Moved Permanently'], | ||||
|             302 => ['label' => '302 Found', 'msg' => '302 Found'], | ||||
|             303 => ['label' => '303 See Other', 'msg' => '303 See Other'], | ||||
|             304 => ['label' => '304 Not Modified', 'msg' => '304 Not Modified'], | ||||
|             305 => ['label' => '305 Use Proxy', 'msg' => '305 Use Proxy'], | ||||
|             306 => ['label' => '306 (Unused)', 'msg' => '306 (Unused)'], | ||||
|             307 => ['label' => '307 Temporary Redirect', 'msg' => '307 Temporary Redirect'], | ||||
|             //Client Error 4xx | ||||
|             400 => ['label' => '400 Bad Request', 'msg' => '400 Bad Request'], | ||||
|             401 => ['label' => '401 Unauthorized', 'msg' => '401 Unauthorized'], | ||||
|             402 => ['label' => '402 Payment Required', 'msg' => '402 Payment Required'], | ||||
|             403 => ['label' => '403 Forbidden', 'msg' => '403 Forbidden'], | ||||
|             404 => ['label' => '404 Not Found', 'msg' => 'Page non trouvée'], | ||||
|             405 => ['label' => '405 Method Not Allowed', 'msg' => '405 Method Not Allowed'], | ||||
|             406 => ['label' => '406 Not Acceptable', 'msg' => '406 Not Acceptable'], | ||||
|             407 => ['label' => '407 Proxy Authentication Required', 'msg' => '407 Proxy Authentication Required'], | ||||
|             408 => ['label' => '408 Request Timeout', 'msg' => '408 Request Timeout'], | ||||
|             409 => ['label' => '409 Conflict', 'msg' => '409 Conflict'], | ||||
|             410 => ['label' => '410 Gone', 'msg' => 'Cet artisan n\'est plus plus référencé sur Eldotravo'], | ||||
|             411 => ['label' => '411 Length Required', 'msg' => '411 Length Required'], | ||||
|             412 => ['label' => '412 Precondition Failed', 'msg' => '412 Precondition Failed'], | ||||
|             413 => ['label' => '413 Request Entity Too Large', 'msg' => '413 Request Entity Too Large'], | ||||
|             414 => ['label' => '414 Request-URI Too Long', 'msg' => '414 Request-URI Too Long'], | ||||
|             415 => ['label' => '415 Unsupported Media Type', 'msg' => '415 Unsupported Media Type'], | ||||
|             416 => ['label' => '416 Requested Range Not Satisfiable', 'msg' => '416 Requested Range Not Satisfiable'], | ||||
|             417 => ['label' => '417 Expectation Failed', 'msg' => '417 Expectation Failed'], | ||||
|             418 => ['label' => '418 I\'m a teapot', 'msg' => '418 I\'m a teapot'], | ||||
|             422 => ['label' => '422 Unprocessable Entity', 'msg' => '422 Unprocessable Entity'], | ||||
|             423 => ['label' => '423 Locked', 'msg' => '423 Locked'], | ||||
|             426 => ['label' => '426 Upgrade Required', 'msg' => '426 Upgrade Required'], | ||||
|             428 => ['label' => '428 Precondition Required', 'msg' => '428 Precondition Required'], | ||||
|             429 => ['label' => '429 Too Many Requests', 'msg' => '429 Too Many Requests'], | ||||
|             431 => ['label' => '431 Request Header Fields Too Large', 'msg' => '431 Request Header Fields Too Large'], | ||||
|             //Server Error 5xx | ||||
|             500 => ['label' => '500 Internal Server Error', 'msg' => 'Une erreur est survenue'], | ||||
|             501 => ['label' => '501 Not Implemented', 'msg' => '501 Not Implemented'], | ||||
|             502 => ['label' => '502 Bad Gateway', 'msg' => '502 Bad Gateway'], | ||||
|             503 => ['label' => '503 Service Unavailable', 'msg' => '503 Service Unavailable'], | ||||
|             504 => ['label' => '504 Gateway Timeout', 'msg' => '504 Gateway Timeout'], | ||||
|             505 => ['label' => '505 HTTP Version Not Supported', 'msg' => '505 HTTP Version Not Supported'], | ||||
|             506 => ['label' => '506 Variant Also Negotiates', 'msg' => '506 Variant Also Negotiates'], | ||||
|             510 => ['label' => '510 Not Extended', 'msg' => '510 Not Extended'], | ||||
|             511 => ['label' => '511 Network Authentication Required', 'msg' => '511 Network Authentication Required'] | ||||
|         ]; | ||||
| 		$tabCode = [ | ||||
| 			//Informational 1xx | ||||
| 			100 => [ 'label' => '100 Continue', 'msg' => '100 Continue' ], | ||||
| 			101 => [ 'label' => '101 Switching Protocols', 'msg' => '101 Switching Protocols' ], | ||||
| 			//Successful 2xx | ||||
| 			200 => [ 'label' => '200 OK', 'msg' => '200 OK' ], | ||||
| 			201 => [ 'label' => '201 Created', 'msg' => '201 Created' ], | ||||
| 			202 => [ 'label' => '202 Accepted', 'msg' => '202 Accepted' ], | ||||
| 			203 => [ 'label' => '203 Non-Authoritative Information', 'msg' => '203 Non-Authoritative Information' ], | ||||
| 			204 => [ 'label' => '204 No Content', 'msg' => '204 No Content' ], | ||||
| 			205 => [ 'label' => '205 Reset Content', 'msg' => '205 Reset Content' ], | ||||
| 			206 => [ 'label' => '206 Partial Content', 'msg' => '206 Partial Content' ], | ||||
| 			226 => [ 'label' => '226 IM Used', 'msg' => '226 IM Used' ], | ||||
| 			//Redirection 3xx | ||||
| 			300 => [ 'label' => '300 Multiple Choices', 'msg' => '300 Multiple Choices' ], | ||||
| 			301 => [ 'label' => '301 Moved Permanently', 'msg' => '301 Moved Permanently' ], | ||||
| 			302 => [ 'label' => '302 Found', 'msg' => '302 Found' ], | ||||
| 			303 => [ 'label' => '303 See Other', 'msg' => '303 See Other' ], | ||||
| 			304 => [ 'label' => '304 Not Modified', 'msg' => '304 Not Modified' ], | ||||
| 			305 => [ 'label' => '305 Use Proxy', 'msg' => '305 Use Proxy' ], | ||||
| 			306 => [ 'label' => '306 (Unused)', 'msg' => '306 (Unused)' ], | ||||
| 			307 => [ 'label' => '307 Temporary Redirect', 'msg' => '307 Temporary Redirect' ], | ||||
| 			//Client Error 4xx | ||||
| 			400 => [ 'label' => '400 Bad Request', 'msg' => '400 Bad Request' ], | ||||
| 			401 => [ 'label' => '401 Unauthorized', 'msg' => '401 Unauthorized' ], | ||||
| 			402 => [ 'label' => '402 Payment Required', 'msg' => '402 Payment Required' ], | ||||
| 			403 => [ 'label' => '403 Forbidden', 'msg' => '403 Forbidden' ], | ||||
| 			404 => [ 'label' => '404 Not Found', 'msg' => 'Page non trouvée' ], | ||||
| 			405 => [ 'label' => '405 Method Not Allowed', 'msg' => '405 Method Not Allowed' ], | ||||
| 			406 => [ 'label' => '406 Not Acceptable', 'msg' => '406 Not Acceptable' ], | ||||
| 			407 => [ 'label' => '407 Proxy Authentication Required', 'msg' => '407 Proxy Authentication Required' ], | ||||
| 			408 => [ 'label' => '408 Request Timeout', 'msg' => '408 Request Timeout' ], | ||||
| 			409 => [ 'label' => '409 Conflict', 'msg' => '409 Conflict' ], | ||||
| 			410 => [ 'label' => '410 Gone', 'msg' => 'Cet artisan n\'est plus plus référencé sur Eldotravo' ], | ||||
| 			411 => [ 'label' => '411 Length Required', 'msg' => '411 Length Required' ], | ||||
| 			412 => [ 'label' => '412 Precondition Failed', 'msg' => '412 Precondition Failed' ], | ||||
| 			413 => [ 'label' => '413 Request Entity Too Large', 'msg' => '413 Request Entity Too Large' ], | ||||
| 			414 => [ 'label' => '414 Request-URI Too Long', 'msg' => '414 Request-URI Too Long' ], | ||||
| 			415 => [ 'label' => '415 Unsupported Media Type', 'msg' => '415 Unsupported Media Type' ], | ||||
| 			416 => [ 'label' => '416 Requested Range Not Satisfiable', 'msg' => '416 Requested Range Not Satisfiable' ], | ||||
| 			417 => [ 'label' => '417 Expectation Failed', 'msg' => '417 Expectation Failed' ], | ||||
| 			418 => [ 'label' => '418 I\'m a teapot', 'msg' => '418 I\'m a teapot' ], | ||||
| 			422 => [ 'label' => '422 Unprocessable Entity', 'msg' => '422 Unprocessable Entity' ], | ||||
| 			423 => [ 'label' => '423 Locked', 'msg' => '423 Locked' ], | ||||
| 			426 => [ 'label' => '426 Upgrade Required', 'msg' => '426 Upgrade Required' ], | ||||
| 			428 => [ 'label' => '428 Precondition Required', 'msg' => '428 Precondition Required' ], | ||||
| 			429 => [ 'label' => '429 Too Many Requests', 'msg' => '429 Too Many Requests' ], | ||||
| 			431 => [ 'label' => '431 Request Header Fields Too Large', 'msg' => '431 Request Header Fields Too Large' ], | ||||
| 			//Server Error 5xx | ||||
| 			500 => [ 'label' => '500 Internal Server Error', 'msg' => 'Une erreur est survenue' ], | ||||
| 			501 => [ 'label' => '501 Not Implemented', 'msg' => '501 Not Implemented' ], | ||||
| 			502 => [ 'label' => '502 Bad Gateway', 'msg' => '502 Bad Gateway' ], | ||||
| 			503 => [ 'label' => '503 Service Unavailable', 'msg' => '503 Service Unavailable' ], | ||||
| 			504 => [ 'label' => '504 Gateway Timeout', 'msg' => '504 Gateway Timeout' ], | ||||
| 			505 => [ 'label' => '505 HTTP Version Not Supported', 'msg' => '505 HTTP Version Not Supported' ], | ||||
| 			506 => [ 'label' => '506 Variant Also Negotiates', 'msg' => '506 Variant Also Negotiates' ], | ||||
| 			510 => [ 'label' => '510 Not Extended', 'msg' => '510 Not Extended' ], | ||||
| 			511 => [ 'label' => '511 Network Authentication Required', 'msg' => '511 Network Authentication Required' ] | ||||
| 		]; | ||||
|  | ||||
|         if (isset($tabCode[$ErrCode])) { | ||||
|             header($_SERVER['SERVER_PROTOCOL'].' '.$tabCode[$ErrCode]['label']); | ||||
|             if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { | ||||
|                 $this->throwError('Erreur '.$tabCode[$ErrCode]['label'], 'Erreur_'.$ErrCode); | ||||
|             } | ||||
|             $erreur = $tabCode[$ErrCode]['msg']; | ||||
|             $this->addData(['erreur' => $erreur]); | ||||
|         } else { | ||||
|             header($_SERVER['SERVER_PROTOCOL'].' '.$tabCode[500]['label']); | ||||
|             if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { | ||||
|                 $this->throwError('Erreur '.$tabCode[500]['label'], 'Erreur_500'); | ||||
|             } | ||||
|             $erreur = $tabCode[500]['msg']; | ||||
|             $this->addData(['erreur' => $erreur]); | ||||
|         } | ||||
| 		if ( isset( $tabCode[ $ErrCode ] ) ) { | ||||
| 			header( $_SERVER['SERVER_PROTOCOL'] . ' ' . $tabCode[ $ErrCode ]['label'] ); | ||||
| 			if ( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) == 'xmlhttprequest' ) { | ||||
| 				$this->throwError( 'Erreur ' . $tabCode[ $ErrCode ]['label'], 'Erreur_' . $ErrCode ); | ||||
| 			} | ||||
| 			$erreur = $tabCode[ $ErrCode ]['msg']; | ||||
| 			$this->addData( [ 'erreur' => $erreur ] ); | ||||
| 		} else { | ||||
| 			header( $_SERVER['SERVER_PROTOCOL'] . ' ' . $tabCode[500]['label'] ); | ||||
| 			if ( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) == 'xmlhttprequest' ) { | ||||
| 				$this->throwError( 'Erreur ' . $tabCode[500]['label'], 'Erreur_500' ); | ||||
| 			} | ||||
| 			$erreur = $tabCode[500]['msg']; | ||||
| 			$this->addData( [ 'erreur' => $erreur ] ); | ||||
| 		} | ||||
|  | ||||
|         if (!empty($message)) { | ||||
|             $this->addData(['message' => $message]); | ||||
|         } | ||||
| 		if ( ! empty( $message ) ) { | ||||
| 			$this->addData( [ 'message' => $message ] ); | ||||
| 		} | ||||
|  | ||||
|         $this->addHead([ | ||||
|             'title' => 'Un erreur est survenue', | ||||
|             'description' => 'Oops une erreur est survenue', | ||||
|             'robotNoIndex' => true | ||||
|         ]); | ||||
| 		$this->addHead( [ | ||||
| 			'title'        => 'Un erreur est survenue', | ||||
| 			'description'  => 'Oops une erreur est survenue', | ||||
| 			'robotNoIndex' => true | ||||
| 		] ); | ||||
|  | ||||
|         $this->view(); | ||||
|     } | ||||
| 		$this->view(); | ||||
| 	} | ||||
| } | ||||
| @@ -4,20 +4,21 @@ namespace base\Controller\Site; | ||||
|  | ||||
| class SiteRouter { | ||||
|  | ||||
|     /** | ||||
|      * SiteRouter constructor. | ||||
|      * @param $pages | ||||
|      */ | ||||
|     public function __construct($pages) { | ||||
| 	/** | ||||
| 	 * SiteRouter constructor. | ||||
| 	 * | ||||
| 	 * @param $pages | ||||
| 	 */ | ||||
| 	public function __construct( $pages ) { | ||||
|  | ||||
|         set_error_handler('errorHandler'); | ||||
| 		set_error_handler( 'errorHandler' ); | ||||
|  | ||||
|         if ($pages[0] == '') { | ||||
|             new Index(); | ||||
|         } else { | ||||
|             new SiteError(404); | ||||
|         } | ||||
|     } | ||||
| 		if ( $pages[0] == '' ) { | ||||
| 			new Index(); | ||||
| 		} else { | ||||
| 			new SiteError( 404 ); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| ?> | ||||
| @@ -6,36 +6,35 @@ use Exception; | ||||
| use PDO; | ||||
|  | ||||
| class BDD { | ||||
|     const SQL_SERVER = 'localhost';     // BDD Server | ||||
|     const SQL_LOGIN = 'root';           // BDD Login | ||||
|     const SQL_PASSWORD = '';            // BDD Password | ||||
|     const SQL_DB = 'base';              // BDD Name | ||||
| 	const SQL_SERVER = 'localhost';     // BDD Server | ||||
| 	const SQL_LOGIN = 'root';           // BDD Login | ||||
| 	const SQL_PASSWORD = '';            // BDD Password | ||||
| 	const SQL_DB = 'base';              // BDD Name | ||||
|  | ||||
|     private static $bdd; | ||||
| 	private static $bdd; | ||||
|  | ||||
|     public function __construct() { | ||||
|         try { | ||||
|             $pdo_options = [ | ||||
|                 PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING, | ||||
|                 PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4', | ||||
|                 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC | ||||
|             ]; | ||||
| 	public function __construct() { | ||||
| 		try { | ||||
| 			$pdo_options = [ | ||||
| 				PDO::ATTR_ERRMODE            => PDO::ERRMODE_WARNING, | ||||
| 				PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4', | ||||
| 				PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC | ||||
| 			]; | ||||
|  | ||||
|             self::$bdd = new PDO('mysql:host=' . self::SQL_SERVER . ';dbname=' . self::SQL_DB.';charset=utf8', | ||||
|                 self::SQL_LOGIN, self::SQL_PASSWORD, $pdo_options); | ||||
|         } | ||||
|         catch (Exception $e) { | ||||
|             die('Erreur : ' . $e->getMessage()); | ||||
|         } | ||||
|     } | ||||
| 			self::$bdd = new PDO( 'mysql:host=' . self::SQL_SERVER . ';dbname=' . self::SQL_DB . ';charset=utf8', | ||||
| 				self::SQL_LOGIN, self::SQL_PASSWORD, $pdo_options ); | ||||
| 		} catch ( Exception $e ) { | ||||
| 			die( 'Erreur : ' . $e->getMessage() ); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
|     public static function instance() { | ||||
|         return self::$bdd; | ||||
|     } | ||||
| 	public static function instance() { | ||||
| 		return self::$bdd; | ||||
| 	} | ||||
|  | ||||
|     public static function lastInsertId() { | ||||
|         return self::$bdd->lastInsertId(); | ||||
|     } | ||||
| 	public static function lastInsertId() { | ||||
| 		return self::$bdd->lastInsertId(); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| ?> | ||||
| @@ -4,10 +4,10 @@ namespace base\Model; | ||||
|  | ||||
| abstract class BDTables { | ||||
|  | ||||
|     // const NOM = 'bd_nom' | ||||
|     // Ex : const ABONNEMENT = 'abonnement'; | ||||
| 	// const NOM = 'bd_nom' | ||||
| 	// Ex : const ABONNEMENT = 'abonnement'; | ||||
|  | ||||
|     const LOGS = "logs"; | ||||
| 	const LOGS = "logs"; | ||||
| } | ||||
|  | ||||
| ?> | ||||
							
								
								
									
										3654
									
								
								src/Model/FPDF.php
									
									
									
									
									
								
							
							
						
						
									
										3654
									
								
								src/Model/FPDF.php
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -6,191 +6,179 @@ use PDO; | ||||
|  | ||||
| class Logs { | ||||
|  | ||||
|     public $id; | ||||
|     public $level; | ||||
|     public $message; | ||||
|     public $file; | ||||
|     public $line; | ||||
|     public $date; | ||||
| 	const ERROR_LEVEL = [ | ||||
| 		1     => 'E_ERROR', | ||||
| 		2     => 'E_WARNING', | ||||
| 		4     => 'E_PARSE', | ||||
| 		8     => 'E_NOTICE', | ||||
| 		16    => 'E_CORE_ERROR', | ||||
| 		32    => 'E_CORE_WARNING', | ||||
| 		64    => 'E_COMPILE_ERROR', | ||||
| 		128   => 'E_COMPILE_WARNING', | ||||
| 		256   => 'E_USER_ERROR', | ||||
| 		512   => 'E_USER_WARNING', | ||||
| 		1024  => 'E_USER_NOTICE', | ||||
| 		2048  => 'E_STRICT', | ||||
| 		4096  => 'E_RECOVERABLE_ERROR', | ||||
| 		8192  => 'E_DEPRECATED', | ||||
| 		16384 => 'E_USER_DEPRECATED', | ||||
| 		32767 => 'E_ALL' | ||||
| 	]; | ||||
| 	public $id; | ||||
| 	public $level; | ||||
| 	public $message; | ||||
| 	public $file; | ||||
| 	public $line; | ||||
| 	public $date; | ||||
|  | ||||
|     const ERROR_LEVEL = [ | ||||
|         1 => 'E_ERROR', | ||||
|         2 => 'E_WARNING', | ||||
|         4 => 'E_PARSE', | ||||
|         8 => 'E_NOTICE', | ||||
|         16 => 'E_CORE_ERROR', | ||||
|         32 => 'E_CORE_WARNING', | ||||
|         64 => 'E_COMPILE_ERROR', | ||||
|         128 => 'E_COMPILE_WARNING', | ||||
|         256 => 'E_USER_ERROR', | ||||
|         512 => 'E_USER_WARNING', | ||||
|         1024 => 'E_USER_NOTICE', | ||||
|         2048 => 'E_STRICT', | ||||
|         4096 => 'E_RECOVERABLE_ERROR', | ||||
|         8192 => 'E_DEPRECATED', | ||||
|         16384 => 'E_USER_DEPRECATED', | ||||
|         32767 => 'E_ALL' | ||||
|     ]; | ||||
|  | ||||
|     /** | ||||
|      * Logs constructor. | ||||
|      * @param int|null $id | ||||
|      * @param string|null $level | ||||
|      * @param string|null $message | ||||
|      * @param string|null $file | ||||
|      * @param string|null $line | ||||
|      * @param string|null $date | ||||
|      */ | ||||
|     public function __construct(int $id = null, string $level = null, string $message = null, string $file = null, string $line = null, string $date = null) | ||||
|     { | ||||
|         if ($id === NULL) { | ||||
|             return; | ||||
|         } | ||||
|         $this->id = $id; | ||||
|         $this->level = $level; | ||||
|         $this->message = $message; | ||||
|         $this->file = $file; | ||||
|         $this->line = $line; | ||||
|         $this->date = $date; | ||||
|     } | ||||
| 	/** | ||||
| 	 * Logs constructor. | ||||
| 	 * | ||||
| 	 * @param int|null $id | ||||
| 	 * @param string|null $level | ||||
| 	 * @param string|null $message | ||||
| 	 * @param string|null $file | ||||
| 	 * @param string|null $line | ||||
| 	 * @param string|null $date | ||||
| 	 */ | ||||
| 	public function __construct( int $id = null, string $level = null, string $message = null, string $file = null, string $line = null, string $date = null ) { | ||||
| 		if ( $id === null ) { | ||||
| 			return; | ||||
| 		} | ||||
| 		$this->id      = $id; | ||||
| 		$this->level   = $level; | ||||
| 		$this->message = $message; | ||||
| 		$this->file    = $file; | ||||
| 		$this->line    = $line; | ||||
| 		$this->date    = $date; | ||||
| 	} | ||||
|  | ||||
|  | ||||
|     public static function insert($level, $message, $file, $line, $date) { | ||||
|         Model::insert(BDTables::LOGS, [ | ||||
|             'level' => $level, | ||||
|             'message' => $message, | ||||
|             'file' => $file, | ||||
|             'line' => $line, | ||||
|             'date' => date("Y-m-d H:i:s", strtotime($date)) | ||||
|         ]); | ||||
|     } | ||||
| 	public static function insert( $level, $message, $file, $line, $date ) { | ||||
| 		Model::insert( BDTables::LOGS, [ | ||||
| 			'level'   => $level, | ||||
| 			'message' => $message, | ||||
| 			'file'    => $file, | ||||
| 			'line'    => $line, | ||||
| 			'date'    => date( "Y-m-d H:i:s", strtotime( $date ) ) | ||||
| 		] ); | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * Retourne un tableau des derniers logs (limite en param) | ||||
|      * @param int $limit | ||||
|      * @return array | ||||
|      */ | ||||
|     public static function getLastLogs(int $limit){ | ||||
|         $req = BDD::instance()->prepare('SELECT * | ||||
| 	/** | ||||
| 	 * Retourne un tableau des derniers logs (limite en param) | ||||
| 	 * | ||||
| 	 * @param int $limit | ||||
| 	 * | ||||
| 	 * @return array | ||||
| 	 */ | ||||
| 	public static function getLastLogs( int $limit ) { | ||||
| 		$req = BDD::instance()->prepare( 'SELECT * | ||||
|                                          FROM ' . BDTables::LOGS . '  | ||||
|                                          ORDER BY date DESC | ||||
|                                          LIMIT :limit'); | ||||
|         $req->bindValue('limit', $limit, PDO::PARAM_INT); | ||||
|         $req->execute(); | ||||
|         $return = []; | ||||
|                                          LIMIT :limit' ); | ||||
| 		$req->bindValue( 'limit', $limit, PDO::PARAM_INT ); | ||||
| 		$req->execute(); | ||||
| 		$return = []; | ||||
|  | ||||
|         foreach ($req->fetchAll() as $l){ | ||||
|             $log = new Logs($l['id'], $l['level'], $l['message'], $l['file'], $l['line'], $l['date']); | ||||
|             $return[] = $log; | ||||
|         } | ||||
| 		foreach ( $req->fetchAll() as $l ) { | ||||
| 			$log      = new Logs( $l['id'], $l['level'], $l['message'], $l['file'], $l['line'], $l['date'] ); | ||||
| 			$return[] = $log; | ||||
| 		} | ||||
|  | ||||
|         return $return; | ||||
|     } | ||||
| 		return $return; | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * @return int | ||||
|      */ | ||||
|     public function getId() | ||||
|     { | ||||
|         return $this->id; | ||||
|     } | ||||
| 	/** | ||||
| 	 * @return int | ||||
| 	 */ | ||||
| 	public function getId() { | ||||
| 		return $this->id; | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * @param int $id | ||||
|      */ | ||||
|     public function setId($id) | ||||
|     { | ||||
|         $this->id = $id; | ||||
|     } | ||||
| 	/** | ||||
| 	 * @param int $id | ||||
| 	 */ | ||||
| 	public function setId( $id ) { | ||||
| 		$this->id = $id; | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * @return string | ||||
|      */ | ||||
|     public function getLevel() | ||||
|     { | ||||
|         return $this->level; | ||||
|     } | ||||
| 	/** | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	public function getLevel() { | ||||
| 		return $this->level; | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * @param string $level | ||||
|      */ | ||||
|     public function setLevel($level) | ||||
|     { | ||||
|         $this->level = $level; | ||||
|     } | ||||
| 	/** | ||||
| 	 * @param string $level | ||||
| 	 */ | ||||
| 	public function setLevel( $level ) { | ||||
| 		$this->level = $level; | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * @return string | ||||
|      */ | ||||
|     public function getMessage() | ||||
|     { | ||||
|         return htmlspecialchars($this->message); | ||||
|     } | ||||
| 	/** | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	public function getMessage() { | ||||
| 		return htmlspecialchars( $this->message ); | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * @param string $message | ||||
|      */ | ||||
|     public function setMessage($message) | ||||
|     { | ||||
|         $this->message = $message; | ||||
|     } | ||||
| 	/** | ||||
| 	 * @param string $message | ||||
| 	 */ | ||||
| 	public function setMessage( $message ) { | ||||
| 		$this->message = $message; | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * @return string | ||||
|      */ | ||||
|     public function getFile() | ||||
|     { | ||||
|         return htmlspecialchars($this->file); | ||||
|     } | ||||
| 	/** | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	public function getFile() { | ||||
| 		return htmlspecialchars( $this->file ); | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * @param string $file | ||||
|      */ | ||||
|     public function setFile($file) | ||||
|     { | ||||
|         $this->file = $file; | ||||
|     } | ||||
| 	/** | ||||
| 	 * @param string $file | ||||
| 	 */ | ||||
| 	public function setFile( $file ) { | ||||
| 		$this->file = $file; | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * @return string | ||||
|      */ | ||||
|     public function getLine() | ||||
|     { | ||||
|         return htmlspecialchars($this->line); | ||||
|     } | ||||
| 	/** | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	public function getLine() { | ||||
| 		return htmlspecialchars( $this->line ); | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * @param string $line | ||||
|      */ | ||||
|     public function setLine($line) | ||||
|     { | ||||
|         $this->line = $line; | ||||
|     } | ||||
| 	/** | ||||
| 	 * @param string $line | ||||
| 	 */ | ||||
| 	public function setLine( $line ) { | ||||
| 		$this->line = $line; | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * @return string | ||||
|      */ | ||||
|     public function getDate() | ||||
|     { | ||||
|         return $this->date; | ||||
|     } | ||||
| 	/** | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	public function getDate() { | ||||
| 		return $this->date; | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * @param string $date | ||||
|      */ | ||||
|     public function setDate($date) | ||||
|     { | ||||
|         $this->date = $date; | ||||
|     } | ||||
| 	/** | ||||
| 	 * @param string $date | ||||
| 	 */ | ||||
| 	public function setDate( $date ) { | ||||
| 		$this->date = $date; | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * Retourne le type d'erreur en string (label) | ||||
|      * @return string | ||||
|      */ | ||||
|     public function getErrorLabel() | ||||
|     { | ||||
|         return htmlspecialchars(self::ERROR_LEVEL[$this->level]); | ||||
|     } | ||||
| 	/** | ||||
| 	 * Retourne le type d'erreur en string (label) | ||||
| 	 * @return string | ||||
| 	 */ | ||||
| 	public function getErrorLabel() { | ||||
| 		return htmlspecialchars( self::ERROR_LEVEL[ $this->level ] ); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| ?> | ||||
| @@ -4,43 +4,47 @@ namespace base\Model; | ||||
|  | ||||
| class Model { | ||||
|  | ||||
|     /** | ||||
|      * Crée une reqette d'insertion en base àpartir du nom de la table et d'un tableau associatif et l'exécute | ||||
|      * @param string $tableName | ||||
|      * @param array $data | ||||
|      * @return int lastInsertId | ||||
|      */ | ||||
|     public static function insert(string $tableName, array $data){ | ||||
|         $req = BDD::instance()->prepare('INSERT INTO ' . $tableName . ' (' . implode(', ', array_keys($data)) . ')  | ||||
|                                          VALUES (' . ':' . implode(', :', array_keys($data)) . ')'); | ||||
|         $req->execute($data); | ||||
|         return BDD::lastInsertId(); | ||||
|     } | ||||
| 	/** | ||||
| 	 * Crée une reqette d'insertion en base àpartir du nom de la table et d'un tableau associatif et l'exécute | ||||
| 	 * | ||||
| 	 * @param string $tableName | ||||
| 	 * @param array $data | ||||
| 	 * | ||||
| 	 * @return int lastInsertId | ||||
| 	 */ | ||||
| 	public static function insert( string $tableName, array $data ) { | ||||
| 		$req = BDD::instance()->prepare( 'INSERT INTO ' . $tableName . ' (' . implode( ', ', array_keys( $data ) ) . ')  | ||||
|                                          VALUES (' . ':' . implode( ', :', array_keys( $data ) ) . ')' ); | ||||
| 		$req->execute( $data ); | ||||
|  | ||||
|     /** | ||||
|      * Met à jour les données d'une ligne d'un table données | ||||
|      * @param string $tableName | ||||
|      * @param array $data | ||||
|      * @param string $idColumn | ||||
|      * @param int $idValue | ||||
|      */ | ||||
|     public static function update(string $tableName, array $data, string $idColumn, int $idValue){ | ||||
|         $reqStr = 'UPDATE ' . $tableName . ' SET '; | ||||
|         $lastKey = endKey($data); | ||||
|         foreach ($data as $key => $value){ | ||||
|             $reqStr .= $key . ' = :' . $key; | ||||
|             if($key != $lastKey) { | ||||
|                 $reqStr .= ', '; | ||||
|             } | ||||
|         } | ||||
|         $reqStr .= ' WHERE ' . $idColumn . ' = :' . $idColumn; | ||||
|         $data[$idColumn] = $idValue; | ||||
| 		return BDD::lastInsertId(); | ||||
| 	} | ||||
|  | ||||
|         //echo $reqStr; exit(); | ||||
| 	/** | ||||
| 	 * Met à jour les données d'une ligne d'un table données | ||||
| 	 * | ||||
| 	 * @param string $tableName | ||||
| 	 * @param array $data | ||||
| 	 * @param string $idColumn | ||||
| 	 * @param int $idValue | ||||
| 	 */ | ||||
| 	public static function update( string $tableName, array $data, string $idColumn, int $idValue ) { | ||||
| 		$reqStr  = 'UPDATE ' . $tableName . ' SET '; | ||||
| 		$lastKey = endKey( $data ); | ||||
| 		foreach ( $data as $key => $value ) { | ||||
| 			$reqStr .= $key . ' = :' . $key; | ||||
| 			if ( $key != $lastKey ) { | ||||
| 				$reqStr .= ', '; | ||||
| 			} | ||||
| 		} | ||||
| 		$reqStr            .= ' WHERE ' . $idColumn . ' = :' . $idColumn; | ||||
| 		$data[ $idColumn ] = $idValue; | ||||
|  | ||||
|         $req = BDD::instance()->prepare($reqStr); | ||||
|         $req->execute($data); | ||||
|     } | ||||
| 		//echo $reqStr; exit(); | ||||
|  | ||||
| 		$req = BDD::instance()->prepare( $reqStr ); | ||||
| 		$req->execute( $data ); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| ?> | ||||
| @@ -1,6 +1,6 @@ | ||||
|     <div class="content"> | ||||
|         <div class="error-page-container"> | ||||
|             <div class="error-title"><?= $erreur ?></div> | ||||
|             <div class="error-message">Que voulez-vous faire ?</div> | ||||
|         </div> | ||||
| <div class="content"> | ||||
|     <div class="error-page-container"> | ||||
|         <div class="error-title"><?= $erreur ?></div> | ||||
|         <div class="error-message">Que voulez-vous faire ?</div> | ||||
|     </div> | ||||
| </div> | ||||
|   | ||||
| @@ -1,7 +1,6 @@ | ||||
| <script src="/js/jquery-3.2.1.min.js"></script> | ||||
| <script src="/js/javascript.js?v=<?= base\Config::SITE_JS_VERSION ?>"></script> | ||||
| <link href="/css/style.css?v=<?= base\Config::SITE_CSS_VERSION ?>" rel="stylesheet"> | ||||
|  | ||||
|         <script src="/js/jquery-3.2.1.min.js"></script> | ||||
|         <script src="/js/javascript.js?v=<?= base\Config::SITE_JS_VERSION ?>"></script> | ||||
|         <link href="/css/style.css?v=<?= base\Config::SITE_CSS_VERSION ?>" rel="stylesheet"> | ||||
|  | ||||
|     </body> | ||||
| </body> | ||||
| </html> | ||||
|   | ||||
| @@ -15,25 +15,26 @@ | ||||
|     <title><?= $this->head['title'] ?></title> | ||||
|     <meta name="description" content="<?= $this->head['description'] ?>"> | ||||
|  | ||||
|     <meta property="og:title"              content="<?= $this->head['title'] ?>" /> | ||||
|     <meta property="og:description"        content="<?= $this->head['description'] ?>" /> | ||||
|     <meta property="og:url"                content="https://<?= $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] ?>" /> | ||||
|     <meta property="og:image"              content="https://<?= $_SERVER['SERVER_NAME'] . \base\Config::FAVICON_PATH ?>" /> | ||||
| <!--    <meta property="fb:app_id"              content="1000452166691027" /> --> | ||||
|     <meta property="og:title" content="<?= $this->head['title'] ?>"/> | ||||
|     <meta property="og:description" content="<?= $this->head['description'] ?>"/> | ||||
|     <meta property="og:url" content="https://<?= $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] ?>"/> | ||||
|     <meta property="og:image" content="https://<?= $_SERVER['SERVER_NAME'] . \base\Config::FAVICON_PATH ?>"/> | ||||
|     <!--    <meta property="fb:app_id"              content="1000452166691027" /> --> | ||||
|  | ||||
|     <link href='https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700%7CRoboto+Condensed:400,700%7CMaterial+Icons' rel='stylesheet' type='text/css'> | ||||
|     <link href='https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700%7CRoboto+Condensed:400,700%7CMaterial+Icons' | ||||
|           rel='stylesheet' type='text/css'> | ||||
|  | ||||
|     <link href="/css/theme.css?v=<?= base\Config::SITE_CSS_VERSION ?>" rel="stylesheet"> | ||||
|     <link href="/css/select2.css" rel="stylesheet"> | ||||
|  | ||||
|     <link rel="image_src" href="<?php \base\Config::FAVICON_PATH ?>" /> | ||||
|     <link rel="icon" type="image/png" href="<?php \base\Config::FAVICON_PATH ?>" /> | ||||
|     <link rel="image_src" href="<?php \base\Config::FAVICON_PATH ?>"/> | ||||
|     <link rel="icon" type="image/png" href="<?php \base\Config::FAVICON_PATH ?>"/> | ||||
|  | ||||
|     <meta name="theme-color" content="#ffffff"> | ||||
|  | ||||
|     <?php if (isset($this->head['robotNoIndex']) && $this->head['robotNoIndex'] == true) { ?> | ||||
|         <meta name="robots" content="noindex" /> | ||||
|     <?php } ?> | ||||
| 	<?php if ( isset( $this->head['robotNoIndex'] ) && $this->head['robotNoIndex'] == true ) { ?> | ||||
|         <meta name="robots" content="noindex"/> | ||||
| 	<?php } ?> | ||||
|  | ||||
| </head> | ||||
|  | ||||
|   | ||||
| @@ -1,130 +1,138 @@ | ||||
| <?php | ||||
|  | ||||
| include ('src/lib/mail/PHPMailerAutoload.php'); | ||||
| include( 'src/lib/mail/PHPMailerAutoload.php' ); | ||||
|  | ||||
| /** | ||||
|  * Permet de remplacer les accents et les apostrophes dans l'url | ||||
|  * | ||||
|  * @param string $str l'url à formater | ||||
|  * @param string $encoding | ||||
|  * | ||||
|  * @return string | ||||
|  */ | ||||
| function formatURL (string $str, $encoding = 'utf-8') { | ||||
| function formatURL( string $str, $encoding = 'utf-8' ) { | ||||
|  | ||||
|     $str = str_replace( "+", "_plus_", $str); | ||||
|     $str = str_replace( "%", "_pourcent_", $str); | ||||
|     $str = str_replace( "&", "_et_", $str); | ||||
| 	$str = str_replace( "+", "_plus_", $str ); | ||||
| 	$str = str_replace( "%", "_pourcent_", $str ); | ||||
| 	$str = str_replace( "&", "_et_", $str ); | ||||
|  | ||||
|     //on remplace les apotrophes et espaces par des underscore | ||||
|     $str = str_replace ( array("'", " ", ","), "_", $str ); | ||||
| 	//on remplace les apotrophes et espaces par des underscore | ||||
| 	$str = str_replace( array( "'", " ", "," ), "_", $str ); | ||||
|  | ||||
|     $str = str_replace( "__", "_", $str); | ||||
| 	$str = str_replace( "__", "_", $str ); | ||||
|  | ||||
|     // transformer les caractères accentués en entités HTML | ||||
|     $str = htmlentities($str, ENT_NOQUOTES, $encoding); | ||||
|     // remplacer les entités HTML pour avoir juste le premier caractères non accentués | ||||
|     // Exemple : "&ecute;" => "e", "&Ecute;" => "E", "Ã " => "a" ... | ||||
|     $str = preg_replace('#&([A-za-z])(?:acute|grave|cedil|circ|orn|ring|slash|th|tilde|uml);#', '\1', $str); | ||||
| 	// transformer les caractères accentués en entités HTML | ||||
| 	$str = htmlentities( $str, ENT_NOQUOTES, $encoding ); | ||||
| 	// remplacer les entités HTML pour avoir juste le premier caractères non accentués | ||||
| 	// Exemple : "&ecute;" => "e", "&Ecute;" => "E", "Ã " => "a" ... | ||||
| 	$str = preg_replace( '#&([A-za-z])(?:acute|grave|cedil|circ|orn|ring|slash|th|tilde|uml);#', '\1', $str ); | ||||
|  | ||||
|     // Remplacer les ligatures tel que : Œ, Æ ... | ||||
|     // Exemple "Å“" => "oe" | ||||
|     $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); | ||||
|     // Supprimer tout le reste | ||||
|     //$str = preg_replace('#&[^;]+;#', '', $str); | ||||
|     $str = str_replace( array("#", "&", "[", "^", ";", "]"), '', $str); | ||||
| 	// Remplacer les ligatures tel que : Œ, Æ ... | ||||
| 	// Exemple "Å“" => "oe" | ||||
| 	$str = preg_replace( '#&([A-za-z]{2})(?:lig);#', '\1', $str ); | ||||
| 	// Supprimer tout le reste | ||||
| 	//$str = preg_replace('#&[^;]+;#', '', $str); | ||||
| 	$str = str_replace( array( "#", "&", "[", "^", ";", "]" ), '', $str ); | ||||
|  | ||||
|     //on passe tout en minuscule | ||||
|     $str = strtolower($str); | ||||
| 	//on passe tout en minuscule | ||||
| 	$str = strtolower( $str ); | ||||
|  | ||||
|     if (substr($str, -1) == '_'){ | ||||
|         $str = substr($str, 0, -1); | ||||
|     } | ||||
| 	if ( substr( $str, - 1 ) == '_' ) { | ||||
| 		$str = substr( $str, 0, - 1 ); | ||||
| 	} | ||||
|  | ||||
|     return $str; | ||||
| 	return $str; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * La fonction darkroom() renomme et redimensionne les photos envoyées lors de l'ajout d'un objet. | ||||
|  * | ||||
|  * @param $img String Chemin absolu de l'image d'origine. | ||||
|  * @param $to String Chemin absolu de l'image générée (.jpg). | ||||
|  * @param $width Int Largeur de l'image générée. Si 0, valeur calculée en fonction de $height. | ||||
|  * @param $height Int Hauteur de l'image génétée. Si 0, valeur calculée en fonction de $width. | ||||
|  * Si $height = 0 et $width = 0, dimensions conservées mais conversion en .jpg | ||||
|  * | ||||
|  * @return bool | ||||
|  */ | ||||
| function darkroom($img, $to, $width = 0, $height = 0, $quality = 100, $useGD = true) { | ||||
| function darkroom( $img, $to, $width = 0, $height = 0, $quality = 100, $useGD = true ) { | ||||
|  | ||||
|     $dimensions = getimagesize($img); | ||||
|     $ratio      = $dimensions[0] / $dimensions[1]; | ||||
| 	$dimensions = getimagesize( $img ); | ||||
| 	$ratio      = $dimensions[0] / $dimensions[1]; | ||||
|  | ||||
|     // Calcul des dimensions si 0 passé en paramètre | ||||
|     if ($width == 0 && $height == 0) { | ||||
|         $width = $dimensions[0]; | ||||
|         $height = $dimensions[1]; | ||||
|     } else if ($height == 0) { | ||||
|         $height = round($width / $ratio); | ||||
|     } else if ($width == 0) { | ||||
|         $width = round($height * $ratio); | ||||
|     } | ||||
| 	// Calcul des dimensions si 0 passé en paramètre | ||||
| 	if ( $width == 0 && $height == 0 ) { | ||||
| 		$width  = $dimensions[0]; | ||||
| 		$height = $dimensions[1]; | ||||
| 	} else if ( $height == 0 ) { | ||||
| 		$height = round( $width / $ratio ); | ||||
| 	} else if ( $width == 0 ) { | ||||
| 		$width = round( $height * $ratio ); | ||||
| 	} | ||||
|  | ||||
|     if ($dimensions[0] > ($width / $height) * $dimensions[1]){ | ||||
|         $dimY = $height; | ||||
|         $dimX = round($height * $dimensions[0] / $dimensions[1]); | ||||
|     } | ||||
|     if ($dimensions[0] < ($width / $height) * $dimensions[1]) { | ||||
|         $dimX = $width; | ||||
|         $dimY = round($width * $dimensions[1] / $dimensions[0]); | ||||
|     } | ||||
|     if ($dimensions[0] == ($width / $height) * $dimensions[1]) { | ||||
|         $dimX = $width; | ||||
|         $dimY = $height; | ||||
|     } | ||||
| 	if ( $dimensions[0] > ( $width / $height ) * $dimensions[1] ) { | ||||
| 		$dimY = $height; | ||||
| 		$dimX = round( $height * $dimensions[0] / $dimensions[1] ); | ||||
| 	} | ||||
| 	if ( $dimensions[0] < ( $width / $height ) * $dimensions[1] ) { | ||||
| 		$dimX = $width; | ||||
| 		$dimY = round( $width * $dimensions[1] / $dimensions[0] ); | ||||
| 	} | ||||
| 	if ( $dimensions[0] == ( $width / $height ) * $dimensions[1] ) { | ||||
| 		$dimX = $width; | ||||
| 		$dimY = $height; | ||||
| 	} | ||||
|  | ||||
|     // Création de l'image avec la librairie GD | ||||
|     if ($useGD) { | ||||
|         $pattern = imagecreatetruecolor($width, $height); | ||||
|         $type = mime_content_type($img); | ||||
|         switch (substr($type, 6)) { | ||||
|             case 'jpeg': | ||||
|                 $image = imagecreatefromjpeg($img); | ||||
|                 break; | ||||
|             case 'gif': | ||||
|                 $image = imagecreatefromgif($img); | ||||
|                 break; | ||||
|             case 'png': | ||||
|                 $image = imagecreatefrompng($img); | ||||
|                 break; | ||||
|         } | ||||
|         imagecopyresampled($pattern, $image, 0, 0, 0, 0, $dimX, $dimY, $dimensions[0], $dimensions[1]); | ||||
|         imagedestroy($image); | ||||
|         imagejpeg($pattern, $to, $quality); | ||||
| 	// Création de l'image avec la librairie GD | ||||
| 	if ( $useGD ) { | ||||
| 		$pattern = imagecreatetruecolor( $width, $height ); | ||||
| 		$type    = mime_content_type( $img ); | ||||
| 		switch ( substr( $type, 6 ) ) { | ||||
| 			case 'jpeg': | ||||
| 				$image = imagecreatefromjpeg( $img ); | ||||
| 				break; | ||||
| 			case 'gif': | ||||
| 				$image = imagecreatefromgif( $img ); | ||||
| 				break; | ||||
| 			case 'png': | ||||
| 				$image = imagecreatefrompng( $img ); | ||||
| 				break; | ||||
| 		} | ||||
| 		imagecopyresampled( $pattern, $image, 0, 0, 0, 0, $dimX, $dimY, $dimensions[0], $dimensions[1] ); | ||||
| 		imagedestroy( $image ); | ||||
| 		imagejpeg( $pattern, $to, $quality ); | ||||
|  | ||||
|         return true; | ||||
|     } | ||||
|     return true; | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	return true; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Redéfini la gestion des erreurs | ||||
|  * | ||||
|  * @param $errno | ||||
|  * @param $errstr | ||||
|  * @param $errfile | ||||
|  * @param $errline | ||||
|  * | ||||
|  * @return bool|void | ||||
|  */ | ||||
| function errorHandler($errno, $errstr, $errfile, $errline) { | ||||
|     if (!(error_reporting() & $errno)) { | ||||
|         // Ce code d'erreur n'est pas inclus dans error_reporting() | ||||
|         return ; | ||||
|     } | ||||
| function errorHandler( $errno, $errstr, $errfile, $errline ) { | ||||
| 	if ( ! ( error_reporting() & $errno ) ) { | ||||
| 		// Ce code d'erreur n'est pas inclus dans error_reporting() | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
|     // Insertion des logs | ||||
|     \base\Model\Logs::insert($errno, $errstr, $errfile, $errline, date('Y-m-d H:i:s')); | ||||
|      | ||||
|     ob_clean(); | ||||
|     new \base\Controller\Site\SiteError(500); | ||||
| 	// Insertion des logs | ||||
| 	\base\Model\Logs::insert( $errno, $errstr, $errfile, $errline, date( 'Y-m-d H:i:s' ) ); | ||||
|  | ||||
|     /* Ne pas exécuter le gestionnaire interne de PHP */ | ||||
|     return ; | ||||
| 	ob_clean(); | ||||
| 	new \base\Controller\Site\SiteError( 500 ); | ||||
|  | ||||
| 	/* Ne pas exécuter le gestionnaire interne de PHP */ | ||||
|  | ||||
| 	return; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -133,113 +141,115 @@ function errorHandler($errno, $errstr, $errfile, $errline) { | ||||
|  */ | ||||
| function getBrowser() { | ||||
|  | ||||
|     $u_agent = $_SERVER['HTTP_USER_AGENT']; | ||||
|     $bname = 'Unknown'; | ||||
|     $platform = 'Unknown'; | ||||
|     $ub = ""; | ||||
| 	$u_agent  = $_SERVER['HTTP_USER_AGENT']; | ||||
| 	$bname    = 'Unknown'; | ||||
| 	$platform = 'Unknown'; | ||||
| 	$ub       = ""; | ||||
|  | ||||
|     //First get the platform? | ||||
|     if (preg_match('/android/i', $u_agent) || preg_match('/Android/i', $u_agent)) { | ||||
|         $platform = 'android'; | ||||
|     } else if (preg_match('/linux/i', $u_agent)) { | ||||
|         $platform = 'linux'; | ||||
|     } else if (preg_match('/macintosh|mac os x/i', $u_agent)) { | ||||
|         $platform = 'mac'; | ||||
|     } else if (preg_match('/windows|win32/i', $u_agent)) { | ||||
|         $platform = 'windows'; | ||||
|     } | ||||
| 	//First get the platform? | ||||
| 	if ( preg_match( '/android/i', $u_agent ) || preg_match( '/Android/i', $u_agent ) ) { | ||||
| 		$platform = 'android'; | ||||
| 	} else if ( preg_match( '/linux/i', $u_agent ) ) { | ||||
| 		$platform = 'linux'; | ||||
| 	} else if ( preg_match( '/macintosh|mac os x/i', $u_agent ) ) { | ||||
| 		$platform = 'mac'; | ||||
| 	} else if ( preg_match( '/windows|win32/i', $u_agent ) ) { | ||||
| 		$platform = 'windows'; | ||||
| 	} | ||||
|  | ||||
|     if (strstr($u_agent, 'mobile') || strstr($u_agent, 'Mobile')){ | ||||
|         $platform .= ' mobile'; | ||||
|     } | ||||
| 	if ( strstr( $u_agent, 'mobile' ) || strstr( $u_agent, 'Mobile' ) ) { | ||||
| 		$platform .= ' mobile'; | ||||
| 	} | ||||
|  | ||||
|     // Next get the name of the useragent yes seperately and for good reason | ||||
|     if (preg_match('/MSIE/i', $u_agent) && !preg_match('/Opera/i', $u_agent)) { | ||||
|         $bname = 'Internet Explorer'; | ||||
|         $ub = "MSIE"; | ||||
|     } else if (preg_match('/Edge/i', $u_agent)) { | ||||
|         $bname = 'Microsoft Edge'; | ||||
|         $ub = "Edge"; | ||||
|     } else if (preg_match('/Trident/i', $u_agent)) { | ||||
|         $bname = 'Internet Explorer'; | ||||
|         $ub = "rv"; | ||||
|     } else if (preg_match('/Firefox/i', $u_agent)) { | ||||
|         $bname = 'Mozilla Firefox'; | ||||
|         $ub = "Firefox"; | ||||
|     } else if (preg_match('/Chrome/i', $u_agent)) { | ||||
|         $bname = 'Google Chrome'; | ||||
|         $ub = "Chrome"; | ||||
|     } else if (preg_match('/Safari/i', $u_agent)) { | ||||
|         $bname = 'Apple Safari'; | ||||
|         $ub = "Safari"; | ||||
|     } else if (preg_match('/Opera/i', $u_agent)) { | ||||
|         $bname = 'Opera'; | ||||
|         $ub = "Opera"; | ||||
|     } else if (preg_match('/Netscape/i', $u_agent)) { | ||||
|         $bname = 'Netscape'; | ||||
|         $ub = "Netscape"; | ||||
|     } | ||||
| 	// Next get the name of the useragent yes seperately and for good reason | ||||
| 	if ( preg_match( '/MSIE/i', $u_agent ) && ! preg_match( '/Opera/i', $u_agent ) ) { | ||||
| 		$bname = 'Internet Explorer'; | ||||
| 		$ub    = "MSIE"; | ||||
| 	} else if ( preg_match( '/Edge/i', $u_agent ) ) { | ||||
| 		$bname = 'Microsoft Edge'; | ||||
| 		$ub    = "Edge"; | ||||
| 	} else if ( preg_match( '/Trident/i', $u_agent ) ) { | ||||
| 		$bname = 'Internet Explorer'; | ||||
| 		$ub    = "rv"; | ||||
| 	} else if ( preg_match( '/Firefox/i', $u_agent ) ) { | ||||
| 		$bname = 'Mozilla Firefox'; | ||||
| 		$ub    = "Firefox"; | ||||
| 	} else if ( preg_match( '/Chrome/i', $u_agent ) ) { | ||||
| 		$bname = 'Google Chrome'; | ||||
| 		$ub    = "Chrome"; | ||||
| 	} else if ( preg_match( '/Safari/i', $u_agent ) ) { | ||||
| 		$bname = 'Apple Safari'; | ||||
| 		$ub    = "Safari"; | ||||
| 	} else if ( preg_match( '/Opera/i', $u_agent ) ) { | ||||
| 		$bname = 'Opera'; | ||||
| 		$ub    = "Opera"; | ||||
| 	} else if ( preg_match( '/Netscape/i', $u_agent ) ) { | ||||
| 		$bname = 'Netscape'; | ||||
| 		$ub    = "Netscape"; | ||||
| 	} | ||||
|  | ||||
|     // finally get the correct version number | ||||
|     // Added "|:" | ||||
|     $known = array('Version', $ub, 'other'); | ||||
|     $pattern = '#(?<browser>' . join('|', $known) . ')[/|: ]+(?<version>[0-9.|a-zA-Z.]*)#'; | ||||
|     if (!preg_match_all($pattern, $u_agent, $matches)) { | ||||
|         // we have no matching number just continue | ||||
|     } | ||||
| 	// finally get the correct version number | ||||
| 	// Added "|:" | ||||
| 	$known   = array( 'Version', $ub, 'other' ); | ||||
| 	$pattern = '#(?<browser>' . join( '|', $known ) . ')[/|: ]+(?<version>[0-9.|a-zA-Z.]*)#'; | ||||
| 	if ( ! preg_match_all( $pattern, $u_agent, $matches ) ) { | ||||
| 		// we have no matching number just continue | ||||
| 	} | ||||
|  | ||||
|     // see how many we have | ||||
|     $i = count($matches['browser']); | ||||
|     if ($i != 1) { | ||||
|         //we will have two since we are not using 'other' argument yet | ||||
|         //see if version is before or after the name | ||||
|         if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){ | ||||
|             $version= $matches['version'][0]; | ||||
|         } else { | ||||
|             $version= $matches['version'][1]; | ||||
|         } | ||||
|     } else { | ||||
|         $version= $matches['version'][0]; | ||||
|     } | ||||
| 	// see how many we have | ||||
| 	$i = count( $matches['browser'] ); | ||||
| 	if ( $i != 1 ) { | ||||
| 		//we will have two since we are not using 'other' argument yet | ||||
| 		//see if version is before or after the name | ||||
| 		if ( strripos( $u_agent, "Version" ) < strripos( $u_agent, $ub ) ) { | ||||
| 			$version = $matches['version'][0]; | ||||
| 		} else { | ||||
| 			$version = $matches['version'][1]; | ||||
| 		} | ||||
| 	} else { | ||||
| 		$version = $matches['version'][0]; | ||||
| 	} | ||||
|  | ||||
|     // check if we have a number | ||||
|     if ($version == null || $version == "") { | ||||
|         $version = "?"; | ||||
|     } | ||||
| 	// check if we have a number | ||||
| 	if ( $version == null || $version == "" ) { | ||||
| 		$version = "?"; | ||||
| 	} | ||||
|  | ||||
|     return array ( | ||||
|         'userAgent' => $u_agent, | ||||
|         'platform' => $platform, | ||||
|         'version' => $version, | ||||
|         'pattern' => $pattern, | ||||
|         'name' => $bname | ||||
|     ); | ||||
| 	return array( | ||||
| 		'userAgent' => $u_agent, | ||||
| 		'platform'  => $platform, | ||||
| 		'version'   => $version, | ||||
| 		'pattern'   => $pattern, | ||||
| 		'name'      => $bname | ||||
| 	); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @param $string | ||||
|  * @param $limit | ||||
|  * | ||||
|  * @return int | ||||
|  */ | ||||
| function getLimitWord($string, $limit) { | ||||
|     $i = $limit; | ||||
|     if (!isset($string) || empty($string)){ | ||||
|         return 0; | ||||
|     } | ||||
|     while ($i > 0 && $string[$i] != ' '){ | ||||
|         $i--; | ||||
|     } | ||||
|     return $i; | ||||
| function getLimitWord( $string, $limit ) { | ||||
| 	$i = $limit; | ||||
| 	if ( ! isset( $string ) || empty( $string ) ) { | ||||
| 		return 0; | ||||
| 	} | ||||
| 	while ( $i > 0 && $string[ $i ] != ' ' ) { | ||||
| 		$i --; | ||||
| 	} | ||||
|  | ||||
| 	return $i; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @param array $destinataires      [nom du destinataire => adresse du destinataire]    On peut en ajouter autant que l'on veut | ||||
|  * @param string $subject           Objet du mail | ||||
|  * @param string $body              Corp du mail | ||||
|  * @param string|null $auteurMail   L'auteur du mail                                    Par défaut eldotravo@gmail.com | ||||
|  * @param array|null $files         [nom du fichier => chemin du fichier]               On peut en ajouter autant que l'on veut | ||||
|  * @param array|null $cci           [nom du cci => adresse du cci]                      On peut en ajouter autant que l'on veut | ||||
|  * @param array|null $cc           [nom du cc => adresse du cc]                      On peut en ajouter autant que l'on veut | ||||
|  * @param array $destinataires [nom du destinataire => adresse du destinataire]    On peut en ajouter autant que l'on veut | ||||
|  * @param string $subject Objet du mail | ||||
|  * @param string $body Corp du mail | ||||
|  * @param string|null $auteurMail L'auteur du mail                                    Par défaut eldotravo@gmail.com | ||||
|  * @param array|null $files [nom du fichier => chemin du fichier]               On peut en ajouter autant que l'on veut | ||||
|  * @param array|null $cci [nom du cci => adresse du cci]                      On peut en ajouter autant que l'on veut | ||||
|  * @param array|null $cc [nom du cc => adresse du cc]                      On peut en ajouter autant que l'on veut | ||||
|  */ | ||||
| /* | ||||
| function email(array $destinataires, string $subject, string $body, string $auteurMail = null, array $files = null, array $cci = null, $cc = null) { | ||||
| @@ -315,83 +325,89 @@ function email(array $destinataires, string $subject, string $body, string $aute | ||||
|  * @param string $file | ||||
|  * @param int $angle | ||||
|  * @param string $newName | ||||
|  * | ||||
|  * @return bool | ||||
|  */ | ||||
| function rotateImage(string $file, int $angle, string $newName) { | ||||
|     // Initialisation variable pou test futur | ||||
|     $image = null; | ||||
|     $type = mime_content_type($file); | ||||
|     // Création ressources en fonction de l'image | ||||
|     switch (substr($type, 6)) { | ||||
|         case 'jpeg': | ||||
|             $image = imagecreatefromjpeg($file); | ||||
|             break; | ||||
|         case 'png': | ||||
|             $image = imagecreatefrompng($file); | ||||
|             break; | ||||
|     } | ||||
|     // Si format image non prit en charge | ||||
|     if ($image == null){ | ||||
|         return false; | ||||
|     } | ||||
|     // Rotation de l'image | ||||
|     $rotate = imagerotate($image, $angle, 0); | ||||
|     // On recrée l'image au format de base | ||||
|     switch (substr($type, 6)) { | ||||
|         case 'jpeg': | ||||
|             imagejpeg($rotate, $file); | ||||
|             break; | ||||
|         case 'png': | ||||
|             imagepng($rotate, $file); | ||||
|             break; | ||||
|     } | ||||
|     imagedestroy($image); | ||||
|     imagedestroy($rotate); | ||||
|     rename($file, $newName); | ||||
|     return true; | ||||
| function rotateImage( string $file, int $angle, string $newName ) { | ||||
| 	// Initialisation variable pou test futur | ||||
| 	$image = null; | ||||
| 	$type  = mime_content_type( $file ); | ||||
| 	// Création ressources en fonction de l'image | ||||
| 	switch ( substr( $type, 6 ) ) { | ||||
| 		case 'jpeg': | ||||
| 			$image = imagecreatefromjpeg( $file ); | ||||
| 			break; | ||||
| 		case 'png': | ||||
| 			$image = imagecreatefrompng( $file ); | ||||
| 			break; | ||||
| 	} | ||||
| 	// Si format image non prit en charge | ||||
| 	if ( $image == null ) { | ||||
| 		return false; | ||||
| 	} | ||||
| 	// Rotation de l'image | ||||
| 	$rotate = imagerotate( $image, $angle, 0 ); | ||||
| 	// On recrée l'image au format de base | ||||
| 	switch ( substr( $type, 6 ) ) { | ||||
| 		case 'jpeg': | ||||
| 			imagejpeg( $rotate, $file ); | ||||
| 			break; | ||||
| 		case 'png': | ||||
| 			imagepng( $rotate, $file ); | ||||
| 			break; | ||||
| 	} | ||||
| 	imagedestroy( $image ); | ||||
| 	imagedestroy( $rotate ); | ||||
| 	rename( $file, $newName ); | ||||
|  | ||||
| 	return true; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @param array $data | ||||
|  * | ||||
|  * @return array | ||||
|  * Clean toutes les strings dans array en récursif, et filtre pour n'avoir qu'un espaces entre chaque mot | ||||
|  */ | ||||
| function cleanArray(array $data) { | ||||
|     if (!empty($data)){ | ||||
|         foreach ($data as $key => $donnée){ | ||||
|             switch (gettype($donnée)){ | ||||
|                 case 'string': | ||||
|                     if (!empty($donnée)){ | ||||
|                         $new_string = ''; | ||||
|                         foreach (explode(' ', trim($donnée)) as $str){ | ||||
|                             if (!empty($str)){ | ||||
|                                 if ($new_string != ''){ | ||||
|                                     $new_string .= ' '; | ||||
|                                 } | ||||
|                                 $new_string .= $str; | ||||
|                             } | ||||
|                         } | ||||
|                         $data[$key] = $new_string; | ||||
|                     } | ||||
|                     break; | ||||
|                 case 'array': | ||||
|                     if (!empty($donnée)){ | ||||
|                         $data[$key] = cleanArray($donnée); | ||||
|                     } | ||||
|                     break; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     return $data; | ||||
| function cleanArray( array $data ) { | ||||
| 	if ( ! empty( $data ) ) { | ||||
| 		foreach ( $data as $key => $donnée ) { | ||||
| 			switch ( gettype( $donnée ) ) { | ||||
| 				case 'string': | ||||
| 					if ( ! empty( $donnée ) ) { | ||||
| 						$new_string = ''; | ||||
| 						foreach ( explode( ' ', trim( $donnée ) ) as $str ) { | ||||
| 							if ( ! empty( $str ) ) { | ||||
| 								if ( $new_string != '' ) { | ||||
| 									$new_string .= ' '; | ||||
| 								} | ||||
| 								$new_string .= $str; | ||||
| 							} | ||||
| 						} | ||||
| 						$data[ $key ] = $new_string; | ||||
| 					} | ||||
| 					break; | ||||
| 				case 'array': | ||||
| 					if ( ! empty( $donnée ) ) { | ||||
| 						$data[ $key ] = cleanArray( $donnée ); | ||||
| 					} | ||||
| 					break; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return $data; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @param $array | ||||
|  * | ||||
|  * @return mixed | ||||
|  */ | ||||
| function endKey($array){ | ||||
|     end($array); | ||||
|     return key($array); | ||||
| function endKey( $array ) { | ||||
| 	end( $array ); | ||||
|  | ||||
| 	return key( $array ); | ||||
| } | ||||
|  | ||||
| ?> | ||||
| @@ -19,31 +19,31 @@ | ||||
|  | ||||
| /** | ||||
|  * PHPMailer SPL autoloader. | ||||
|  * | ||||
|  * @param string $classname The name of the class to load | ||||
|  */ | ||||
| function PHPMailerAutoload($classname) | ||||
| { | ||||
|     //Can't use __DIR__ as it's only in PHP 5.3+ | ||||
|     $filename = dirname(__FILE__).DIRECTORY_SEPARATOR.'class.'.strtolower($classname).'.php'; | ||||
|     if (is_readable($filename)) { | ||||
|         require $filename; | ||||
|     } | ||||
| function PHPMailerAutoload( $classname ) { | ||||
| 	//Can't use __DIR__ as it's only in PHP 5.3+ | ||||
| 	$filename = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'class.' . strtolower( $classname ) . '.php'; | ||||
| 	if ( is_readable( $filename ) ) { | ||||
| 		require $filename; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| if (version_compare(PHP_VERSION, '5.1.2', '>=')) { | ||||
|     //SPL autoloading was introduced in PHP 5.1.2 | ||||
|     if (version_compare(PHP_VERSION, '5.3.0', '>=')) { | ||||
|         spl_autoload_register('PHPMailerAutoload', true, true); | ||||
|     } else { | ||||
|         spl_autoload_register('PHPMailerAutoload'); | ||||
|     } | ||||
| if ( version_compare( PHP_VERSION, '5.1.2', '>=' ) ) { | ||||
| 	//SPL autoloading was introduced in PHP 5.1.2 | ||||
| 	if ( version_compare( PHP_VERSION, '5.3.0', '>=' ) ) { | ||||
| 		spl_autoload_register( 'PHPMailerAutoload', true, true ); | ||||
| 	} else { | ||||
| 		spl_autoload_register( 'PHPMailerAutoload' ); | ||||
| 	} | ||||
| } else { | ||||
|     /** | ||||
|      * Fall back to traditional autoload for old PHP versions | ||||
|      * @param string $classname The name of the class to load | ||||
|      */ | ||||
|     function __autoload($classname) | ||||
|     { | ||||
|         PHPMailerAutoload($classname); | ||||
|     } | ||||
| 	/** | ||||
| 	 * Fall back to traditional autoload for old PHP versions | ||||
| 	 * | ||||
| 	 * @param string $classname The name of the class to load | ||||
| 	 */ | ||||
| 	function __autoload( $classname ) { | ||||
| 		PHPMailerAutoload( $classname ); | ||||
| 	} | ||||
| } | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -4,7 +4,8 @@ | ||||
|     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | ||||
| </head> | ||||
| <body class="body" style="background-color: whitesmoke !important;padding: 40px 0;line-height: 22px;width: 100%;"> | ||||
| <div class="contain" style="background-color: white;font-family: Arial, Helvetica, sans-serif; font-size: 16px;margin: auto;padding: 20px;max-width: 500px;width: 90%"> | ||||
| <div class="contain" | ||||
|      style="background-color: white;font-family: Arial, Helvetica, sans-serif; font-size: 16px;margin: auto;padding: 20px;max-width: 500px;width: 90%"> | ||||
|  | ||||
| </div> | ||||
| <div style="margin:20px auto;max-width: 500px;text-align: center;width: 90%;"> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user