l'UID de la formation en question * @rang le rang du semestre dans le parcours (1<=>S1, 2<=>S2, ..) * @annee l'année du début du parcours * * * @return UID si le semestre est dans la BDD, retourne son UID (auto_incr) * @return FALSE FAUX si aucun semestre avec ce rang et annee n'est pas présent dans la BDD * */ public static function UID($formation, $rang, $annee){ /*** on cherche un semestre avec ce rang et cette année (qui est forcément unique) ***/ $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"); $getSemestreUID->execute(array( ':formation' => $formation, ':rang' => $rang, ':annee' => $annee )); // on retourne le résultat : FAUX si aucun résultat, sinon la valeur de l'UID du semestre return $getSemestreUID->fetch()['id']; } /* retourne l'UID d'une formation et la créé en amont si elle n'existe pas * * @code Le code de la formation * @nom Le nom de la formation * * * @return UID 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 Le rang du semestre en question * @annee L'année du semestre en question * @formation L'UID de la formation en question * * * @return UID 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']; } /* RENVOIE LES INFORMATIONS D'UN SEMESTRE D'UID DONNÉ * * @semestreUID l'UID du semestre duquel on veut les infos * * @return semestre tableau associatif contenant tout les champs de la BDD pour ce semestre * */ public static function info($semestreUID){ // on considère que le semestre existe $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"); $getSemestreInfo->execute(array( ':semestreUID' => $semestreUID )); // on retourne le résultat en supprimant les doublons à indices numériques return $getSemestreInfo->fetch(); } /* RENVOIE LA LISTE DES ANNÉES PRÉSENTES DANS LA BDD * * @return annees retourne la liste des années contenues dans la bdd * @return FALSE 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() ); } /* retourne le semestre courant d'un étudiant * * @etudiant l'identifiant (UID) de l'étudiant en question * @semestre_pair VRAI si le semestre courant est pair * @annee l'année en cours * * @return etudie FALSE si l'étudiant n'est dans aucun semestre en cours * @return semestre retourne les données relatives au semestre * */ public static function forStudent($etudiant, $semestre_pair, $annee){ // on formate les variables $semestre_pair = ($semestre_pair) ? '0' : '1'; $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"); $getSemestreUID->execute(array( ':etudiant' => $etudiant, ':annee' => $annee, ':semestre_pair' => $semestre_pair )); // on retourne les infos du semestre courant return $getSemestreUID->fetch(); } /* retourne le parcours d'un étudiant sous forme d'un tableau de semestres * * @etudiant l'UID de l'étudiant en question * * * @return semestres retourne la liste des semestres du parcours de l'étudiant (ordre chronologique) * */ public static function getParcours($etudiant){ $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 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() ); } /* retourne la liste des semestres qu'à un enseignant * * @enseignant l'UID de l'enseignant en question * @semestre_pair VRAI si le semestre en cours est pair * @annee l'année en question * * * @return semestres retourne la liste des semestres répondant aux critères * @return FALSE retourne FALSE si aucun semestre ne correspond aux critères * */ 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'; } $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 AND (s.rang % 2 = :semestre_pair0 OR s.rang % 2 = :semestre_pair1) AND s.annee = :annee ORDER BY s.rang ASC"); $getSemestreList->execute(array( ':enseignant' => $enseignant, ':semestre_pair0' => $semestrePair0, ':semestre_pair1' => $semestrePair1, ':annee' => $annee )); return DataBase::delNumeric( $getSemestreList->fetchAll() ); } /* retourne la liste des semestres d'une année * * @annee l'année en question * * * @return semestres retourne la liste des semestres de cette année * @return FALSE retourne FALSE si aucun semestre ne correspond aux critères * */ public static function forYear($annee){ $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"); $getSemestreList->execute(array( ':annee' => $annee )); return DataBase::delNumeric( $getSemestreList->fetchAll() ); } /* RETOURNE LE NOMBRE D'ÉLÈVES D'UN SEMESTRE * * @semestre l'UID du semestre en question * * * @return nbEtu 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 } /* retourne l'UID d'un semestre s'il existe sinon créé tout ce qui a besoin et on retourne l'UID * * @codeFormation le code/nom de la formation * @nomFormation le libellé de la formation * @nomSemestre le nom/libellé du semestre * @rangSemestre le rang du semestre dans la formation * @annee l'année du semestre * * * @return UID retourne l'UID du semestre si tout s'est bien passé * @return FALSE 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; } }