2015-10-22 12:06:49 +00:00
< ? php
class DataBase {
/* ATTRIBUTS */
private $host ;
private $dbname ;
private $username ;
private $password ;
2015-10-22 16:55:26 +00:00
private $pdo ;
2015-10-22 12:06:49 +00:00
public function __construct ( $host , $dbname , $username , $password ){
2015-10-22 16:55:26 +00:00
$this -> host = $host ;
$this -> dbname = $dbname ;
$this -> username = $username ;
$this -> password = $password ;
// password: Qt358nUdyeTxLDM8
$this -> pdo = new PDO ( 'mysql:host=' . $host . ';dbname=' . $dbname , $username , $password );
2015-10-22 12:06:49 +00:00
}
2015-10-22 16:55:26 +00:00
2015-10-24 08:57:16 +00:00
/* retourne une instance de la classe */
public static function getInstance (){
return new DataBase ( " localhost " , " sid " , " php " , " Qt358nUdyeTxLDM8 " );
}
2015-10-22 16:55:26 +00:00
/*********************************************/
/*** création d'un utilisateur dans la bdd ***/
/*********************************************/
2015-10-22 19:19:52 +00:00
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' ];
2015-10-22 16:55:26 +00:00
// 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 (
2015-10-24 08:57:16 +00:00
':pseudo' => $username ,
':prenom' => $prenom ,
':nom' => $nom ,
':email' => $email ,
':password' => $password ,
':droits' => $droits
2015-10-22 16:55:26 +00:00
));
2015-10-22 19:19:52 +00:00
$added = ( int ) $this -> pdo -> lastInsertId ();
2015-10-22 16:55:26 +00:00
2015-10-22 19:19:52 +00:00
if ( $added > $lastId ) // si on a bien ajouté un entrée
2015-10-22 16:55:26 +00:00
return 'success' ;
else
return 'error' ;
}
/****************************************/
/*** création d'un groupe dans la bdd ***/
/****************************************/
2015-10-22 19:19:52 +00:00
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 (
2015-10-24 08:57:16 +00:00
':nom' => $nom
2015-10-22 19:19:52 +00:00
));
// echo var_dump( $this->pdo->errorInfo() ).'<br>';
$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 ***/
/******************************************************/
2015-10-24 09:06:56 +00:00
public function ajouterEtudiantGroupe ( $etudiant , $groupe ){
2015-10-22 19:19:52 +00:00
// on cherche un utilisateur avec ce pseudo
2015-10-24 09:06:56 +00:00
$getEtudiantUID = $this -> pdo -> prepare ( " SELECT `id_utilisateur` FROM `utilisateurs` WHERE `pseudo` = :username " );
$getEtudiantUID -> execute ( array (
':username' => $etudiant
2015-10-22 19:19:52 +00:00
));
// si on trouve, on le définit, sinon on retourne "unknown_user"
2015-10-24 09:06:56 +00:00
if ( $etudiantUID = $getEtudiantUID -> fetch ()[ 'id_utilisateur' ] )
$etudiantUID = ( int ) $etudiantUID ;
2015-10-22 19:19:52 +00:00
else
return 'unknown_user' ;
2015-10-22 16:55:26 +00:00
2015-10-24 08:57:16 +00:00
echo '[1]' ;
2015-10-22 16:55:26 +00:00
2015-10-22 19:19:52 +00:00
// 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' ;
2015-10-24 08:57:16 +00:00
echo '[2]' ;
2015-10-22 19:19:52 +00:00
// 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 (
2015-10-24 09:06:56 +00:00
':utilisateur' => $etudiantUID ,
2015-10-22 19:19:52 +00:00
':groupe' => $groupeUID
));
2015-10-24 08:57:16 +00:00
echo '[3]' ;
2015-10-22 19:19:52 +00:00
return 'success' ;
}
/******************************************************/
/*** retourne la liste des utilisateurs d'un groupe ***/
/******************************************************/
2015-10-24 09:06:56 +00:00
public function listeEtudiantsGroupe ( $groupe ){
2015-10-23 08:04:26 +00:00
2015-10-22 19:19:52 +00:00
// 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 " .
2015-10-24 08:57:16 +00:00
" ORDER BY `u`.`prenom`, `u`.`nom` " );
2015-10-22 19:19:52 +00:00
$asso -> execute ( array (
':groupe' => $groupe
));
2015-10-23 08:56:22 +00:00
2015-10-22 19:19:52 +00:00
$userlist = $asso -> fetchAll ();
2015-10-23 08:56:22 +00:00
// 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
2015-10-23 08:04:26 +00:00
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
2015-10-24 17:01:22 +00:00
$groupe -> userlist = $this -> listeEtudiantsGroupe ( $groupe -> nom ); // on charge la liste des utilisateurs de ce groupe
2015-10-23 08:04:26 +00:00
array_push ( $grouplist , $groupe ); // on l'ajoute au résultat
}
return $grouplist ; // sinon on retourne le tableau
2015-10-22 19:19:52 +00:00
}
2015-10-25 16:55:18 +00:00
/***********************************************/
/*** retourne le nom du groupe d'un étudiant ***/
/***********************************************/
public function getGroupeEtudiant ( $etudiant ){
$grouplist = array (); // contiendra tout les groupes
// on cherche le groupe associé
$getNomGroupe = $this -> pdo -> prepare ( " SELECT `g`.`nom` " .
" 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 `u`.`pseudo` = :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' ;
}
2015-10-23 16:36:33 +00:00
/******************************************************/
/***** déplace un étudiant d'un groupe à un autre *****/
/******************************************************/
2015-10-24 09:06:56 +00:00
public function deplacerEtudiant ( $nomEtudiant , $nouveauGroupe ) {
2015-10-23 16:36:33 +00:00
2015-10-23 16:42:33 +00:00
// !!! Réfléchir à la gestion des AS, LP etc..
2015-10-23 16:36:33 +00:00
2015-10-24 09:06:56 +00:00
// 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
2015-10-24 17:01:22 +00:00
if ( isset ( $nouveauGroupe ) && is_string ( $nouveauGroupe ) && $nouveauGroupe == 'A' || 'B' || 'C' || 'D' || 'E' || 'F' )
2015-10-23 16:36:33 +00:00
return 'L\'étudiant a été déplacé' ;
2015-10-24 17:01:22 +00:00
else
2015-10-23 16:36:33 +00:00
return 'L\'étudiant n\'a pas pu être déplacé' ;
}
2015-10-22 16:55:26 +00:00
2015-10-22 12:06:49 +00:00
}
?>