2015-10-28 17:08:12 +00:00
< ? php require_once __ROOT__ . '/manager/security.php' ;
2015-11-09 21:05:57 +00:00
/* INCLUSION DES REPOs */
require_once __ROOT__ . '/manager/repo/user.php' ; // gestion des utilisateurs (UID, infos, création, modification)
require_once __ROOT__ . '/manager/repo/group.php' ; // gestion des groupes & appartenances (UID, ajouter membres, visu membres, création, modification)
require_once __ROOT__ . '/manager/repo/semestre.php' ;
2015-11-10 23:04:56 +00:00
require_once __ROOT__ . '/manager/repo/module.php' ;
require_once __ROOT__ . '/manager/repo/ue.php' ;
2015-11-09 21:05:57 +00:00
// require_once __ROOT__.'/manager/repo/note.php';
2015-11-10 09:50:43 +00:00
// debug();
2015-10-22 12:06:49 +00:00
2015-11-10 08:17:41 +00:00
class DBAccess {};
2015-10-22 12:06:49 +00:00
class DataBase {
/* ATTRIBUTS */
private $host ;
private $dbname ;
private $username ;
private $password ;
2015-11-10 08:17:41 +00:00
private static $pdo ;
private static $instance ;
2015-10-22 12:06:49 +00:00
public function __construct ( $host , $dbname , $username , $password ){
2015-10-22 16:55:26 +00:00
$this -> host = $host ;
$this -> dbname = $dbname ;
$this -> username = $username ;
$this -> password = $password ;
// password: Qt358nUdyeTxLDM8
2015-11-10 08:17:41 +00:00
DataBase :: $pdo = new PDO ( 'mysql:host=' . $host . ';dbname=' . $dbname , $username , $password );
2015-10-22 12:06:49 +00:00
}
2015-10-22 16:55:26 +00:00
2015-10-24 08:57:16 +00:00
/* retourne une instance de la classe */
public static function getInstance (){
2015-11-10 08:17:41 +00:00
if ( DataBase :: $instance == null )
DataBase :: $instance = new DataBase ( " localhost " , " sid2 " , " php " , " Qt358nUdyeTxLDM8 " );
return DataBase :: $instance ;
}
/* retourne la connection statique */
public static function getPDO (){
$instance = DataBase :: getInstance ();
return DataBase :: $pdo ;
2015-10-24 08:57:16 +00:00
}
2015-11-08 21:30:23 +00:00
/*************************************************************/
/* _____ ______ _ _ ______ _____ _ */
/* / ____| ____| \ | | ____| __ \ /\ | | */
/* | | __| |__ | \| | |__ | |__) | / \ | | */
/* | | |_ | __| | . ` | __| | _ / / /\ \ | | */
/* | |__| | |____| |\ | |____| | \ \ / ____ \| |____ */
/* \_____|______|_| \_|______|_| \_\/_/ \_\______| */
/* */
/*************************************************************/
2015-11-10 09:50:43 +00:00
/* SUPPRIME LES VALEURS À CLÉS NUMÉRIQUES DANS UN FETCH D ' UNE TABLE DE LA BDD
*
* @ fetchData < Array > le résultat d ' une $requeteSQL -> fetchAll ()
*
* @ return newFetchData < Array > retourne le tableau donné en paramètre mais sans les valeurs à clés numériques
*
*/
public static function delNumeric ( $fetchData ){
// on supprime les doublons des entrées (indice numérique)
for ( $i = 0 ; $i < count ( $fetchData ) ; $i ++ ) // pour tout les utilisateurs
foreach ( $fetchData [ $i ] as $col => $val ) // pour toutes les entrées
if ( is_int ( $col ) ) // si l'indice est un entier
unset ( $fetchData [ $i ][ $col ] ); // on le supprime
2015-11-08 21:30:23 +00:00
2015-11-10 09:50:43 +00:00
return $fetchData ;
}
2015-11-08 21:30:23 +00:00
2015-11-10 09:50:43 +00:00
2015-11-08 21:30:23 +00:00
/*************************************************************************************/
/* _ _ _______ _____ _ _____ _____ _______ ______ _ _ _____ */
/* | | | |__ __|_ _| | |_ _|/ ____| /\|__ __| ____| | | | __ \ */
/* | | | | | | | | | | | | | (___ / \ | | | |__ | | | | |__) | */
/* | | | | | | | | | | | | \___ \ / /\ \ | | | __| | | | | _ / */
/* | |__| | | | _| |_| |____ _| |_ ____) / ____ \| | | |____| |__| | | \ \ */
/* \____/ |_| |_____|______|_____|_____/_/ \_\_| |______|\____/|_| \_\ */
/* */
/*************************************************************************************/
2015-10-22 16:55:26 +00:00
/*********************************************/
/*** création d'un utilisateur dans la bdd ***/
/*********************************************/
2015-10-28 17:08:12 +00:00
public function creerUtilisateur ( $identifiant , $prenom , $nom , $mail , $mdp , $droits ){
2015-11-10 09:50:43 +00:00
if ( userRepo :: creer ( $identifiant , $prenom , $nom , $mail , $mdp , $droits ) ) // si l'utilisateur a bien été créé
2015-10-22 16:55:26 +00:00
return 'success' ;
else
return 'error' ;
2015-11-08 21:30:23 +00:00
}
/*********************************************************************************/
/*** on récupère les informations utiles à l'utilisateur lors de la connection ***/
/*********************************************************************************/
public function utilisateurInfo ( $identifiant ){
2015-11-10 23:04:56 +00:00
// on vérifie que l'utilisateur existe
2015-11-09 21:05:57 +00:00
if ( ! ( $utilisateurUID = userRepo :: UID ( $identifiant )) ) return 'unknown_user' ;
2015-10-22 16:55:26 +00:00
2015-11-10 09:50:43 +00:00
return userRepo :: info ( $utilisateurUID );
2015-10-22 16:55:26 +00:00
}
2015-11-10 09:50:43 +00:00
/* retourne le semestre en cours d ' un étudiant
2015-11-09 21:05:57 +00:00
*
* @ etudiant < String > l 'identifiant (UID) de l' étudiant à ajouter au groupe
*
* @ return semestreUID < int > l ' UID du semestre courant
*
*/
2015-11-10 09:50:43 +00:00
public static function studentSemestre ( $etudiant , $semestre_pair , $annee ){
if ( $semestre = semestreRepo :: studentCurrent ( $etudiant , $semestre_pair , $annee ) ) // si on a un résultat
return $semestre ;
else
return 'error' ;
2015-11-09 21:05:57 +00:00
}
2015-11-08 21:30:23 +00:00
/**********************************************************/
/* _____ _____ ____ _ _ _____ ______ _____ */
/* / ____| __ \ / __ \| | | | __ \| ____|/ ____| */
/* | | __| |__) | | | | | | | |__) | |__ | (___ */
/* | | |_ | _ /| | | | | | | ___/| __| \___ \ */
/* | |__| | | \ \| |__| | |__| | | | |____ ____) | */
/* \_____|_| \_\\____/ \____/|_| |______|_____/ */
/* */
/**********************************************************/
2015-10-22 16:55:26 +00:00
/****************************************/
/*** création d'un groupe dans la bdd ***/
/****************************************/
2015-10-22 19:19:52 +00:00
public function creerGroupe ( $nom ){
2015-11-09 21:05:57 +00:00
if ( groupRepo :: creer ( $nom ) ) // si on a bien ajouté un entrée ou qu'elle n'existait pas déjà
2015-10-22 19:19:52 +00:00
return 'success' ;
else
return 'error' ;
}
/******************************************************/
/*** ajout d'un utilisateur à un groupe dans la bdd ***/
/******************************************************/
2015-10-28 17:08:12 +00:00
public function ajouterEtudiantGroupe ( $etudiant , $groupe , $semestre , $annee ){
2015-11-10 23:04:56 +00:00
// on vérifie que l'utilisateur, le groupe, le semestre existent
2015-11-09 21:05:57 +00:00
if ( ! ( $etudiantUID = userRepo :: UID ( $etudiant )) ) return 'unknown_user' ;
if ( ! ( $groupeUID = groupRepo :: UID ( $groupe )) ) return 'unknown_group' ; else $groupeUID = ( int ) $groupeUID ;
if ( ! ( $semestreUID = semestreRepo :: UID ( $semestre , $annee )) ) return 'unknown_semestre' ; else $semestreUID = ( int ) $semestreUID ;
2015-10-22 19:19:52 +00:00
2015-10-24 08:57:16 +00:00
2015-11-09 21:05:57 +00:00
if ( groupRepo :: ajouterMembre ( $etudiantUID , $groupeUID , $semestreUID ) ) // si on a bien ajouté un entrée
2015-10-28 17:08:12 +00:00
return 'success' ;
else
return 'error' ;
2015-10-22 19:19:52 +00:00
}
/******************************************************/
/*** retourne la liste des utilisateurs d'un groupe ***/
/******************************************************/
2015-10-28 17:08:12 +00:00
public function listeEtudiantsGroupe ( $groupe , $semestre , $annee ){
2015-11-10 23:04:56 +00:00
// on vérifie que le groupe et le semestre existent
2015-11-09 21:05:57 +00:00
if ( ! ( $groupeUID = groupRepo :: UID ( $groupe )) ) return 'unknown_group' ; else $groupeUID = ( int ) $groupeUID ;
if ( ! ( $semestreUID = semestreRepo :: UID ( $semestre , $annee )) ) return 'unknown_semestre' ; else $semestreUID = ( int ) $semestreUID ;
2015-10-28 17:08:12 +00:00
// si le groupe existe => on récupère ses utilisateurs
2015-11-10 08:17:41 +00:00
$appartenance = DataBase :: getPDO () -> prepare ( " SELECT u.identifiant, u.prenom, u.nom, u.mail, u.droits, s.nom as semestre " .
2015-10-28 17:08:12 +00:00
" FROM utilisateur as u, groupe as g, semestre as s, appartenance as app " .
" WHERE u.identifiant = app.id_etudiant " .
" AND g.id_groupe = app.id_groupe " .
" AND s.id_semestre = app.id_semestre " . // à virer (peut-être)
" AND g.id_groupe = :groupeUID " .
" AND s.id_semestre = :semestreUID " .
" ORDER BY u.prenom, u.nom " );
$appartenance -> execute ( array (
':groupeUID' => $groupeUID ,
':semestreUID' => $semestreUID
2015-10-22 19:19:52 +00:00
));
2015-10-23 08:56:22 +00:00
2015-11-10 09:50:43 +00:00
// on fetch tous les utilisateurs & on supprime les doublons des entrées (indice numérique)
return DataBase :: delNumeric ( $appartenance -> fetchAll () ); // on retourne le tout
2015-10-23 08:04:26 +00:00
}
2015-11-04 08:15:35 +00:00
/********************************************************************/
/*** retourne la liste des utilisateurs des groupes d'un semestre ***/
/********************************************************************/
public function listeEtudiantsTousGroupesSemestre ( $semestre , $annee ){
2015-11-10 23:04:56 +00:00
// on vérifie que le semestre existe
2015-11-09 21:05:57 +00:00
if ( ! ( $semestreUID = semestreRepo :: UID ( $semestre , $annee )) ) return 'unknown_semestre' ; else $semestreUID = ( int ) $semestreUID ;
2015-10-28 17:08:12 +00:00
2015-10-23 08:04:26 +00:00
2015-10-28 17:08:12 +00:00
// on cherche tout les groupes du même semestre de la même année
2015-11-10 21:33:51 +00:00
$getGroupesUID = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT g.id_groupe as id, g.nom, s.rang, s.nom as semestre " .
2015-10-28 17:08:12 +00:00
" FROM groupe as g, semestre as s, appartenance as app " .
" WHERE g.id_groupe = app.id_groupe " .
" AND s.id_semestre = app.id_semestre " .
" AND s.id_semestre = :semestreUID " .
" ORDER BY g.nom " );
$getGroupesUID -> execute ( array (
':semestreUID' => $semestreUID
));
2015-10-23 08:04:26 +00:00
2015-10-28 17:08:12 +00:00
$grouplist = array (); // contiendra tout les groupes
2015-10-23 08:04:26 +00:00
// on parcourt tous les groupes
while ( $groupeUID = $getGroupesUID -> fetch () ){
2015-11-10 21:33:51 +00:00
2015-10-23 08:04:26 +00:00
$groupe = new stdClass ();
$groupe -> nom = $groupeUID [ 'nom' ]; // attribut "nom" ajouté au groupe
2015-11-04 08:15:35 +00:00
$groupe -> semestre = $groupeUID [ 'semestre' ];
2015-10-23 08:04:26 +00:00
2015-11-10 21:33:51 +00:00
$groupe -> userlist = groupRepo :: membres ( $groupeUID [ 'id' ], $semestreUID ); // on charge la liste des utilisateurs de ce groupe
2015-10-23 08:04:26 +00:00
array_push ( $grouplist , $groupe ); // on l'ajoute au résultat
}
return $grouplist ; // sinon on retourne le tableau
2015-11-04 08:15:35 +00:00
}
/******************************************************************/
/*** retourne la liste des utilisateurs des groupes d'une année ***/
/******************************************************************/
2015-11-10 09:56:43 +00:00
public function listeEtudiantsTousGroupesAnnee ( $annee , $semestre_pair , $pSemestre , $pGroupe ){
2015-11-06 13:05:14 +00:00
// définition des paramètres optionnels
$semestreDeb = 1 ; $semestreFin = 4 ;
if ( $pSemestre != null ){ $semestreDeb = $pSemestre ; $semestreFin = $pSemestre ; } // semestre donné uniquement (si param non null)
$groupeOpt = '%' ;
if ( $pGroupe != null ){ $groupeOpt = $pGroupe ; } // si le groupe est donné, on le définit
2015-11-10 23:04:56 +00:00
2015-11-04 08:15:35 +00:00
/*** on cherche un semestre avec ce rang et cette année (qui est unique) ***/
2015-11-10 08:17:41 +00:00
$checkAnnee = DataBase :: getPDO () -> prepare ( " SELECT id_semestre as id FROM semestre WHERE annee = :annee " );
2015-11-04 08:15:35 +00:00
$checkAnnee -> execute ( array (
':annee' => $annee
));
// si on trouve pas, on retourne "unknown_year"
if ( ! ( $checkAnnee -> fetch ()[ 'id' ] ) )
return 'unknown_year' ;
// on cherche tout les groupes du même semestre de la même année
2015-11-10 21:33:51 +00:00
$getGroupesUID = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT g.id_groupe as id, g.nom, s.rang, s.id_semestre, s.nom as semestre " .
2015-11-04 08:15:35 +00:00
" FROM groupe as g, semestre as s, appartenance as app " .
" WHERE g.id_groupe = app.id_groupe " .
" AND s.id_semestre = app.id_semestre " .
2015-11-06 13:05:14 +00:00
" AND g.nom LIKE ' " . $groupeOpt . " ' " .
2015-11-10 09:56:43 +00:00
" AND s.rang BETWEEN :semestreDeb AND :semestreFin " .
" AND s.rang % 2 = :semestre_pair " .
2015-11-04 08:15:35 +00:00
" AND s.annee = :annee " .
" ORDER BY g.nom " );
$getGroupesUID -> execute ( array (
2015-11-06 13:05:14 +00:00
':semestreDeb' => $semestreDeb ,
':semestreFin' => $semestreFin ,
2015-11-11 17:23:37 +00:00
':semestre_pair' => ( $semestre_pair ) ? '0' : '1' ,
2015-11-04 08:15:35 +00:00
':annee' => $annee
));
$grouplist = array (); // contiendra tout les groupes
// on parcourt tous les groupes
while ( $groupeUID = $getGroupesUID -> fetch () ){
$groupe = new stdClass ();
$groupe -> nom = $groupeUID [ 'nom' ]; // attribut "nom" ajouté au groupe
$groupe -> semestre = $groupeUID [ 'semestre' ];
2015-11-10 21:33:51 +00:00
$groupe -> userlist = groupRepo :: membres ( $groupeUID [ 'id' ], $groupeUID [ 'id_semestre' ]); // on charge la liste des utilisateurs de ce groupe
2015-11-04 08:15:35 +00:00
array_push ( $grouplist , $groupe ); // on l'ajoute au résultat
}
return $grouplist ; // sinon on retourne le tableau
}
/******************************************************************/
/*** retourne la liste des utilisateurs des groupes d'une année ***/
/******************************************************************/
2015-11-10 21:33:51 +00:00
public function listeEtudiantsTousGroupesEnseignant ( $annee , $semestre_pair , $enseignant , $pSemestre , $pGroupe ){
2015-11-06 13:05:14 +00:00
// définition des paramètres optionnels
$semestreDeb = 1 ; $semestreFin = 4 ;
if ( $pSemestre != null ){ $semestreDeb = $pSemestre ; $semestreFin = $pSemestre ; } // semestre donné uniquement (si param non null)
$groupeOpt = '%' ;
if ( $pGroupe != null ){ $groupeOpt = $pGroupe ; } // si le groupe est donné, on le définit
2015-11-04 08:15:35 +00:00
/*** on cherche un semestre avec ce rang et cette année (qui est unique) ***/
2015-11-10 08:17:41 +00:00
$checkAnnee = DataBase :: getPDO () -> prepare ( " SELECT id_semestre as id FROM semestre WHERE annee = :annee " );
2015-11-04 08:15:35 +00:00
$checkAnnee -> execute ( array (
':annee' => $annee
));
// si on trouve pas, on retourne "unknown_year"
if ( ! ( $checkAnnee -> fetch ()[ 'id' ] ) )
return 'unknown_year' ;
2015-11-08 21:30:23 +00:00
// si on trouve pas, on retourne "unknown_user"
2015-11-09 21:05:57 +00:00
if ( ! ( $enseignantUID = userRepo :: UID ( $enseignant )) ) return 'unknown_user' ;
2015-11-04 08:15:35 +00:00
// on cherche tout les groupes du même semestre de la même année
2015-11-10 21:33:51 +00:00
$getGroupesUID = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT g.id_groupe as id, s.id_semestre, s.nom as semestre, s.rang, g.nom as nom " .
2015-11-06 10:13:32 +00:00
" FROM module as m, utilisateur as u, utilisateur as eleve, groupe as g, enseignement as ens, mcc_ue, mcc_module as mcc_m, semestre as s, appartenance as app " .
" WHERE mcc_ue.id_semestre = s.id_semestre " .
" AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue " .
" AND mcc_m.id_module = m.id_module " .
" AND mcc_m.id_mcc_module = ens.id_mcc_module " .
" AND ens.id_enseignant = u.identifiant " .
" AND app.id_etudiant = eleve.identifiant " .
" AND app.id_semestre = s.id_semestre " .
" AND app.id_groupe = g.id_groupe " .
2015-11-04 08:15:35 +00:00
2015-11-06 13:05:14 +00:00
" AND g.nom LIKE ' " . $groupeOpt . " ' " .
2015-11-10 21:33:51 +00:00
" AND s.rang BETWEEN :semestreDeb AND :semestreFin " .
" AND s.rang % 2 = :semestre_pair " .
2015-11-04 08:15:35 +00:00
" AND s.annee = :annee " .
2015-11-06 10:13:32 +00:00
" AND u.identifiant = :enseignantUID " .
" ORDER BY s.rang, g.nom " );
2015-11-04 08:15:35 +00:00
$getGroupesUID -> execute ( array (
2015-11-06 13:05:14 +00:00
// ':groupeOpt' => $groupeOpt,
':semestreDeb' => $semestreDeb ,
':semestreFin' => $semestreFin ,
2015-11-06 10:13:32 +00:00
':annee' => $annee ,
2015-11-11 17:23:37 +00:00
':semestre_pair' => ( $semestre_pair ) ? '0' : '1' ,
2015-11-06 10:13:32 +00:00
':enseignantUID' => $enseignantUID
2015-11-04 08:15:35 +00:00
));
2015-11-10 21:33:51 +00:00
2015-11-04 08:15:35 +00:00
$grouplist = array (); // contiendra tout les groupes
// on parcourt tous les groupes
while ( $groupeUID = $getGroupesUID -> fetch () ){
$groupe = new stdClass ();
$groupe -> nom = $groupeUID [ 'nom' ]; // attribut "nom" ajouté au groupe
$groupe -> semestre = $groupeUID [ 'semestre' ];
2015-11-10 21:33:51 +00:00
$groupe -> userlist = groupRepo :: membres ( $groupeUID [ 'id' ], $groupeUID [ 'id_semestre' ]); // on charge la liste des utilisateurs de ce groupe
2015-11-04 08:15:35 +00:00
array_push ( $grouplist , $groupe ); // on l'ajoute au résultat
}
return $grouplist ; // sinon on retourne le tableau
2015-10-22 19:19:52 +00:00
}
2015-10-25 16:55:18 +00:00
/***********************************************/
/*** retourne le nom du groupe d'un étudiant ***/
/***********************************************/
2015-10-28 17:08:12 +00:00
public function getGroupeEtudiant ( $etudiant , $semestre , $annee ){
2015-11-10 23:04:56 +00:00
// on vérifie que le semestre et l'utilisateur existent
2015-11-09 21:05:57 +00:00
if ( ! ( $semestreUID = semestreRepo :: UID ( $semestre , $annee )) ) return 'unknown_semestre' ; else $semestreUID = ( int ) $semestreUID ;
if ( ! ( $etudiantUID = userRepo :: UID ( $etudiant )) ) return 'unknown_user' ;
2015-10-25 16:55:18 +00:00
2015-11-03 20:59:16 +00:00
2015-10-25 16:55:18 +00:00
// on cherche le groupe associé
2015-11-10 08:17:41 +00:00
$getNomGroupe = DataBase :: getPDO () -> prepare ( " SELECT g.nom " .
2015-10-28 17:08:12 +00:00
" FROM utilisateur as u, groupe as g, appartenance as app " .
2015-11-03 22:31:41 +00:00
" WHERE app.id_etudiant = u.identifiant " .
2015-11-03 20:59:16 +00:00
" AND app.id_groupe = g.id_groupe " .
" AND u.identifiant = :etudiantUID " .
2015-11-03 22:31:41 +00:00
" AND app.id_semestre = :semestreUID " .
2015-10-28 17:08:12 +00:00
" ORDER BY g.nom " );
2015-10-25 16:55:18 +00:00
$getNomGroupe -> execute ( array (
2015-11-03 20:59:16 +00:00
':etudiantUID' => $etudiantUID ,
':semestreUID' => $semestreUID
2015-10-25 16:55:18 +00:00
));
// si on a un résultat
if ( $nomGroupe = $getNomGroupe -> fetch ()[ 'nom' ] )
return $nomGroupe ;
else
return 'error' ;
}
2015-11-03 22:20:54 +00:00
2015-11-08 21:30:23 +00:00
/******************************************************/
/***** déplace un étudiant d'un groupe à un autre *****/
/******************************************************/
public function deplacerEtudiant ( $etudiant , $groupe , $annee ){
/*** on cherche le nouveau groupe pour cet utilisateur ***/
2015-11-10 08:17:41 +00:00
$getNouveauGroupeUID = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT s.id_semestre as semestre, g.id_groupe as id, u.identifiant as etuUID " .
2015-11-08 21:30:23 +00:00
" FROM groupe as g, appartenance as app, appartenance as myapp, utilisateur as u, semestre as s " .
" WHERE g.nom = :groupe " .
" AND u.identifiant = :etudiant " .
" AND myapp.id_etudiant = u.identifiant " .
" AND myapp.id_semestre = s.id_semestre " .
" AND app.id_groupe = g.id_groupe " .
" AND app.id_semestre = s.id_semestre " );
$getNouveauGroupeUID -> execute ( array (
':groupe' => $groupe ,
2015-11-03 22:20:54 +00:00
':etudiant' => $etudiant
));
// si on trouve, on le définit, sinon on retourne "unknown_user"
2015-11-08 21:30:23 +00:00
if ( $data = $getNouveauGroupeUID -> fetch () ){
$nouveauGroupeUID = ( int ) $data [ 'id' ];
$semestreUID = $data [ 'semestre' ];
$etudiantUID = $data [ 'etuUID' ];
}
2015-11-03 22:20:54 +00:00
else
2015-11-08 21:30:23 +00:00
return 'unknown_newgroup' ;
/*** on cherche le groupe de cet utilisateur ***/
2015-11-10 08:17:41 +00:00
$getGroupeUID = DataBase :: getPDO () -> prepare ( " SELECT g.id_groupe as id " .
2015-11-08 21:30:23 +00:00
" FROM utilisateur as u, groupe as g, appartenance as app, semestre as s " .
" WHERE app.id_etudiant = u.identifiant " .
" AND app.id_groupe = g.id_groupe " .
" AND app.id_semestre = s.id_semestre " .
" AND u.identifiant = :etudiantUID " .
" AND app.id_semestre = :semestreUID " );
$getGroupeUID -> execute ( array (
':etudiantUID' => $etudiantUID ,
':semestreUID' => $semestreUID ,
));
// si on trouve, on le définit, sinon on retourne "unknown_user"
if ( $groupeUID = $getGroupeUID -> fetch ()[ 'id' ] ){
$groupeUID = $groupeUID ;
/***************************************************************/
/*** CAS 1 : l'utilisateur a déjà un groupe pour ce semestre ***/
/***************************************************************/
// il suffit donc maintenant de modifier l' "appartenance"
2015-11-10 08:17:41 +00:00
$updateGroupe = DataBase :: getPDO () -> prepare ( " UPDATE appartenance SET id_groupe = :nouveauGroupeUID " .
2015-11-08 21:30:23 +00:00
" WHERE id_etudiant = :etudiantUID " .
" AND id_groupe = :groupeUID " .
" AND id_semestre = :semestreUID " );
$updateGroupe -> execute ( array (
':nouveauGroupeUID' => $nouveauGroupeUID ,
':etudiantUID' => $etudiantUID ,
':groupeUID' => $groupeUID ,
':semestreUID' => $semestreUID
));
}
else {
/****************************************************/
/*** CAS 2 : l'utilisateur n'a pas encore de groupe */
/****************************************************/
2015-11-10 08:17:41 +00:00
$insertGroupe = DataBase :: getPDO () -> prepare ( " INSERT INTO appartenance(id_appartenance, id_etudiant, id_groupe, id_semestre) " .
2015-11-08 21:30:23 +00:00
" VALUES(NULL, :etudiantUID, :nouveauGroupeUID, :semestreUID) " );
$insertGroupe -> execute ( array (
':etudiantUID' => $etudiantUID ,
':nouveauGroupeUID' => $nouveauGroupeUID ,
':semestreUID' => $semestreUID
));
}
/* Vérification de l'entrée dans la table */
2015-11-10 08:17:41 +00:00
$verif = DataBase :: getPDO () -> prepare ( " SELECT count(id_appartenance) as count " .
2015-11-08 21:30:23 +00:00
" FROM appartenance " .
" WHERE id_etudiant = :etudiantUID " .
" AND id_groupe = :nouveauGroupeUID " .
" AND id_semestre = :semestreUID " );
$verif -> execute ( array (
':etudiantUID' => $etudiantUID ,
':nouveauGroupeUID' => $nouveauGroupeUID ,
':semestreUID' => $semestreUID
));
$verifFetch = $verif -> fetch ();
if ( $verifFetch && $verifFetch [ 'count' ] == '1' )
return 'success' ;
else
return 'error' ;
}
/**********************************************************/
/* */
/* __ __ ____ _____ _ _ _ ______ _____ */
/* | \/ |/ __ \| __ \| | | | | | ____|/ ____| */
/* | \ / | | | | | | | | | | | | |__ | (___ */
/* | |\/| | | | | | | | | | | | | __| \___ \ */
/* | | | | |__| | |__| | |__| | |____| |____ ____) | */
/* |_| |_|\____/|_____/ \____/|______|______|_____/ */
/* */
/**********************************************************/
/**************************************************/
/*** retourne les modules d'un étudiant par UEs ***/
/**************************************************/
public function getModulesByUEByEtudiant ( $etudiant , $semestre , $annee ){
2015-11-10 23:04:56 +00:00
// on vérifie que le semestre et l'utilisateur existent
2015-11-09 21:05:57 +00:00
if ( ! ( $semestreUID = semestreRepo :: UID ( $semestre , $annee )) ) return 'unknown_semestre' ; else $semestreUID = ( int ) $semestreUID ;
if ( ! ( $etudiantUID = userRepo :: UID ( $etudiant )) ) return 'unknown_user' ;
2015-11-08 21:30:23 +00:00
2015-11-03 22:20:54 +00:00
/*** on cherche le groupe de cet utilisateur ***/
2015-11-10 08:17:41 +00:00
$getGroupeUID = DataBase :: getPDO () -> prepare ( " SELECT g.id_groupe as id " .
2015-11-03 22:20:54 +00:00
" FROM utilisateur as u, groupe as g, appartenance as app, semestre as s " .
" WHERE app.id_etudiant = u.identifiant " .
" AND app.id_groupe = g.id_groupe " .
" AND app.id_semestre = s.id_semestre " .
" AND u.identifiant = :etudiantUID " .
" AND app.id_semestre = :semestreUID " );
$getGroupeUID -> execute ( array (
':etudiantUID' => $etudiantUID ,
':semestreUID' => $semestreUID ,
));
// si on trouve, on le définit, sinon on retourne "unknown_user"
if ( $groupeUID = $getGroupeUID -> fetch ()[ 'id' ] )
$groupeUID = $groupeUID ;
else
return 'unknown_group' ;
$UEList = $this -> getUEsEtudiant ( $etudiant , $semestre , $annee ); // on récupère la liste des UEs
foreach ( $UEList as $iter => $UE ){
// si on a l'UID utilisateur & l'UID groupe => on récupère les modules
2015-11-10 08:17:41 +00:00
$getModuleList = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT m.id_module as id, m.nom as nom, m.libelle as libelle " .
2015-11-03 22:20:54 +00:00
" FROM module as m, groupe as g, semestre as s, ue, appartenance as app, mcc_ue, mcc_module as mcc_m " .
" WHERE app.id_semestre = s.id_semestre " .
" AND app.id_groupe = g.id_groupe " .
" AND app.id_semestre = mcc_ue.id_semestre " .
" AND mcc_ue.id_ue = ue.id_ue " .
" AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue " .
" AND mcc_m.id_module = m.id_module " .
" AND g.id_groupe = :groupeUID " .
" AND s.id_semestre = :semestreUID " .
" AND ue.id_ue = :UEUID " .
" ORDER BY m.nom, m.libelle ASC " );
$getModuleList -> execute ( array (
':groupeUID' => $groupeUID ,
':semestreUID' => $semestreUID ,
':UEUID' => $UE [ 'id' ]
));
2015-11-10 09:50:43 +00:00
// on ajoute la liste des modules en supprimant les valeurs à indinces numériques
$UEList [ $iter ][ 'modules' ] = DataBase :: delNumeric ( $getModuleList -> fetchAll () );
2015-11-03 22:20:54 +00:00
}
return $UEList ;
}
2015-10-25 16:55:18 +00:00
2015-10-28 17:08:12 +00:00
/******************************************/
/*** retourne les modules d'un étudiant ***/
/******************************************/
public function getModulesEtudiant ( $etudiant , $semestre , $annee ){
2015-11-10 23:04:56 +00:00
// on vérifie que le semestre et l'étudiant existent
2015-11-09 21:05:57 +00:00
if ( ! ( $semestreUID = semestreRepo :: UID ( $semestre , $annee )) ) return 'unknown_semestre' ; else $semestreUID = ( int ) $semestreUID ;
if ( ! ( $etudiantUID = userRepo :: UID ( $etudiant )) ) return 'unknown_user' ;
2015-11-10 23:04:56 +00:00
2015-11-10 09:50:43 +00:00
// on retourne les modules en supprimant les valeurs à indices numériques
2015-11-10 23:04:56 +00:00
return moduleRepo :: forStudent ( $etudiantUID , $semestreUID );
2015-10-28 17:08:12 +00:00
}
2015-10-29 23:01:35 +00:00
/**************************************/
/*** retourne les UEs d'un étudiant ***/
/**************************************/
public function getUEsEtudiant ( $etudiant , $semestre , $annee ){
2015-11-10 23:04:56 +00:00
// on vérifie que le semestre et l'étudiant existent
2015-11-09 21:05:57 +00:00
if ( ! ( $semestreUID = semestreRepo :: UID ( $semestre , $annee )) ) return 'unknown_semestre' ; else $semestreUID = ( int ) $semestreUID ;
if ( ! ( $etudiantUID = userRepo :: UID ( $etudiant )) ) return 'unknown_user' ;
2015-10-29 23:01:35 +00:00
2015-11-10 09:50:43 +00:00
// on retourne la liste d'UEs en supprimant les doublons à clés numériques
2015-11-10 23:04:56 +00:00
return ueRepo :: forStudent ( $etudiantUID , $semestreUID );
2015-10-29 23:01:35 +00:00
}
2015-11-06 22:00:08 +00:00
/**************************************************/
/*** retourne les modules d'un étudiant par UEs ***/
/**************************************************/
2015-11-11 17:23:37 +00:00
public function getModulesByUEByEnseignant ( $enseignant , $semestre_pair , $annee ){
2015-11-10 23:04:56 +00:00
// on vérifie que l'enseignant enseigne bien cette année
2015-11-11 17:23:37 +00:00
if ( ! ( $enseignantUID = userRepo :: UID ( $enseignant , null , $annee , $semestre_pair )) ) return 'unknown_teacher' ;
2015-11-06 22:00:08 +00:00
2015-11-11 17:23:37 +00:00
$UEList = $this -> getUEsEnseignant ( $enseignant , $semestre_pair , $annee ); // on récupère la liste des UEs
2015-11-06 22:00:08 +00:00
foreach ( $UEList as $iter => $UE ){
2015-11-11 17:23:37 +00:00
// si on a l'UID enseignant & l'UE => on récupère les modules
2015-11-10 08:17:41 +00:00
$getModuleList = DataBase :: getPDO () -> prepare ( " SELECT DISTINCT m.id_module as id, m.nom as nom, m.libelle as libelle " .
2015-11-06 22:00:08 +00:00
" FROM enseignement as ens, semestre as s, ue, module as m, mcc_ue, mcc_module as mcc_m " .
" WHERE ens.id_mcc_module = mcc_m.id_mcc_module " .
" AND mcc_m.id_module = m.id_module " .
" AND mcc_m.id_mcc_ue = mcc_ue.id_mcc_ue " .
" AND mcc_ue.id_ue = ue.id_ue " .
" AND ens.id_enseignant = :enseignantUID " .
" AND ue.id_ue = :UEUID " .
" AND s.annee = :annee " .
2015-11-11 17:23:37 +00:00
" AND s.rang % 2 = :semestre_pair " .
2015-11-06 22:00:08 +00:00
" ORDER BY m.nom, m.libelle ASC " );
$getModuleList -> execute ( array (
':enseignantUID' => $enseignantUID ,
':UEUID' => $UE [ 'id' ],
2015-11-11 17:23:37 +00:00
':annee' => $annee ,
':semestre_pair' => ( $semestre_pair ) ? '0' : '1'
2015-11-06 22:00:08 +00:00
));
2015-11-10 09:50:43 +00:00
// on ajoute la liste des modules en supprimant les valeurs à indinces numériques
$UEList [ $iter ][ 'modules' ] = DataBase :: delNumeric ( $getModuleList -> fetchAll () );
2015-11-06 22:00:08 +00:00
}
return $UEList ;
}
/****************************************/
/*** retourne les UEs d'un enseignant ***/
/****************************************/
2015-11-11 17:23:37 +00:00
public function getUEsEnseignant ( $enseignant , $semestre_pair , $annee ){
2015-11-06 22:00:08 +00:00
2015-11-11 17:23:37 +00:00
// on vérifie que l'enseignant enseigne bien cette année
if ( ! ( $enseignantUID = userRepo :: UID ( $enseignant , null , $annee , $semestre_pair )) ) return 'unknown_teacher' ;
2015-11-06 22:00:08 +00:00
2015-11-11 17:23:37 +00:00
// on retourne la liste des UEs en supprimant les doublons à indices numériques
return ueRepo :: forTeacher ( $enseignantUID , $annee );
2015-11-06 22:00:08 +00:00
}
2015-11-08 21:30:23 +00:00
/*******************************************/
/* _ _ ____ _______ ______ _____ */
/* | \ | |/ __ \__ __| ____|/ ____| */
/* | \| | | | | | | | |__ | (___ */
/* | . ` | | | | | | | __| \___ \ */
/* | |\ | |__| | | | | |____ ____) | */
/* |_| \_|\____/ |_| |______|_____/ */
/* */
/*******************************************/
2015-11-06 22:00:08 +00:00
2015-10-29 23:01:35 +00:00
/**************************************/
/*** retourne les notes par modules ***/
/**************************************/
public function getNotesByModules ( $etudiant , $semestre , $annee ){
2015-11-10 23:04:56 +00:00
// on vérifie que le semestre exist et que l'étudiant est inscrit à ce semestre
2015-11-09 21:05:57 +00:00
if ( ! ( $semestreUID = semestreRepo :: UID ( $semestre , $annee )) ) return 'unknown_semestre' ; else $semestreUID = ( int ) $semestreUID ;
2015-11-10 23:04:56 +00:00
if ( ! ( $etudiantUID = userRepo :: UID ( $etudiant , $semestreUID )) ) return 'unknown_user' ;
2015-10-29 23:01:35 +00:00
$notelist = array (); // tableau qui contiendra tout les modules
$modulelist = $this -> getModulesEtudiant ( $etudiant , $semestre , $annee ); // on récupère la liste des modules
foreach ( $modulelist as $module ){ // pour chaque module
$notes = $this -> getModuleNotes ( $etudiant , $module [ 'nom' ], $semestre , $annee ); // on récupère les notes
$current = array (); // on créé l'entrée qui sera dans le tableau de retour
$current [ 'module' ] = array ();
$current [ 'module' ][ 'nom' ] = $module [ 'nom' ]; // contenant le nom du module
$current [ 'module' ][ 'libelle' ] = $module [ 'libelle' ]; // contenant le nom du module
$current [ 'notes' ] = $notes ; // et la liste de notes
array_push ( $notelist , $current ); // on l'ajoute au résultat
}
return $notelist ;
}
/*********************************/
/*** retourne les notes par UE ***/
/*********************************/
public function getNotesByUEs ( $etudiant , $semestre , $annee ){
2015-11-10 23:04:56 +00:00
// on vérifie que le semestre exist et que l'étudiant est inscrit à ce semestre
if ( ! ( $semestreUID = semestreRepo :: UID ( $semestre , $annee )) ) return 'unknown_semestre' ; else $semestreUID = ( int ) $semestreUID ;
if ( ! ( $etudiantUID = userRepo :: UID ( $etudiant , $semestreUID )) ) return 'unknown_user' ;
2015-10-29 23:01:35 +00:00
$notelist = array (); // tableau qui contiendra tout les modules
$UElist = $this -> getUEsEtudiant ( $etudiant , $semestre , $annee ); // on récupère la liste des modules
foreach ( $UElist as $UE ){ // pour chaque module
$notes = $this -> getUENotes ( $etudiant , $UE [ 'nom' ], $semestre , $annee ); // on récupère les notes
$current = array (); // on créé l'entrée qui sera dans le tableau de retour
$current [ 'UE' ] = array ();
$current [ 'UE' ][ 'annee' ] = $UE [ 'annee' ]; // contenant l'annee du UE
$current [ 'UE' ][ 'nom' ] = $UE [ 'nom' ]; // contenant le nom du UE
$current [ 'UE' ][ 'libelle' ] = $UE [ 'libelle' ]; // contenant le libelle du UE
$current [ 'notes' ] = $notes ; // et la liste de notes
array_push ( $notelist , $current ); // on l'ajoute au résultat
}
return $notelist ;
}
/**************************************/
/*** retourne les notes d'un module ***/
/**************************************/
public function getModuleNotes ( $etudiant , $module , $semestre , $annee ){
2015-11-11 00:06:24 +00:00
// on vérifie que le module, le semestre existent et que l'étudiant est inscrit à ce semestre
2015-11-09 21:05:57 +00:00
if ( ! ( $semestreUID = semestreRepo :: UID ( $semestre , $annee )) ) return 'unknown_semestre' ; else $semestreUID = ( int ) $semestreUID ;
2015-11-10 23:04:56 +00:00
if ( ! ( $etudiantUID = userRepo :: UID ( $etudiant , $semestreUID )) ) return 'unknown_user' ;
2015-11-11 00:06:24 +00:00
if ( ! ( $moduleUID = moduleRepo :: UID ( $module )) ) return 'unknown_module' ;
2015-10-29 23:01:35 +00:00
/*** on cherche un module avec ce nom, en accord avec le semestre et l'étudiant ***/
2015-11-10 08:17:41 +00:00
$getModuleUID = DataBase :: getPDO () -> prepare ( " SELECT m.id_module as id FROM module as m, appartenance as app, ue, mcc_ue, mcc_module as mcc_m " .
2015-11-03 20:59:16 +00:00
" WHERE app.id_etudiant = :etudiantUID " .
" AND mcc_ue.id_ue = ue.id_ue " .
" AND mcc_ue.id_semestre = app.id_semestre " .
" AND mcc_ue.id_semestre = :semestreUID " .
" AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue " .
" AND mcc_m.id_module = m.id_module " .
" AND m.nom = :module " );
2015-10-29 23:01:35 +00:00
$getModuleUID -> execute ( array (
':module' => $module ,
':etudiantUID' => $etudiantUID ,
':semestreUID' => $semestreUID
));
// si on trouve, on le définit, sinon on retourne "unknown_group"
if ( $moduleUID = $getModuleUID -> fetch ()[ 'id' ] )
$moduleUID = ( int ) $moduleUID ;
else
return 'unknown_module' ;
2015-11-03 20:59:16 +00:00
2015-11-11 00:06:24 +00:00
$EtudiantInscritAuModule = false ; // par défaut on dit que l'étudiant n'est pas inscrit à ce module
foreach ( moduleRepo :: forStudent ( $etudiant , $semestreUID ) as $module ) // on récupère parmi les modules auquel est inscrit l'utilisateur
if ( $module [ 'id' ] == $moduleUID ){ // s'il est inscrit au module donné
$EtudiantInscritAuModule = true ;
break ;
}
// si l'étudiant n'a pas ce module dans ceux auxquels il est inscrit
if ( ! $EtudiantInscritAuModule ) return 'unknown_module' ;
2015-10-29 23:01:35 +00:00
// si on a l'UID utilisateur & l'UID groupe => on récupère les modules
2015-11-10 09:50:43 +00:00
$getNoteList = DataBase :: getPDO () -> prepare ( " SELECT m.nom as module, m.libelle as modulelib, ctrl.intitule, note.valeur, ctrl.base, ctrl.coefficient " .
2015-11-09 11:52:03 +00:00
" FROM note, appartenance as app, semestre as s, module as m, mcc_ue, mcc_module as mcc_m, controle as ctrl " .
2015-10-29 23:01:35 +00:00
" WHERE note.id_appartenance = app.id_appartenance " .
2015-11-09 11:52:03 +00:00
" AND ctrl.id_controle = note.id_controle " .
" AND ctrl.id_mcc_module = mcc_m.id_mcc_module " .
2015-11-03 20:59:16 +00:00
" AND mcc_ue.id_semestre = app.id_semestre " .
" AND mcc_ue.id_semestre = s.id_semestre " .
2015-10-29 23:01:35 +00:00
2015-11-03 20:59:16 +00:00
" AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue " .
" AND mcc_m.id_module = m.id_module " .
" AND m.id_module = :moduleUID " .
2015-10-29 23:01:35 +00:00
" AND app.id_etudiant = :etudiantUID " .
" AND s.id_semestre = :semestreUID " .
2015-11-09 11:52:03 +00:00
" ORDER BY ctrl.date_publication ASC " );
2015-11-10 09:50:43 +00:00
$getNoteList -> execute ( array (
2015-10-29 23:01:35 +00:00
':moduleUID' => $moduleUID ,
':etudiantUID' => $etudiantUID ,
':semestreUID' => $semestreUID
));
2015-11-10 09:50:43 +00:00
// on retourne la liste des notes et supprime les doublons à indices numériques
return DataBase :: delNumeric ( $getNoteList -> fetchAll () );
2015-10-29 23:01:35 +00:00
}
/**********************************/
/*** retourne les notes d'un UE ***/
/**********************************/
public function getUENotes ( $etudiant , $UE , $semestre , $annee ){
2015-11-11 00:06:24 +00:00
// on vérifie que l'UE, le semestre existent et que l'étudiant est inscrit à ce semestre
2015-11-09 21:05:57 +00:00
if ( ! ( $semestreUID = semestreRepo :: UID ( $semestre , $annee )) ) return 'unknown_semestre' ; else $semestreUID = ( int ) $semestreUID ;
2015-11-10 23:04:56 +00:00
if ( ! ( $etudiantUID = userRepo :: UID ( $etudiant , $semestreUID )) ) return 'unknown_user' ;
2015-11-11 00:06:24 +00:00
if ( ! ( $UEUID = ueRepo :: UID ( $UE )) ) return 'unknown_ue' ;
2015-10-29 23:01:35 +00:00
2015-11-11 00:06:24 +00:00
$EtudiantInscritAlUE = false ; // par défaut on dit que l'étudiant n'est pas inscrit à cet UE
foreach ( ueRepo :: forStudent ( $etudiant , $semestreUID ) as $UE ) // on récupère parmi les UEs auquel est inscrit l'utilisateur
if ( $UE [ 'id' ] == $UEUID ){ // s'il est inscrit à l'UE donnée
$EtudiantInscritAlUE = true ;
break ;
}
2015-10-29 23:01:35 +00:00
2015-11-11 00:06:24 +00:00
// si l'étudiant n'a pas ce module dans ceux auxquels il est inscrit
if ( ! $EtudiantInscritAlUE ) return 'unknown_module' ;
2015-10-29 23:01:35 +00:00
// si on a l'UID utilisateur & l'UID UE => on récupère les notes
2015-11-10 09:50:43 +00:00
$getNoteList = DataBase :: getPDO () -> prepare ( " SELECT m.nom as module, m.libelle as modulelib, ctrl.intitule, note.valeur, ctrl.base, ctrl.coefficient " .
2015-11-09 11:52:03 +00:00
" FROM note, appartenance as app, semestre as s, module as m, ue, mcc_ue, mcc_module as mcc_m, controle as ctrl " .
2015-10-29 23:01:35 +00:00
" WHERE note.id_appartenance = app.id_appartenance " .
2015-11-09 11:52:03 +00:00
" AND ctrl.id_mcc_module = mcc_m.id_mcc_module " .
" AND ctrl.id_controle = note.id_controle " .
2015-11-03 20:59:16 +00:00
" AND mcc_ue.id_ue = ue.id_ue " .
" AND mcc_ue.id_semestre = app.id_semestre " .
" AND mcc_ue.id_semestre = s.id_semestre " .
" AND mcc_ue.id_mcc_ue = mcc_m.id_mcc_ue " .
" AND mcc_m.id_module = m.id_module " .
2015-10-29 23:01:35 +00:00
2015-11-03 20:59:16 +00:00
" AND ue.id_ue = :UEUID " .
2015-10-29 23:01:35 +00:00
" AND app.id_etudiant = :etudiantUID " .
" AND s.id_semestre = :semestreUID " .
2015-11-09 11:52:03 +00:00
" ORDER BY m.nom, ctrl.date_publication ASC " );
2015-11-10 09:50:43 +00:00
$getNoteList -> execute ( array (
2015-10-29 23:01:35 +00:00
':UEUID' => $UEUID ,
':etudiantUID' => $etudiantUID ,
':semestreUID' => $semestreUID
));
2015-11-10 09:50:43 +00:00
// on retourne la liste de notes et supprime les doublons à indices numériques
return DataBase :: delNumeric ( $getNoteList -> fetchAll () );
2015-10-29 23:01:35 +00:00
}
2015-10-22 12:06:49 +00:00
}
2015-11-09 11:52:03 +00:00
?>