sid/manager/repo/user.php

154 lines
6.5 KiB
PHP
Executable File

<?php require_once __ROOT__.'/manager/security.php';
/**************************************************************/
/* _ _ ____ _____ ____ ____ _____ ____ ___ */
/* | | | / ___|| ____| _ \ | _ \| ____| _ \ / _ \ */
/* | | | \___ \| _| | |_) | | |_) | _| | |_) | | | | */
/* | |_| |___) | |___| _ < | _ <| |___| __/| |_| | */
/* \___/|____/|_____|_| \_\ |_| \_\_____|_| \___/ */
/* */
/**************************************************************/
class userRepo extends DBAccess{
/* VERIFIE L'EXISTENCE D'UN UTILISATEUR DANS LA BDD
*
* @identifiant<String> l'identifiant de l'utilisateur recherché
*
* @semestre<int> ***OPTIONNEL*** l'UID du semestre auquel on veut vérifier que l'étudiant est inscrit
*
* @semestre_pair<Boolean> ***OPTIONNEL*** détermine si le semestre est pair ou non
* @annee<int> ***OPTIONNEL*** l'année auquelle on veut vérifier si l'enseignant enseigne
*
* @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
*
*/
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
/* [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
==============================================================*/
$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");
$getUtilisateurUID->execute(array( ':identifiant' => $identifiant, ':semestre' => $semestre ));
}elseif( is_bool($semestre_pair) && $annee != null ){
/* [2] Cas où on cherche si un enseignant enseigne l'année donnée
==============================================================*/
$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
AND s.rang % 2 = :semestre_pair
AND s.annee = :annee");
$getUtilisateurUID->execute(array( ':identifiant' => $identifiant, ':semestre_pair' => ($semestre_pair) ? '0' : '1', ':annee' => $annee ));
}else // si les paramètres sont pas bons
return false;
// on retourne le résultat : FAUX si aucun résultat, sinon la valeur de l'UID de l'utilisateur
return $getUtilisateurUID->fetch()['id'];
}
/* 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
$getUtilisateurInfo = DataBase::getPDO()->prepare("SELECT identifiant, prenom, nom, sexe, mail, droits FROM utilisateur WHERE identifiant = :utilisateurUID");
$getUtilisateurInfo->execute(array( ':utilisateurUID' => $utilisateurUID ));
// on retourne le résultat en supprimant les doublons à indices numériques
return $getUtilisateurInfo->fetch();
}
/* 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
$mdp = secure_sha1($mdp); // on hash le password (SHA1)
$droits = implode(',', $droits); // on met le droit sous forme de chaine
/* [2] On vérifie que l'utilisateur n'est pas déjà créé
=================================================================================================*/
if( userRepo::UID($identifiant) ) // si on a un résultat, c'est qu'un utilisateur a déjà cet identifiant (UID)
return false;
/* [3] On créé le nouvel utilisateur
=================================================================================================*/
$creationUtilisateur = DataBase::getPDO()->prepare("INSERT INTO utilisateur(identifiant, prenom, nom, mail, mdp, droits)
VALUES(:identifiant, :prenom, :nom, :mail, :mdp, :droits)");
$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éé
=================================================================================================*/
return userRepo::UID($identifiant);
}
}