From 4cb2d3726df7880c9e8fb34a2d9ab544252a1b07 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Thu, 4 Feb 2016 19:23:16 +0100 Subject: [PATCH] - [.] Module Dispatcher - [x] Module Request --- automate.php | 86 ++++++++++++++++++ config/jsongenerator_users.js | 24 +++++ config/managers.json | 5 -- config/modules.json | 25 ++++++ index.php | 1 + manager/ModuleDispatcher.php | 48 ++++++++++ manager/ModuleRequest.php | 155 ++++++++++++++++++++++++++++++++ manager/ResourcesDispatcher.php | 24 ++++- todo.md | 5 ++ 9 files changed, 365 insertions(+), 8 deletions(-) create mode 100644 automate.php create mode 100644 config/jsongenerator_users.js delete mode 100755 config/managers.json create mode 100755 config/modules.json create mode 100644 manager/ModuleDispatcher.php create mode 100644 manager/ModuleRequest.php diff --git a/automate.php b/automate.php new file mode 100644 index 0000000..afbb932 --- /dev/null +++ b/automate.php @@ -0,0 +1,86 @@ + TRUE si aucune erreur, sinon FALSE + * + */ + function insertUsersFromJSON(){ + $json = manager\ResourcesDispatcher::getRessource('/f/json/generated_users/conf'); + $json = json_decode( $json, true ); + + // Pour chaque entree + foreach( $json as $user ){ + + $insertRequest = manager\Database::getPDO()->prepare("INSERT INTO user(id_user, code, username, firstname, lastname, mail, password, status) + VALUES( + DEFAULT, + :code, + :username, + :firstname, + :lastname, + :mail, + :password, + :status + )"); + + $status = $insertRequest->execute(array( + ':code' => $user['code'], + ':username' => $user['username'], + ':firstname' => $user['firstname'], + ':lastname' => $user['lastname'], + ':mail' => $user['email'], + ':password' => $user['password'], + ':status' => $user['status'] + )); + + var_dump( $status ); + } + + return true; + + }// insertUsersFromJSON(); + + + + + + + + + /* TEST DU DISPATCHER DES MANAGERS + * + * @return nomRetour Description du retour + + */ + function testModuleDispatcher(){ + + $req1 = new manager\ModuleRequest('firstModule/a', array('id_user' => 10) ); + $req2 = manager\ModuleRequest::fromString('{"path": "firstModule/a", "data": [{"id_user":10}]}'); + + + + + $instance = new manager\ModuleDispatcher($req1); + var_dump( $instance ); + + return true; + + }testModuleDispatcher(); + + +?> \ No newline at end of file diff --git a/config/jsongenerator_users.js b/config/jsongenerator_users.js new file mode 100644 index 0000000..349ae78 --- /dev/null +++ b/config/jsongenerator_users.js @@ -0,0 +1,24 @@ +[ + '{{repeat(100)}}', + { + code: function(tags){ + + function randHex(){ return ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'][Math.floor(Math.random()*16)]; } + + return randHex()+randHex()+'-'+randHex()+randHex()+'-'+randHex()+randHex()+'-'+randHex()+randHex(); + }, + + + username: '{{firstName()}}', + firstname: '{{firstName()}}', + lastname: '{{surname()}}', + email: '{{email()}}', + password: function(tags){ + var result = ''; + for(var i = 0 ; i < 40 ; i++ ) + result += ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'][Math.floor(Math.random()*16)]; + return result; + }, + status: '{{integer(0,1)}}' + } +] \ No newline at end of file diff --git a/config/managers.json b/config/managers.json deleted file mode 100755 index 0954b60..0000000 --- a/config/managers.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "a" : "/firstManager", - "b" : "/secondManager", - "c" : "/thirdManager" -} \ No newline at end of file diff --git a/config/modules.json b/config/modules.json new file mode 100755 index 0000000..c80e321 --- /dev/null +++ b/config/modules.json @@ -0,0 +1,25 @@ +{ + "firstModule" : [ + "a", + "b", + "c", + "d", + "e" + ], + + "secondModule" : [ + "f", + "g", + "h", + "i", + "j" + ], + + "thirdModule" : [ + "k", + "l", + "m", + "n", + "o" + ] +} \ No newline at end of file diff --git a/index.php b/index.php index 1bfd0f8..5bd46f9 100755 --- a/index.php +++ b/index.php @@ -51,6 +51,7 @@ $R->post('.*', function(){ var_dump( 'Acces POST : '.$_GET['url'] ); + var_dump( $_POST ); }); diff --git a/manager/ModuleDispatcher.php b/manager/ModuleDispatcher.php new file mode 100644 index 0000000..937603a --- /dev/null +++ b/manager/ModuleDispatcher.php @@ -0,0 +1,48 @@ + La requete a dispatcher de type + * + * @return status Retourne si oui ou non tout s'est bien passe + * + */ + public function __construct($request){ + /* [1] On verifie le type de la requete + =========================================================*/ + if( !($request instanceof ModuleRequest) ) // Si c'est pas une instance de + return false; // On retourne FALSE, si erreur + + + + return true; + + } + + + + } + +?> \ No newline at end of file diff --git a/manager/ModuleRequest.php b/manager/ModuleRequest.php new file mode 100644 index 0000000..bf8ebb2 --- /dev/null +++ b/manager/ModuleRequest.php @@ -0,0 +1,155 @@ + Chemin de delegation ("module/methode") + * @data Tableau contenant les parametres utiles au traitement + * + * @return status Retourne si oui ou non tout s'est bien passe + * + */ + public function __construct($path=null, $data=null){ + // Si pas parametre manquant, on quitte + if( $path == null ) return false; + + /* [0] On met a jour la configuration + =========================================================*/ + // Modules specifies + $this->modules = json_decode( ResourcesDispatcher::getResource(self::$config_path), true ); + + // Gestion de l'erreur de parsage + if( $this->modules == null ) return false; + + + + /* [1] Verification des types des parametres + =========================================================*/ + // Type de @path + if( !is_string($path) ) // Si le type est incorrect + return false; // On retourne FALSE, si erreur + + // Type de @data (optionnel) + $data = (is_array($data)) ? $data : array(); + + + /* [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 + + + + /* [3] Construction de l'objet + =========================================================*/ + $this->data = $data; + + return true; // On retourne que tout s'est bien passe + + } + + + + + + /* 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 + 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 + 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 + return false; // On retourne FALSE, si erreur + + + + /* [4] Enregistrement du chemin et renvoi de SUCCESS + =========================================================*/ + $this->path = array( + 'module' => $module, + 'method' => $method + ); + + return true; + } + + + + + + /* 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); + } + + + + } + +?> \ No newline at end of file diff --git a/manager/ResourcesDispatcher.php b/manager/ResourcesDispatcher.php index 497a4d4..3e87c1a 100755 --- a/manager/ResourcesDispatcher.php +++ b/manager/ResourcesDispatcher.php @@ -5,7 +5,7 @@ class ResourcesDispatcher{ - // Constantes (a dispatcher dans un .conf) + // Constantes public static $extension_config_path = '/config/dispatcher-extensions.json'; public static $parents_config_path = '/config/dispatcher-tree.json'; @@ -22,8 +22,6 @@ * * @url L'url courante * - * @GET Arguments indirects (variable $_GET) - * * @return status Retourne si oui ou non tout s'est bien passe * */ @@ -32,10 +30,18 @@ =====================================================*/ // Extensions supportees $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; + self::$supported_extensions = $extensions_conf; // Dossiers supportes $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; + self::$supported_parents = $parents_conf; @@ -65,6 +71,18 @@ } + /* INCLUSION PHP D'UNE RESSOURCE UTILISANT LE DISPATCHER + * + * @route Route associee a une ressource + * + * @return content<*> Retourne le contenu de la ressource + * + */ + public static function getResource($route){ + return file_get_contents('http://'.$_SERVER['HTTP_HOST'].$route); + } + + /* FONCTION QUI VERIFIE LES DRAPEAUX * diff --git a/todo.md b/todo.md index 96f4ee4..0a84817 100755 --- a/todo.md +++ b/todo.md @@ -13,6 +13,11 @@ ############ # EN COURS # ############ +- [ ] Conception du systeme de delegation des managers + - [.] Module Dispatcher + - [x] Module Request + - [ ] Module Answer + - [x] Conception BDD + ameliorations - [x] Liste des tables - [x] Liste de attributs