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", "sid2", "php", "Qt358nUdyeTxLDM8"); } /*********************************************/ /*** création d'un utilisateur dans la bdd ***/ /*********************************************/ public function creerUtilisateur($identifiant, $prenom, $nom, $mail, $mdp, $droits){ $getLastCount = $this->pdo->query('SELECT count(identifiant) as count FROM utilisateur'); $lastCount = (int) $getLastCount->fetch()['count']; // on applique une normalisation $prenom = ucwords( strtolower($prenom) ); // majuscule à chaque mot sinon minuscule $nom = strtoupper($nom); // nom en majuscules $mail = strtolower($mail); // email en minuscules $mdp = sha1($mdp); // on hash le password $req = $this->pdo->prepare("INSERT INTO utilisateur(identifiant, prenom, nom, mail, mdp, droits) VALUES(:identifiant, :prenom, :nom, :mail, :mdp, :droits)"); $req->execute(array( ':identifiant' => $identifiant, ':prenom' => $prenom, ':nom' => $nom, ':mail' => $mail, ':mdp' => $mdp, ':droits' => $droits )); $getNewCount = $this->pdo->query('SELECT count(identifiant) as count FROM utilisateur'); $newCount = (int) $getNewCount->fetch()['count']; if( $newCount > $lastCount ) // 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){ $getLastCount = $this->pdo->query('SELECT count(id_groupe) as count FROM groupe'); $lastCount = (int) $getLastCount->fetch()['count']; // on applique une normalisation $nom = strtoupper($nom); // nom en majuscules $req = $this->pdo->prepare("INSERT INTO groupe(id_groupe, nom) VALUES(default, :nom)"); $req->execute(array( ':nom' => $nom )); $getNewCount = $this->pdo->query('SELECT count(id_groupe) as count FROM groupe'); $newCount = (int) $getNewCount->fetch()['count']; if( $newCount > $lastCount ) // si on a bien ajouté un entrée return 'success'; else return 'error'; } /******************************************************/ /*** ajout d'un utilisateur à un groupe dans la bdd ***/ /******************************************************/ public function ajouterEtudiantGroupe($etudiant, $groupe, $semestre, $annee){ $getLastCount = $this->pdo->query('SELECT count(id_etudiant) as count FROM appartenance'); $lastCount = (int) $getLastCount->fetch()['count']; /*** on cherche un utilisateur avec cet identifiant ***/ $getEtudiantUID = $this->pdo->prepare("SELECT identifiant as id FROM utilisateur WHERE identifiant = :etudiant"); $getEtudiantUID->execute(array( ':etudiant' => $etudiant )); // si on trouve, on le définit, sinon on retourne "unknown_user" if( $etudiantUID = $getEtudiantUID->fetch()['id'] ) $etudiantUID = $etudiantUID; else return 'unknown_user'; /*** on cherche un groupe avec ce nom ***/ $getGroupeUID = $this->pdo->prepare("SELECT id_groupe as id FROM groupe 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'] ) $groupeUID = (int) $groupeUID; else return 'unknown_group'; /*** on cherche un semestre avec ce rang et cette année (qui est unique) ***/ $getSemestreUID = $this->pdo->prepare("SELECT id_semestre as id FROM semestre WHERE rang = :rang AND annee = :annee"); $getSemestreUID->execute(array( ':rang' => $semestre, ':annee' => $annee )); // si on trouve, on le définit, sinon on retourne "unknown_group" if( $semestreUID = $getSemestreUID->fetch()['id'] ) $semestreUID = (int) $semestreUID; else return 'unknown_semestre'; // si on a l'UID utilisateur & l'UID groupe => on créé l'association $asso = $this->pdo->prepare("INSERT INTO appartenance(id_etudiant, id_groupe, id_semestre) ". "VALUES( ". "(SELECT identifiant FROM utilisateur WHERE identifiant = :etudiantUID), ". "(SELECT id_groupe FROM groupe WHERE id_groupe = :groupeUID), ". "(SELECT id_semestre FROM semestre WHERE id_semestre = :semestreUID) ". " )"); $asso->execute(array( ':etudiantUID' => $etudiantUID, ':groupeUID' => $groupeUID, ':semestreUID' => $semestreUID )); $getNewCount = $this->pdo->query('SELECT count(id_etudiant) as count FROM appartenance'); $newCount = (int) $getNewCount->fetch()['count']; if( $newCount > $lastCount ) // si on a bien ajouté un entrée return 'success'; else return 'error'; } /******************************************************/ /*** retourne la liste des utilisateurs d'un groupe ***/ /******************************************************/ public function listeEtudiantsGroupe($groupe, $semestre, $annee){ /*** on cherche un groupe avec ce nom ***/ $getGroupeUID = $this->pdo->prepare("SELECT id_groupe as id FROM groupe 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'] ) $groupeUID = (int) $groupeUID; else return 'unknown_group'; /*** on cherche un semestre avec ce rang et cette année (qui est unique) ***/ $getSemestreUID = $this->pdo->prepare("SELECT id_semestre as id FROM semestre WHERE rang = :rang AND annee = :annee"); $getSemestreUID->execute(array( ':rang' => $semestre, ':annee' => $annee )); // si on trouve, on le définit, sinon on retourne "unknown_group" if( $semestreUID = $getSemestreUID->fetch()['id'] ) $semestreUID = (int) $semestreUID; else return 'unknown_semestre'; // si le groupe existe => on récupère ses utilisateurs $appartenance = $this->pdo->prepare("SELECT u.identifiant, u.prenom, u.nom, u.mail, u.droits ". "FROM utilisateur as u, groupe as g, semestre as s, appartenance as app ". "WHERE u.identifiant = app.id_etudiant ". "AND g.id_groupe = app.id_groupe ". "AND s.id_semestre = app.id_semestre ". // à virer (peut-être) "AND g.id_groupe = :groupeUID ". "AND s.id_semestre = :semestreUID ". "ORDER BY u.prenom, u.nom"); $appartenance->execute(array( ':groupeUID' => $groupeUID, ':semestreUID' => $semestreUID )); $userlist = $appartenance->fetchAll(); // on supprime les doublons des entrées (indice numérique) for( $i = 0 ; $i < count($userlist) ; $i++ ) // pour tout les utilisateurs foreach($userlist[$i] as $col => $val) // pour toutes les entrées if( is_int($col) ) // si l'indice est un entier unset( $userlist[$i][$col] ); // on le supprime return $userlist; // on retourne le liste d'utilisateurs } /******************************************************/ /*** retourne la liste des utilisateurs des groupes ***/ /******************************************************/ public function listeEtudiantsTousGroupes($semestre, $annee){ /*** on cherche un semestre avec ce rang et cette année (qui est unique) ***/ $getSemestreUID = $this->pdo->prepare("SELECT id_semestre as id FROM semestre WHERE rang = :rang AND annee = :annee"); $getSemestreUID->execute(array( ':rang' => $semestre, ':annee' => $annee )); // si on trouve, on le définit, sinon on retourne "unknown_group" if( $semestreUID = $getSemestreUID->fetch()['id'] ) $semestreUID = (int) $semestreUID; else return 'unknown_semestre'; // on cherche tout les groupes du même semestre de la même année $getGroupesUID = $this->pdo->prepare("SELECT DISTINCT g.nom ". "FROM groupe as g, semestre as s, appartenance as app ". "WHERE g.id_groupe = app.id_groupe ". "AND s.id_semestre = app.id_semestre ". "AND s.id_semestre = :semestreUID ". "ORDER BY g.nom"); $getGroupesUID->execute(array( ':semestreUID' => $semestreUID )); $grouplist = array(); // contiendra tout les groupes // on parcourt tous les groupes while( $groupeUID = $getGroupesUID->fetch() ){ $groupe = new stdClass(); $groupe->nom = $groupeUID['nom']; // attribut "nom" ajouté au groupe $groupe->userlist = $this->listeEtudiantsGroupe($groupe->nom, $semestre, $annee); // 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 } /***********************************************/ /*** retourne le nom du groupe d'un étudiant ***/ /***********************************************/ public function getGroupeEtudiant($etudiant, $semestre, $annee){ /*** on cherche un semestre avec ce rang et cette année (qui est unique) ***/ $getSemestreUID = $this->pdo->prepare("SELECT id_semestre as id FROM semestre WHERE rang = :rang AND annee = :annee"); $getSemestreUID->execute(array( ':rang' => $semestre, ':annee' => $annee )); // si on trouve, on le définit, sinon on retourne "unknown_group" if( $semestreUID = $getSemestreUID->fetch()['id'] ) $semestreUID = (int) $semestreUID; else return 'unknown_semestre'; // on cherche le groupe associé $getNomGroupe = $this->pdo->prepare("SELECT g.nom ". "FROM utilisateur as u, groupe as g, appartenance as app ". "WHERE u.identifiant = app.id_etudiant ". "AND g.id_groupe = app.id_groupe ". "AND u.identifiant = :etudiant ". "ORDER BY g.nom"); $getNomGroupe->execute(array( ':etudiant' => $etudiant )); // si on a un résultat if( $nomGroupe = $getNomGroupe->fetch()['nom'] ) return $nomGroupe; else return 'error'; } /******************************************/ /*** retourne les modules d'un étudiant ***/ /******************************************/ public function getModulesEtudiant($etudiant, $semestre, $annee){ /*** on cherche un utilisateur avec cet identifiant ***/ $getEtudiantUID = $this->pdo->prepare("SELECT identifiant as id FROM utilisateur WHERE identifiant = :etudiant"); $getEtudiantUID->execute(array( ':etudiant' => $etudiant )); // si on trouve, on le définit, sinon on retourne "unknown_user" if( $etudiantUID = $getEtudiantUID->fetch()['id'] ) $etudiantUID = $etudiantUID; else return 'unknown_user'; /*** on cherche le groupe de cet utilisateur ***/ $getGroupeUID = $this->pdo->prepare("SELECT g.id_groupe as id ". "FROM utilisateur as u, groupe as g, appartenance as app, semestre as s ". "WHERE app.id_etudiant = u.identifiant ". "AND app.id_groupe = g.id_groupe ". "AND app.id_semestre = s.id_semestre ". "AND u.identifiant = :etudiant ". "AND s.rang = :semestre ". "AND s.annee = :annee"); $getGroupeUID->execute(array( ':etudiant' => $etudiant, ':semestre' => $semestre, ':annee' => $annee )); // si on trouve, on le définit, sinon on retourne "unknown_user" if( $groupeUID = $getGroupeUID->fetch()['id'] ) $groupeUID = $groupeUID; else return 'unknown_group'; // si on a l'UID utilisateur & l'UID groupe => on récupère les modules $getModuleList = $this->pdo->prepare("SELECT DISTINCT m.nom, m.libelle ". "FROM module as m, groupe as g, semestre as s, programme as prog, ue, appartenance as app ". "WHERE app.id_semestre = prog.id_semestre ". "AND app.id_semestre = s.id_semestre ". "AND app.id_groupe = g.id_groupe ". "AND prog.id_ue = ue.id_ue ". "AND prog.id_module = m.id_module ". "AND g.id_groupe = :groupeUID ". "AND s.rang = :semestre ". "AND s.annee = :annee ". "ORDER BY m.nom, m.libelle ASC"); $getModuleList->execute(array( ':groupeUID' => $groupeUID, ':semestre' => $semestre, ':annee' => $annee )); $modulelist = $getModuleList->fetchAll(); // on récupère la liste des modules // on supprime les doublons des entrées (indice numérique) for( $i = 0 ; $i < count($modulelist) ; $i++ ) // pour tout les modules foreach($modulelist[$i] as $col => $val) // pour toutes les entrées if( is_int($col) ) // si l'indice est un entier unset( $modulelist[$i][$col] ); // on le supprime return $modulelist; } /******************************************************/ /***** déplace un étudiant d'un groupe à un autre *****/ /******************************************************/ public function deplacerEtudiant($nomEtudiant,$nouveauGroupe) { // !!! Réfléchir à la gestion des AS, LP etc.. // pas bon car la on ne sait même pas quels groupes seront définis dans la base de donnée // il faut donc pas vérifier les groupes en dur (c'est salasse) // ensuite on ne retourne jamais un texte, mais un code d'erreur 'success' ou 'error' fin sinon y'a trop de cas // particuliers à gérer au niveau de la réponse // // exemple: // [1] si l'utilisateur n'existe pas "unknown_user" // [2] si le groupe n'existe pas "unknown_group" // [3] si l'utilisateur n'est déjà dans un groupe (donc l'association n'existe pas) ça veut dire qu'on doit faire un // INSERT INTO au lieu d'un UPDATE, donc il faut aussi retourner une erreur ou bien faire une condition pour gérer ce cas (comme tu veux) // // ducoup si je résume: // [1] dans manager/groups.php ajoute un @case au @switch du genre "move" // [2] toujours dans manager/groups.php vérifie l'intégrité des variables comme c'est déjà fait // [3] ensuite tu peux écrire manager/database.php en vérifiant tout les cas (ceux que j'ai cité ou oublié) // // Inspire toi de ce qui a déjà été fait au dessus et essaie de 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é'; } } ?>