From bd7eaf02a55e07b1ad0fe729727483efc84824d3 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Tue, 19 Apr 2016 13:44:41 +0200 Subject: [PATCH] Correction et parent pour tous les repos (pour le getter dynamique) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Correction de l'héritage statique --- automate.php | 2 +- manager/Repo.php | 24 +-- manager/repo/Personnes.php | 69 -------- manager/repo/machine.php | 337 ------------------------------------ manager/repo/parentRepo.php | 76 ++++++++ manager/repo/subject.php | 4 +- manager/repo/token.php | 12 +- manager/repo/user.php | 55 +----- 8 files changed, 102 insertions(+), 477 deletions(-) delete mode 100755 manager/repo/Personnes.php delete mode 100755 manager/repo/machine.php create mode 100644 manager/repo/parentRepo.php diff --git a/automate.php b/automate.php index 6707538..a46fcb2 100755 --- a/automate.php +++ b/automate.php @@ -64,7 +64,7 @@ // var_dump($response); - var_dump( \manager\repo\user::getByMail('B@gmail.com') ); + var_dump( \manager\repo\subject::getByPseudo('jeannot') ); ?> diff --git a/manager/Repo.php b/manager/Repo.php index 3d54c0b..a87edd8 100755 --- a/manager/Repo.php +++ b/manager/Repo.php @@ -1,18 +1,18 @@ -repositories = json_decode( ResourceDispatcher::getResource(self::$config_path), true ); - + // Gestion de l'erreur de parsage if( $this->repositories == null ){ $this->error = ManagerError::ParsingFailed; @@ -72,7 +72,7 @@ } // Type de @data (optionnel) - $data = (is_array($data)) ? $data : array(); + $data = (is_array($data)) ? $data : array(); /* [2] Verification du chemin (existence repo+methode) @@ -165,7 +165,7 @@ $this->error = ManagerError::UnknownMethod; return false; // On retourne FALSE, si erreur } - + /* [4] Enregistrement du chemin et renvoi de SUCCESS @@ -194,4 +194,4 @@ } -?> \ No newline at end of file +?> diff --git a/manager/repo/Personnes.php b/manager/repo/Personnes.php deleted file mode 100755 index a47fa6c..0000000 --- a/manager/repo/Personnes.php +++ /dev/null @@ -1,69 +0,0 @@ - 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 UID de la personne en question - * - * @return personne Tableau associatif contenant les informations utiles de la personne - * @return FALSE 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 ); - } - - - - - - - } - - -?> \ No newline at end of file diff --git a/manager/repo/machine.php b/manager/repo/machine.php deleted file mode 100755 index 2255185..0000000 --- a/manager/repo/machine.php +++ /dev/null @@ -1,337 +0,0 @@ - Code de la machine - * @name Nom de la machine - * - * @return id_machine 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 Element de recherche - * - * @return machines 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 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 Id de la machine en question - * - * @return machine Renvoie la machine d'id donne si existe - * @return error 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 Code de la machine en question - * - * @return machine Renvoie la machine de code donne si existe - * @return error 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 Nom de la machine en question - * - * @return machine Renvoie la machine de nom donne si existe - * @return error 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 UID de la machine en question - * - * @return clusters 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 UID de la machine - * @code Code RFID de la machine - * @name Identifiant l'utilisateur - * - * @return status 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 UID de la machine en question - * - * @return status 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 ); - } - - - - - - - - - - - - - - } - - -?> \ No newline at end of file diff --git a/manager/repo/parentRepo.php b/manager/repo/parentRepo.php new file mode 100644 index 0000000..067c909 --- /dev/null +++ b/manager/repo/parentRepo.php @@ -0,0 +1,76 @@ + Nom du getter du type 'getAll' ou 'getX' avec 'X' une colonne de la table en question + * @args Liste des arguments, $args[0] est la valeur du getter (sauf pour 'getAll') + * + * @return lines 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() ); + } + + } + + +?> diff --git a/manager/repo/subject.php b/manager/repo/subject.php index 0b364f9..1802e5d 100644 --- a/manager/repo/subject.php +++ b/manager/repo/subject.php @@ -4,7 +4,9 @@ use \manager\Database; use \manager\sessionManager; - class subject{ + class subject extends parentRepo{ + + protected static function table_name(){ static $table_name = 'Personnes'; return $table_name; } diff --git a/manager/repo/token.php b/manager/repo/token.php index d622b37..8222446 100644 --- a/manager/repo/token.php +++ b/manager/repo/token.php @@ -4,8 +4,10 @@ use \manager\sessionManager; 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 * * 1. Gestion des access @@ -37,7 +39,7 @@ FROM api_token ORDER BY expires DESC"); - + /* [3] On retourne les donnees =========================================================*/ return Database::delNumeric( $request->fetchAll() ); @@ -121,7 +123,7 @@ =========================================================*/ if( !Database::check('varchar(3, 50)', $name) || !Database::check('id', $duration) ) return false; - + // On definit la date d'expiration du token $expiration = date('Y-m-d', time()+$duration*3600*24); @@ -209,4 +211,4 @@ } -?> \ No newline at end of file +?> diff --git a/manager/repo/user.php b/manager/repo/user.php index 681a7ca..4c8c21a 100755 --- a/manager/repo/user.php +++ b/manager/repo/user.php @@ -3,61 +3,12 @@ namespace manager\repo; use \manager\Database; use \manager\sessionManager; + use \manager\repo\parentRepo; - class user{ + class user extends parentRepo{ - private static $table_name = 'users'; - private static $columns = null; + protected static function table_name(){ static $table_name = 'users'; return $table_name; } - // 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