Gestion pour les modules des types de parametres
Tous les params (s'ils ont un type défini) sont vérifiés + les params sont nommés et envoyés en POST au lieu de tous dans le tableau post "data"
This commit is contained in:
parent
2f642c7087
commit
2a736d636b
|
@ -1,28 +1,58 @@
|
|||
{
|
||||
|
||||
"users": [
|
||||
"login",
|
||||
"getById",
|
||||
"getAll",
|
||||
|
||||
"create",
|
||||
"edit",
|
||||
"remove"
|
||||
],
|
||||
"users": {
|
||||
"login": {
|
||||
"description": "Test de connexion avec un login (identifiant ou adresse mail) et un mot de passe.",
|
||||
"parameters": {
|
||||
"login": { "description": "Identifiant ou adresse mail", "type": "varchar(255)" },
|
||||
"password": { "description": "Mot de passe", "type":"text" }
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
"call_log": [
|
||||
"unserialize"
|
||||
],
|
||||
"call_log": {
|
||||
"unserialize": {
|
||||
"description": "Recupere le contenu d'un fichier XML de journal d'appel.",
|
||||
"parameters": {
|
||||
"filecontent": { "description": "Contenu du fichier XML", "type": "text" }
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"charts": [
|
||||
"network_data",
|
||||
"network_render"
|
||||
],
|
||||
"charts": {
|
||||
|
||||
"token" :[
|
||||
"remove",
|
||||
"generate"
|
||||
]
|
||||
"network_data": {
|
||||
"description": "Renvoie un jeu de donnees fictif pour un graphique de type #network.",
|
||||
"parameters": {}
|
||||
},
|
||||
|
||||
"network_render": {
|
||||
"description": "Renvoie le contenu du svg representant un graphique de type #network avec les donnees recues.",
|
||||
"parameters": {
|
||||
"dataset": { "description": "Dataset au bon format pour un graphique de type #network." }
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"token": {
|
||||
|
||||
|
||||
"remove": {
|
||||
"description": "Suppression d'un token d'id donne.",
|
||||
"parameters": {
|
||||
"token_id": { "description": "UID du token a supprimer", "type": "id" }
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
"generate": {
|
||||
"description": "Creation d'un token de nom et de duree donnee",
|
||||
"parameters": {
|
||||
"name": { "description": "Nom attribue au token", "type": "varchar(50)" },
|
||||
"duration": { "description": "Duree du token en nombre de jours", "type": "int" }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -73,10 +73,10 @@ APIClass.prototype = {
|
|||
|
||||
// on créé un formulaire POST (virtuel)
|
||||
var form = new FormData();
|
||||
form.append('path', pRequest.path ); // on créé la variable $_POST['json']=>request
|
||||
|
||||
if( pRequest.hasOwnProperty('data') )
|
||||
form.append('data', JSON.stringify(pRequest.data) );
|
||||
// On ajoute tous les attributs en POST
|
||||
for( var key in pRequest )
|
||||
form.append(key, pRequest[key]);
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<?php
|
||||
|
||||
namespace manager;
|
||||
use \manager\Database;
|
||||
|
||||
// FORMAT:
|
||||
//
|
||||
|
@ -21,7 +22,7 @@
|
|||
|
||||
// Attributs prives utiles (initialisation)
|
||||
private $path;
|
||||
private $data;
|
||||
private $params;
|
||||
private $modules;
|
||||
|
||||
// Contiendra la reponse a la requete
|
||||
|
@ -37,12 +38,12 @@
|
|||
/* CONSTRUCTEUR D'UNE REQUETE DE MODULE
|
||||
*
|
||||
* @path<String> Chemin de delegation ("module/methode")
|
||||
* @data<Array> Tableau contenant les parametres utiles au traitement
|
||||
* @param<Array> Tableau associatif 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){
|
||||
public function __construct($path=null, $params=null){
|
||||
// Si pas parametre manquant, on quitte
|
||||
if( $path == null ){
|
||||
$this->error = ManagerError::MissingPath;
|
||||
|
@ -71,19 +72,24 @@
|
|||
}
|
||||
|
||||
// Type de @data (optionnel)
|
||||
$data = (is_array($data)) ? $data : array();
|
||||
$params = (is_array($params)) ? $params : array();
|
||||
|
||||
|
||||
/* [2] Verification du chemin (existence module+methode)
|
||||
=========================================================*/
|
||||
if( !$this->checkPath($path) ) // Verification de la coherence du chemin + attribution
|
||||
return false;
|
||||
// Gestion d'erreur interne
|
||||
|
||||
|
||||
/* [3] Construction de l'objet
|
||||
/* [3] Verification des parametres (si @type est defini)
|
||||
=========================================================*/
|
||||
$this->data = $data;
|
||||
if( !$this->checkParams($params) ){ // Verification de tous les types
|
||||
$this->error = ManagerError::ParamError;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* [4] Construction de l'objet
|
||||
=========================================================*/
|
||||
$this->params = $params;
|
||||
$this->error = ManagerError::Success;
|
||||
|
||||
return true; // On retourne que tout s'est bien passe
|
||||
|
@ -114,7 +120,7 @@
|
|||
|
||||
/* [3] On amorce la methode
|
||||
=========================================================*/
|
||||
$returned = call_user_func_array( $this->getFunctionCaller(), $this->data );
|
||||
$returned = call_user_func_array( $this->getFunctionCaller(), $this->params );
|
||||
|
||||
|
||||
/* [4] Gestion de la reponse
|
||||
|
@ -148,10 +154,12 @@
|
|||
if( !isset($json['path']) )
|
||||
return new ModuleRequest();
|
||||
|
||||
// On definit $data au cas ou il soit vide
|
||||
$data = (isset($json['data'])) ? $json['data'] : array();
|
||||
// On definit $params au cas ou il soit vide
|
||||
$params = $json;
|
||||
// On retire le @path de @params
|
||||
unset($params['path']);
|
||||
|
||||
return new ModuleRequest($json['path'], $data);
|
||||
return new ModuleRequest($json['path'], $params);
|
||||
}
|
||||
|
||||
|
||||
|
@ -194,18 +202,13 @@
|
|||
/* [2] On verifie que @data est renseigne
|
||||
=========================================================*/
|
||||
// Si variable n'existe pas, on cree un tableau vide
|
||||
$data = (isset($post['data'])) ? $post['data'] : array();
|
||||
|
||||
// Si c'est toujours pas un tableau, on essaie de voir si c'est un json
|
||||
$data = (!is_array($data)) ? json_decode($data, true) : $data;
|
||||
|
||||
// Si toujours pas de tableau, on cree un tableau vide
|
||||
$data = (!is_array($data)) ? array() : $data;
|
||||
|
||||
$params = $post;
|
||||
// On retire le @path de @params
|
||||
unset($params['path']);
|
||||
|
||||
/* [3] On retourne une instance de <ModuleRequest>
|
||||
=========================================================*/
|
||||
return new ModuleRequest($post['path'], $data);
|
||||
return new ModuleRequest($post['path'], $params);
|
||||
|
||||
}
|
||||
|
||||
|
@ -242,7 +245,7 @@
|
|||
|
||||
/* [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_key_exists($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
|
||||
}
|
||||
|
@ -262,6 +265,47 @@
|
|||
|
||||
|
||||
|
||||
/* VERIFICATION DU TYPE DES PARAMETRES ENVOYES
|
||||
*
|
||||
* @params<Array> Tableau associatif contenant les parametres
|
||||
*
|
||||
* @return correct<bool> Retourne si oui ou non les parametres ont le bon type
|
||||
*
|
||||
*/
|
||||
private function checkParams($params){
|
||||
/* [1] On verifie qu'il ne manque aucun parametre
|
||||
=========================================================*/
|
||||
// Si @params n'est pas un tableau
|
||||
if( !is_array($params) ) return false;
|
||||
|
||||
$method = $this->modules[$this->path['module']][$this->path['method']];
|
||||
|
||||
// Si le nombre de parametre en entree et requis est different
|
||||
if( count($method['parameters']) > count($params) ) return false;
|
||||
|
||||
|
||||
|
||||
/* [2] Si le type est defini, pour chaque param, on teste
|
||||
=========================================================*/
|
||||
foreach($method['parameters'] as $name=>$paramsdata){
|
||||
// Si le parametre n'existe pas dans le tableau recu
|
||||
if( !isset($params[$name]) ) return false;
|
||||
|
||||
// Si le type n'est pas defini, on reboucle
|
||||
if( !isset($paramsdata['type']) ) continue;
|
||||
|
||||
// Si la verification est fausse, on retourne faux
|
||||
if( !Database::check($paramsdata['type'], $params[$name]) ) return false;
|
||||
}
|
||||
|
||||
/* [3] Gestion du retour, si tout s'est bien passe
|
||||
=========================================================*/
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* RENVOI LE CHEMIN D'AMORCAGE DE LA METHODE
|
||||
*
|
||||
|
|
|
@ -35,7 +35,8 @@ var TOKEN = {
|
|||
// On redige la requete
|
||||
var request = { // on ecrit la requete
|
||||
'path': 'token/generate',
|
||||
'data': [TOKEN.add.name.value, TOKEN.add.duration.value]
|
||||
'name': TOKEN.add.name.value,
|
||||
'duration': TOKEN.add.duration.value
|
||||
};
|
||||
|
||||
// On lance la requete
|
||||
|
@ -67,7 +68,7 @@ for( var i = 0 ; i < TOKEN.remove.buttons.length ; i++ ){
|
|||
/* (2.2) On lance la suppression */
|
||||
var request = { // on ecrit la requete
|
||||
'path': 'token/remove',
|
||||
'data': [token_id]
|
||||
'token_id': token_id
|
||||
};
|
||||
|
||||
// On lance la requete
|
||||
|
|
Loading…
Reference in New Issue