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
2015-11-25 23:18:50 +00:00
$getGroupeInfo = DataBase :: getPDO () -> prepare ( " SELECT id_groupe as id, nom FROM groupe WHERE id_groupe = :groupeUID " );
2015-11-11 14:50:05 +00:00
$getGroupeInfo -> execute ( array ( ':groupeUID' => $groupeUID ));
2015-11-21 12:28:13 +00:00
return DataBase :: delNumeric ( $getGroupeInfo -> fetch (), true );
2015-11-11 14:50:05 +00:00
}
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-12-06 14:05:22 +00:00
if ( $groupeUID = groupRepo :: UID ( $nom ) ) // si le groupe existe déjà
return $groupeUID ; // on retourne FAUX
2015-11-09 21:05:57 +00:00
/* [ 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-25 23:18:50 +00:00
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)
2015-11-25 23:18:50 +00:00
VALUES ( : etudiant , : groupe , : 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
2015-11-25 23:18:50 +00:00
AND app . id_semestre = s . id_semestre
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-21 12:28:13 +00:00
return DataBase :: delNumeric ( $getGroupe -> fetch (), true );
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
2015-11-25 23:18:50 +00:00
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
AND mcc_m . id_module = m . id_module
2015-11-17 12:00:50 +00:00
AND mcc_m . id_mcc_module = ens . id_mcc_module
2015-11-25 23:18:50 +00:00
AND ens . id_enseignant = u . identifiant
2015-12-01 15:46:41 +00:00
AND ens . id_groupe = g . id_groupe
2015-11-25 23:18:50 +00:00
AND ens . correcteur = 1
AND app . id_etudiant = eleve . identifiant
AND app . id_semestre = s . id_semestre
AND app . id_groupe = g . id_groupe
AND u . identifiant = : enseignant
2015-11-17 12:00:50 +00:00
AND ( s . rang % 2 = : semestre_pair0 OR s . rang % 2 = : semestre_pair1 )
2015-11-25 23:18:50 +00:00
AND s . annee = : annee
2015-11-17 12:00:50 +00:00
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
*
2015-12-01 17:15:44 +00:00
* @ enseignant < int > *** OPTIONNEL *** l 'UID de l' enseignant en question
2015-11-15 22:29:39 +00:00
*
2015-12-01 17:15:44 +00:00
*
2015-11-15 22:29:39 +00:00
* @ 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
*
*/
2015-12-01 17:15:44 +00:00
public static function forControle ( $controle , $enseignant = null ){
$enseignantUID = ( is_string ( $enseignant )) ? $enseignant : '%' ;
2015-11-17 12:00:50 +00:00
2015-12-01 17:15:44 +00:00
$getGroupeList = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT g.id_groupe, g.nom
FROM groupe as g , mcc_module as mcc_m , controle as ctrl , enseignement as ens
-- WHERE app . id_groupe = g . id_groupe
-- AND ens . id_groupe = g . id_groupe
-- AND ens . id_mcc_module = mcc_m . id_mcc_module
-- 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
WHERE ctrl . id_mcc_module = ens . id_mcc_module
AND ens . id_groupe = g . id_groupe
AND ens . id_enseignant LIKE '$enseignantUID'
2015-11-17 12:00:50 +00:00
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
2015-11-24 23:04:02 +00:00
2015-11-25 23:18:50 +00:00
/* retourne la liste exhaustive des groupes
*
* @ return groupes < Array > retourne la liste des groupes de la BDD
*
*/
public static function getAllGroups (){
2015-12-06 14:05:22 +00:00
$getGroupList = DataBase :: getPDO () -> query ( " SELECT DISTINCT id_groupe as id, nom FROM groupe ORDER BY LENGTH(nom), nom ASC " );
2015-11-25 23:18:50 +00:00
// $getGroupList = DataBase::getPDO()->query("SELECT id_groupe as id, nom FROM groupe WHERE length(nom) <= 6 ORDER BY nom ASC");
return DataBase :: delNumeric ( $getGroupList -> fetchAll () );
}
2015-11-24 23:04:02 +00:00
2015-11-30 20:46:40 +00:00
/* retourne les groupes inscrits à un mcc_module
*
* @ mcc_module < int > l ' UID du mcc_module en question
*
*
* @ return groupes < Array > retourne la liste des groupes inscrits à ce mcc_module
*
*/
public static function inscritsMccModule ( $mcc_module ){
$getGroupeList = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT g.id_groupe as id, g.nom
FROM groupe as g , appartenance as app , mcc_ue , mcc_module as mcc_m
WHERE mcc_m . id_mcc_ue = mcc_ue . id_mcc_ue
AND mcc_ue . id_semestre = app . id_semestre
AND app . id_groupe = g . id_groupe
AND mcc_m . id_mcc_module = : mcc_module
ORDER BY nom ASC " );
$getGroupeList -> execute ( array ( ':mcc_module' => $mcc_module ));
return DataBase :: delNumeric ( $getGroupeList -> fetchAll () );
}
2015-11-24 23:04:02 +00:00
/* retourne l 'UID d' une appartenance et la créé en amont si elle n ' existe pas
*
* @ identifiant < String > l 'UID de l' étudiant en question
* @ semestre < int > l ' UID du semestre en question
*
*
* @ return UID < String > retourne l 'UID de l' appartenance
* @ return FALSE < Boolean > retourne FALSE si une erreur occure
*
*/
public static function includeAppartenance ( $identifiant , $semestre ){
/* [ 1 ] On vérifie l 'existence de l' appartenance
======================================================*/
$getAppartenanceUID = DataBase :: getPDO () -> prepare ( " SELECT id_appartenance as id
FROM appartenance
WHERE id_etudiant = : identifiant
AND id_semestre = : semestre " );
$getAppartenanceUID -> execute ( array ( ':identifiant' => $identifiant , ':semestre' => $semestre ));
/* [ 2 ] Cas où l 'appartenance existe déjà, alors on retourne l' UID
======================================================*/
if ( $appartenanceUID = $getAppartenanceUID -> fetch ()[ 'id' ] ) return $appartenanceUID ;
/* [ 3 ] Cas où l 'appartenance n' existe pas ,
/* alors on met l ' étudiant dans le groupe de même
/* nom que la formation + semestre
======================================================*/
/* [ 3 - 1 ] On vérifie l ' existence du groupe de même nom que la formation + semestre
======================================================*/
$getGroupeUID = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT id_groupe as id
FROM groupe
WHERE nom = ( SELECT concat ( f . code , ' ' , s . nom ) as nom
FROM semestre as s , formation as f
WHERE s . id_formation = f . id_formation
AND s . id_semestre = : semestre ) " );
$getGroupeUID -> execute ( array ( ':semestre' => $semestre ));
/* [ 3 - 2 ] Le groupe n ' existe pas , alors on le créé
======================================================*/
if ( ! ( $groupeUID = $getGroupeUID -> fetch ()[ 'id' ]) ){
$creerGroupe = DataBase :: getPDO () -> prepare ( " INSERT INTO groupe(id_groupe, nom)
VALUES ( DEFAULT , ( SELECT concat ( f . code , ' ' , s . nom ) as nom
FROM semestre as s , formation as f
WHERE s . id_formation = f . id_formation
AND s . id_semestre = : semestre )
) " );
$creerGroupe -> execute ( array ( ':semestre' => $semestre ));
// si le groupe n'a pas été créé (erreur) on retourne false
$getGroupeUID = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT id_groupe as id
FROM groupe
WHERE nom = ( SELECT concat ( f . code , ' ' , s . nom ) as nom
FROM semestre as s , formation as f
WHERE s . id_formation = f . id_formation
AND s . id_semestre = : semestre ) " );
$getGroupeUID -> execute ( array ( ':semestre' => $semestre ));
if ( ! ( $groupeUID = $getGroupeUID -> fetch ()[ 'id' ]) ) return false ;
}
$creerAppartenance = DataBase :: getPDO () -> prepare ( " INSERT INTO appartenance(id_appartenance, id_etudiant, id_groupe, id_semestre)
VALUES ( DEFAULT , : identifiant , : groupeUID , : semestre ) " );
$creerAppartenance -> execute ( array (
':identifiant' => $identifiant ,
':groupeUID' => $groupeUID ,
':semestre' => $semestre
));
/* [ 4 ] On vérifie que l ' appartenance a été créé et retourne son UID
======================================================*/
$getAppartenanceUID = DataBase :: getPDO () -> prepare ( " SELECT id_appartenance as id
FROM appartenance
WHERE id_etudiant = : identifiant
AND id_semestre = : semestre " );
$getAppartenanceUID -> execute ( array ( ':identifiant' => $identifiant , ':semestre' => $semestre ));
return $appartenanceUID = $getAppartenanceUID -> fetch ()[ 'id' ];
}
2015-11-09 21:05:57 +00:00
}