sid/manager/repo/semestre.php

197 lines
6.6 KiB
PHP
Raw Normal View History

<?php require_once __ROOT__.'/manager/security.php';
/**************************************************************************************/
/* ____ _____ __ __ _____ ____ _____ ____ _____ ____ _____ ____ ___ */
/* / ___|| ____| \/ | ____/ ___|_ _| _ \| ____| | _ \| ____| _ \ / _ \ */
/* \___ \| _| | |\/| | _| \___ \ | | | |_) | _| | |_) | _| | |_) | | | | */
/* ___) | |___| | | | |___ ___) || | | _ <| |___ | _ <| |___| __/| |_| | */
/* |____/|_____|_| |_|_____|____/ |_| |_| \_\_____| |_| \_\_____|_| \___/ */
/* */
/**************************************************************************************/
class semestreRepo extends DBAccess{
/* VERIFIE L'EXISTENCE D'UN GROUPE DANS LA BDD
*
* @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
*
*/
public static function UID($rang, $annee){
// si les 2 ne sont pas des nombres (même dans une string)
if( !is_numeric($rang) || !is_numeric($annee) )
return false; // aucun résultat possible
/*** on cherche un semestre avec ce rang et cette année (qui est forcément unique) ***/
$getSemestreUID = DataBase::getPDO()->prepare("SELECT id_semestre as id FROM semestre WHERE rang = :rang AND annee = :annee");
$getSemestreUID->execute(array(
':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'];
}
/* 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
$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 ));
// on retourne le résultat en supprimant les doublons à indices numériques
2015-11-11 14:50:05 +00:00
return $getSemestreInfo->fetch();
}
/* 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() );
}
/* retourne le semestre courant d'un étudiant
*
* @etudiant<String> l'identifiant (UID) de l'étudiant à ajouter au groupe
*
* @return etudie<Boolean> FALSE si l'étudiant n'est dans aucun semestre en cours
* @return semestreUID<int> l'UID du semestre courant
*
*/
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 l'UID du semestre courant
return $getSemestreUID->fetch()['id'];
}
/* 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){
$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_pair
AND s.annee = :annee
ORDER BY s.rang ASC");
$getSemestreList->execute(array( ':enseignant' => $enseignant, ':semestre_pair' => ($semestre_pair) ? '0' : '1', ':annee' => $annee ));
return DataBase::delNumeric( $getSemestreList->fetchAll() );
}
/* 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){
$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<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
}
}