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 * * @login Username ou Adresse mail de l'utilisateur * @password Password de l'utilisateur * * @return id_user Retourne l'id de l'utilisateur si ses credentials sont bons * */ public static function login($login, $password){ /* [0] Gestion des INPUT =========================================================*/ $checker = Database::check('varchar(3,50)', $login); $checker = $checker && Database::check('text', $password); // Si les parametres sont incorrects, on retourne une erreur if( !$checker ) return false; /* [1] On verifie son login/password dans la BDD =========================================================*/ $check = Database::getPDO()->prepare("SELECT id_user, login, permission FROM users WHERE ( login = :username OR mail = :mail ) AND password = :password"); $check->execute(array( ':username' => $login, ':mail' => $login, ':password' => sessionManager::sha1($password) )); $result = $check->fetch(); /* [2] Gestion du retour =========================================================*/ // Si on a rien trouve, on retourne une erreur if( $result === false ) return false; // On retourne le resultat return Database::delNumeric( $result ); } /* RETOURNE LES DONNEES D'UN UTILISATEUR D'ID DONNE * * @id_user UID de l'utilisateur en question * * @return user Tableau contenant les donnees de l'utilisateur s'il existe sinon retourne FALSE * */ 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 =========================================================*/ $getUser = Database::getPDO()->prepare("SELECT id_user, login, mail, permission FROM users WHERE id_user = :id_user"); $getUser->execute(array( ':id_user' => $id_user )); /* [2] On recupere le resultat de la requete =========================================================*/ $userData = $getUser->fetch(); // Si l'utilisateur n'existe pas, on retourne FALSE if( $userData === false ) return false; /* [3] Gestion du retour =========================================================*/ return Database::delNumeric( $userData, true ); } /* RETOURNE LES DONNEES DE TOUS LES UTILISATEURS * * @return users Tableau contenant les donnees des utilisateurs, retourne FALSE si erreur * */ public static function getAll(){ /* [1] On effectue la requete =========================================================*/ $getUsers = Database::getPDO()->query("SELECT id_user, login, mail, permission FROM users ORDER BY login ASC"); /* [2] On recupere le resultat de la requete =========================================================*/ $usersData = $getUsers->fetchAll(); // Si l'utilisateur n'existe pas, on retourne FALSE if( $usersData === false ) return false; /* [3] Gestion du retour =========================================================*/ return Database::delNumeric( $usersData ); } /* CREE UN UTILISATEUR * * @login Login (identifiant) de l'utilisateur * @password Password de l'utilisateur * @mail Adresse mail de l'utilisateur * @reference Reference vers une Personne (sinon NULL) * @permissions Liste des permissions de l'utilisateur * * @return id_user Renvoie l'id de l'utilisateur cree ou FALSE si erreur * */ public static function create($login, $password, $mail, $reference, $permission){ /* [0] Verification et formattage des INPUT =========================================================*/ $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 && in_array($permission, array('admin', 'subject')); // Si erreur en entree, on retourne FAUX if( !$checkInput ) return false; /* [1] On verifie que le login/mail et reference sont uniques =========================================================*/ $checkUnique = Database::getPDO()->prepare("SELECT id_user FROM users WHERE login = :login OR mail = :mail OR ( reference = :reference AND reference is not NULL )"); $checkUnique->execute(array( ':login' => $login, ':mail' => $mail, ':reference' => $reference )); // Si un utilisateur a le meme LOGIN/MAIL ou REFERENCE qu'un autre, on retourne une erreur if( $checkUnique->fetch() !== false ) return false; /* [2] Creation de l'utilisateur =========================================================*/ /* (1) Si reference NULL */ if( $reference == null ){ $create = Database::getPDO()->prepare("INSERT INTO users(id_user, login, password, mail, reference, permission) VALUES(DEFAULT, :login, :password, :mail, NULL, :permission)"); $create->execute(array( ':login' => $login, ':password' => $password, ':mail' => $mail, ':permission' => $permission )); /* (2) Si reference est defini */ }else{ $create = Database::getPDO()->prepare("INSERT INTO users(id_user, login, password, mail, reference, permission) VALUES(DEFAULT, :login, :password, :mail, :reference, :permission)"); $create->execute(array( ':login' => $login, ':password' => $password, ':mail' => $mail, ':reference' => (int) $reference, ':permission' => $permission )); } /* [3] Verification de la creation + recuperation id =========================================================*/ $checkCreate = Database::getPDO()->prepare("SELECT id_user FROM users WHERE login = :login AND password = :password AND mail = :mail AND ( reference = :reference OR reference is NULL ) AND permission = :permission"); $checkCreate->execute(array( ':login' => $login, ':password' => $password, ':mail' => $mail, ':reference' => (int) $reference, ':permission' => $permission )); // On recupere l'id de l'utilisateur $id_user = $checkCreate->fetch(); // Si erreur, on retourne FALSE if( $id_user === false ) return false; /* [4] Gestion du retour =========================================================*/ return $id_user['id_user']; } /* SUPRESSION D'UN UTILISATEUR D'ID DONNE * * @id_user UID de l'utilisateur en question * */ public static function remove($id_user){ /* [1] On effectue la suppression =========================================================*/ $getUser = Database::getPDO()->prepare("DELETE FROM users WHERE id_user = :id_user"); $getUser->execute(array( ':id_user' => $id_user )); } } ?>