Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
CRAP | |
0.00% |
0 / 26 |
parentRepo | |
0.00% |
0 / 1 |
|
50.00% |
1 / 2 |
210 | |
0.00% |
0 / 26 |
table_name | |
100.00% |
1 / 1 |
1 | ||||||
__callStatic | |
0.00% |
0 / 1 |
182 | |
0.00% |
0 / 26 |
<?php | |
namespace manager\repo; | |
use \manager\Database; | |
class parentRepo{ | |
// mise à jour du nom de la table (pour les enfants) | |
protected static function table_name(){ static $table_name = null; return $table_name; } | |
/* GESTION DES GETTERS dynamiques | |
* | |
* @method<String> Nom du getter du type 'getAll' ou 'getX' avec 'X' une colonne de la table en question | |
* @args<Array> Liste des arguments, $args[0] est la valeur du getter (sauf pour 'getAll') | |
* | |
* @return lines<Array> Retourne le résultat du fetchAll() | |
* | |
*/ | |
public static function __callStatic($method, $args){ | |
// Si static::table_name() NULL | |
if( is_null(static::table_name()) ) return false; | |
/* [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('/^get(?:By(\w+)|(All))$/', $method, $matches) ) return false; | |
/* [2] On charge la liste des colonnes de la table | |
=========================================================*/ | |
$getColumns = Database::getPDO()->query('SHOW COLUMNS FROM '.static::table_name()); | |
$cols = Database::delNumeric( $getColumns->fetchAll() ); | |
$table_columns = array( | |
'_PRIMARY_' => array() // Contiendra les champs de la clé primaire | |
); | |
// On ajoute la liste des colonnes | |
foreach($cols as $column){ | |
// On enregistre la clé primaire (si elle l'est) | |
if( $column['Key'] == 'PRI' ) array_push($table_columns['_PRIMARY_'], $column['Field']); | |
array_push($table_columns, $column['Field']); | |
} | |
/* [3] On vérifie que la valeur après 'get' est dans $table_columns | |
=========================================================*/ | |
$columnName = strtolower($matches[1]); | |
$getAll = count($matches) > 2; // Si 'getAll' | |
$getById = $columnName == 'id'; | |
$getSomething = count($args) > 0 && in_array($columnName, $table_columns); // Si 'getX', et 'X' dans la liste des colonnes | |
// Si ni 'getAll' ni 'getSomething' -> erreur | |
if( !$getById && !$getAll && !$getSomething ) return false; | |
/* [4] On rédige la requête | |
=========================================================*/ | |
$getRequestString = 'SELECT * FROM '.static::table_name(); | |
// Si c'est 'getById', on ajoute une condition (clé primaire) | |
if( $getById ){ | |
$getRequestString .= ' WHERE '.$table_columns['_PRIMARY_'][0].' = :value'; | |
// TODO: Gestion d'une clé primaire composée (plusieurs arguments) | |
// Si c'est 'getSomething', on ajoute une condition | |
}else if( $getSomething ) | |
$getRequestString .= ' WHERE '.$columnName.' = :value'; | |
$getRequestString .= ' ORDER BY 1 ASC'; | |
// On prépare la requête | |
$getRequest = Database::getPDO()->prepare($getRequestString); | |
/* [5] On exécute la requête | |
=========================================================*/ | |
// Si 'getSomething', on ajoute le champ | |
$getRequest->execute(array( | |
':value' => ($getSomething||$getById) ? $args[0] : null | |
)); | |
/* [6] On récupère le résultat | |
=========================================================*/ | |
return Database::delNumeric( $getRequest->fetchAll() ); | |
} | |
} | |
?> |