host = $host; $this->dbname = $dbname; $this->username = $username; $this->password = $password; // password: Qt358nUdyeTxLDM8 $this->pdo = new PDO('mysql:host='.$host.';dbname='.$dbname, $username, $password); } /* retourne une instance de la classe */ public static function getInstance(){ return new DataBase("localhost", "sid", "php", "Qt358nUdyeTxLDM8"); } /*********************************************/ /*** création d'un utilisateur dans la bdd ***/ /*********************************************/ public function creerUtilisateur($username, $prenom, $nom, $email, $password, $droits){ $getLastId = $this->pdo->query('SELECT max(`id_utilisateur`) as `id` FROM `utilisateurs`'); $lastId = (int) $getLastId->fetch()['id']; // on applique une normalisation $prenom = ucwords( strtolower($prenom) ); // majuscule à chaque mot sinon minuscule $nom = strtoupper($nom); // nom en majuscules $email = strtolower($email); // email en minuscules $password = sha1($password); // on hash le password $req = $this->pdo->prepare("INSERT INTO `utilisateurs`(`id_utilisateur`, `pseudo`, `prenom`, `nom`, `email`, `password`, `droits`) VALUES(default, :pseudo, :prenom, :nom, :email, :password, :droits)"); $req->execute(array( ':pseudo' => $username, ':prenom' => $prenom , ':nom' => $nom , ':email' => $email , ':password' => $password, ':droits' => $droits )); $added = (int) $this->pdo->lastInsertId(); if( $added > $lastId ) // si on a bien ajouté un entrée return 'success'; else return 'error'; } /****************************************/ /*** création d'un groupe dans la bdd ***/ /****************************************/ public function creerGroupe($nom){ $getLastId = $this->pdo->query('SELECT max(`id_groupe`) as `id` FROM `groupes`'); $lastId = (int) $getLastId->fetch()['id']; // on applique une normalisation $nom = strtoupper($nom); // nom en majuscules $req = $this->pdo->prepare("INSERT INTO `groupes`(`id_groupe`, `nom`) VALUES(default, :nom)"); $req->execute(array( ':nom' => $nom )); // echo var_dump( $this->pdo->errorInfo() ).'
'; $added = (int) $this->pdo->lastInsertId(); if( $added > $lastId ) // si on a bien ajouté un entrée return 'success'; else return 'error'; } /******************************************************/ /*** ajout d'un utilisateur à un groupe dans la bdd ***/ /******************************************************/ public function ajouterUtilisateurGroupe($utilisateur, $groupe){ // on cherche un utilisateur avec ce pseudo $getUtilisateurUID = $this->pdo->prepare("SELECT `id_utilisateur` FROM `utilisateurs` WHERE `pseudo` = :username"); $getUtilisateurUID->execute(array( ':username' => $utilisateur )); // si on trouve, on le définit, sinon on retourne "unknown_user" if( $utilisateurUID = $getUtilisateurUID->fetch()['id_utilisateur'] ) $utilisateurUID = (int) $utilisateurUID; else return 'unknown_user'; echo '[1]'; // on cherche un groupe avec ce nom $getGroupeUID = $this->pdo->prepare("SELECT `id_groupe` FROM `groupes` WHERE `nom` = :nom"); $getGroupeUID->execute(array( ':nom' => $groupe )); // si on trouve, on le définit, sinon on retourne "unknown_group" if( $groupeUID = $getGroupeUID->fetch()['id_groupe'] ) $groupeUID = (int) $groupeUID; else return 'unknown_group'; echo '[2]'; // si on a l'UID utilisateur & l'UID groupe => on créé l'association $asso = $this->pdo->prepare("INSERT INTO `association_utilisateur_groupe`(`id_utilisateur`, `id_groupe`) VALUES( (SELECT `id_utilisateur` FROM `utilisateurs` WHERE `id_utilisateur` = :utilisateur), (SELECT `id_groupe` FROM `groupes` WHERE `id_groupe` = :groupe) )"); $asso->execute(array( ':utilisateur' => $utilisateurUID, ':groupe' => $groupeUID )); echo '[3]'; return 'success'; } /******************************************************/ /*** retourne la liste des utilisateurs d'un groupe ***/ /******************************************************/ public function listeUtilisateurGroupe($groupe){ // on cherche un groupe avec ce nom $getGroupeUID = $this->pdo->prepare("SELECT `id_groupe` FROM `groupes` WHERE `nom` = :nom"); $getGroupeUID->execute(array( ':nom' => $groupe )); // si on trouve pas le groupe, on retourne "unknown_group" if( !($groupeUID = $getGroupeUID->fetch()['id_groupe']) ) return 'unknown_group'; // si le groupe existe => on créé récupère ses utilisateurs $asso = $this->pdo->prepare("SELECT `u`.`pseudo`, `u`.`prenom`, `u`.`nom`, `u`.`email`, `u`.`droits` ". "FROM `utilisateurs` as `u`, `groupes` as `g`, `association_utilisateur_groupe` as `asso` ". "WHERE `u`.`id_utilisateur` = `asso`.`id_utilisateur` ". "AND `g`.`id_groupe` = `asso`.`id_groupe` ". "AND `g`.`nom` = :groupe ". "ORDER BY `u`.`prenom`, `u`.`nom`"); $asso->execute(array( ':groupe' => $groupe )); $userlist = $asso->fetchAll(); // on supprime les doublons des entrées (indice numérique) for( $j = 0 ; $j < count($userlist) ; $j++ ) // pour tout les utilisateurs foreach($userlist[$j] as $col => $val) // pour toutes les entrées if( is_int($col) ) // si l'indice est un entier unset( $userlist[$j][$col] ); // on le supprime return $userlist; // on retourne le liste d'utilisateurs } /******************************************************/ /*** retourne la liste des utilisateurs des groupes ***/ /******************************************************/ public function listeEtudiantsTousGroupes(){ $grouplist = array(); // contiendra tout les groupes // on cherche tout les groupes $getGroupesUID = $this->pdo->query("SELECT `id_groupe`, `nom` FROM `groupes` ORDER BY `nom`"); // on parcourt tous les groupes while( $groupeUID = $getGroupesUID->fetch() ){ $groupe = new stdClass(); $groupe->nom = $groupeUID['nom']; // attribut "nom" ajouté au groupe $groupe->userlist = $this->listeUtilisateurGroupe($groupe->nom); // on charge la liste des utilisateurs de ce groupe array_push($grouplist, $groupe); // on l'ajoute au résultat } return $grouplist; // sinon on retourne le tableau } /******************************************************/ /***** déplace un étudiant d'un groupe à un autre *****/ /******************************************************/ public function deplacerEleve($nomEleve,$nouveauGroupe) { // !!! Réfléchir à la gestion des AS, LP etc.. if(isset($nouveauGroupe) && is_string($nouveauGroupe) && $nouveauGroupe == 'A' || 'B' || 'C' || 'D' || 'E' || 'F') { return 'L\'étudiant a été déplacé'; } else { return 'L\'étudiant n\'a pas pu être déplacé'; } } } ?>