2015-11-09 21:05:57 +00:00
< ? php require_once __ROOT__ . '/manager/security.php' ;
/********************************************************************/
/* ____ ____ ___ _ _ ____ ____ _____ ____ ___ */
/* / ___| _ \ / _ \| | | | _ \ | _ \| ____| _ \ / _ \ */
/* | | _| |_) | | | | | | | |_) | | |_) | _| | |_) | | | | */
/* | |_| | _ <| |_| | |_| | __/ | _ <| |___| __/| |_| | */
/* \____|_| \_\\___/ \___/|_| |_| \_\_____|_| \___/ */
/* */
/********************************************************************/
2015-11-10 08:17:41 +00:00
class groupRepo extends DBAccess {
2015-11-09 21:05:57 +00:00
/* VERIFIE L 'EXISTENCE D' UN GROUPE DANS LA BDD
*
* @ nom < String > le nom du groupe recherché
*
* @ return UID < int > si le groupe est dans la BDD , retourne son UID ( auto_incr )
* @ return FALSE < Boolean > FAUX si aucun groupe avec ce nom n ' est pas présent dans la BDD
*
*/
public static function UID ( $nom ){
/*** on cherche un groupe avec ce nom ***/
2015-11-10 09:50:43 +00:00
$getGroupeUID = DataBase :: getPDO () -> prepare ( " SELECT id_groupe as id FROM groupe WHERE nom = :nom " );
2015-11-09 21:05:57 +00:00
$getGroupeUID -> execute ( array (
':nom' => $nom
));
// on retourne le résultat : FAUX si aucun résultat, sinon la valeur de l'UID du groupe
return $getGroupeUID -> fetch ()[ 'id' ];
}
2015-11-11 14:50:05 +00:00
/* RETOURNE LES INFORMATIONS RELATIVES A UN GROUPE
*
* @ groupeUID < int > l ' UID du groupe
*
* @ return existe < Boolean > FAUX si le groupe n ' existe pas
* @ return infos < Array > les informations relatives au groupe
*
*/
public static function info ( $groupeUID ){
// on considère que le groupe existe
$getGroupeInfo = DataBase :: getPDO () -> prepare ( " SELECT id_groupe as id, nom, libelle FROM groupe WHERE id_groupe = :groupeUID " );
$getGroupeInfo -> execute ( array ( ':groupeUID' => $groupeUID ));
return $getGroupeInfo -> fetch ();
}
2015-11-09 21:05:57 +00:00
/* VERIFIE L 'EXISTENCE D' UNE APPARTENANCE DANS LA BDD
*
* @ etudiant < String > l 'identifiant (UID) de l' étudiant à ajouter au groupe
* @ groupe < String > le nom du groupe auquel on veut le ratacher
* @ semestre < int > l ' UID du semestre pour lequel il sera membre
*
* @ return UID < int > si l ' appartenance est dans la BDD , retourne son UID ( auto_incr )
* @ return FALSE < Boolean > FAUX si aucune appartenance pour cet étudiant à ce groupe pour ce semestre n ' est pas présent dans la BDD
*
*/
public static function appartenanceUID ( $etudiant , $groupe , $semestre ){
/*** on cherche un groupe avec ce nom ***/
2015-11-17 12:00:50 +00:00
$getAppartenanceUID = DataBase :: getPDO () -> prepare ( " SELECT id_appartenance as id
FROM appartenance
WHERE id_etudiant = : etudiant
AND id_groupe = : groupe
AND id_semestre = : semestre " );
2015-11-09 21:05:57 +00:00
$getAppartenanceUID -> execute ( array (
':etudiant' => $etudiant ,
':groupe' => $groupe ,
':semestre' => $semestre
));
// on retourne le résultat : FAUX si aucun résultat, sinon la valeur de l'UID du groupe
return $getAppartenanceUID -> fetch ()[ 'id' ];
}
/* CREER UN GROUPE AVEC CE NOM
*
* @ nom < String > le nom du groupe à créer
*
* @ return UID < int > l ' UID du groupe maintenant créé
* @ return created < Boolean > FAUX si le groupe existait déjà ou qu 'il n' pasa bien été créé
*
*/
public static function creer ( $nom ){
/* [ 1 ] On vérifie l 'existence d' un groupe avec ce nom
======================================================*/
2015-11-11 00:06:24 +00:00
if ( groupRepo :: UID ( $nom ) ) // si le groupe existe déjà
2015-11-09 21:05:57 +00:00
return false ; // on retourne FAUX
/* [ 2 ] On créé le groupe
=========================*/
$nom = strtoupper ( $nom ); // on met le nom en majuscules
// on créé et envoie la requête de création du groupe
2015-11-10 09:50:43 +00:00
$creerGroupe = DataBase :: getPDO () -> prepare ( " INSERT INTO groupe(id_groupe, nom) VALUES(default, :nom) " );
2015-11-09 21:05:57 +00:00
$creerGroupe -> execute ( array (
':nom' => $nom
));
/* [ 3 ] On vérifie si le groupe a bien été créé
===============================================*/
2015-11-11 00:06:24 +00:00
return groupRepo :: UID ( $nom );
2015-11-09 21:05:57 +00:00
}
2015-11-16 09:27:35 +00:00
/* AJOUTER UN MEMBRE A UN GROUPE / DEPLACER UN MEMBRE VERS UN GROUPE DONNE ( si déjà dans un groupe )
2015-11-09 21:05:57 +00:00
*
* @ etudiant < String > l 'identifiant (UID) de l' étudiant à ajouter au groupe
* @ groupe < int > l ' UID du groupe auquel on veut le ratacher
* @ semestre < int > l ' UID du semestre pour lequel il sera membre
*
* @ UID < Boolean > l 'UID de l' appartenance si l ' utilisateur a été ajouté au groupe pour ce semestre
* @ member < Boolean > FAUX si l 'utilisateur n' a pas été créé pour une quelconque erreur
*
*/
public static function ajouterMembre ( $etudiant , $groupe , $semestre ){
2015-11-16 09:27:35 +00:00
debug ();
2015-11-09 21:05:57 +00:00
/* [ 1 ] On vérifie si l ' utilisateur appartient à un groupe pour ce semestre
===========================================================================*/
2015-11-16 09:27:35 +00:00
if ( $appartenanceUID = groupRepo :: forStudent ( $etudiant , $semestre )[ 'id_appartenance' ] ){ // si c'est le cas
2015-11-09 21:05:57 +00:00
/* [ 2 ] On modifie l ' appartenance
==============================*/
// création et exécution de la requête de modification de l'appartenance
2015-11-17 12:00:50 +00:00
$ajouterMembres = DataBase :: getPDO () -> prepare ( " UPDATE appartenance
SET id_groupe = : groupe
WHERE id_appartenance = : appartenanceUID " );
2015-11-16 09:27:35 +00:00
$ajouterMembres -> execute ( array (
':groupe' => $groupe ,
2015-11-09 21:05:57 +00:00
':appartenanceUID' => $appartenanceUID
));
} else { // si l'utilisateur n'a pas de groupe pour ce semestre
/* [ 2 ] On créé l ' appartenance
==============================*/
// création et exécution de la requête de création d'appartenance
2015-11-17 12:00:50 +00:00
$ajouterMembres = DataBase :: getPDO () -> prepare ( " INSERT INTO appartenance(id_etudiant, id_groupe, id_semestre)
VALUES (
( SELECT identifiant FROM utilisateur WHERE identifiant = : etudiant ),
( SELECT id_groupe FROM groupe WHERE id_groupe = : groupe ),
( SELECT id_semestre FROM semestre WHERE id_semestre = : semestre )
) " );
2015-11-16 09:27:35 +00:00
$ajouterMembres -> execute ( array (
':etudiant' => $etudiant ,
':groupe' => $groupe ,
2015-11-09 21:05:57 +00:00
':semestre' => $semestre
));
}
/* [ 3 ] On vérifie que l ' appartenance est bien définie
======================================================*/
2015-11-11 00:06:24 +00:00
return groupRepo :: appartenanceUID ( $etudiant , $groupe , $semestre );
2015-11-09 21:05:57 +00:00
}
2015-11-10 21:33:51 +00:00
/* RETOURNE LA LISTE DES UTILISATEURS MEMBRES D ' UN GROUPE
*
* @ groupeUID < int > l ' UID du groupe en question
* @ semestreUID < int > l ' UID du semestre en question
*
* @ return membres < Array > la liste des utilisateurs du groupe
*
*/
public static function membres ( $groupeUID , $semestreUID ){
// si le groupe existe => on récupère ses utilisateurs
2015-11-17 12:00:50 +00:00
$getMembres = DataBase :: getPDO () -> prepare ( " SELECT u.identifiant, u.prenom, u.nom, u.mail, u.droits, s.nom as semestre, g.id_groupe, g.nom as groupe
FROM utilisateur as u , groupe as g , semestre as s , appartenance as app , formation as f
WHERE s . id_formation = f . id_formation
AND u . identifiant = app . id_etudiant
AND g . id_groupe = app . id_groupe
AND app . id_semestre = app . id_semestre // à virer (peut-être)
2015-11-10 21:33:51 +00:00
2015-11-17 12:00:50 +00:00
AND g . id_groupe = : groupeUID
AND s . id_semestre = : semestreUID
ORDER BY u . prenom , u . nom " );
2015-11-10 21:33:51 +00:00
$getMembres -> execute ( array (
':groupeUID' => $groupeUID ,
':semestreUID' => $semestreUID
));
// on retourne la liste des membres en supprimant les doublons à indices numériques
return DataBase :: delNumeric ( $getMembres -> fetchAll () );
}
2015-11-09 21:05:57 +00:00
2015-11-13 16:24:58 +00:00
/* RETOURNE LE GROUPE AUQUEL EST INSCRIT UN ETUDIANT POUR UN SEMESTRE DONNÉ
*
* @ etudiant < String > l 'UID de l' étudiant en question
* @ semestre < int > l ' UID du semestre en question
*
* @ return trouve < Boolean > FAUX si aucun groupe ne correspond aux critères
* @ return groupe < int > retourne l ' UID du groupe correspondant
*
*/
public static function forStudent ( $etudiant , $semestre ){
2015-11-17 12:00:50 +00:00
$getGroupe = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT app.id_appartenance, g.id_groupe as id, g.nom, s.id_semestre, s.nom as semestre, f.id_formation, f.code as formation, f.nom as nom_formation
FROM groupe as g , appartenance as app , formation as f , semestre as s
WHERE s . id_formation = f . id_formation
AND app . id_groupe = g . id_groupe
AND app . id_semestre = s . id_semestre
AND app . id_etudiant = : etudiant
AND s . id_semestre = : semestre
ORDER BY g . nom " );
2015-11-16 09:27:35 +00:00
$getGroupe -> execute ( array ( ':etudiant' => $etudiant , ':semestre' => $semestre ));
2015-11-13 16:24:58 +00:00
2015-11-16 09:27:35 +00:00
return $getGroupe -> fetch ();
2015-11-13 16:24:58 +00:00
}
2015-11-12 14:52:31 +00:00
/* RETOURNE TOUS LES GROUPES QUI ONT UN ENSEIGNANT PARTICULIER POUR UNE ANNEE DONNEE
*
* @ enseignant < String > l 'UID de l' enseignant recherché
2015-11-17 07:46:39 +00:00
* @ semestre_pair < Boolean > VRAI si le semestre courant est pair ( *** OPTIONNEL *** )
2015-11-12 14:52:31 +00:00
* @ annee < int > l ' année recherchée
*
*
* @ return groupes < Array > retourne la liste des groupes correspondant aux critères
*
*/
2015-11-17 07:46:39 +00:00
public static function forTeacher ( $enseignant , $semestre_pair , $annee ){
$semestrePair0 = '0' ; $semestrePair1 = '1' ;
if ( is_bool ( $semestre_pair ) ){ $semestrePair0 = ( $semestre_pair ) ? '0' : '1' ; $semestrePair1 = ( $semestre_pair ) ? '0' : '1' ; }
2015-11-12 14:52:31 +00:00
2015-11-17 12:00:50 +00:00
$getGroupeList = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT g.id_groupe as id, g.nom, s.rang, s.id_semestre, s.nom as semestre, f.id_formation, f.code as formation, f.nom as nom_formation
FROM module as m , utilisateur as u , utilisateur as eleve , groupe as g , enseignement as ens , mcc_ue , mcc_module as mcc_m , semestre as s , appartenance as app , formation as f
WHERE s . id_formation = f . id_formation
AND mcc_ue . id_semestre = s . id_semestre
AND mcc_ue . id_mcc_ue = mcc_m . id_mcc_ue
2015-11-12 14:52:31 +00:00
2015-11-17 12:00:50 +00:00
AND mcc_m . id_module = m . id_module
AND mcc_m . id_mcc_module = ens . id_mcc_module
2015-11-12 14:52:31 +00:00
2015-11-17 12:00:50 +00:00
AND ens . id_enseignant = u . identifiant
AND ens . correcteur = 1 // uniquement les groupes pour lesquels il est correcteur
2015-11-12 14:52:31 +00:00
2015-11-17 12:00:50 +00:00
AND app . id_etudiant = eleve . identifiant
AND app . id_semestre = s . id_semestre
AND app . id_groupe = g . id_groupe
2015-11-12 14:52:31 +00:00
2015-11-17 12:00:50 +00:00
AND u . identifiant = : enseignant
AND ( s . rang % 2 = : semestre_pair0 OR s . rang % 2 = : semestre_pair1 )
AND s . annee = : annee
ORDER BY s . rang , g . nom " );
2015-11-17 07:46:39 +00:00
$getGroupeList -> execute ( array ( ':enseignant' => $enseignant , ':semestre_pair0' => $semestrePair0 , ':semestre_pair1' => $semestrePair1 , ':annee' => $annee ));
2015-11-12 14:52:31 +00:00
return DataBase :: delNumeric ( $getGroupeList -> fetchAll () );
}
2015-11-15 22:29:39 +00:00
/* RETOURNE LES GROUPES INSCRITS A UN CONTROLE
*
* @ controle < int > l ' UID du contrôle en question
*
*
* @ return groupes < Array > retourne un tableau contenant les groupes inscrits à ce contrôle
* @ return FALSE < Boolean > retourne FALSE si aucun groupe n ' y est inscrit
*
*/
public static function forControle ( $controle ){
2015-11-17 12:00:50 +00:00
$getGroupeList = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT g.id_groupe, g.nom
FROM groupe as g , appartenance as app , mcc_ue , mcc_module as mcc_m , controle as ctrl
WHERE app . id_groupe = g . id_groupe
AND ctrl . id_mcc_module = mcc_m . id_mcc_module
AND mcc_m . id_mcc_ue = mcc_ue . id_mcc_ue
AND app . id_semestre = mcc_ue . id_semestre
AND ctrl . id_controle = : controle
ORDER BY g . nom ASC " );
2015-11-15 22:29:39 +00:00
$getGroupeList -> execute ( array ( ':controle' => $controle ));
return DataBase :: delNumeric ( $getGroupeList -> fetchAll () );
}
2015-11-12 08:18:10 +00:00
/* RETOURNE TOUS LES GROUPES DES SEMESTRES COURANT D ' UNE ANNÉE
*
2015-11-17 07:46:39 +00:00
* @ semestre_pair < Boolean > VRAI si le semestre courant est pair ( *** OPTIONNEL *** )
2015-11-12 08:18:10 +00:00
* @ annee < int > L ' année en cours
*
*
* @ return groupes < Array > retourne la liste des groupes correspondant aux critères
*
*/
2015-11-17 07:46:39 +00:00
public static function forYear ( $semestre_pair , $annee ){
2015-11-13 16:24:58 +00:00
$semestrePair0 = '0' ; $semestrePair1 = '1' ;
2015-11-17 07:46:39 +00:00
if ( is_bool ( $semestre_pair ) ){ $semestrePair0 = ( $semestre_pair ) ? '0' : '1' ; $semestrePair1 = ( $semestre_pair ) ? '0' : '1' ; }
2015-11-13 16:24:58 +00:00
2015-11-17 12:00:50 +00:00
$getGroupeList = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT g.id_groupe as id, g.nom, s.rang, s.id_semestre, s.nom as semestre, f.id_formation, f.code as formation, f.nom as nom_formation
FROM groupe as g , semestre as s , appartenance as app , formation as f
WHERE s . id_formation = f . id_formation
AND g . id_groupe = app . id_groupe
AND s . id_semestre = app . id_semestre
AND ( s . rang % 2 = : semestre_pair0 OR s . rang % 2 = : semestre_pair1 )
AND s . annee = : annee
ORDER BY g . nom " );
2015-11-13 16:24:58 +00:00
$getGroupeList -> execute ( array ( ':semestre_pair0' => $semestrePair0 , ':semestre_pair1' => $semestrePair1 , ':annee' => $annee ));
2015-11-12 08:18:10 +00:00
return DataBase :: delNumeric ( $getGroupeList -> fetchAll () );
}
2015-11-09 21:05:57 +00:00
}