From 932b0ae0b37c871ff98a74c767117a20cb15eaba Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Fri, 5 Feb 2016 00:07: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) - [.] Module Answer --- automate.php | 17 ++-- index.php | 16 ++- manager/ModuleAnswer.php | 141 +++++---------------------- manager/ModuleRequest.php | 34 ++++--- manager/module/userDefaultModule.php | 4 +- todo.md | 4 +- 6 files changed, 70 insertions(+), 146 deletions(-) diff --git a/automate.php b/automate.php index c3224c4..1ab9db5 100755 --- a/automate.php +++ b/automate.php @@ -74,14 +74,14 @@ // Creation de la requete $requete = new manager\ModuleRequest('firstModule/getUsers'); + $answer = $requete->dispatch(); - - var_dump( $requete->dispatch() ); + var_dump( $answer->serialize() ); // var_dump($requete->error); return true; - }//selectUsers(); + }selectUsers(); @@ -99,14 +99,19 @@ function displayUsers(){ // Creation de la requete - $requete = new \manager\ModuleRequest('firstModule/getUsers'); - $users = $requete->dispatch(); + $request = new \manager\ModuleRequest('firstModule/getUsers'); + + // Debug error + var_dump( $request->error ); + var_dump( \manager\ManagerError::explicit($request->error) ); + + $users = $request->dispatch(); return true; - }displayUsers(); + }//displayUsers(); diff --git a/index.php b/index.php index e68e6a7..ddee0bf 100755 --- a/index.php +++ b/index.php @@ -49,10 +49,18 @@ $request = \manager\ModuleRequest::fromURL($_POST); // Si requete correcte - if( $request->error == \manager\ManagerError::Success ) - var_dump( $request->dispatch() ); - else - echo 'request error'; + if( $request->error == \manager\ManagerError::Success ){ + $answer = $request->dispatch(); + $answer->append('ModuleError', false); + + echo $answer->serialize(); // On renvoie la reponse + + // Si requete erronee + }else{ + $answer = new \manager\ModuleAnswer(); + $answer->append('ModuleError', true); + echo $answer->serialize(); + } }); // N'importe -> page d'accueil diff --git a/manager/ModuleAnswer.php b/manager/ModuleAnswer.php index 6906afb..62bce8a 100755 --- a/manager/ModuleAnswer.php +++ b/manager/ModuleAnswer.php @@ -29,29 +29,8 @@ * */ public function __construct(){ - - } - - - - public function dispatch(){ - /* [1] On verifie qu'aucune erreur n'a ete signalee - =========================================================*/ - if( $this->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() ); - + $this->data = array(); + $this->error = ManagerError::Success; } @@ -59,28 +38,18 @@ - /* DESERIALISATION ET CREATION D'UN OBJET + + /* AJOUTE UNE DONNEE A LA REPONSE * - * @jsonString Json au format string contenant les donnees - * - * @return instance Retourne un objet de type + * @key Le nom de la valeur a ajouter + * @value La valeur a ajouter * */ - public static function fromString($jsonString){ - $json = json_decode( $jsonString, true ); + public function append($key, $value){ + // Ajoute une entree pour la cle @key et de valeur @value + $this->data[$key] = $value; - // 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); + return $this; } @@ -88,28 +57,18 @@ - /* DESERIALISATION A PARTIR DES DONNEES POST + + + /* AJOUTE TOUTES LES DONNEES A LA REPONSE * - * @post Tableau des donnes $_POST => @path + @data (opt) - * - * @return instance Retourne un objet de type + * @dataset Le tableau associatif correspondant a la reponse * */ - 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); + public function appendAll($dataset){ + // Ajoute une entree pour la cle @key et de valeur @value + $this->data = $dataset; + return $this; } @@ -117,71 +76,15 @@ - /* VERIFICATION DU FORMAT ET DE LA COHERENCE DU CHEMIN SPECIFIE + /* SERIALISATION A PARTIR DES DONNEES * - * @path String correspondant au chemin de delegation ("module/methode") - * - * @return validity Retourne si oui ou non l'objet est correct + * @return json Retourne les donnees serialisees * */ - 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; - } + public function serialize(){ - // On recupere les donnes de la regex - $module = $matches[1]; - $method = $matches[2]; + return json_encode($this->data); - /* [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; } diff --git a/manager/ModuleRequest.php b/manager/ModuleRequest.php index a3bdcd2..5e96e64 100755 --- a/manager/ModuleRequest.php +++ b/manager/ModuleRequest.php @@ -23,8 +23,12 @@ // Attributs prives utiles (initialisation) private $path; private $data; - public $error; + // Contiendra la reponse a la requete + public $answer; + + // Contiendra l'etat de la requete + public $error; @@ -88,24 +92,36 @@ + /* EXECUTE LE TRAITEMENT ASSOCIE ET REMPLIE LA REPONSE + * + * @return answer Retourne une reponse de type si tout s'est bien passe + * + */ public function dispatch(){ /* [1] On verifie qu'aucune erreur n'a ete signalee =========================================================*/ - if( $this->error != ManagerError::Success ) return false; + if( $this->error != ManagerError::Success ) return new ModuleAnswer(); /* [2] On verifie que la methode est amorcable =========================================================*/ if( !is_callable($this->getFunctionCaller()) ){ $this->error = ManagerError::UncallableMethod; - return false; + return new ModuleAnswer(); } /* [3] On amorce la methode =========================================================*/ - return call_user_func_array( $this->getFunctionCaller(), $this->getData() ); + $returned = call_user_func_array( $this->getFunctionCaller(), $this->data ); + + /* [4] Gestion de la reponse + =========================================================*/ + $answer = new ModuleAnswer(); + $answer->appendAll($returned); + + return $answer; } @@ -229,16 +245,6 @@ 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; - } - - } diff --git a/manager/module/userDefaultModule.php b/manager/module/userDefaultModule.php index 69fdc7d..9455b8a 100755 --- a/manager/module/userDefaultModule.php +++ b/manager/module/userDefaultModule.php @@ -6,7 +6,9 @@ public static function getAll(){ - return \manager\Database::getPDO()->query("SELECT * FROM user ORDER BY id_user")->fetchAll(); + return array( + 'users' => \manager\Database::getPDO()->query("SELECT * FROM user ORDER BY id_user")->fetchAll() + ); } diff --git a/todo.md b/todo.md index 474cd95..35be074 100755 --- a/todo.md +++ b/todo.md @@ -15,12 +15,12 @@ ############ - [x] Gestion des erreurs - [x] Explicitation -- [ ] Conception du systeme de delegation des managers +- [.] Conception du systeme de delegation des managers - [x] Module Request - [x] Inline (en php) - [x] Serialise (en json ) - [x] Par url (POST) - - [ ] Module Answer + - [.] Module Answer - [x] Conception BDD + ameliorations - [x] Liste des tables