- [ ] Conception du systeme de delegation des managers

- [x] Module Request
- [x] Gestion des erreurs
	- [x] ResourcesDispatcher
	- [x] ModuleRequest
This commit is contained in:
xdrm-brackets 2016-02-04 21:15:43 +01:00
parent cda7389c01
commit 5402209a08
8 changed files with 158 additions and 39 deletions

View File

@ -75,10 +75,9 @@
// Creation de la requete // Creation de la requete
$requete = new manager\ModuleRequest('firstModule/getUsers'); $requete = new manager\ModuleRequest('firstModule/getUsers');
var_dump( $requete->dispatch() ); var_dump( $requete->dispatch() );
// var_dump($requete->error);
var_dump( $users );
return true; return true;
@ -91,6 +90,31 @@
/* AFFICHAGE DES UTILISATEURS DE LA BDD (MIS EN PAGE)
*
*
* @return status<Boolean> 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 /* TEST DU DISPATCHER DES MANAGERS
* *
* @return nomRetour<typeRetour> Description du retour * @return nomRetour<typeRetour> Description du retour
@ -99,15 +123,15 @@
function testModuleDispatcher(){ function testModuleDispatcher(){
// Creation d'une requete en objet // 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 <String> // Creation d'une requete a partir d'un json en <String>
$req2 = manager\ModuleRequest::fromString('{"path": "firstModule/returnvar", "data": {"id_user":10, "code":"11-22-33-44"}}'); $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; return true;
}testModuleDispatcher(); }//testModuleDispatcher();
?> ?>

View File

@ -43,7 +43,7 @@
// $R->get('settings/', function(){ include __ROOT__.'/view.php'; }); // $R->get('settings/', function(){ include __ROOT__.'/view.php'; });
// Dispatcher // 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 // N'importe -> page d'accueil
$R->get('.+', function(){ header('Location: /dashboard/'); }); $R->get('.+', function(){ header('Location: /dashboard/'); });

View File

@ -5,15 +5,18 @@
class DataBase{ class DataBase{
/* ATTRIBUTS STATIQUES */
public static $config_path = '/f/json/database/conf';
private static $pdo;
private static $instance;
/* ATTRIBUTS */ /* ATTRIBUTS */
private $host; private $host;
private $dbname; private $dbname;
private $username; private $username;
private $password; private $password;
private static $pdo;
private static $instance;
public function __construct($host, $dbname, $username, $password){ public function __construct($host, $dbname, $username, $password){
$this->host = $host; $this->host = $host;
@ -31,7 +34,9 @@
if( self::$instance == null ){ if( self::$instance == null ){
// chargement de la configuration du server SQL // 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']); self::$instance = new DataBase($conf['host'], $conf['dbname'], $conf['user'], $conf['password']);
} }

46
manager/ManagerError.php Normal file
View File

@ -0,0 +1,46 @@
<?php
namespace manager;
abstract class ManagerError{
/* SUCCESS */
const Success = 0;
/* Parsage json */
const ParsingFailed = 1;
/* ResourceDispatcher */
// Drapeaux invalides
const InvalidFlags = 2;
// Fichier inexistant
const FileNotFound = 3;
/* ModuleRequest */
// Le @path n'est pas renseigne
const MissingPath = 4;
// Le @path n'est pas du bon type
const WrongPathType = 5;
// Verification de la coherence du chemin (existe dans la conf)
const WrongPath = 6;
// Module non specifie dans la conf
const UnknownModule = 7;
// Methode non specifie pour ce Module dans la conf
const UnknownMethod = 8;
// Methode inamorcable
const UncallableMethod = 9;
}
?>

View File

@ -23,6 +23,7 @@
// Attributs prives utiles (initialisation) // Attributs prives utiles (initialisation)
private $path; private $path;
private $data; private $data;
public $error;
@ -39,23 +40,31 @@
*/ */
public function __construct($path=null, $data=null){ public function __construct($path=null, $data=null){
// Si pas parametre manquant, on quitte // 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 /* [0] On met a jour la configuration
=========================================================*/ =========================================================*/
// Modules specifies // 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 // 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 /* [1] Verification des types des parametres
=========================================================*/ =========================================================*/
// Type de @path // 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 return false; // On retourne FALSE, si erreur
}
// Type de @data (optionnel) // Type de @data (optionnel)
$data = (is_array($data)) ? $data : array(); $data = (is_array($data)) ? $data : array();
@ -64,13 +73,14 @@
/* [2] Verification du chemin (existence module+methode) /* [2] Verification du chemin (existence module+methode)
=========================================================*/ =========================================================*/
if( !$this->checkPath($path) ) // Verification de la coherence du chemin + attribution 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 /* [3] Construction de l'objet
=========================================================*/ =========================================================*/
$this->data = $data; $this->data = $data;
$this->error = ManagerError::Success;
return true; // On retourne que tout s'est bien passe return true; // On retourne que tout s'est bien passe
@ -79,16 +89,23 @@
public function dispatch(){ public function dispatch(){
try{ /* [1] On verifie qu'aucune erreur n'a ete signalee
$result = call_user_func_array($this->getFunctionCaller(), $this->getData() ); =========================================================*/
if( $this->error != ManagerError::Success ) return false;
return $result;
// Si erreur, on retourne un code erreur /* [2] On verifie que la methode est amorcable
}catch(Exception $e){ =========================================================*/
var_dump('erreur de fonction'); if( !is_callable($this->getFunctionCaller()) ){
return 'ERROR'; $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){ private function checkPath($path){
/* [1] Verification format general /* [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; return false;
}
// On recupere les donnes de la regex // On recupere les donnes de la regex
$module = $matches[1]; $module = $matches[1];
@ -144,14 +163,17 @@
/* [2] Verification de l'existence du module (conf) /* [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 return false; // On retourne FALSE, si erreur
}
/* [3] Verification de l'existence de la methode (conf) /* [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 return false; // On retourne FALSE, si erreur
}

View File

@ -3,7 +3,7 @@
namespace manager; namespace manager;
class ResourcesDispatcher{ class ResourceDispatcher{
// Constantes // Constantes
public static $extension_config_path = '/config/dispatcher-extensions.json'; public static $extension_config_path = '/config/dispatcher-extensions.json';
@ -16,6 +16,7 @@
private $header; private $header;
private $path; private $path;
private $flags; private $flags;
public $error;
/* CONSTRUCTEUR & AMORCAGE DU DISPATCHER /* CONSTRUCTEUR & AMORCAGE DU DISPATCHER
@ -32,7 +33,10 @@
$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 // 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; 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 ); $parents_conf = json_decode( file_get_contents('http://'.$_SERVER['HTTP_HOST'].self::$parents_config_path), true );
// Gestion de l'erreur de parsage // 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; self::$supported_parents = $parents_conf;
@ -52,20 +59,24 @@
/* [2] On check/cree les drapeaux avec ces donnees /* [2] On check/cree les drapeaux avec ces donnees
==================================================*/ ==================================================*/
if( !$this->createFlags($serialFlags) ) // Creation des drapeaux if( !$this->createFlags($serialFlags) ){ // Creation des drapeaux
return false; // On retourne FALSE, si erreur $this->error = ManagerError::InvalidFlags;
return false;
}
/* [3] On construit le chemin a partir des tags /* [3] On construit le chemin a partir des tags
==================================================*/ ==================================================*/
if( !$this->buildPath() ) // Construction du chemin if( !$this->buildPath() ){ // Construction du chemin
return false; // On retourne FALSE, si erreur $this->error = ManagerError::FileNotFound;
return false;
}
/* [4] On gere l'affichage pour l'appel externe /* [4] On gere l'affichage pour l'appel externe
==================================================*/ ==================================================*/
$this->view(); $this->view();
$this->error = ManagerError::Success;
return true; return true;
} }

View File

@ -19,8 +19,16 @@
public static function returnvar($var){ var_dump('return var'); return $var; } public static function returnvar($var){
public static function printvar($var){ var_dump('var = '); var_dump($var); } var_dump('return var'); return $var;
}
public static function printvar($var){
var_dump('var = '); var_dump($var);
}

View File

@ -34,6 +34,9 @@
######## ########
# FAIT # # FAIT #
######## ########
- [x] Gestion des erreurs
- [x] ResourcesDispatcher
- [x] ModuleRequest
- [x] Gestion JS/PHP de la navigation - [x] Gestion JS/PHP de la navigation
- [x] Gestion de l'affichage des pages en fonction du sous-menu - [x] Gestion de l'affichage des pages en fonction du sous-menu
- [x] Correction de la navigation - [x] Correction de la navigation