From 2b9fc4c08068ae52f188785f8fbc39ac45769dfa Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Thu, 4 Feb 2016 23:45:03 +0100 Subject: [PATCH] - [x] Gestion des erreurs - [x] Explicitation - [ ] Conception du systeme de delegation des managers - [x] Module Request - [x] Inline (en php) - [x] Serialise (en json ) - [x] Par url (POST) --- automate.php | 4 +- config/jsongenerator_users.js | 0 config/modules.json | 4 + index.php | 24 +++- manager/ManagerError.php | 48 +++++-- manager/ModuleAnswer.php | 191 +++++++++++++++++++++++++++ manager/ModuleRequest.php | 29 ++++ manager/ResourceDispatcher.php | 2 +- manager/autoloader.php | 11 ++ manager/module/firstModule.php | 0 manager/module/userDefaultModule.php | 39 ++++++ todo.md | 5 + view/users.php | 26 +++- 13 files changed, 359 insertions(+), 24 deletions(-) mode change 100644 => 100755 automate.php mode change 100644 => 100755 config/jsongenerator_users.js mode change 100644 => 100755 manager/ManagerError.php create mode 100755 manager/ModuleAnswer.php mode change 100644 => 100755 manager/ModuleRequest.php mode change 100644 => 100755 manager/module/firstModule.php create mode 100755 manager/module/userDefaultModule.php diff --git a/automate.php b/automate.php old mode 100644 new mode 100755 index cba5352..c3224c4 --- a/automate.php +++ b/automate.php @@ -99,10 +99,10 @@ function displayUsers(){ // Creation de la requete - $requete = new manager\ModuleRequest('firstModule/getUsers'); + $requete = new \manager\ModuleRequest('firstModule/getUsers'); $users = $requete->dispatch(); - var_dump($users); + return true; diff --git a/config/jsongenerator_users.js b/config/jsongenerator_users.js old mode 100644 new mode 100755 diff --git a/config/modules.json b/config/modules.json index 7cb8a81..2f12cf6 100755 --- a/config/modules.json +++ b/config/modules.json @@ -1,4 +1,8 @@ { + "userDefaultModule" :[ + "getAll" + ], + "firstModule" : [ "getUsers", "returnvar", diff --git a/index.php b/index.php index bc08b25..e68e6a7 100755 --- a/index.php +++ b/index.php @@ -1,12 +1,11 @@ get('f(?:/([\w-]+))*/?', function(){ new \manager\ResourceDispatcher($_GET['url']); }); + // Api + $R->post('api/?', function(){ + $request = \manager\ModuleRequest::fromURL($_POST); + + // Si requete correcte + if( $request->error == \manager\ManagerError::Success ) + var_dump( $request->dispatch() ); + else + echo 'request error'; + }); + // N'importe -> page d'accueil $R->get('.+', function(){ header('Location: /dashboard/'); }); - $R->post('.*', function(){ - var_dump( 'Acces POST : '.$_GET['url'] ); - var_dump( $_POST ); - }); + // $R->post('.*', function(){ + // var_dump( 'Acces POST : '.$_GET['url'] ); + // var_dump( $_POST ); + // }); diff --git a/manager/ManagerError.php b/manager/ManagerError.php old mode 100644 new mode 100755 index 7260962..c2cbf41 --- a/manager/ManagerError.php +++ b/manager/ManagerError.php @@ -4,42 +4,68 @@ namespace manager; - abstract class ManagerError{ + class ManagerError{ /* SUCCESS */ - const Success = 0; + const Success = 0; /* Parsage json */ - const ParsingFailed = 1; + const ParsingFailed = 1; /* ResourceDispatcher */ // Drapeaux invalides - const InvalidFlags = 2; + const InvalidFlags = 2; // Fichier inexistant - const FileNotFound = 3; + const UnreachableResource = 3; /* ModuleRequest */ // Le @path n'est pas renseigne - const MissingPath = 4; + const MissingPath = 4; // Le @path n'est pas du bon type - const WrongPathType = 5; + const WrongPathType = 5; // Verification de la coherence du chemin (existe dans la conf) - const WrongPath = 6; + const WrongPath = 6; // Module non specifie dans la conf - const UnknownModule = 7; + const UnknownModule = 7; // Methode non specifie pour ce Module dans la conf - const UnknownMethod = 8; + const UnknownMethod = 8; // Methode inamorcable - const UncallableMethod = 9; + const UncallableMethod = 9; + + + + /* EXPLICITE UN CODE D'ERREUR + * + * @error Code d'erreur + * + * @return explicit Description explicite du code d'erreur + * + */ + public static function explicit($error){ + switch($error){ + case self::Success: return "Tout s'est bien deroule"; break; + case self::ParsingFailed: return "La lecture du fichier JSON a echoue"; break; + case self::InvalidFlags: return "Les specifications (drapeaux) sont incorrects"; break; + case self::UnreachableResource: return "La ressource n'existe pas (404)"; break; + case self::MissingPath: return "Le chemin de delegation n'a pas ete renseigne"; break; + case self::WrongPathType: return "Le chemin de delegation n'est pas du bon type (chaine de caractere)"; break; + case self::WrongPath: return "Le chemin de delegation est incorrect ('nomModule/nomMethode')"; break; + case self::UnknownModule: return "Le module n'existe pas"; break; + case self::UnknownMethod: return "Le methode n'existe pas"; break; + case self::UncallableMethod: return "Le methode n'est pas amorcable"; break; + } + + return 'Aucune erreur trouvee'; + } } diff --git a/manager/ModuleAnswer.php b/manager/ModuleAnswer.php new file mode 100755 index 0000000..6906afb --- /dev/null +++ b/manager/ModuleAnswer.php @@ -0,0 +1,191 @@ +error != ManagerError::Success ) return false; + + + /* [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() ); + + } + + + + + + + /* DESERIALISATION ET CREATION D'UN OBJET + * + * @jsonString Json au format string contenant les donnees + * + * @return instance Retourne un objet de type + * + */ + public static function fromString($jsonString){ + $json = json_decode( $jsonString, true ); + + // Verification du parsage + if( $json == null ) + return new ModuleRequest(); + + // Verification des parametres + if( !isset($json['path']) ) + return new ModuleRequest(); + + // On definit $data au cas ou il soit vide + $data = (isset($json['data'])) ? $json['data'] : array(); + + return new ModuleRequest($json['path'], $data); + } + + + + + + + /* DESERIALISATION A PARTIR DES DONNEES POST + * + * @post Tableau des donnes $_POST => @path + @data (opt) + * + * @return instance Retourne un objet de type + * + */ + public static function fromURL($post){ + /* [1] On verifie que le @path est renseigne + =========================================================*/ + if( !isset($post['path']) ) + return new ModuleRequest(); + + /* [2] On verifie que @data est renseigne + =========================================================*/ + $data = (isset($post['data'])) ? $post['data'] : array(); + + + /* [3] On retourne une instance de + =========================================================*/ + return new ModuleRequest($post['path'], $data); + + } + + + + + + + /* VERIFICATION DU FORMAT ET DE LA COHERENCE DU CHEMIN SPECIFIE + * + * @path String correspondant au chemin de delegation ("module/methode") + * + * @return validity Retourne si oui ou non l'objet est correct + * + */ + private function checkPath($path){ + /* [1] Verification format general + =========================================================*/ + 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]; + $method = $matches[2]; + + /* [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 + $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 + $this->error = ManagerError::UnknownMethod; + return false; // On retourne FALSE, si erreur + } + + + + /* [4] Enregistrement du chemin et renvoi de SUCCESS + =========================================================*/ + $this->path = array( + 'module' => $module, + 'method' => $method + ); + + return true; + } + + + + + + /* RENVOI LE CHEMIN D'AMORCAGE DE LA METHODE + * + * @return path Retourne le chemin d'amorcage de la requete + * + */ + private function getFunctionCaller(){ + return '\\manager\\module\\'.$this->path['module'].'::'.$this->path['method']; + } + + /* RENVOI LES DONNEES + * + * @return data Retourne les donnees de la requete + * + */ + private function getData(){ + return $this->data; + } + + + + } + +?> \ No newline at end of file diff --git a/manager/ModuleRequest.php b/manager/ModuleRequest.php old mode 100644 new mode 100755 index de2d740..a3bdcd2 --- a/manager/ModuleRequest.php +++ b/manager/ModuleRequest.php @@ -142,6 +142,35 @@ + /* DESERIALISATION A PARTIR DES DONNEES POST + * + * @post Tableau des donnes $_POST => @path + @data (opt) + * + * @return instance Retourne un objet de type + * + */ + public static function fromURL($post){ + /* [1] On verifie que le @path est renseigne + =========================================================*/ + if( !isset($post['path']) ) + return new ModuleRequest(); + + /* [2] On verifie que @data est renseigne + =========================================================*/ + $data = (isset($post['data'])) ? $post['data'] : array(); + + + /* [3] On retourne une instance de + =========================================================*/ + return new ModuleRequest($post['path'], $data); + + } + + + + + + /* VERIFICATION DU FORMAT ET DE LA COHERENCE DU CHEMIN SPECIFIE * * @path String correspondant au chemin de delegation ("module/methode") diff --git a/manager/ResourceDispatcher.php b/manager/ResourceDispatcher.php index f862f4e..24d6852 100755 --- a/manager/ResourceDispatcher.php +++ b/manager/ResourceDispatcher.php @@ -68,7 +68,7 @@ /* [3] On construit le chemin a partir des tags ==================================================*/ if( !$this->buildPath() ){ // Construction du chemin - $this->error = ManagerError::FileNotFound; + $this->error = ManagerError::UnreachableResource; return false; } diff --git a/manager/autoloader.php b/manager/autoloader.php index eb5d9af..c3267b8 100755 --- a/manager/autoloader.php +++ b/manager/autoloader.php @@ -1,5 +1,16 @@ query("SELECT * FROM user ORDER BY id_user")->fetchAll(); + } + + + + + + + + + + + + public static function returnvar($var){ + var_dump('return var'); return $var; + } + + + public static function printvar($var){ + var_dump('var = '); var_dump($var); + } + + + + + + + } + + +?> \ No newline at end of file diff --git a/todo.md b/todo.md index 90a2230..474cd95 100755 --- a/todo.md +++ b/todo.md @@ -13,8 +13,13 @@ ############ # EN COURS # ############ +- [x] Gestion des erreurs + - [x] Explicitation - [ ] Conception du systeme de delegation des managers - [x] Module Request + - [x] Inline (en php) + - [x] Serialise (en json ) + - [x] Par url (POST) - [ ] Module Answer - [x] Conception BDD + ameliorations diff --git a/view/users.php b/view/users.php index 2b713b8..383a787 100755 --- a/view/users.php +++ b/view/users.php @@ -40,8 +40,28 @@ +$v) + array_push($post, $k); + + $sublink = $post[0]; -
- Bienvenue sur la page de gestion des UTILISATEURS -
\ No newline at end of file + /* PAGE DES STATISTIQUES + * + */ + if( $sublink == 'displayall' ){ + + // On recupere tous les utilisateurs + debug(); + $request = new \manager\ModuleRequest('userDefaultModule/getAll'); + $users = $request->dispatch(); + + echo '
'; + echo 'Liste des utilisateurs:
'; + var_dump( $users ); + echo '
'; + + }