2015-11-11 00:06:24 +00:00
< ? php require_once __ROOT__ . '/manager/security.php' ;
/*************************************************************/
/* _ _ ___ _____ _____ ____ _____ ____ ___ */
/* | \ | |/ _ \_ _| ____| | _ \| ____| _ \ / _ \ */
/* | \| | | | || | | _| | |_) | _| | |_) | | | | */
/* | |\ | |_| || | | |___ | _ <| |___| __/| |_| | */
/* |_| \_|\___/ |_| |_____| |_| \_\_____|_| \___/ */
/* */
/*************************************************************/
class noteRepo extends DBAccess {
/* VERIFIE L 'EXISTENCE D' UNE NOTE POUR UN ÉTUDIANT A UN CONTROLE
*
* @ etudiant < String > l 'identifiant de l' étudiant recherché
* @ controle < int > l ' UID du contrôle
*
2015-11-15 14:12:26 +00:00
* @ return UID < String > l ' UID de la note si elle existe pour ces critères
* @ return FALSE < Boolean > FAUX si aucune note répondant à ces critères n ' est pas présente dans la BDD
2015-11-11 00:06:24 +00:00
*
*/
2015-11-15 14:12:26 +00:00
public static function UID ( $etudiant , $controle ){
$getNoteUID = DataBase :: getPDO () -> prepare ( " SELECT note.id_note as id " .
" FROM appartenance as app, note, controle as ctrl " .
" WHERE app.id_appartenance = note.id_appartenance " .
" AND ctrl.id_controle = note.id_controle " .
2015-11-11 00:06:24 +00:00
2015-11-15 14:12:26 +00:00
" AND app.id_etudiant = :etudiant " .
" AND ctrl.id_controle = :controle " );
$getNoteUID -> execute ( array ( ':etudiant' => $etudiant , ':controle' => $controle ));
2015-11-11 00:06:24 +00:00
// on retourne le résultat : FAUX si aucun résultat, sinon la valeur de l'UID de l'utilisateur
2015-11-15 14:12:26 +00:00
return $getNoteUID -> fetch ()[ 'id' ];
2015-11-11 00:06:24 +00:00
}
/* RENVOIE LES INFORMATIONS D 'UN UTILISATEUR D' UID DONNÉ
*
* @ utilisateurUID < int > l 'UID de l' utilisateur duquel on veut les infos
*
* @ return utilisateur < Array > tableau associatif contenant tout les champs de la BDD pour cet utilisateur
*
*/
public static function info ( $utilisateurUID ){
// on considère que le semestre existe
$getUtilisateurInfo = DataBase :: getPDO () -> prepare ( " SELECT identifiant, prenom, nom, mail, droits FROM utilisateur WHERE identifiant = :utilisateurUID " );
$getUtilisateurInfo -> execute ( array (
':utilisateurUID' => $utilisateurUID
));
// on retourne le résultat en supprimant les doublons à indices numériques
return $getUtilisateurInfo -> fetch ();
}
2015-11-12 10:19:58 +00:00
/* RENVOIE LES NOTES D ' UN ETUDIANT POUR UN CONTROLE PARTICULIER
2015-11-11 00:06:24 +00:00
*
2015-11-12 10:19:58 +00:00
* @ etudiant < String > l 'UID de l' étudiant concerné
* @ controle < int > l ' UID du controle concerné
*
* @ return notes < Array > retourne les notes d ' un étudiant pour un controle particulier
2015-11-11 00:06:24 +00:00
*
*/
2015-11-12 10:19:58 +00:00
public static function forStudent ( $etudiant , $controle ){
$getNoteList = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT n.id_note as id, n.id_appartenance, n.id_controle, n.valeur " .
" FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m " .
" WHERE n.id_appartenance = app.id_appartenance " .
" AND app.id_semestre = s.id_semestre " .
" AND s.id_semestre = mcc_ue.id_semestre " .
" AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue " .
" AND mcc_m.id_mcc_module = ctrl.id_mcc_module " .
" AND n.id_controle = ctrl.id_controle " .
" AND app.id_etudiant = :etudiant " .
" AND ctrl.id_controle = :controle " .
" ORDER BY n.valeur ASC " );
$getNoteList -> execute ( array ( ':etudiant' => $etudiant , ':controle' => $controle ));
return DataBase :: delNumeric ( $getNoteList -> fetchAll () );
2015-11-11 00:06:24 +00:00
}
2015-11-13 23:47:11 +00:00
2015-11-14 17:33:06 +00:00
/* RENVOIE LES NOTES POUR UN CONTROLE PARTICULIER
2015-11-13 18:07:36 +00:00
*
2015-11-14 17:33:06 +00:00
* [ 1 ] Par groupe si aucun groupe spécifié ( statistiques : moyenne , min , max , nb notes , ... )
* [ 2 ] Liste des élèves d ' un groupe si aucun groupe spécifié
*
*
2015-11-13 18:07:36 +00:00
* @ controle < int > l ' UID du controle concerné
*
2015-11-14 17:33:06 +00:00
* @ groupe < int > *** OPTIONNEL *** l ' UID du groupe spécifique
*
*
* @ return notes < Array > [ 1 ] retourne les stats des notes pour les groupes à ce contrôle
* [ 2 ] retourne les notes des étudiants du groupe spécifié pour ce contrôle
2015-11-13 18:07:36 +00:00
*
*/
2015-11-14 17:33:06 +00:00
public static function forTeacher ( $controle , $groupe = null ){
/* [ 1 ] Statistiques des groupes
============================================================*/
if ( ! is_int ( $groupe ) ){
2015-11-15 11:15:30 +00:00
$getNoteList = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT g.id_groupe, g.nom as groupe, n.id_note as id, n.id_appartenance, n.id_controle, AVG(n.valeur) as moyenne, min(n.valeur) as min, max(n.valeur) as max, COUNT(n.valeur) as nb_notes " .
2015-11-14 17:33:06 +00:00
" FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m, groupe as g " .
" WHERE n.id_appartenance = app.id_appartenance " .
" AND app.id_semestre = s.id_semestre " .
" AND app.id_groupe = g.id_groupe " .
" AND s.id_semestre = mcc_ue.id_semestre " .
" AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue " .
" AND mcc_m.id_mcc_module = ctrl.id_mcc_module " .
" AND n.id_controle = ctrl.id_controle " .
" AND ctrl.id_controle = :controle " .
" GROUP BY g.id_groupe " .
" ORDER BY g.nom ASC " );
$getNoteList -> execute ( array ( ':controle' => $controle ));
2015-11-13 18:07:36 +00:00
2015-11-13 23:47:11 +00:00
2015-11-14 17:33:06 +00:00
/* [ 2 ] Notes des étudiants d ' un groupe
============================================================*/
} else {
$getNoteList = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT n.id_note as id, g.nom as groupe, app.id_etudiant as etudiant, n.id_appartenance, n.id_controle, n.valeur " .
" FROM note as n, appartenance as app, semestre as s, controle as ctrl, mcc_ue, mcc_module as mcc_m, groupe as g " .
" WHERE n.id_appartenance = app.id_appartenance " .
" AND app.id_semestre = s.id_semestre " .
" AND app.id_groupe = g.id_groupe " .
" AND s.id_semestre = mcc_ue.id_semestre " .
" AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue " .
" AND mcc_m.id_mcc_module = ctrl.id_mcc_module " .
" AND n.id_controle = ctrl.id_controle " .
" AND ctrl.id_controle = :controle " .
" AND app.id_groupe = :groupe " .
2015-11-13 23:47:11 +00:00
2015-11-14 17:33:06 +00:00
" ORDER BY g.nom ASC " );
$getNoteList -> execute ( array ( ':controle' => $controle , ':groupe' => $groupe ));
}
2015-11-13 18:07:36 +00:00
return DataBase :: delNumeric ( $getNoteList -> fetchAll () );
}
2015-11-15 14:12:26 +00:00
/* CRÉATION / MODIFICATION D ' UNE NOTE POUR UN ETUDIANT À UN CONTRÔLE
*
* @ etudiant < String > l 'UID de l' étudiant en question
* @ controle < int > l ' UID du contrôle en question
* @ semestre < int > l ' UID du semestre en question
* @ valeur < number > valeur de la note à saisir
*
*
* @ return noteUID < int > l ' UID de la note si elle a bien été créé
* @ return cree < Boolean > FALSE si la note n ' a pas été créé
*
*/
public static function creer ( $etudiant , $controle , $semestre , $valeur ){
/* [ 1 ] Premier cas : il faut créer la note de cet étudiant pour ce contrôle
============================================================================*/
if ( ! ( $noteUID = noteRepo :: UID ( $etudiant , $controle )) ){
$creationNote = DataBase :: getPDO () -> prepare ( " INSERT INTO note(id_note, id_appartenance, id_controle, valeur) " .
" VALUES( " .
" DEFAULT, " .
" (SELECT id_appartenance FROM appartenance WHERE id_etudiant = :etudiant AND id_semestre = :semestre), " .
" :controle, " .
" :valeur " .
" ) " );
$creationNote -> execute ( array ( ':etudiant' => $etudiant , ':semestre' => $semestre , ':controle' => $controle , ':valeur' => $valeur ));
/* [ 2 ] Second cas : il faut modifier la note de cet étudiant
============================================================================*/
} else {
$modificationNote = DataBase :: getPDO () -> prepare ( " UPDATE note SET valeur = :valeur WHERE id_note = :noteUID " );
$modificationNote -> execute ( array ( ':valeur' => $valeur , ':noteUID' => $noteUID ));
}
/* [ 3 ] On vérifie que la note a bien été créé pour cet étudiant et ce contrôle
=================================================================================*/
if ( ! ( $noteUID = noteRepo :: UID ( $etudiant , $controle )) ) return false ;
/* [ 4 ] On vérifie que la note créée a bien la valeur qu ' on a attribuée
=================================================================================*/
$verificationValeur = DataBase :: getPDO () -> prepare ( " SELECT note.valeur FROM note WHERE id_note = :noteUID " );
$verificationValeur -> execute ( array ( ':noteUID' => $noteUID ));
return ( $verificationValeur -> fetch ()[ 'valeur' ] == $valeur );
}
2015-11-11 00:06:24 +00:00
}