2015-11-09 21:05:57 +00:00
|
|
|
<?php require_once __ROOT__.'/manager/security.php';
|
|
|
|
|
|
|
|
/**************************************************************/
|
|
|
|
/* _ _ ____ _____ ____ ____ _____ ____ ___ */
|
|
|
|
/* | | | / ___|| ____| _ \ | _ \| ____| _ \ / _ \ */
|
|
|
|
/* | | | \___ \| _| | |_) | | |_) | _| | |_) | | | | */
|
|
|
|
/* | |_| |___) | |___| _ < | _ <| |___| __/| |_| | */
|
|
|
|
/* \___/|____/|_____|_| \_\ |_| \_\_____|_| \___/ */
|
|
|
|
/* */
|
|
|
|
/**************************************************************/
|
|
|
|
|
2015-11-10 08:17:41 +00:00
|
|
|
class userRepo extends DBAccess{
|
2015-11-09 21:05:57 +00:00
|
|
|
/* VERIFIE L'EXISTENCE D'UN UTILISATEUR DANS LA BDD
|
|
|
|
*
|
|
|
|
* @identifiant<String> l'identifiant de l'utilisateur recherché
|
2015-11-10 23:04:56 +00:00
|
|
|
*
|
|
|
|
* @semestre<int> ***OPTIONNEL*** l'UID du semestre auquel on veut vérifier que l'étudiant est inscrit
|
2015-11-11 17:23:37 +00:00
|
|
|
*
|
|
|
|
* @semestre_pair<Boolean> ***OPTIONNEL*** détermine si le semestre est pair ou non
|
2015-11-11 21:02:13 +00:00
|
|
|
* @annee<int> ***OPTIONNEL*** l'année auquelle on veut vérifier si l'enseignant enseigne
|
2015-11-10 23:04:56 +00:00
|
|
|
*
|
2015-11-09 21:05:57 +00:00
|
|
|
* @return UID<String> si l'utilisateur est dans la BDD, retourne son UID
|
|
|
|
* @return FALSE<Boolean> FAUX si l'utilisateur n'est pas présent dans la BDD
|
|
|
|
*
|
|
|
|
*/
|
2015-11-11 21:02:13 +00:00
|
|
|
public static function UID($identifiant, $semestre=null, $semestre_pair=null, $annee=null){
|
|
|
|
|
|
|
|
if( $semestre == null && $semestre_pair == null && $annee == null ){ // on cherche un utilisateur avec cet identifiant
|
2015-11-10 23:04:56 +00:00
|
|
|
|
|
|
|
/* [1] Cas où on cherche juste si l'utilisateur existe
|
|
|
|
=============================================================*/
|
|
|
|
$getUtilisateurUID = DataBase::getPDO()->prepare("SELECT identifiant as id FROM utilisateur WHERE identifiant = :identifiant");
|
|
|
|
$getUtilisateurUID->execute(array( ':identifiant' => $identifiant ));
|
|
|
|
|
|
|
|
}elseif( $semestre != null ){
|
|
|
|
|
|
|
|
/* [2] Cas où on cherche si un étudiant est inscrit à un semestre
|
|
|
|
==============================================================*/
|
2015-11-17 12:00:50 +00:00
|
|
|
$getUtilisateurUID = DataBase::getPDO()->prepare("SELECT u.identifiant as id
|
|
|
|
FROM utilisateur as u, appartenance as app
|
|
|
|
WHERE u.identifiant = app.id_etudiant
|
|
|
|
AND u.identifiant = :identifiant
|
|
|
|
AND app.id_semestre = :semestre");
|
2015-11-10 23:04:56 +00:00
|
|
|
$getUtilisateurUID->execute(array( ':identifiant' => $identifiant, ':semestre' => $semestre ));
|
|
|
|
|
2015-11-23 15:21:03 +00:00
|
|
|
}elseif( $annee != null ){
|
|
|
|
|
|
|
|
$semestrePair0 = '0'; $semestrePair1 = '1';
|
|
|
|
if( is_bool($semestre_pair) ){ $semestrePair0 = ($semestre_pair)?'0':'1'; $semestrePair1 = ($semestre_pair)?'0':'1'; }
|
|
|
|
|
2015-11-11 17:23:37 +00:00
|
|
|
|
2015-11-10 23:04:56 +00:00
|
|
|
/* [2] Cas où on cherche si un enseignant enseigne l'année donnée
|
|
|
|
==============================================================*/
|
2015-11-17 12:00:50 +00:00
|
|
|
$getUtilisateurUID = DataBase::getPDO()->prepare("SELECT DISTINCT u.identifiant as id
|
|
|
|
FROM utilisateur as u, enseignement as ens, semestre as s, mcc_module as mcc_m, mcc_ue
|
|
|
|
WHERE u.identifiant = ens.id_enseignant
|
|
|
|
AND ens.id_mcc_module = mcc_m.id_mcc_module
|
|
|
|
AND mcc_m.id_mcc_ue = mcc_ue.id_mcc_ue
|
|
|
|
AND mcc_ue.id_semestre = s.id_semestre
|
|
|
|
|
|
|
|
AND u.identifiant = :identifiant
|
2015-11-23 15:21:03 +00:00
|
|
|
AND (s.rang % 2 = :semestre_pair0 OR s.rang % 2 = :semestre_pair1)
|
2015-11-17 12:00:50 +00:00
|
|
|
AND s.annee = :annee");
|
2015-11-23 15:21:03 +00:00
|
|
|
$getUtilisateurUID->execute(array( ':identifiant' => $identifiant, ':semestre_pair0' => $semestrePair0, ':semestre_pair1' => $semestrePair1, ':annee' => $annee ));
|
2015-11-10 23:04:56 +00:00
|
|
|
|
2015-11-11 17:23:37 +00:00
|
|
|
}else // si les paramètres sont pas bons
|
|
|
|
return false;
|
2015-11-09 21:05:57 +00:00
|
|
|
|
|
|
|
// on retourne le résultat : FAUX si aucun résultat, sinon la valeur de l'UID de l'utilisateur
|
|
|
|
return $getUtilisateurUID->fetch()['id'];
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-11-10 09:50:43 +00:00
|
|
|
|
|
|
|
/* RENVOIE LES INFORMATIONS D'UN UTILISATEUR D'UID DONNÉ
|
|
|
|
*
|
|
|
|
* @utilisateurUID<int> l'UID de l'utilisateur duquel on veut les infos
|
|
|
|
*
|
|
|
|
* @return utilisateur<Array> tableau associatif contenant tout les champs de la BDD pour cet utilisateur
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public static function info($utilisateurUID){
|
|
|
|
// on considère que le semestre existe
|
2015-11-19 10:24:17 +00:00
|
|
|
$getUtilisateurInfo = DataBase::getPDO()->prepare("SELECT identifiant, prenom, nom, sexe, mail, droits FROM utilisateur WHERE identifiant = :utilisateurUID");
|
2015-11-11 14:50:05 +00:00
|
|
|
$getUtilisateurInfo->execute(array( ':utilisateurUID' => $utilisateurUID ));
|
2015-11-10 09:50:43 +00:00
|
|
|
|
|
|
|
// on retourne le résultat en supprimant les doublons à indices numériques
|
|
|
|
return $getUtilisateurInfo->fetch();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-11-20 08:54:15 +00:00
|
|
|
/* retourne la liste des enseignants de la BDD
|
|
|
|
*
|
|
|
|
* @return enseignants<Array> retourne la liste des enseignants
|
|
|
|
* @return FALSE<Boolean> retourne FAUX si aucun résultat
|
|
|
|
*
|
|
|
|
*/
|
2015-11-20 08:58:40 +00:00
|
|
|
public static function getRoleUsers(){
|
2015-11-20 09:32:07 +00:00
|
|
|
$getListeUtilisateurs = DataBase::getPDO()->query("SELECT DISTINCT identifiant as id, nom, prenom, droits as role
|
2015-11-20 08:58:40 +00:00
|
|
|
FROM utilisateur
|
|
|
|
WHERE droits <> 'student'
|
|
|
|
ORDER BY identifiant ASC");
|
2015-11-20 08:54:15 +00:00
|
|
|
|
2015-11-20 09:32:07 +00:00
|
|
|
// si aucun résultat, on retourne false
|
|
|
|
if( !($userlist=$getListeUtilisateurs->fetchAll()) )
|
|
|
|
return false;
|
|
|
|
|
|
|
|
$userlist = DataBase::delNumeric( $userlist );
|
|
|
|
|
|
|
|
// sinon on met les rôles sous forme de tableau
|
|
|
|
foreach($userlist as $iter=>$user)
|
|
|
|
$userlist[$iter]['role'] = explode(',', $user['role']);
|
|
|
|
|
|
|
|
return $userlist;
|
2015-11-20 08:54:15 +00:00
|
|
|
}
|
|
|
|
|
2015-11-10 09:50:43 +00:00
|
|
|
|
|
|
|
|
2015-11-23 22:37:23 +00:00
|
|
|
/* modifie le caractère "admin" d'un utilisateur
|
|
|
|
*
|
|
|
|
* @utilisateur<String> l'UID de l'utilisateur en question
|
|
|
|
* @admin<Boolean> VRAI si admin, FAUX sinon
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @return updated<Boolean> VRAI si la modification a été faite
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public static function setAdmin($utilisateur, $admin){
|
|
|
|
/* [1] On récupère les droits actuels de l'utilisateur
|
|
|
|
=========================================================*/
|
|
|
|
if( !($utilisateurInfo=userRepo::info($utilisateur)) ) return false;
|
|
|
|
|
|
|
|
$droitsArray = explode(',', $utilisateurInfo['droits'] );
|
|
|
|
|
|
|
|
/* [2] On modifie les droits en fonction des paramètres
|
|
|
|
=========================================================*/
|
|
|
|
if( $admin && !in_array('admin', $droitsArray) ) // si on doit ajouter le droit et qu'il n'y est pas encore
|
|
|
|
array_push($droitsArray, 'admin'); // => on ajoute 'admin'
|
|
|
|
|
|
|
|
if( !$admin && in_array('admin', $droitsArray) ) // si on doit enlever le droit et qu'il y est
|
|
|
|
array_splice($droitsArray, array_search('admin', $droitsArray), 1 ); // => on enleve 'admin'
|
|
|
|
|
|
|
|
$droitsString = implode(',', $droitsArray);
|
|
|
|
|
|
|
|
|
|
|
|
/* [3] On modifie les droits dans la BDD
|
|
|
|
=========================================================*/
|
|
|
|
$modifierAdmin = DataBase::getPDO()->prepare("UPDATE utilisateur SET droits = :droits WHERE identifiant = :identifiant");
|
|
|
|
$modifierAdmin->execute(array( ':droits' => $droitsString, ':identifiant' => $utilisateur ));
|
|
|
|
|
|
|
|
|
|
|
|
/* [4] On vérifie que les changements on bien pris effet
|
|
|
|
=========================================================*/
|
|
|
|
if( !($utilisateurInfoVerif=userRepo::info($utilisateur)) ) return false;
|
|
|
|
|
|
|
|
return $utilisateurInfoVerif['droits'] == $droitsString; // si les droits de la BDD sont les mêmes que ceux calculés, c'est que c'est ok
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* modifie le caractère "référent" d'un utilisateur
|
|
|
|
*
|
|
|
|
* @utilisateur<String> l'UID de l'utilisateur en question
|
|
|
|
* @master<Boolean> VRAI si master, FAUX sinon
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @return updated<Boolean> VRAI si la modification a été faite
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public static function setMaster($utilisateur, $master){
|
|
|
|
/* [1] On récupère les droits actuels de l'utilisateur
|
|
|
|
=========================================================*/
|
|
|
|
if( !($utilisateurInfo=userRepo::info($utilisateur)) ) return false;
|
|
|
|
|
|
|
|
$droitsArray = explode(',', $utilisateurInfo['droits'] );
|
|
|
|
|
|
|
|
/* [2] On modifie les droits en fonction des paramètres
|
|
|
|
=========================================================*/
|
|
|
|
if( $master && !in_array('master', $droitsArray) ) // si on doit ajouter le droit et qu'il n'y est pas encore
|
|
|
|
array_push($droitsArray, 'master'); // => on ajoute 'master'
|
|
|
|
|
|
|
|
if( !$master && in_array('master', $droitsArray) ) // si on doit enlever le droit et qu'il y est
|
|
|
|
array_splice($droitsArray, array_search('master', $droitsArray), 1 ); // => on enleve 'master'
|
|
|
|
|
|
|
|
$droitsString = implode(',', $droitsArray);
|
|
|
|
|
|
|
|
|
|
|
|
/* [3] On modifie les droits dans la BDD
|
|
|
|
=========================================================*/
|
|
|
|
$modifierAdmin = DataBase::getPDO()->prepare("UPDATE utilisateur SET droits = :droits WHERE identifiant = :identifiant");
|
|
|
|
$modifierAdmin->execute(array( ':droits' => $droitsString, ':identifiant' => $utilisateur ));
|
|
|
|
|
|
|
|
|
|
|
|
/* [4] On vérifie que les changements on bien pris effet
|
|
|
|
=========================================================*/
|
|
|
|
if( !($utilisateurInfoVerif=userRepo::info($utilisateur)) ) return false;
|
|
|
|
|
|
|
|
return $utilisateurInfoVerif['droits'] == $droitsString; // si les droits de la BDD sont les mêmes que ceux calculés, c'est que c'est ok
|
|
|
|
}
|
2015-11-10 09:50:43 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-11-23 22:37:23 +00:00
|
|
|
/* ajoute un module qu'un utilisateur peut corriger
|
|
|
|
*
|
|
|
|
* @utilisateur<String> l'UID de l'utilisateur en question
|
2015-11-24 08:59:17 +00:00
|
|
|
* @mccmodule<int> l'UID du mcc_module à ajouter
|
2015-11-23 22:37:23 +00:00
|
|
|
*
|
|
|
|
*
|
|
|
|
* @return added<Boolean> VRAI si module ajouté, sinon FALSE
|
|
|
|
*
|
|
|
|
*/
|
2015-11-24 08:59:17 +00:00
|
|
|
public static function addModule($utilisateur, $mccmodule){
|
2015-11-23 22:37:23 +00:00
|
|
|
/* [1] On vérifie s'il n'enseigne pas déjà pour ce module
|
|
|
|
==============================================================*/
|
2015-11-24 08:59:17 +00:00
|
|
|
$enseignementExiste = DataBase::getPDO()->prepare("SELECT id_enseignement as id
|
|
|
|
FROM enseignement
|
|
|
|
WHERE id_enseignant = :utilisateur
|
|
|
|
AND id_mcc_module = :mccmodule");
|
|
|
|
$enseignementExiste->execute(array( ':utilisateur' => $utilisateur, ':mccmodule' => $mccmodule ));
|
2015-11-23 22:37:23 +00:00
|
|
|
|
2015-11-24 08:59:17 +00:00
|
|
|
|
|
|
|
/* [2] Si l'enseignement existe, on retourne "TRUE"
|
|
|
|
==============================================================*/
|
|
|
|
if( $enseignementExiste->fetch() ) return true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* [3] Si l'enseignement n'existe, on le créé
|
|
|
|
==============================================================*/
|
|
|
|
$creerEnseignement = DataBase::getPDO()->prepare("INSERT INTO enseignement(id_enseignement, id_enseignant, id_mcc_module, correcteur)
|
|
|
|
VALUES(DEFAULT, :utilisateur, :mccmodule, 1)");
|
|
|
|
$creerEnseignement->execute(array( ':utilisateur' => $utilisateur, ':mccmodule' => $mccmodule ));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* [4] On vérifie que l'enseignement a été créé
|
|
|
|
==============================================================*/
|
|
|
|
$enseignementExiste = DataBase::getPDO()->prepare("SELECT id_enseignement as id
|
|
|
|
FROM enseignement
|
|
|
|
WHERE id_enseignant = :utilisateur
|
|
|
|
AND id_mcc_module = :mccmodule");
|
|
|
|
$enseignementExiste->execute(array( ':utilisateur' => $utilisateur, ':mccmodule' => $mccmodule ));
|
|
|
|
|
|
|
|
|
|
|
|
return is_array($enseignementExiste->fetch());
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* supprime un module qu'un utilisateur peut corriger
|
|
|
|
*
|
|
|
|
* @utilisateur<String> l'UID de l'utilisateur en question
|
|
|
|
* @mccmodule<int> l'UID du mcc_module à supprimer
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @return removed<Boolean> VRAI si module supprimé, sinon FALSE
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public static function delModule($utilisateur, $mccmodule){debug();
|
|
|
|
/* [1] On vérifie s'il n'enseigne pas déjà pour ce module
|
|
|
|
==============================================================*/
|
|
|
|
$enseignementExiste = DataBase::getPDO()->prepare("SELECT id_enseignement as id
|
|
|
|
FROM enseignement
|
|
|
|
WHERE id_enseignant = :utilisateur
|
|
|
|
AND id_mcc_module = :mccmodule");
|
|
|
|
$enseignementExiste->execute(array( ':utilisateur' => $utilisateur, ':mccmodule' => $mccmodule ));
|
|
|
|
|
|
|
|
|
|
|
|
/* [2] Si l'enseignement n'existe pas, on returne "TRUE
|
|
|
|
==============================================================*/
|
|
|
|
if( !($enseignementUID=$enseignementExiste->fetch()['id']) ) return true;
|
|
|
|
|
|
|
|
|
|
|
|
/* [3] Si l'enseignement existe, on le supprime
|
|
|
|
==============================================================*/
|
|
|
|
$supprimerEnseignement = DataBase::getPDO()->prepare("DELETE FROM enseignement WHERE id_enseignement = :enseignementUID");
|
|
|
|
$supprimerEnseignement->execute(array( ':enseignementUID' => $enseignementUID ));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* [4] On vérifie que l'enseignement a été supprimé
|
|
|
|
==============================================================*/
|
|
|
|
$enseignementExiste = DataBase::getPDO()->prepare("SELECT id_enseignement as id
|
|
|
|
FROM enseignement
|
|
|
|
WHERE id_enseignant = :utilisateur
|
|
|
|
AND id_mcc_module = :mccmodule");
|
|
|
|
$enseignementExiste->execute(array( ':utilisateur' => $utilisateur, ':mccmodule' => $mccmodule ));
|
|
|
|
|
|
|
|
|
|
|
|
return !is_array($enseignementExiste->fetch());
|
2015-11-23 22:37:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-11-10 09:50:43 +00:00
|
|
|
/* CREE UN NOUVEL UTILISATEUR DANS LA BASE DE DONNES
|
|
|
|
*
|
|
|
|
* @identifiant<String> l'identifiant (unique) de l'utilisateur à créer
|
|
|
|
* @prenom<String> le prénom du nouvel utilisateur
|
|
|
|
* @nom<String> le nom du nouvel utilisateur
|
|
|
|
* @mail<String> le mail du nouvel utilisateur
|
|
|
|
* @mdp<String> le mot de passe du nouvel utilisateur
|
|
|
|
* @droits<Array> les droits à donner au nouvel utilisateur
|
|
|
|
*
|
|
|
|
* @return UID<String> l'UID du nouvel utilisateur s'il a bien été créé
|
|
|
|
* @return created<Boolean> VRAI si l'utilisateur n'existait pas déjà* et qu'il a bien été créé
|
|
|
|
* (*) Si aucun autre n'avait le même @identifiant
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public static function creer($identifiant, $prenom, $nom, $mail, $mdp, $droits){
|
|
|
|
/* [1] On normalise les données
|
|
|
|
=================================================================================================*/
|
|
|
|
foreach($droits as $droit)
|
|
|
|
if( !is_int( array_search($droit, getPermissions()) ) ) // si le droit n'est pas dans la liste des droits existants
|
|
|
|
return false; // on retourne une erreur comme quoi le droit est inexistant
|
|
|
|
|
|
|
|
|
|
|
|
$identifiant = strtolower($identifiant); // on met l'identifiant en minuscule
|
|
|
|
$prenom = ucwords( strtolower($prenom) ); // majuscule à chaque mot sinon minuscule
|
|
|
|
$nom = strtoupper($nom); // nom en majuscules
|
|
|
|
$mail = strtolower($mail); // email en minuscules
|
2015-11-13 23:47:11 +00:00
|
|
|
$mdp = secure_sha1($mdp); // on hash le password (SHA1)
|
2015-11-10 09:50:43 +00:00
|
|
|
$droits = implode(',', $droits); // on met le droit sous forme de chaine
|
|
|
|
|
|
|
|
/* [2] On vérifie que l'utilisateur n'est pas déjà créé
|
|
|
|
=================================================================================================*/
|
2015-11-11 00:06:24 +00:00
|
|
|
if( userRepo::UID($identifiant) ) // si on a un résultat, c'est qu'un utilisateur a déjà cet identifiant (UID)
|
2015-11-10 09:50:43 +00:00
|
|
|
return false;
|
|
|
|
|
|
|
|
/* [3] On créé le nouvel utilisateur
|
|
|
|
=================================================================================================*/
|
2015-11-17 12:00:50 +00:00
|
|
|
$creationUtilisateur = DataBase::getPDO()->prepare("INSERT INTO utilisateur(identifiant, prenom, nom, mail, mdp, droits)
|
|
|
|
VALUES(:identifiant, :prenom, :nom, :mail, :mdp, :droits)");
|
2015-11-10 09:50:43 +00:00
|
|
|
$creationUtilisateur->execute(array(
|
|
|
|
':identifiant' => $identifiant,
|
|
|
|
':prenom' => $prenom,
|
|
|
|
':nom' => $nom,
|
|
|
|
':mail' => $mail,
|
|
|
|
':mdp' => $mdp,
|
|
|
|
':droits' => $droits
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
|
|
/* [4] On vérifie que l'utilisateur a bien été créé
|
|
|
|
=================================================================================================*/
|
2015-11-11 00:06:24 +00:00
|
|
|
return userRepo::UID($identifiant);
|
2015-11-10 09:50:43 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-11-10 23:04:56 +00:00
|
|
|
|
2015-11-09 21:05:57 +00:00
|
|
|
}
|