From 5402209a0890a690792542a8e1e137a5e1e3dfa2 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Thu, 4 Feb 2016 21:15:43 +0100 Subject: [PATCH] - [ ] Conception du systeme de delegation des managers - [x] Module Request - [x] Gestion des erreurs - [x] ResourcesDispatcher - [x] ModuleRequest --- automate.php | 36 ++++++++++-- index.php | 2 +- manager/Database.php | 13 +++-- manager/ManagerError.php | 46 +++++++++++++++ manager/ModuleRequest.php | 58 +++++++++++++------ ...sDispatcher.php => ResourceDispatcher.php} | 27 ++++++--- manager/module/firstModule.php | 12 +++- todo.md | 3 + 8 files changed, 158 insertions(+), 39 deletions(-) create mode 100644 manager/ManagerError.php rename manager/{ResourcesDispatcher.php => ResourceDispatcher.php} (90%) diff --git a/automate.php b/automate.php index 3235356..6e9ffff 100644 --- a/automate.php +++ b/automate.php @@ -75,10 +75,9 @@ // Creation de la requete $requete = new manager\ModuleRequest('firstModule/getUsers'); + var_dump( $requete->dispatch() ); - - - var_dump( $users ); + // var_dump($requete->error); return true; @@ -91,6 +90,31 @@ + /* AFFICHAGE DES UTILISATEURS DE LA BDD (MIS EN PAGE) + * + * + * @return status TRUE si aucune erreur, sinon FALSE + * + */ + function displayUsers(){ + + // Creation de la requete + $requete = new manager\ModuleRequest('firstModule/getUsers'); + $users = $requete->dispatch(); + + var_dump($users); + + return true; + + }displayUsers(); + + + + + + + + /* TEST DU DISPATCHER DES MANAGERS * * @return nomRetour Description du retour @@ -99,15 +123,15 @@ function testModuleDispatcher(){ // Creation d'une requete en objet - $req1 = new manager\ModuleRequest('firstModule/printvar', array('id_user' => 10, 'code' => '11-22-33-44') ); + $req1 = new manager\ModuleRequest('firstModule/returnvar', array('id_user' => 10, 'code' => '11-22-33-44') ); // Creation d'une requete a partir d'un json en $req2 = manager\ModuleRequest::fromString('{"path": "firstModule/returnvar", "data": {"id_user":10, "code":"11-22-33-44"}}'); - var_dump( $req2->dispatch() ); + var_dump( $req1->dispatch() ); return true; - }testModuleDispatcher(); + }//testModuleDispatcher(); ?> \ No newline at end of file diff --git a/index.php b/index.php index f80ab36..bc08b25 100755 --- a/index.php +++ b/index.php @@ -43,7 +43,7 @@ // $R->get('settings/', function(){ include __ROOT__.'/view.php'; }); // Dispatcher - $R->get('f(?:/([\w-]+))*/?', function(){ new \manager\ResourcesDispatcher($_GET['url']); }); + $R->get('f(?:/([\w-]+))*/?', function(){ new \manager\ResourceDispatcher($_GET['url']); }); // N'importe -> page d'accueil $R->get('.+', function(){ header('Location: /dashboard/'); }); diff --git a/manager/Database.php b/manager/Database.php index cf79f62..dbda89b 100755 --- a/manager/Database.php +++ b/manager/Database.php @@ -5,15 +5,18 @@ class DataBase{ + /* ATTRIBUTS STATIQUES */ + public static $config_path = '/f/json/database/conf'; + private static $pdo; + private static $instance; + + /* ATTRIBUTS */ private $host; private $dbname; private $username; private $password; - private static $pdo; - - private static $instance; public function __construct($host, $dbname, $username, $password){ $this->host = $host; @@ -31,7 +34,9 @@ if( self::$instance == null ){ // chargement de la configuration du server SQL - $conf = json_decode(file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/f/json/database/conf'), true); + $conf = json_decode( ResourceDispatcher::getResource(self::$config_path), true ); + + // creation de l'instance en fonction des parametres self::$instance = new DataBase($conf['host'], $conf['dbname'], $conf['user'], $conf['password']); } diff --git a/manager/ManagerError.php b/manager/ManagerError.php new file mode 100644 index 0000000..7260962 --- /dev/null +++ b/manager/ManagerError.php @@ -0,0 +1,46 @@ + \ No newline at end of file diff --git a/manager/ModuleRequest.php b/manager/ModuleRequest.php index 61ea372..de2d740 100644 --- a/manager/ModuleRequest.php +++ b/manager/ModuleRequest.php @@ -23,6 +23,7 @@ // Attributs prives utiles (initialisation) private $path; private $data; + public $error; @@ -39,23 +40,31 @@ */ public function __construct($path=null, $data=null){ // Si pas parametre manquant, on quitte - if( $path == null ) return false; + if( $path == null ){ + $this->error = ManagerError::MissingPath; + return false; + } /* [0] On met a jour la configuration =========================================================*/ // Modules specifies - $this->modules = json_decode( ResourcesDispatcher::getResource(self::$config_path), true ); + $this->modules = json_decode( ResourceDispatcher::getResource(self::$config_path), true ); // Gestion de l'erreur de parsage - if( $this->modules == null ) return false; + if( $this->modules == null ){ + $this->error = ManagerError::ParsingFailed; + return false; + } /* [1] Verification des types des parametres =========================================================*/ // Type de @path - if( !is_string($path) ) // Si le type est incorrect + if( !is_string($path) ){ // Si le type est incorrect + $this->error = ManagerError::WrongPathType; return false; // On retourne FALSE, si erreur + } // Type de @data (optionnel) $data = (is_array($data)) ? $data : array(); @@ -64,14 +73,15 @@ /* [2] Verification du chemin (existence module+methode) =========================================================*/ if( !$this->checkPath($path) ) // Verification de la coherence du chemin + attribution - return false; // On retourne FALSE, si erreur - + return false; + // Gestion d'erreur interne /* [3] Construction de l'objet =========================================================*/ $this->data = $data; - + $this->error = ManagerError::Success; + return true; // On retourne que tout s'est bien passe } @@ -79,16 +89,23 @@ public function dispatch(){ - try{ - $result = call_user_func_array($this->getFunctionCaller(), $this->getData() ); + /* [1] On verifie qu'aucune erreur n'a ete signalee + =========================================================*/ + if( $this->error != ManagerError::Success ) return false; - return $result; - // Si erreur, on retourne un code erreur - }catch(Exception $e){ - var_dump('erreur de fonction'); - return 'ERROR'; + /* [2] On verifie que la methode est amorcable + =========================================================*/ + if( !is_callable($this->getFunctionCaller()) ){ + $this->error = ManagerError::UncallableMethod; + return false; } + + + /* [3] On amorce la methode + =========================================================*/ + return call_user_func_array( $this->getFunctionCaller(), $this->getData() ); + } @@ -135,8 +152,10 @@ private function checkPath($path){ /* [1] Verification format general =========================================================*/ - if( !preg_match('#^([\w_-]+)/([\w_-]+)$#i', $path, $matches) ) // Si mauvais format + if( !preg_match('#^([\w_-]+)/([\w_-]+)$#i', $path, $matches) ){ // Si mauvais format + $this->error = ManagerError::WrongPathType; return false; + } // On recupere les donnes de la regex $module = $matches[1]; @@ -144,14 +163,17 @@ /* [2] Verification de l'existence du module (conf) =========================================================*/ - if( !array_key_exists($module, $this->modules) ) // Si le module n'est pas specifie dans la conf + if( !array_key_exists($module, $this->modules) ){ // Si le module n'est pas specifie dans la conf + $this->error = ManagerError::UnknownModule; return false; // On retourne FALSE, si erreur - + } /* [3] Verification de l'existence de la methode (conf) =========================================================*/ - if( array_search($method, $this->modules[$module]) === false ) // Si la methode n'est pas specifie dans la conf + if( array_search($method, $this->modules[$module]) === false ){ // Si la methode n'est pas specifie dans la conf + $this->error = ManagerError::UnknownMethod; return false; // On retourne FALSE, si erreur + } diff --git a/manager/ResourcesDispatcher.php b/manager/ResourceDispatcher.php similarity index 90% rename from manager/ResourcesDispatcher.php rename to manager/ResourceDispatcher.php index 3e87c1a..f862f4e 100755 --- a/manager/ResourcesDispatcher.php +++ b/manager/ResourceDispatcher.php @@ -3,7 +3,7 @@ namespace manager; - class ResourcesDispatcher{ + class ResourceDispatcher{ // Constantes public static $extension_config_path = '/config/dispatcher-extensions.json'; @@ -16,6 +16,7 @@ private $header; private $path; private $flags; + public $error; /* CONSTRUCTEUR & AMORCAGE DU DISPATCHER @@ -32,7 +33,10 @@ $extensions_conf = json_decode( file_get_contents('http://'.$_SERVER['HTTP_HOST'].self::$extension_config_path), true ); // Gestion de l'erreur de parsage - if( $extensions_conf == null ) return false; + if( $extensions_conf == null ){ + $this->error = ManagerError::ParsingFailed; + return false; + } self::$supported_extensions = $extensions_conf; @@ -40,7 +44,10 @@ $parents_conf = json_decode( file_get_contents('http://'.$_SERVER['HTTP_HOST'].self::$parents_config_path), true ); // Gestion de l'erreur de parsage - if( $parents_conf == null ) return false; + if( $parents_conf == null ){ + $this->error = ManagerError::ParsingFailed; + return false; + } self::$supported_parents = $parents_conf; @@ -52,20 +59,24 @@ /* [2] On check/cree les drapeaux avec ces donnees ==================================================*/ - if( !$this->createFlags($serialFlags) ) // Creation des drapeaux - return false; // On retourne FALSE, si erreur + if( !$this->createFlags($serialFlags) ){ // Creation des drapeaux + $this->error = ManagerError::InvalidFlags; + return false; + } /* [3] On construit le chemin a partir des tags ==================================================*/ - if( !$this->buildPath() ) // Construction du chemin - return false; // On retourne FALSE, si erreur + if( !$this->buildPath() ){ // Construction du chemin + $this->error = ManagerError::FileNotFound; + return false; + } /* [4] On gere l'affichage pour l'appel externe ==================================================*/ $this->view(); - + $this->error = ManagerError::Success; return true; } diff --git a/manager/module/firstModule.php b/manager/module/firstModule.php index 22bacaa..09dabb0 100644 --- a/manager/module/firstModule.php +++ b/manager/module/firstModule.php @@ -19,8 +19,16 @@ - public static function returnvar($var){ var_dump('return var'); return $var; } - public static function printvar($var){ var_dump('var = '); var_dump($var); } + public static function returnvar($var){ + var_dump('return var'); return $var; + } + + + public static function printvar($var){ + var_dump('var = '); var_dump($var); + } + + diff --git a/todo.md b/todo.md index 784d52c..90a2230 100755 --- a/todo.md +++ b/todo.md @@ -34,6 +34,9 @@ ######## # FAIT # ######## +- [x] Gestion des erreurs + - [x] ResourcesDispatcher + - [x] ModuleRequest - [x] Gestion JS/PHP de la navigation - [x] Gestion de l'affichage des pages en fonction du sous-menu - [x] Correction de la navigation