upd: api.core.Request (Added URI_ARGUMENTS management (URL#) + Now can rename parameters) | upd: config.modules (Added 'rename' parameters option to rename before function call)

This commit is contained in:
xdrm-brackets 2017-12-10 21:24:39 +01:00
parent 8fc2f7f614
commit 13f4aba25d
2 changed files with 52 additions and 28 deletions

View File

@ -20,7 +20,8 @@
// Attributs prives utiles (initialisation)
private $path; // chemin de base (uri)
private $params; // paramètres (POST+GET)
private $raw_params; // paramètres reçus
private $params; // paramètres donnés à la fonction
private $schema; // schema configuration
private $options; // options
private $http_method; // methode HTTP appelante
@ -87,7 +88,7 @@
return $this->error->set(Err::WrongPathModule);
/* (2) Formattage @params en tableau */
$params = (is_array($params)) ? $params : [];
$this->raw_params = (is_array($params)) ? $params : [];
/* (3) On définit en constante la méthode HTTP */
if( !isset($_SERVER['REQUEST_METHOD']) && !is_string($forced_method) )
@ -110,7 +111,7 @@
/* (6) Verification des parametres (si @type est defini)
---------------------------------------------------------*/
if( !$this->checkParams($params) ) // Verification de tous les types
if( !$this->checkParams() ) // Verification de tous les types
return false; // checkParams() sets the error itself
@ -121,7 +122,6 @@
/* (8) Construction de l'objet (add http method to params)
---------------------------------------------------------*/
$this->params = $params;
$this->params['HTTP_METHOD'] = $this->http_method;
$this->error->set(Err::Success);
@ -246,7 +246,22 @@
return $this->error->set(Err::UnknownModule);
/* (3) Verification de l'existence de la methode (conf)
/* (3) Extract URI parameters
---------------------------------------------------------*/
/* (1) Extract URI string after @path */
$uri_end = substr($uri, $exists_size);
/* (2) If invalid format, return error */
if( !preg_match('@^((?:\/[^\/]+)*)\/?$@', $uri_end, $uri_match) )
return $this->error->set(Err::InvalidURI);
/* (3) Add each URI parameter to the parameter store */
$uri_args = array_slice( explode('/', $uri_match[1]), 1);
foreach($uri_args as $index=>$value)
$this->raw_params["URL$index"] = $value;
/* (4) Verification de l'existence de la methode (conf)
---------------------------------------------------------*/
/* (1) Check if HTTP method is in allowed methods */
if( !in_array($this->http_method, self::$allowed_http_methods) )
@ -258,7 +273,7 @@
/* (4) Enregistrement du chemin et renvoi de SUCCESS
/* (5) Enregistrement du chemin et renvoi de SUCCESS
---------------------------------------------------------*/
$this->path = [
'path'=> $path,
@ -319,18 +334,15 @@
/* (6) Verification du type des parametres envoyes
*
* @params<Array> Tableau associatif contenant les parametres
* @params peut se voir rajouter les paramètres optionnels s'ils ne sont pas renseignés (initialisés à NULL)
*
* @return correct<bool> Retourne si oui ou non les parametres ont le bon type
*
---------------------------------------------------------*/
private function checkParams(&$params){
private function checkParams(){
/* (1) On verifie qu'il ne manque aucun parametre
---------------------------------------------------------*/
/* (1) Si @params n'est pas un tableau */
if( !is_array($params) )
if( !is_array($this->raw_params) )
return $this->error->set(Err::MissingParam);
/* (2) On récupère les données de la méthode */
@ -343,7 +355,7 @@
/* (2) Si le type est defini, pour chaque param, on teste
---------------------------------------------------------*/
foreach($method['parameters'] as $name=>$paramsdata){
foreach($method['parameters'] as $name=>$config){
/* (2.1) Vérification des données
---------------------------------------------------------*/
@ -351,43 +363,52 @@
if( !is_string($name) )
return $this->error->set(Err::ConfigError);
/* (2) Si @paramsdata n'est pas un tableau */
if( !is_array($paramsdata) )
/* (2) Si @config n'est pas un tableau */
if( !is_array($config) )
return $this->error->set(Err::ConfigError);
/* (3) So @paramsdata['type] manquant ou incorrect */
if( !isset($paramsdata['type']) || !is_string($paramsdata['type']) )
/* (3) So @config['type] manquant ou incorrect */
if( !isset($config['type']) || !is_string($config['type']) )
return $this->error->set(Err::ConfigError);
/* (2.2) Gestion des spécifications
---------------------------------------------------------*/
/* (1) On récupère le paramètre RENAME */
$rename = $name;
if( isset($config['rename']) && is_string($config['rename']) && preg_match('@^\w+$@', $config['rename']) )
$rename = $config['rename'];
/* (1) On récupère si le paramètre est optionnel ou pas */
$optional = isset($paramsdata['optional']) && $paramsdata['optional'] === true;
$optional = isset($config['optional']) && $config['optional'] === true;
/* (2) Si de type 'FILE' + fichier existe => on enregistre la ref. */
if( $paramsdata['type'] == 'FILE' && isset($_FILES[$name]) )
$params[$name] = &$_FILES[$name];
if( $config['type'] == 'FILE' && isset($_FILES[$name]) )
$this->params[$rename] = &$_FILES[$name];
/* (3) Si param obligatoire et manquant -> erreur */
if( !isset($params[$name]) && !$optional )
if( !isset($this->raw_params[$name]) && !$optional )
return $this->error->set(Err::MissingParam, $name);
/* (2.3) Gestion des valeurs
---------------------------------------------------------*/
/* (1) Si le paramètre est optionnel et manquant */
if( $optional && !isset($params[$name]) ){
if( $optional && !isset($this->raw_params[$name]) ){
// On le crée le param optionnel avec la valeur NULL
$params[$name] = null;
$this->params[$rename] = null;
/* (2) Si le paramètre est renseigné (sauf FILE) */
}elseif( $paramsdata['type'] != 'FILE'){
}elseif( $config['type'] != 'FILE'){
// Si la verification est fausse, on retourne faux
if( !Checker::run($paramsdata['type'], $params[$name]) )
return $this->error->set(Err::WrongParam, $name, $paramsdata['type']);
if( !Checker::run($config['type'], $this->raw_params[$name]) )
return $this->error->set(Err::WrongParam, $name, $config['type']);
// Sinon, on ajoute aux params qu'on enverra à l'appel
else
$this->params[$rename] = $this->raw_params[$name];
}

View File

@ -12,10 +12,13 @@
}
},
"GET": {
"PUT": {
"description": "Gets an administrator's data",
"permissions": [],
"parameters": {}
"parameters": {
"URL0": { "description": "Some string token", "type": "text", "rename": "id_article" },
"postdata": { "description": "Some string token", "type": "text" }
}
},
"DELETE": {
@ -24,7 +27,7 @@
"parameters": {}
},
"PUT": {
"GET": {
"description": "Deletes an administrator",
"permissions": [["admin"]],
"parameters": {}