2015-11-09 21:05:57 +00:00
< ? php require_once __ROOT__ . '/manager/security.php' ;
/**************************************************************************************/
/* ____ _____ __ __ _____ ____ _____ ____ _____ ____ _____ ____ ___ */
/* / ___|| ____| \/ | ____/ ___|_ _| _ \| ____| | _ \| ____| _ \ / _ \ */
/* \___ \| _| | |\/| | _| \___ \ | | | |_) | _| | |_) | _| | |_) | | | | */
/* ___) | |___| | | | |___ ___) || | | _ <| |___ | _ <| |___| __/| |_| | */
/* |____/|_____|_| |_|_____|____/ |_| |_| \_\_____| |_| \_\_____|_| \___/ */
/* */
/**************************************************************************************/
2015-11-19 22:32:54 +00:00
/*
* CONTENU DU REPO
*
* [ 1 ] UID ( formation , rang , annee )
* retourne l 'UID d' un semestre pour un rang et une année donnée
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
2015-11-09 21:05:57 +00:00
2015-11-10 08:17:41 +00:00
class semestreRepo extends DBAccess {
2015-11-19 22:32:54 +00:00
/* VERIFIE L 'EXISTENCE D' UN SEMESTRE DANS LA BDD
2015-11-09 21:05:57 +00:00
*
2015-11-19 22:32:54 +00:00
* @ formation < int > l ' UID de la formation en question
2015-11-09 21:05:57 +00:00
* @ rang < int > le rang du semestre dans le parcours ( 1 <=> S1 , 2 <=> S2 , .. )
* @ annee < int > l ' année du début du parcours
*
*
* @ return UID < int > si le semestre est dans la BDD , retourne son UID ( auto_incr )
* @ return FALSE < Boolean > FAUX si aucun semestre avec ce rang et annee n ' est pas présent dans la BDD
*
*/
2015-11-19 22:32:54 +00:00
public static function UID ( $formation , $rang , $annee ){
2015-11-09 21:05:57 +00:00
/*** on cherche un semestre avec ce rang et cette année (qui est forcément unique) ***/
2015-11-19 22:32:54 +00:00
$getSemestreUID = DataBase :: getPDO () -> prepare ( " SELECT s.id_semestre as id
FROM semestre as s , formation as f
WHERE s . id_formation = f . id_formation
AND s . id_formation = : formation
AND s . rang = : rang
AND s . annee = : annee " );
2015-11-09 21:05:57 +00:00
$getSemestreUID -> execute ( array (
2015-11-19 22:32:54 +00:00
':formation' => $formation ,
':rang' => $rang ,
':annee' => $annee
2015-11-09 21:05:57 +00:00
));
// on retourne le résultat : FAUX si aucun résultat, sinon la valeur de l'UID du semestre
return $getSemestreUID -> fetch ()[ 'id' ];
}
2015-11-10 23:04:56 +00:00
2015-11-24 23:04:02 +00:00
/* retourne l 'UID d' une formation et la créé en amont si elle n ' existe pas
*
* @ code < String > Le code de la formation
* @ nom < String > Le nom de la formation
*
*
* @ return UID < int > l ' UID de la formation en question
*
*/
public static function includeFormation ( $code , $nom ){
/* [ 1 ] On vérifie l ' existence de la formation
======================================================*/
$getFormationUID = DataBase :: getPDO () -> prepare ( " SELECT id_formation as id
FROM formation
WHERE code = : code
AND nom = : nom " );
$getFormationUID -> execute ( array ( ':code' => $code , ':nom' => $nom ));
/* [ 2 ] Cas où la formation existe déjà , alors on retourne l ' UID
======================================================*/
if ( $formationUID = $getFormationUID -> fetch ()[ 'id' ] ) return $formationUID ;
/* [ 3 ] Cas où la formation n ' existe pas , alors on la créé
======================================================*/
$creerFormation = DataBase :: getPDO () -> prepare ( " INSERT INTO formation(id_formation, code, nom, nb_semestres)
VALUES ( DEFAULT , : code , : nom , DEFAULT ) " );
$creerFormation -> execute ( array ( ':code' => $code , ':nom' => $nom ));
/* [ 4 ] On vérifie que la formation a été créé et retourne son UID
======================================================*/
$getFormationUID = DataBase :: getPDO () -> prepare ( " SELECT id_formation as id
FROM formation
WHERE code = : code
AND nom = : nom " );
$getFormationUID -> execute ( array ( ':code' => $code , ':nom' => $nom ));
return $formationUID = $getFormationUID -> fetch ()[ 'id' ];
}
/* retourne l 'UID d' un semestre le créé en amont si il n ' existe pas
*
* @ rang < int > Le rang du semestre en question
* @ annee < int > L ' année du semestre en question
* @ formation < int > L ' UID de la formation en question
*
*
* @ return UID < int > l ' UID du semestre en question
*
*/
public static function includeSemestre ( $rang , $annee , $formation ){
/* [ 1 ] On vérifie l ' existence du semestre
======================================================*/
$getSemestreUID = DataBase :: getPDO () -> prepare ( " SELECT id_semestre as id
FROM semestre
WHERE rang = : rang
AND annee = : annee
AND id_formation = : formation " );
$getSemestreUID -> execute ( array ( ':rang' => $rang , ':annee' => $annee , ':formation' => $formation ));
/* [ 2 ] Cas où le semestre existe déjà , alors on retourne l ' UID
======================================================*/
if ( $semestreUID = $getSemestreUID -> fetch ()[ 'id' ] ) return $semestreUID ;
/* [ 3 ] Cas où le semestre n ' existe pas , alors on le créé
======================================================*/
$creerSemestre = DataBase :: getPDO () -> prepare ( " INSERT INTO semestre(id_semestre, id_formation, nom, rang, annee)
VALUES ( DEFAULT , : formation , : nom , : rang , : annee ) " ); // par défaut le nom du semestre = " Sn " où n est le rang
$creerSemestre -> execute ( array ( ':formation' => $formation , ':nom' => 'S' . $rang , ':rang' => $rang , ':annee' => $annee ));
/* [ 4 ] On vérifie que la formation a été créé et retourne son UID
======================================================*/
$getSemestreUID = DataBase :: getPDO () -> prepare ( " SELECT id_semestre as id
FROM semestre
WHERE rang = : rang
AND annee = : annee
AND id_formation = : formation " );
$getSemestreUID -> execute ( array ( ':rang' => $rang , ':annee' => $annee , ':formation' => $formation ));
return $getSemestreUID -> fetch ()[ 'id' ];
}
2015-11-10 23:04:56 +00:00
2015-11-10 09:50:43 +00:00
/* RENVOIE LES INFORMATIONS D 'UN SEMESTRE D' UID DONNÉ
*
* @ semestreUID < int > l ' UID du semestre duquel on veut les infos
*
* @ return semestre < Array > tableau associatif contenant tout les champs de la BDD pour ce semestre
*
*/
public static function info ( $semestreUID ){
// on considère que le semestre existe
2015-11-17 12:00:50 +00:00
$getSemestreInfo = DataBase :: getPDO () -> prepare ( " SELECT s.id_semestre as id, s.nom, s.rang, s.annee, f.id_formation, f.code as formation, f.nom as nom_formation
FROM semestre as s , formation as f
WHERE s . id_formation = f . id_formation
AND s . id_semestre = : semestreUID " );
2015-11-11 14:50:05 +00:00
$getSemestreInfo -> execute ( array ( ':semestreUID' => $semestreUID ));
2015-11-10 09:50:43 +00:00
// on retourne le résultat en supprimant les doublons à indices numériques
2015-11-11 14:50:05 +00:00
return $getSemestreInfo -> fetch ();
2015-11-10 09:50:43 +00:00
}
2015-11-19 13:08:40 +00:00
/* RENVOIE LA LISTE DES ANNÉES PRÉSENTES DANS LA BDD
*
* @ return annees < Array > retourne la liste des années contenues dans la bdd
* @ return FALSE < Boolean > retourne FALSE si aucune année n ' est trouvée
*
*/
public static function getAnnees (){
$getAnneesList = DataBase :: getPDO () -> query ( " SELECT DISTINCT annee FROM semestre ORDER BY annee DESC " );
return DataBase :: delNumeric ( $getAnneesList -> fetchAll () );
}
2015-11-10 09:50:43 +00:00
2015-11-09 21:05:57 +00:00
/* retourne le semestre courant d ' un étudiant
*
2015-11-19 22:32:54 +00:00
* @ etudiant < String > l 'identifiant (UID) de l' étudiant en question
* @ semestre_pair < Boolean > VRAI si le semestre courant est pair
* @ annee < String > l ' année en cours
2015-11-09 21:05:57 +00:00
*
2015-11-10 09:50:43 +00:00
* @ return etudie < Boolean > FALSE si l 'étudiant n' est dans aucun semestre en cours
2015-11-19 22:32:54 +00:00
* @ return semestre < Array > retourne les données relatives au semestre
2015-11-09 21:05:57 +00:00
*
*/
2015-11-11 21:54:52 +00:00
public static function forStudent ( $etudiant , $semestre_pair , $annee ){
2015-11-10 09:50:43 +00:00
// on formate les variables
2015-11-10 09:56:43 +00:00
$semestre_pair = ( $semestre_pair ) ? '0' : '1' ;
2015-11-10 09:50:43 +00:00
2015-11-17 12:00:50 +00:00
$getSemestreUID = DataBase :: getPDO () -> prepare ( " SELECT s.id_semestre as id, f.id_formation, f.code as formation, f.nom as nom_formation
FROM semestre as s , appartenance as app , formation as f
WHERE s . id_formation = f . id_formation
AND app . id_semestre = s . id_semestre
AND app . id_etudiant = : etudiant
AND s . annee = : annee
AND s . rang % 2 = : semestre_pair
ORDER BY s . rang DESC " );
2015-11-10 09:50:43 +00:00
$getSemestreUID -> execute ( array (
':etudiant' => $etudiant ,
':annee' => $annee ,
':semestre_pair' => $semestre_pair
));
2015-11-19 22:32:54 +00:00
// on retourne les infos du semestre courant
return $getSemestreUID -> fetch ();
2015-11-10 09:50:43 +00:00
}
2015-11-09 21:05:57 +00:00
2015-11-16 12:28:24 +00:00
/* retourne la liste des semestres qu ' à un enseignant
*
* @ enseignant < String > l 'UID de l' enseignant en question
* @ semestre_pair < Boolean > VRAI si le semestre en cours est pair
* @ annee < int > l ' année en question
*
*
* @ return semestres < Array > retourne la liste des semestres répondant aux critères
* @ return FALSE < Boolean > retourne FALSE si aucun semestre ne correspond aux critères
*
*/
public static function forTeacher ( $enseignant , $semestre_pair , $annee ){
2015-11-23 15:21:03 +00:00
$semestrePair0 = '0' ; $semestrePair1 = '1' ;
if ( is_bool ( $semestre_pair ) ){ $semestrePair0 = ( $semestre_pair ) ? '0' : '1' ; $semestrePair1 = ( $semestre_pair ) ? '0' : '1' ; }
2015-11-17 12:00:50 +00:00
$getSemestreList = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT s.id_semestre as id, f.id_formation, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee
FROM semestre as s , formation as f , enseignement as ens , mcc_module as mcc_m , mcc_ue
WHERE s . id_semestre = mcc_ue . id_semestre
AND s . id_formation = f . id_formation
AND mcc_ue . id_mcc_ue = mcc_m . id_mcc_ue
AND mcc_m . id_mcc_module = ens . id_mcc_module
AND ens . id_enseignant = : enseignant
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
ORDER BY s . rang ASC " );
2015-11-23 15:21:03 +00:00
$getSemestreList -> execute ( array ( ':enseignant' => $enseignant , ':semestre_pair0' => $semestrePair0 , ':semestre_pair1' => $semestrePair1 , ':annee' => $annee ));
2015-11-16 12:28:24 +00:00
return DataBase :: delNumeric ( $getSemestreList -> fetchAll () );
}
2015-11-16 11:02:03 +00:00
/* retourne la liste des semestres d ' une année
*
* @ annee < int > l ' année en question
*
*
* @ return semestres < Array > retourne la liste des semestres de cette année
* @ return FALSE < Boolean > retourne FALSE si aucun semestre ne correspond aux critères
*
*/
public static function forYear ( $annee ){
2015-11-17 12:00:50 +00:00
$getSemestreList = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT s.id_semestre as id, f.id_formation, f.code as formation, f.nom as nom_formation, s.nom, s.rang, s.annee
FROM semestre as s , formation as f
WHERE s . id_formation = f . id_formation
AND annee = : annee
ORDER BY rang ASC " );
2015-11-16 11:02:03 +00:00
$getSemestreList -> execute ( array ( ':annee' => $annee ));
return DataBase :: delNumeric ( $getSemestreList -> fetchAll () );
}
2015-11-19 13:08:40 +00:00
/* RETOURNE LE NOMBRE D 'ÉLÈVES D' UN SEMESTRE
*
* @ semestre < int > l ' UID du semestre en question
*
*
* @ return nbEtu < int > retourne le nombre d ' étudiants du semestre
*
*/
public static function nbEtuForSemestre ( $semestre ){
$getNbEtu = DataBase :: getPDO () -> prepare ( " SELECT count(distinct id_appartenance) as nb_etudiants
FROM appartenance
WHERE id_semestre = : semestre " );
$getNbEtu -> execute ( array ( ':semestre' => $semestre ));
if ( ! ( $nb = $getNbEtu -> fetch ()) )
return 0 ; // si on en trouve pas, on retourne 0
else
return ( int ) $nb [ 'nb_etudiants' ]; // sinon on retourne le nombre
}
2015-11-09 21:05:57 +00:00
2015-11-22 14:00:18 +00:00
/* retourne l 'UID d' un semestre s 'il existe sinon créé tout ce qui a besoin et on retourne l' UID
*
* @ codeFormation < String > le code / nom de la formation
* @ nomFormation < String > le libellé de la formation
* @ nomSemestre < String > le nom / libellé du semestre
* @ rangSemestre < int > le rang du semestre dans la formation
* @ annee < int > l ' année du semestre
*
*
* @ return UID < int > retourne l 'UID du semestre si tout s' est bien passé
* @ return FALSE < Boolean > retourne FALSE s ' il y a eu une erreur
*
*/
public static function creer ( $codeFormation , $nomFormation , $nomSemestre , $rangSemestre , $annee ){
$count = 0 ; $maxLoop = 2 ;
/* [ 1 ] On vérifie l ' existence de la formation ( code uniquement )
====================================================================================*/
$getFormationUID = DataBase :: getPDO () -> prepare ( " SELECT f.id_formation as id
FROM formation as f
WHERE f . code = : code " );
$getFormationUID -> execute ( array ( ':code' => $codeFormation ));
while ( ! ( $formationUID = $getFormationUID -> fetch ()[ 'id' ]) ){
/* [ 2 ] on créé la formation car elle n ' existe pas
================================================================================*/
$creerFormation = DataBase :: getPDO () -> prepare ( " INSERT INTO formation(id_formation, code, nom, nb_semestres)
VALUES ( DEFAULT , : code , : nom , 2 ) " );
$creerFormation -> execute ( array ( ':code' => $codeFormation , ':nom' => $nomFormation ));
if ( $count >= $maxLoop ) return false ;
$count ++ ;
$getFormationUID = DataBase :: getPDO () -> prepare ( " SELECT f.id_formation as id
FROM formation as f
WHERE f . code = : code " );
$getFormationUID -> execute ( array ( ':code' => $codeFormation ));
}
/* [ 3 ] On vérifie l ' existence du semestre ( rang , annee , nom , formation )
====================================================================================*/
$getSemestreUID = DataBase :: getPDO () -> prepare ( " SELECT s.id_semestre as id
FROM semestre as s , formation as f
WHERE s . id_formation = f . id_formation
AND f . id_formation = : formationUID
AND s . nom = : nom
AND s . rang = : rang
AND s . annee = : annee " );
$getSemestreUID -> execute ( array ( ':formationUID' => $formationUID , ':nom' => $nomSemestre , ':rang' => $rangSemestre , ':annee' => $annee ));
while ( ! ( $semestreUID = $getSemestreUID -> fetch ()[ 'id' ]) ){
/* [ 4 ] on créé le semestre car il n ' existe pas
================================================================================*/
$creerSemestre = DataBase :: getPDO () -> prepare ( " INSERT INTO semestre(id_semestre, id_formation, nom, rang, annee)
VALUES ( DEFAULT , : formationUID , : nom , : rang , : annee ) " );
$creerSemestre -> execute ( array ( ':formationUID' => $formationUID , ':nom' => $nomSemestre , ':rang' => $rangSemestre , ':annee' => $annee ));
if ( $count >= $maxLoop ) return false ;
$count ++ ;
$getSemestreUID = DataBase :: getPDO () -> prepare ( " SELECT s.id_semestre as id
FROM semestre as s , formation as f
WHERE s . id_formation = f . id_formation
AND f . id_formation = : formationUID
AND s . nom = : nom
AND s . rang = : rang
AND s . annee = : annee " );
$getSemestreUID -> execute ( array ( ':formationUID' => $formationUID , ':nom' => $nomSemestre , ':rang' => $rangSemestre , ':annee' => $annee ));
}
return $semestreUID ;
}
2015-11-09 21:05:57 +00:00
}