getters dynamiques (statiques) pour les repos!! [magic method]

This commit is contained in:
xdrm-brackets 2016-04-19 11:14:28 +02:00
parent ec88d69427
commit b68a02d64f
2 changed files with 65 additions and 9 deletions

View File

@ -52,12 +52,6 @@
// parseCallLog(); // parseCallLog();
$username = ' ';
$firstname = '';
$lastname = '';
var_dump( !!strlen($username.$firstname.$lastname) ); // Pseudo, prénom, ou nom, au moins un n'est pas vide
/* () Test du client de l'API generique */ /* () Test du client de l'API generique */
@ -69,4 +63,8 @@
// var_dump($response); // var_dump($response);
var_dump( \manager\repo\user::getByMail('B@gmail.com') );
?> ?>

View File

@ -6,6 +6,59 @@
class user{ class user{
private static $table_name = 'users';
private static $columns = null;
// Getters dynamiques
public static function __callStatic($method, $args){
/* [0] Si les colonnes valides ne sont pas chargées, on les charges
=========================================================*/
if( is_null(self::$columns) ){
$getColumns = Database::getPDO()->query('SHOW COLUMNS FROM '.self::$table_name);
$cols = $getColumns->fetchAll();
self::$columns = array();
// On ajoute la liste des colonnes
foreach($cols as $column)
array_push(self::$columns, $column['Field']);
}
/* [1] On vérifie que la méthode est 'getX', avec X une chaine
=========================================================*/
// Si c'est pas le bon format, on retourne une erreur
if( !preg_match('/^getBy(\w+)$/', $method, $matches) ) return false;
/* [2] On vérifie que la valeur après 'get' est dans self::$columns
=========================================================*/
$columnName = strtolower($matches[1]);
$getAll = $columnName == 'all'; // Si 'getAll'
$getSomething = count($args) > 0 && in_array($columnName, self::$columns); // Si 'getX', et 'X' dans la liste des colonnes
// Si ni 'getAll' ni 'getSomething' -> erreur
if( !$getAll && !$getSomething ) return false;
/* [3] On rédige la requête
=========================================================*/
$getRequestString = 'SELECT * FROM '.self::$table_name;
// Si c'est 'getSomething', on ajoute une condition
if( $getSomething ) $getRequestString .= ' WHERE '.$columnName.' = :value';
$getRequest = Database::getPDO()->prepare($getRequestString);
/* [4] On exécute la requête
=========================================================*/
// Si 'getSomething', on ajoute le champ
$getRequest->execute(array(
':value' => $getSomething ? $args[0] : null
));
/* [5] On récupère le résultat
=========================================================*/
return Database::delNumeric( $getRequest->fetchAll() );
}
/* VERIFICATION DU LOGIN/PASSWORD D'UN UTILISATEUR /* VERIFICATION DU LOGIN/PASSWORD D'UN UTILISATEUR
* *
@ -59,6 +112,10 @@
* *
*/ */
public static function getById($id_user){ public static function getById($id_user){
/* [0] On formatte et vérifie les INPUT
=========================================================*/
if( !Database::check('id', $id_user) ) return false;
/* [1] On effectue la requete /* [1] On effectue la requete
=========================================================*/ =========================================================*/
$getUser = Database::getPDO()->prepare("SELECT id_user, login, mail, permission $getUser = Database::getPDO()->prepare("SELECT id_user, login, mail, permission
@ -126,6 +183,8 @@
/* [0] Verification et formattage des INPUT /* [0] Verification et formattage des INPUT
=========================================================*/ =========================================================*/
$checkInput = Database::check('sha1', $password); $checkInput = Database::check('sha1', $password);
$checkInput = $checkInput && Database::check('varchar(3, 30)', $login);
$checkInput = $checkInput && Database::check('mail', $mail);
$checkInput = $checkInput && ( Database::check('id', $reference) || is_null($reference) ); $checkInput = $checkInput && ( Database::check('id', $reference) || is_null($reference) );
$checkInput = $checkInput && in_array($permission, array('admin', 'subject')); $checkInput = $checkInput && in_array($permission, array('admin', 'subject'));
@ -145,10 +204,9 @@
':mail' => $mail, ':mail' => $mail,
':reference' => $reference ':reference' => $reference
)); ));
$unique = $checkUnique->fetch() === false;
// Si un utilisateur a le meme LOGIN/MAIL ou REFERENCE, on retourne une erreur // Si un utilisateur a le meme LOGIN/MAIL ou REFERENCE qu'un autre, on retourne une erreur
if( !$unique ) return false; if( $checkUnique->fetch() !== false ) return false;
/* [2] Creation de l'utilisateur /* [2] Creation de l'utilisateur