- [ ] 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 733350f185
commit 846c0e1951
8 changed files with 158 additions and 39 deletions

View File

@ -75,10 +75,9 @@
// Creation de la requete
$requete = new manager\ModuleRequest('firstModule/getUsers');
var_dump( $requete->dispatch() );
var_dump( $users );
// var_dump($requete->error);
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
*
* @return nomRetour<typeRetour> Description du retour
@ -99,15 +123,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();
?>

View File

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

View File

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

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)
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,14 +73,15 @@
/* [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,23 @@
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
=========================================================*/
return call_user_func_array( $this->getFunctionCaller(), $this->getData() );
}
@ -135,8 +152,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 +163,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
}

View File

@ -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;
}

View File

@ -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);
}

View File

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