- [ ] Conception du systeme de delegation des managers
- [x] Module Request - [x] Gestion des erreurs - [x] ResourcesDispatcher - [x] ModuleRequest
This commit is contained in:
parent
733350f185
commit
f7462b406d
13
automate.php
13
automate.php
|
@ -75,14 +75,13 @@
|
|||
// Creation de la requete
|
||||
$requete = new manager\ModuleRequest('firstModule/getUsers');
|
||||
|
||||
|
||||
var_dump( $requete->dispatch() );
|
||||
|
||||
|
||||
var_dump( $users );
|
||||
// var_dump($requete->error);
|
||||
|
||||
return true;
|
||||
|
||||
}//selectUsers();
|
||||
}selectUsers();
|
||||
|
||||
|
||||
|
||||
|
@ -99,15 +98,15 @@
|
|||
function testModuleDispatcher(){
|
||||
|
||||
// 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>
|
||||
$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;
|
||||
|
||||
}testModuleDispatcher();
|
||||
}//testModuleDispatcher();
|
||||
|
||||
|
||||
?>
|
|
@ -43,7 +43,7 @@
|
|||
// $R->get('settings/', function(){ include __ROOT__.'/view.php'; });
|
||||
|
||||
// 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
|
||||
$R->get('.+', function(){ header('Location: /dashboard/'); });
|
||||
|
|
|
@ -5,15 +5,18 @@
|
|||
|
||||
class DataBase{
|
||||
|
||||
/* ATTRIBUTS STATIQUES */
|
||||
public static $config_path = '/f/json/database/conf';
|
||||
private static $pdo;
|
||||
private static $instance;
|
||||
|
||||
|
||||
/* ATTRIBUTS */
|
||||
private $host;
|
||||
private $dbname;
|
||||
private $username;
|
||||
private $password;
|
||||
|
||||
private static $pdo;
|
||||
|
||||
private static $instance;
|
||||
|
||||
public function __construct($host, $dbname, $username, $password){
|
||||
$this->host = $host;
|
||||
|
@ -31,7 +34,9 @@
|
|||
if( self::$instance == null ){
|
||||
|
||||
// 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']);
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
||||
?>
|
|
@ -23,6 +23,7 @@
|
|||
// Attributs prives utiles (initialisation)
|
||||
private $path;
|
||||
private $data;
|
||||
public $error;
|
||||
|
||||
|
||||
|
||||
|
@ -39,23 +40,31 @@
|
|||
*/
|
||||
public function __construct($path=null, $data=null){
|
||||
// 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
|
||||
=========================================================*/
|
||||
// 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
|
||||
if( $this->modules == null ) return false;
|
||||
if( $this->modules == null ){
|
||||
$this->error = ManagerError::ParsingFailed;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* [1] Verification des types des parametres
|
||||
=========================================================*/
|
||||
// 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
|
||||
}
|
||||
|
||||
// Type de @data (optionnel)
|
||||
$data = (is_array($data)) ? $data : array();
|
||||
|
@ -64,13 +73,14 @@
|
|||
/* [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
|
||||
|
||||
return false;
|
||||
// Gestion d'erreur interne
|
||||
|
||||
|
||||
/* [3] Construction de l'objet
|
||||
=========================================================*/
|
||||
$this->data = $data;
|
||||
$this->error = ManagerError::Success;
|
||||
|
||||
return true; // On retourne que tout s'est bien passe
|
||||
|
||||
|
@ -79,16 +89,24 @@
|
|||
|
||||
|
||||
public function dispatch(){
|
||||
try{
|
||||
$result = call_user_func_array($this->getFunctionCaller(), $this->getData() );
|
||||
/* [1] On verifie qu'aucune erreur n'a ete signalee
|
||||
=========================================================*/
|
||||
if( $this->error != ManagerError::Success ) return false;
|
||||
|
||||
return $result;
|
||||
|
||||
// Si erreur, on retourne un code erreur
|
||||
}catch(Exception $e){
|
||||
var_dump('erreur de fonction');
|
||||
return 'ERROR';
|
||||
/* [2] On verifie que la methode est amorcable
|
||||
=========================================================*/
|
||||
if( !is_callable($this->getFunctionCaller()) ){
|
||||
$this->error = ManagerError::UncallableMethod;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/* [3] On amorce la methode
|
||||
=========================================================*/
|
||||
$returned = call_user_func_array( $this->getFunctionCaller(), $this->getData() );
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -135,8 +153,10 @@
|
|||
private function checkPath($path){
|
||||
/* [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;
|
||||
}
|
||||
|
||||
// On recupere les donnes de la regex
|
||||
$module = $matches[1];
|
||||
|
@ -144,14 +164,17 @@
|
|||
|
||||
/* [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
|
||||
|
||||
}
|
||||
|
||||
/* [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
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
namespace manager;
|
||||
|
||||
|
||||
class ResourcesDispatcher{
|
||||
class ResourceDispatcher{
|
||||
|
||||
// Constantes
|
||||
public static $extension_config_path = '/config/dispatcher-extensions.json';
|
||||
|
@ -16,6 +16,7 @@
|
|||
private $header;
|
||||
private $path;
|
||||
private $flags;
|
||||
public $error;
|
||||
|
||||
|
||||
/* CONSTRUCTEUR & AMORCAGE DU DISPATCHER
|
||||
|
@ -32,7 +33,10 @@
|
|||
$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;
|
||||
if( $extensions_conf == null ){
|
||||
$this->error = ManagerError::ParsingFailed;
|
||||
return false;
|
||||
}
|
||||
|
||||
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 );
|
||||
|
||||
// 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;
|
||||
|
||||
|
@ -52,20 +59,24 @@
|
|||
|
||||
/* [2] On check/cree les drapeaux avec ces donnees
|
||||
==================================================*/
|
||||
if( !$this->createFlags($serialFlags) ) // Creation des drapeaux
|
||||
return false; // On retourne FALSE, si erreur
|
||||
if( !$this->createFlags($serialFlags) ){ // Creation des drapeaux
|
||||
$this->error = ManagerError::InvalidFlags;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/* [3] On construit le chemin a partir des tags
|
||||
==================================================*/
|
||||
if( !$this->buildPath() ) // Construction du chemin
|
||||
return false; // On retourne FALSE, si erreur
|
||||
if( !$this->buildPath() ){ // Construction du chemin
|
||||
$this->error = ManagerError::FileNotFound;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* [4] On gere l'affichage pour l'appel externe
|
||||
==================================================*/
|
||||
$this->view();
|
||||
|
||||
|
||||
$this->error = ManagerError::Success;
|
||||
return true;
|
||||
|
||||
}
|
|
@ -19,8 +19,16 @@
|
|||
|
||||
|
||||
|
||||
public static function returnvar($var){ var_dump('return var'); return $var; }
|
||||
public static function printvar($var){ var_dump('var = '); var_dump($var); }
|
||||
public static function returnvar($var){
|
||||
var_dump('return var'); return $var;
|
||||
}
|
||||
|
||||
|
||||
public static function printvar($var){
|
||||
var_dump('var = '); var_dump($var);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue