Gestion des 'varchar' spécifiques (flags)

This commit is contained in:
xdrm-brackets 2016-07-02 17:46:59 +02:00
parent 23dc72a64c
commit a1f7200614
5 changed files with 283 additions and 43 deletions

View File

@ -1,23 +1,5 @@
{
"userDefault" :[
"create",
"link",
"unlink",
"search",
"getAll",
"getById",
"getByCode",
"getByUsername",
"getClusters",
"edit",
"delete"
],
"machineDefault" :[
"create",
@ -31,12 +13,234 @@
"getById",
"getByCode",
"getByName",
"getClusters",
"edit",
"delete"
]
}
}
{
"userDefault": {
"create": {
"description": "blablabla",
"permissions": [],
"parameters": {
"code": { "description": "Code RFID de l'utilisateur.", "type": "rfid" },
"username": { "description": "Identifiant de l'utilisateur.", "type": "varchar(1,30)" },
"firstname": { "description": "Prénom de l'utilisateur.", "type": "varchar(3,30)" },
"lastname": { "description": "Nom de l'utilisateur.", "type": "varchar(3,30)" },
"mail": { "description": "Adresse mail de l'utilisateur.", "type": "mail" },
"password": { "description": "Mot de passe de l'utilisateur.", "type": "text" },
"status": { "description": "Status de l'utilisateur.", "type": "status" }
},
"output": {
"id_user": { "description": "UID de l'utilisateur créé.", "type": "id" },
"id_group": { "description": "UID du groupe de l'utilisateur.", "type": "id" }
}
},
"link": {
"description": "blablabla",
"permissions": [],
"parameters": {
},
"output": {
}
},
"unlink": {
"description": "blablabla",
"permissions": [],
"parameters": {
},
"output": {
}
},
"search": {
"description": "blablabla",
"permissions": [],
"parameters": {
},
"output": {
}
},
"getAll": {
"description": "blablabla",
"permissions": [],
"parameters": {
},
"output": {
}
},
"getById": {
"description": "blablabla",
"permissions": [],
"parameters": {
},
"output": {
}
},
"getByCode": {
"description": "blablabla",
"permissions": [],
"parameters": {
},
"output": {
}
},
"getByUsername": {
"description": "blablabla",
"permissions": [],
"parameters": {
},
"output": {
}
},
"getClusters": {
"description": "blablabla",
"permissions": [],
"parameters": {
},
"output": {
}
},
"edit": {
"description": "blablabla",
"permissions": [],
"parameters": {
},
"output": {
}
},
"delete": {
"description": "blablabla",
"permissions": [],
"parameters": {
},
"output": {
}
}
},
"module": {
"method": {
"description": "Test de l'API",
"permissions": [],
"parameters": {}
},
"phpunitParams": {
"description": "Méthode utile à phpunit pour le test des paramètres.",
"permissions": [],
"parameters": {
"p1": { "description": "Texte", "type": "text" },
"p2": { "description": "Entier positif", "type": "id" }
},
"output": {
"receivedArguments": { "description": "Liste des arguments reçus par la méthode", "type": "array<mixed>" }
}
},
"phpunitOptionalParams": {
"description": "Méthode utile à phpunit pour le test des paramètres optionnels.",
"permissions": [],
"parameters": {
"p1": { "description": "Texte", "type": "text" },
"p2": { "description": "Texte", "type": "text", "optional": false },
"p3": { "description": "Entier positif (optionnel)", "type": "id", "optional": true }
}
},
"phpunitPermissions": {
"description": "Méthode utile à phpunit pour le test des permissions.",
"permissions": ["a", "b"],
"parameters": {}
},
"markdown": {
"description": "Retourne une description en markdown des différents modules de l'API",
"permissions": [],
"options": { "download": true },
"parameters": {}
},
"apiBlueprint": {
"description": "Retourne une documentation de l'API au format API Blueprint.",
"permissions": [],
"options": { "download": true },
"parameters": {}
}
},
"upload": {
"call_log": {
"description": "Upload d'un journal d'appel au format .xml. Retour des données de call_log/unserialize",
"permissions": ["admin"],
"parameters": {
"file": { "description": "Fichier du journal d'appel.", "type": "FILE" }
},
"output": {
"tmp_id": { "description": "Identifiant temporaire du journal d'appel", "type": "varchar(40,40)" },
"directory": { "description": "Annuaire des contacts trouvés", "type": "array<array<mixed>>" },
"call": { "description": "Liste des identifiants des contacts triés par nombre d'appels", "type": "array<id>" },
"sms": { "description": "Liste des identifiants des contacts triés par nombre de sms", "type": "array<id>" }
}
}
},
"download": {
"multiple": {
"description": "Download des données relatives aux sujets donnés.",
"permissions": ["admin"],
"options": { "download": true },
"parameters": {
"subjects": { "description": "Identifiants des sujets d'enquêtes à intégrer.", "type": "array<id>", "optional": true },
"phone": { "description": "Si vaut TRUE, renvoie les sujets cellulaires.", "type": "boolean", "optional": true },
"facebook": { "description": "Si vaut TRUE, renvoie les sujet facebook.", "type": "boolean", "optional": true },
"survey": { "description": "Si vaut TRUE, renvoie les sujets ResTIC.", "type": "boolean", "optional": true },
"all": { "description": "Si vaut TRUE, renvoie tous les sujets enregistrés.", "type": "boolean", "optional": true }
}
}
}
}

View File

@ -191,16 +191,26 @@
/* [1] Si de type VARCHAR(min, max)
/* [1] Si de type VARCHAR(min, max, flags)
=========================================================*/
if( preg_match('/^varchar\((\d+), ?(\d+)\)$/', $type, $match) ){
if( preg_match('/^varchar\((\d+), ?(\d+)((?:, ?\w+)+)?\)$/', $type, $match) ){
// On recupere la taille min
$min = (int) $match[1];
// On recupere la taille max
$max = (int) $match[2];
// On effectue la verification
return $checker && is_string($value) && strlen($value) <= $max && strlen($value) >= $min;
// On recupere le sous-type si défini
$flags = isset($match[3]) ? explode(',', substr($match[3], 1)) : null;
// On effectue la verification de taille
$lenCheck = $checker && is_string($value) && strlen($value) <= $max && strlen($value) >= $min;
// On vérifie les FLAGS s'il est donné
if( is_array($flags) )
foreach( $flags as $flag )
$lenCheck = $lenCheck && self::check($flag, $value);
return $lenCheck;
}
@ -239,6 +249,11 @@
return $checker && is_numeric($value) && $value <= 2147483647 && $value >= 0;
break;
// Code RFID
case 'rfid':
return $checker && is_string($value) && preg_match('/^[\dA-F]{2}(\-[\dA-F]{2}){3,5}$/i', $value);
break;
// String quelconque (peut etre vide)
case 'text':
return $checker && is_string($value);
@ -248,14 +263,26 @@
return $checker && is_string($value) && strlen($value) <= 50 && preg_match('/^[\w\.-]+@[\w\.-]+\.[a-z]{2,4}$/i', $value);
break;
// Hash sha1
case 'sha1':
// Hash sha1/md5
case 'hash':
return $checker && is_string($value) && preg_match('/^[\da-f]{40}$/i', $value);
break;
// Numéro de téléphone
case 'number':
return $checker && is_string($value) && preg_match('/^(?:0|\+33 ?|0?0?33 ?|)([1-9] ?(?:[0-9] ?){8})$/i', $value);
case 'alphanumeric':
case 'user.username':
case 'machine.name':
case 'group.name':
return $checker && is_string($value) && preg_match('/^[\w-]+$/i', $value);
break;
case 'user.firstname':
case 'user.lastname':
case 'letters':
return $checker && is_string($value) && preg_match('/^[a-z -]+$/i', $value);
break;
case 'status':
return $checker && is_numeric($value) && floor($value) == $value && $value >= 0 && $value <= 100;
break;
// Tableau non vide

View File

@ -63,7 +63,7 @@
// Si une erreur est retournee, on retourne une erreur
if( $id_assoc === false )
return array('ModuleError' => ManagerError::ModuleError);
/* [5] Gestion du retour
@ -101,13 +101,13 @@
/* [2] Creation de l'association
=========================================================*/
$link_machine = new Repo('cluster/link', array($id_cluster, $id_machine, clusterRepo::MACHINE_CLASS));
return $link_machine;
}
/* RETIRE UNE MACHINE DONNEE A UN GROUPE DONNE
@ -132,7 +132,7 @@
/* [2] Suppression de l'association
=========================================================*/
$link_machine = new Repo('cluster/unlink', array($id_cluster, $id_machine, clusterRepo::MACHINE_CLASS));
return $link_machine;
}
@ -291,14 +291,14 @@
$correct_param = array(
'code' => Database::check('machine.code', $code ) && $machine_data['code'] != $code,
'name' => Database::check('machine.name', $name ) && $machine_data['name'] != $name
);
);
/* (2) Gestion des parametres optionnels */
$opt_data = array(
'code' => ($correct_param['code']) ? $code : $machine_data['code'],
'name' => ($correct_param['name']) ? $name : $machine_data['name']
);
/* [3] Modification de la machine
=========================================================*/
@ -342,4 +342,4 @@
}
?>
?>

View File

@ -75,7 +75,7 @@
// Si une erreur est retournee, on retourne une erreur
if( $id_assoc === false )
return array('ModuleError' => ManagerError::ModuleError);
/* [5] Gestion du retour
@ -113,13 +113,13 @@
/* [2] Creation de l'association
=========================================================*/
$link_user = new Repo('cluster/link', array($id_cluster, $id_user, clusterRepo::USER_CLASS));
return $link_user;
}
/* RETIRE UNE MACHINE DONNEE A UN GROUPE DONNE
@ -144,7 +144,7 @@
/* [2] Suppression de l'association
=========================================================*/
$link_user = new Repo('cluster/unlink', array($id_cluster, $id_user, clusterRepo::USER_CLASS));
return $link_user;
}
@ -339,7 +339,7 @@
'mail' => Database::check('user.mail', $mail ) && $user_data['mail'] != $mail,
'password' => Database::check('user.password', $password_hash ) && $user_data['password'] != $password_hash,
'status' => Database::check('user.status', $status ) && $user_data['status'] != $status
);
);
/* (2) Gestion des parametres optionnels */
$opt_data = array(
@ -399,4 +399,4 @@
}
?>
?>

View File

@ -5,6 +5,7 @@
use \manager\ResourceDispatcher;
use \manager\ManagerError;
use \manager\Repo;
use \manager\Database;
debug();
@ -303,6 +304,14 @@
}//editUser();
// new ResourceDispatcher('f/svg/search/st/sub-menu-side/ff0000', true);
var_dump( Database::check('varchar(3,5)', "blabl") );
var_dump( Database::check('varchar(3,5)', "bla -") );
var_dump( Database::check('varchar(3,5,subtest,subsub)', "blabl") );
?>