- [.] Module Dispatcher

- [x] Module Request
This commit is contained in:
xdrm-brackets 2016-02-04 19:23:16 +01:00
parent f932f3ae06
commit 4cb2d3726d
9 changed files with 365 additions and 8 deletions

86
automate.php Normal file
View File

@ -0,0 +1,86 @@
<?php define('__ROOT__', dirname(__FILE__) );
require_once __ROOT__.'/manager/autoloader.php';
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);
/* NSERTION DES UTILISATEURS DANS LA BDD DEPUIS JSON
*
*
* @return status<Boolean> 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<typeRetour> 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();
?>

View File

@ -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)}}'
}
]

View File

@ -1,5 +0,0 @@
{
"a" : "/firstManager",
"b" : "/secondManager",
"c" : "/thirdManager"
}

25
config/modules.json Executable file
View File

@ -0,0 +1,25 @@
{
"firstModule" : [
"a",
"b",
"c",
"d",
"e"
],
"secondModule" : [
"f",
"g",
"h",
"i",
"j"
],
"thirdModule" : [
"k",
"l",
"m",
"n",
"o"
]
}

View File

@ -51,6 +51,7 @@
$R->post('.*', function(){ $R->post('.*', function(){
var_dump( 'Acces POST : '.$_GET['url'] ); var_dump( 'Acces POST : '.$_GET['url'] );
var_dump( $_POST );
}); });

View File

@ -0,0 +1,48 @@
<?php
namespace manager;
// FORMAT:
//
// path: "nomModule/nomMethode"
// data1: {donnee1}
// data2: {donnee2}
// ...
//
//
//
//
class ModuleDispatcher{
// Attributs prives utiles (initialisation)
private $modules;
private $flags;
/* CONSTRUCTEUR & AMORCAGE DU DISPATCHER
*
* @request<ModuleRequest> La requete a dispatcher de type <ModuleRequest>
*
* @return status<Boolean> 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 <ModuleRequest>
return false; // On retourne FALSE, si erreur
return true;
}
}
?>

155
manager/ModuleRequest.php Normal file
View File

@ -0,0 +1,155 @@
<?php
namespace manager;
// FORMAT:
//
// path: "nomModule/nomMethode"
// data1: {donnee1}
// data2: {donnee2}
// ...
//
//
//
//
class ModuleRequest{
// Constantes
public static $config_path = '/f/json/modules/conf';
// Attributs prives utiles (initialisation)
private $path;
private $data;
/* CONSTRUCTEUR D'UNE REQUETE DE MODULE
*
* @path<String> Chemin de delegation ("module/methode")
* @data<Array> Tableau contenant les parametres utiles au traitement
*
* @return status<Boolean> 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> String correspondant au chemin de delegation ("module/methode")
*
* @return validity<Boolean> 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<String> Json au format string contenant les donnees
*
* @return instance<ModuleRequest> Retourne un objet de type <ModuleRequest>
*
*/
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);
}
}
?>

View File

@ -5,7 +5,7 @@
class ResourcesDispatcher{ class ResourcesDispatcher{
// Constantes (a dispatcher dans un .conf) // Constantes
public static $extension_config_path = '/config/dispatcher-extensions.json'; public static $extension_config_path = '/config/dispatcher-extensions.json';
public static $parents_config_path = '/config/dispatcher-tree.json'; public static $parents_config_path = '/config/dispatcher-tree.json';
@ -22,8 +22,6 @@
* *
* @url<String> L'url courante * @url<String> L'url courante
* *
* @GET<Array> Arguments indirects (variable $_GET)
*
* @return status<Boolean> Retourne si oui ou non tout s'est bien passe * @return status<Boolean> Retourne si oui ou non tout s'est bien passe
* *
*/ */
@ -32,10 +30,18 @@
=====================================================*/ =====================================================*/
// Extensions supportees // Extensions supportees
$extensions_conf = json_decode( file_get_contents('http://'.$_SERVER['HTTP_HOST'].self::$extension_config_path), true ); $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; self::$supported_extensions = $extensions_conf;
// Dossiers supportes // Dossiers supportes
$parents_conf = json_decode( file_get_contents('http://'.$_SERVER['HTTP_HOST'].self::$parents_config_path), true ); $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; self::$supported_parents = $parents_conf;
@ -65,6 +71,18 @@
} }
/* INCLUSION PHP D'UNE RESSOURCE UTILISANT LE DISPATCHER
*
* @route<String> 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 /* FONCTION QUI VERIFIE LES DRAPEAUX
* *

View File

@ -13,6 +13,11 @@
############ ############
# EN COURS # # EN COURS #
############ ############
- [ ] Conception du systeme de delegation des managers
- [.] Module Dispatcher
- [x] Module Request
- [ ] Module Answer
- [x] Conception BDD + ameliorations - [x] Conception BDD + ameliorations
- [x] Liste des tables - [x] Liste des tables
- [x] Liste de attributs - [x] Liste de attributs