Correction et parent pour tous les repos (pour le getter dynamique)

Correction de l'héritage statique
This commit is contained in:
xdrm-brackets 2016-04-19 13:44:41 +02:00
parent b68a02d64f
commit bd7eaf02a5
8 changed files with 102 additions and 477 deletions

View File

@ -64,7 +64,7 @@
// var_dump($response); // var_dump($response);
var_dump( \manager\repo\user::getByMail('B@gmail.com') ); var_dump( \manager\repo\user::getByMail('B@gmail.com') );
var_dump( \manager\repo\subject::getByPseudo('jeannot') );
?> ?>

View File

@ -1,18 +1,18 @@
<?php <?php
namespace manager; namespace manager;
// FORMAT:
// // FORMAT:
//
// path: "nomModule/nomMethode" // path: "nomModule/nomMethode"
// data1: {donnee1} // data1: {donnee1}
// data2: {donnee2} // data2: {donnee2}
// ... // ...
// //
// //
// //
// //
class Repo{ class Repo{
@ -54,7 +54,7 @@
=========================================================*/ =========================================================*/
// Modules specifies // Modules specifies
$this->repositories = json_decode( ResourceDispatcher::getResource(self::$config_path), true ); $this->repositories = json_decode( ResourceDispatcher::getResource(self::$config_path), true );
// Gestion de l'erreur de parsage // Gestion de l'erreur de parsage
if( $this->repositories == null ){ if( $this->repositories == null ){
$this->error = ManagerError::ParsingFailed; $this->error = ManagerError::ParsingFailed;
@ -72,7 +72,7 @@
} }
// Type de @data (optionnel) // Type de @data (optionnel)
$data = (is_array($data)) ? $data : array(); $data = (is_array($data)) ? $data : array();
/* [2] Verification du chemin (existence repo+methode) /* [2] Verification du chemin (existence repo+methode)
@ -165,7 +165,7 @@
$this->error = ManagerError::UnknownMethod; $this->error = ManagerError::UnknownMethod;
return false; // On retourne FALSE, si erreur return false; // On retourne FALSE, si erreur
} }
/* [4] Enregistrement du chemin et renvoi de SUCCESS /* [4] Enregistrement du chemin et renvoi de SUCCESS
@ -194,4 +194,4 @@
} }
?> ?>

View File

@ -1,69 +0,0 @@
<?php
namespace manager\repo;
use \manager\Database;
class Personnes{
/* Gestion de la table Personne et des derivations
*
* 1. Gestion des access
* - getById(id)
*
* 2. Gestion des matchs
* - getMatch(id)
* - getMatch(pseudo, nom, prenom, facebook, telephone)
*
* 3. Gestion de la fusion de 2 Personnes (car sont en fait la meme -> portage des donnees)
* - merge(idA, idB)
*
* 4. Gestion de creation
* - create(pseudo, nom, prenom, facebook, telephone)
*
*
*/
/* RENVOIE LES DONNEES D'UN UTILISATEUR D'UID DONNE
*
* @id_personne<int> UID de la personne en question
*
* @return personne<Array> Tableau associatif contenant les informations utiles de la personne
* @return FALSE<boolean> Si une erreur occure ou qu'aucune personne n'est trouvee, retourne FALSE
*
*/
public static function getById($id_personne=null){
/* [0] Verification des INPUT
=========================================================*/
if( !Database::check('id', $id_personne) ) return false;
/* [1] On prepare et execute la requete
=========================================================*/
$request = Database::getPDO()->prepare("SELECT idPersonne as id, pseudo, nom, prenom, id_facebook, telephone
FROM Personnes
WHERE idPersonne = :uid");
$request->execute(array(
':uid' => $id_personne
));
/* [2] On recupere le resultat
=========================================================*/
// si aucun resultat, on retourne FALSE
if( ($personne=$request->fetch()) === false ) return false;
/* [3] On retourne les donnees
=========================================================*/
return Database::delNumeric( $personne, true );
}
}
?>

View File

@ -1,337 +0,0 @@
<?php
namespace manager\repo;
use \manager\Database;
use \manager\repo\cluster as clusterRepo;
class machine{
/* CREATION D'UNE MACHINE
*
* @code<String> Code de la machine
* @name<String> Nom de la machine
*
* @return id_machine<int> Renvoie l'UID de la machine cree
* Renvoie FALSE si une erreur occure
*
*/
public static function create($code, $name){
/* [1] Verification de l'unicite de code+name
=========================================================*/
$check_unique = ( self::getByCode($code) === false );
$check_unique = $check_unique && ( self::getByName($name) === false );
// Si une machine a deja ce code/nom, on renvoie une erreur
if( !$check_unique )
return false;
/* [2] Creation de la machine
=========================================================*/
$insert_machine = Database::getPDO()->prepare("INSERT INTO machine(id_machine, code, name)
VALUES(DEFAULT, :code, :name)");
$insert_machine->execute(array(
':code' => $code,
':name' => $name
));
/* [3] On retourne l'id_machine ou FALSE si erreur
=========================================================*/
$check_machine = self::getByCode($code);
// Si n'existe pas on retourne FALSE
if( $check_machine === false )
return false;
// Sinon, on retourne son id
return $check_machine['id_machine'];
}
/* RENVOIE UNE LISTE DE MACHINE EN FONCTION D'UN MOT CLE
*
* @keyword<String> Element de recherche
*
* @return machines<Array> Retourne les machines trouvees
*
*/
public static function search($keyword){
// On recupere les donnees
$searchmachines = Database::getPDO()->query("SELECT * FROM machine
WHERE code LIKE '%".$keyword."%'
OR name LIKE '%".$keyword."%'
");
return Database::delNumeric( $searchmachines->fetchAll() );
}
/* RENVOIE LA LISTE DE TOUTES LES MACHINES
*
* @return machine<Array> Liste des machines de la BDD
*
*/
public static function getAll(){
// On ecrit la requete
$request = Database::getPDO()->query("SELECT * FROM machine ORDER BY name");
// On recupere le resultat
$answer = $request->fetchAll();
// On retourne en supprimant les indices numeriques
return Database::delNumeric( $answer );
}
/* RENVOIE LA MACHINE D'ID DONNE
*
* @id<int> Id de la machine en question
*
* @return machine<Array> Renvoie la machine d'id donne si existe
* @return error<Boolean> Retourne FALSE si aucun resultat
*
*/
public static function getById($id){
// On ecrit la requete
$request = Database::getPDO()->prepare("SELECT * FROM machine
WHERE id_machine = :id");
// On execute la requete
$request->execute(array(
':id' => $id
));
// On recupere 1 seule machine
$answer = $request->fetch();
// Gestion d'erreur -> aucun resultat
if( $answer === false )
return false;
// On retourne en supprimant les indices numeriques
return Database::delNumeric( $answer, true );
}
/* RENVOIE LA MACHINE DE CODE DONNE
*
* @code<String> Code de la machine en question
*
* @return machine<Array> Renvoie la machine de code donne si existe
* @return error<Boolean> Retourne FALSE si aucun resultat
*
*/
public static function getByCode($code){
// On ecrit la requete
$request = Database::getPDO()->prepare("SELECT * FROM machine
WHERE code = :code");
// On execute la requete
$request->execute(array(
':code' => $code
));
// On recupere 1 seule machine
$answer = $request->fetch();
// Gestion d'erreur -> aucun resultat
if( $answer === false )
return false;
// On retourne en supprimant les indices numeriques
return Database::delNumeric( $answer, true );
}
/* RENVOIE LA MACHINE DE NOM DONNE
*
* @name<String> Nom de la machine en question
*
* @return machine<Array> Renvoie la machine de nom donne si existe
* @return error<Boolean> Retourne FALSE si aucun resultat
*
*/
public static function getByName($name){
// On ecrit la requete
$request = Database::getPDO()->prepare("SELECT * FROM machine
WHERE name = :name");
// On execute la requete
$request->execute(array(
':name' => $name
));
// On recupere 1 seule machine
$answer = $request->fetch();
// Gestion d'erreur -> aucun resultat
if( $answer === false )
return false;
// On retourne en supprimant les indices numeriques
return Database::delNumeric( $answer, true );
}
/* RENVOIE LES GROUPES AUQUEL APPARTIENT UNE MACHINE DONNEE
*
* @id_machine<int> UID de la machine en question
*
* @return clusters<Array> Retourne la liste des groupes auquel appartient la machine
*
*/
public static function getClusters($id_machine){
/* [1] On redige/execute la requete
=========================================================*/
$get_clusters = Database::getPDO()->prepare("SELECT c.* FROM cluster as c, cluster_merge as cm
WHERE cm.id_cluster = c.id_cluster
AND cm.id_entity = :id_machine
AND cm.class = :class
ORDER BY c.id_cluster");
$get_clusters->execute(array(
':id_machine' => $id_machine,
':class' => clusterRepo::MACHINE_CLASS
));
/* [2] On retourne la liste des groupes
=========================================================*/
return Database::delNumeric( $get_clusters->fetchAll() );
}
/* MODIFICATION D'UNE MACHINE DONNEE
*
* @id_machine<int> UID de la machine
* @code<String> Code RFID de la machine
* @name<String> Identifiant l'utilisateur
*
* @return status<Boolean> Renvoie si oui ou non tout s'est bien passe
*
*/
public static function edit($id_machine=null, $code=null, $name=null){
/* [1] Verification de l'unicite de code+name (si differents)
=========================================================*/
// On recupere les machine ayant le meme code ou name (si existent)
$getbycode = self::getByCode($code);
$getbyname = self::getByName($name);
$check_unique = is_array($getbycode) && $getbycode['id_machine'] == $id_machine || !is_array($getbycode);
$check_unique = $check_unique && is_array($getbyname) && $getbyname['id_machine'] == $id_machine || !is_array($getbyname);
// Si un utilisateur a deja ce code ou ce name (sauf lui), on renvoie une erreur
if( !$check_unique )
return false;
/* [2] Modification de la machine
=========================================================*/
$edit_machine = Database::getPDO()->prepare("UPDATE machine
SET code = :code,
name = :name
WHERE id_machine = :id_machine");
$edit_machine->execute(array(
':code' => $code,
':name' => $name,
':id_machine' => $id_machine
));
/* [3] On retourne si tout a ete modifie, si erreur
=========================================================*/
$check_machine = self::getById($id_machine);
$checker = $check_machine['id_machine'] == $id_machine;
$checker = $checker && $check_machine['code'] == $code;
$checker = $checker && $check_machine['name'] == $name;
// On retourne l'etat de la modification
return $checker;
}
/* SUPPRIME UNE MACHINE DONNE
*
* @id_machine<int> UID de la machine en question
*
* @return status<Boolean> Retourne si oui ou non la machine a bien ete supprime
*
*/
public static function delete($id_machine){
/* [1] On redige/execute la requete
=========================================================*/
$delete_machine = Database::getPDO()->prepare("DELETE FROM machine WHERE id_machine = :id_machine");
$delete_machine->execute(array(
':id_machine' => $id_machine
));
/* [2] On verifie que la machine n'existe plus
=========================================================*/
return ( self::getById($id_machine) === false );
}
}
?>

View File

@ -0,0 +1,76 @@
<?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;
/* [0] On charge la liste des colonnes de la table
=========================================================*/
$getColumns = Database::getPDO()->query('SHOW COLUMNS FROM '.static::table_name());
$cols = $getColumns->fetchAll();
$table_columns = array();
// On ajoute la liste des colonnes
foreach($cols as $column)
array_push($table_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 $table_columns
=========================================================*/
$columnName = strtolower($matches[1]);
$getAll = $columnName == 'all'; // Si 'getAll'
$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( !$getAll && !$getSomething ) return false;
/* [3] On rédige la requête
=========================================================*/
$getRequestString = 'SELECT * FROM '.static::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() );
}
}
?>

View File

@ -4,7 +4,9 @@
use \manager\Database; use \manager\Database;
use \manager\sessionManager; use \manager\sessionManager;
class subject{ class subject extends parentRepo{
protected static function table_name(){ static $table_name = 'Personnes'; return $table_name; }

View File

@ -4,8 +4,10 @@
use \manager\sessionManager; use \manager\sessionManager;
use \manager\Database; use \manager\Database;
class token{ class token extends parentRepo{
protected static $table_name = 'api_token';
/* Gestion de la table Token (pour secu) et des derivations /* Gestion de la table Token (pour secu) et des derivations
* *
* 1. Gestion des access * 1. Gestion des access
@ -37,7 +39,7 @@
FROM api_token FROM api_token
ORDER BY expires DESC"); ORDER BY expires DESC");
/* [3] On retourne les donnees /* [3] On retourne les donnees
=========================================================*/ =========================================================*/
return Database::delNumeric( $request->fetchAll() ); return Database::delNumeric( $request->fetchAll() );
@ -121,7 +123,7 @@
=========================================================*/ =========================================================*/
if( !Database::check('varchar(3, 50)', $name) || !Database::check('id', $duration) ) return false; if( !Database::check('varchar(3, 50)', $name) || !Database::check('id', $duration) ) return false;
// On definit la date d'expiration du token // On definit la date d'expiration du token
$expiration = date('Y-m-d', time()+$duration*3600*24); $expiration = date('Y-m-d', time()+$duration*3600*24);
@ -209,4 +211,4 @@
} }
?> ?>

View File

@ -3,61 +3,12 @@
namespace manager\repo; namespace manager\repo;
use \manager\Database; use \manager\Database;
use \manager\sessionManager; use \manager\sessionManager;
use \manager\repo\parentRepo;
class user{ class user extends parentRepo{
private static $table_name = 'users'; protected static function table_name(){ static $table_name = 'users'; return $table_name; }
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