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
2016-01-02 13:21:31 +00:00
class semestreRepo {
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' ];
}
2016-01-02 13:21:31 +00:00
/* VERIFIE L 'EXISTENCE D' UN SEMESTRE DANS LA BDD PAR SON ID_UNIQUE
*
* @ semestreUID < int > l ' UID du semestre en question
*
*
* @ return exists < Boolean > VRAI si un semestre avec cet id existe
*
*/
public static function exists ( $semestreUID ){
// on cherche si un semestre existe avec cet UID
$getSemestreUID = DataBase :: getPDO () -> prepare ( " SELECT id_semestre
FROM semestre
WHERE id_semestre = : semestreUID " );
$getSemestreUID -> execute ( array (
':semestreUID' => $semestreUID
));
2015-11-10 23:04:56 +00:00
2016-01-02 13:21:31 +00:00
// on retourne si OUI/NON le semestre existe
return $getSemestreUID -> fetch () !== FALSE ;
}
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 ));
2016-01-02 19:59:31 +00:00
return $getFormationUID -> fetch ()[ 'id' ];
2015-11-24 23:04:02 +00:00
}
/* 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
2016-01-08 23:35:41 +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' ;
2016-01-02 13:21:31 +00:00
$getSemestreInfos = DataBase :: getPDO () -> prepare ( " SELECT s.id_semestre as id, s.rang as rang, f.id_formation, f.code as formation, f.nom as nom_formation
2015-11-17 12:00:50 +00:00
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 " );
2016-01-02 13:21:31 +00:00
$getSemestreInfos -> execute ( array (
2015-11-10 09:50:43 +00:00
':etudiant' => $etudiant ,
':annee' => $annee ,
':semestre_pair' => $semestre_pair
));
2015-11-19 22:32:54 +00:00
// on retourne les infos du semestre courant
2016-01-03 10:55:20 +00:00
return $getSemestreInfos -> fetch ();
2015-11-10 09:50:43 +00:00
}
2015-11-09 21:05:57 +00:00
2015-11-29 22:29:54 +00:00
/* retourne le parcours d 'un étudiant sous forme d' un tableau de semestres
*
* @ etudiant < String > l 'UID de l' étudiant en question
*
*
* @ return semestres < Array > retourne la liste des semestres du parcours de l ' étudiant ( ordre chronologique )
*
*/
public static function getParcours ( $etudiant ){
2016-01-08 22:34:17 +00:00
$getSemestreListe = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT s.id_semestre as id, f.id_formation, f.code, f.nom as formation, f.nb_semestres, s.nom as semestre, s.rang, s.annee, app.mention, app.inactive
2015-11-29 22:29:54 +00:00
FROM formation as f , semestre as s , appartenance as app
WHERE s . id_formation = f . id_formation
AND app . id_semestre = s . id_semestre
AND app . id_etudiant = : etudiant
ORDER BY s . annee , s . rang " );
$getSemestreListe -> execute ( array ( ':etudiant' => $etudiant ));
return DataBase :: delNumeric ( $getSemestreListe -> fetchAll () );
}
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
2015-12-02 21:01:00 +00:00
ORDER BY f . nom , annee , 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 ){
2016-01-02 23:59:18 +00:00
if ( $nomSemestre == null ) // si le nom n'est pas défini, on met "S" collé au rang
$nomSemestre = 'S' . $rangSemestre ;
2015-11-22 14:00:18 +00:00
$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 ;
}
2016-01-02 14:55:25 +00:00
/* RETOURNE LA DERNIERE ANNEE AYANT UN MCC
*
* @ return annee < int > Retourne l ' année en question
*
*/
public static function getLastMCCYear (){
$getLastMccYear = DataBase :: getPDO () -> query ( " SELECT DISTINCT max(s.annee) as annee
FROM semestre as s , mcc_ue
GROUP BY s . annee " );
2016-01-08 23:35:41 +00:00
return $getLastMccYear -> fetch ();
2016-01-02 14:55:25 +00:00
}
2016-01-02 23:59:18 +00:00
/* RETOURNE LE SEMESTRE SUIVANT UN SEMESTRE
*
* @ semestre < int > UID du semestre source
*
*
* @ return next_semestre < int > Retourne l ' UID du semestre de destination
* Retourne NULL si c ' est le dernier semestre de la formation
*
*/
public static function next ( $semestreUID ){
/* [ 1 ] On récupère les informations du semestre
=====================================================*/
$getSemestreInfo = DataBase :: getPDO () -> prepare ( " SELECT id_semestre, rang, id_formation, annee
FROM semestre
WHERE id_semestre = : semestreUID " );
$getSemestreInfo -> execute ( array ( ':semestreUID' => $semestreUID ));
// si le semestre n'existe pas, on retourne une erreur
if ( ! ( $semestre = $getSemestreInfo -> fetch ()) ) return 'unknown_semestre' ;
/* [ 2 ] On calcule le rang + annee du semestre suivant
=====================================================*/
$next = array (
'rang' => $semestre [ 'rang' ] + 1 , // on incrémente le rang
'annee' => ( $semestre [ 'rang' ] % 2 == 0 ) ? $semestre [ 'annee' ] + 1 : $semestre [ 'annee' ]
);
/* [ 3 ] On récupère le nombre de semestres max de la formation
=====================================================*/
$getNbSemestreFormation = DataBase :: getPDO () -> prepare ( " SELECT nb_semestres
FROM formation
WHERE id_formation = : last_formation " );
$getNbSemestreFormation -> execute ( array ( ':last_formation' => $semestre [ 'id_formation' ] ));
$nbSemestres = $getNbSemestreFormation -> fetch ()[ 'nb_semestres' ];
// si c'était le dernier semestre, on retourne null
if ( $semestre [ 'rang' ] == $nbSemestres ) return null ;
/* [ 3 ] On cherche le semestre suivant
=====================================================*/
$req = DataBase :: getPDO () -> prepare ( " SELECT id_semestre
FROM semestre
WHERE id_formation = : id_formation
AND rang = : next_rang
AND annee = : next_annee
" );
$req -> execute ( array (
':id_formation' => $semestre [ 'id_formation' ],
':next_rang' => $next [ 'rang' ],
':next_annee' => $next [ 'annee' ]
));
$nextSemestres = DataBase :: delNumeric ( $req -> fetchAll () );
/* [ 4 ] On retourne l ' UID du semestre concerné
=====================================================*/
if ( count ( $nextSemestres ) > 0 ) // si au moins un semestre, on retourne le premier
return $nextSemestres [ 0 ][ 'id_semestre' ];
else // si aucun semestre trouvé, il faut le créer, on retourne le rang et l'année de destination
return $next ;
}
2016-01-04 20:15:52 +00:00
/* RETOURNE LE SEMESTRE PRÉCÉDENT UN SEMESTRE
2016-01-02 23:59:18 +00:00
*
* @ semestre < int > UID du semestre source
*
*
2016-01-04 20:15:52 +00:00
* @ return prev_semestre < int > Retourne l ' UID du semestre de destination
2016-01-02 23:59:18 +00:00
* Retourne NULL si le semestre destination n ' existe pas
*
*/
2016-01-04 20:15:52 +00:00
public static function prev ( $semestreUID ){
2016-01-02 23:59:18 +00:00
/* [ 1 ] On récupère les informations du semestre
=====================================================*/
$getSemestreInfo = DataBase :: getPDO () -> prepare ( " SELECT id_semestre, rang, id_formation, annee
FROM semestre
WHERE id_semestre = : semestreUID " );
$getSemestreInfo -> execute ( array ( ':semestreUID' => $semestreUID ));
// si le semestre n'existe pas, on retourne une erreur
if ( ! ( $semestre = $getSemestreInfo -> fetch ()) ) return 'unknown_semestre' ;
// si le rang est impair, on retourne une erreur
if ( $semestre [ 'rang' ] % 2 == 1 ) return 'not_even_rang' ;
/* [ 2 ] On calcule le rang + annee du semestre suivant
=====================================================*/
2016-01-04 20:15:52 +00:00
$prev = array (
'rang' => $semestre [ 'rang' ] - 1 , // on décrémente le rang
2016-01-02 23:59:18 +00:00
'annee' => $semestre [ 'annee' ] + 1 // on incrémente l'année
);
/* [ 3 ] On cherche le semestre suivant
=====================================================*/
$req = DataBase :: getPDO () -> prepare ( " SELECT id_semestre
FROM semestre
WHERE id_formation = : id_formation
2016-01-04 20:15:52 +00:00
AND rang = : prev_rang
AND annee = : prev_annee
2016-01-02 23:59:18 +00:00
" );
$req -> execute ( array (
':id_formation' => $semestre [ 'id_formation' ],
2016-01-04 20:15:52 +00:00
':prev_rang' => $prev [ 'rang' ],
':prev_annee' => $prev [ 'annee' ]
2016-01-02 23:59:18 +00:00
));
2016-01-04 20:15:52 +00:00
$prevSemestres = DataBase :: delNumeric ( $req -> fetchAll () );
2016-01-02 23:59:18 +00:00
/* [ 4 ] On retourne l ' UID du semestre concerné
=====================================================*/
2016-01-04 20:15:52 +00:00
if ( count ( $prevSemestres ) > 0 ) // si au moins un semestre, on retourne le premier
return $prevSemestres [ 0 ][ 'id_semestre' ];
2016-01-02 23:59:18 +00:00
else // si aucun semestre trouvé, il faut le créer, on retourne le rang et l'année de destination
2016-01-04 20:15:52 +00:00
return $prev ;
2016-01-02 23:59:18 +00:00
}
2016-01-08 22:34:17 +00:00
/* RETOURNE LES SEMESTRES EQUIVALENTS ( REDOUBLÉS )
*
* @ semestre < int > UID du semestre de base
* @ etudiant < String > UID de l ' étudiant en question
*
*
* @ return redoublements < Array > Retourne un tableau contenant les UIDs des semestre équivalents
* @ return error < Boolean > Retourne FAUX si une erreur occure
*
*/
public static function getRedoublements ( $semestre , $etudiant ){
/* [ 1 ] On récupère les informations du semestre
=================================================*/
$getSemestreInfo = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT s.*
FROM semestre as s , appartenance as app
WHERE s . id_semestre = app . id_semestre
AND s . id_semestre = : semestre
AND app . id_etudiant = : etudiant " );
$getSemestreInfo -> execute ( array ( ':semestre' => $semestre , ':etudiant' => $etudiant ));
// aucun résultat, on retourne une erreur
if ( ! ( $semestreInfo = $getSemestreInfo -> fetch ()) ) return 'unknown_semestre' ;
/* [ 2 ] On cherche les semestre redoublés
=================================================*/
$getRedoublements = DataBase :: getPDO () -> prepare ( " SELECT s.id_semestre
FROM semestre as s , appartenance as app
WHERE s . id_semestre = app . id_semestre
AND s . id_formation = : formation
AND s . rang = : rang
AND app . id_etudiant = : etudiant
AND s . id_semestre <> : semestre
ORDER BY s . annee , s . rang ASC " );
$getRedoublements -> execute ( array (
':formation' => $semestreInfo [ 'id_formation' ],
':rang' => $semestreInfo [ 'rang' ],
':etudiant' => $etudiant ,
':semestre' => $semestre
));
return $getRedoublements -> fetchAll ();
}
2015-11-09 21:05:57 +00:00
}