240 lines
8.1 KiB
PHP
Executable File
240 lines
8.1 KiB
PHP
Executable File
<?php
|
|
|
|
class DataBase{
|
|
|
|
/* ATTRIBUTS */
|
|
private $host;
|
|
private $dbname;
|
|
private $username;
|
|
private $password;
|
|
|
|
private $pdo;
|
|
|
|
public function __construct($host, $dbname, $username, $password){
|
|
$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);
|
|
}
|
|
|
|
|
|
/* 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() ).'<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 ***/
|
|
/******************************************************/
|
|
public function ajouterEtudiantGroupe($etudiant, $groupe){
|
|
|
|
// on cherche un utilisateur avec ce pseudo
|
|
$getEtudiantUID = $this->pdo->prepare("SELECT `id_utilisateur` FROM `utilisateurs` WHERE `pseudo` = :username");
|
|
$getEtudiantUID->execute(array(
|
|
':username' => $etudiant
|
|
));
|
|
|
|
// si on trouve, on le définit, sinon on retourne "unknown_user"
|
|
if( $etudiantUID = $getEtudiantUID->fetch()['id_utilisateur'] )
|
|
$etudiantUID = (int) $etudiantUID;
|
|
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' => $etudiantUID,
|
|
':groupe' => $groupeUID
|
|
));
|
|
|
|
|
|
echo '[3]';
|
|
|
|
return 'success';
|
|
|
|
}
|
|
|
|
/******************************************************/
|
|
/*** retourne la liste des utilisateurs d'un groupe ***/
|
|
/******************************************************/
|
|
public function listeEtudiantsGroupe($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->listeEtudiantsGroupe($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 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é';
|
|
}
|
|
|
|
}
|
|
|
|
?>
|