From bfd64fb8d470567820393eb49b8b6ab5913f4677 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 9 Nov 2015 22:05:57 +0100 Subject: [PATCH] =?UTF-8?q?Premiere=20=C3=A9tape=20du=20REFACTOR=20de=20ma?= =?UTF-8?q?nager/database.php=20en=20manager/repo/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/database.php | 164 ++++++++++--------------------------- manager/repo/group.php | 168 ++++++++++++++++++++++++++++++++++++++ manager/repo/semestre.php | 58 +++++++++++++ manager/repo/user.php | 36 ++++++++ manager/security.php | 2 +- manager/user.php | 28 +++++-- test.php | 4 +- 7 files changed, 331 insertions(+), 129 deletions(-) create mode 100644 manager/repo/group.php create mode 100644 manager/repo/semestre.php create mode 100644 manager/repo/user.php diff --git a/manager/database.php b/manager/database.php index 801bfdf..5fb6b90 100755 --- a/manager/database.php +++ b/manager/database.php @@ -1,5 +1,13 @@ host = $host; @@ -38,52 +46,6 @@ class DataBase{ /* */ /*************************************************************/ - /********************************************************/ - /*** Vérifie l'existence d'un utilisateur dans le BDD ***/ - /********************************************************/ - private function utilisateurUID($identifiant){ - /*** on cherche un utilisateur avec cet identifiant ***/ - $getUtilisateurUID = $this->pdo->prepare("SELECT identifiant as id FROM utilisateur WHERE identifiant = :identifiant"); - $getUtilisateurUID->execute(array( - ':identifiant' => $identifiant - )); - - // on retourne le résultat : FAUX si aucun résultat, sinon la valeur de l'UID de l'utilisateur - return $getUtilisateurUID->fetch()['id']; - } - - - - /***************************************************/ - /*** Vérifie l'existence d'un groupe dans le BDD ***/ - /***************************************************/ - private function groupeUID($nom){ - /*** on cherche un groupe avec ce nom ***/ - $getGroupeUID = $this->pdo->prepare("SELECT id_groupe as id FROM groupe WHERE nom = :nom"); - $getGroupeUID->execute(array( - ':nom' => $nom - )); - - // on retourne le résultat : FAUX si aucun résultat, sinon la valeur de l'UID du groupe - return $getGroupeUID->fetch()['id']; - } - - - /*****************************************************/ - /*** Vérifie l'existence d'un semestre dans le BDD ***/ - /*****************************************************/ - private function semestreUID($rang, $annee){ - /*** on cherche un semestre avec ce rang et cette année (qui est unique) ***/ - $getSemestreUID = $this->pdo->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']; - } - @@ -143,7 +105,7 @@ class DataBase{ /*********************************************************************************/ public function utilisateurInfo($identifiant){ // si l'utilisateur n'existe pas on retourne 'unknown_user' - if( !($utilisateurUID=$this->utilisateurUID($identifiant)) ) return 'unknown_user'; + if( !($utilisateurUID=userRepo::UID($identifiant)) ) return 'unknown_user'; $getUtilisateurInfo = $this->pdo->prepare("SELECT identifiant, prenom, nom, mail, droits FROM utilisateur WHERE identifiant = :identifiant"); @@ -154,6 +116,17 @@ class DataBase{ + /* retourne le semestre courant d'un étudiant + * + * @etudiant l'identifiant (UID) de l'étudiant à ajouter au groupe + * + * @return semestreUID l'UID du semestre courant + * + */ + public static function studentCurrent($etudiant){ + return '2'; + } + /**********************************************************/ /* _____ _____ ____ _ _ _____ ______ _____ */ /* / ____| __ \ / __ \| | | | __ \| ____|/ ____| */ @@ -169,69 +142,27 @@ class DataBase{ /*** création d'un groupe dans la bdd ***/ /****************************************/ public function creerGroupe($nom){ - $getLastCount = $this->pdo->query('SELECT count(id_groupe) as count FROM groupe'); - $lastCount = (int) $getLastCount->fetch()['count']; - - // on applique une normalisation - $nom = strtoupper($nom); // nom en majuscules - - $req = $this->pdo->prepare("INSERT INTO groupe(id_groupe, nom) VALUES(default, :nom)"); - - $req->execute(array( - ':nom' => $nom - )); - - - $getNewCount = $this->pdo->query('SELECT count(id_groupe) as count FROM groupe'); - $newCount = (int) $getNewCount->fetch()['count']; - - if( $newCount > $lastCount ) // si on a bien ajouté un entrée + if( groupRepo::creer($nom) ) // si on a bien ajouté un entrée ou qu'elle n'existait pas déjà return 'success'; else return 'error'; - } /******************************************************/ /*** ajout d'un utilisateur à un groupe dans la bdd ***/ /******************************************************/ public function ajouterEtudiantGroupe($etudiant, $groupe, $semestre, $annee){ - $getLastCount = $this->pdo->query('SELECT count(id_etudiant) as count FROM appartenance'); - $lastCount = (int) $getLastCount->fetch()['count']; - // si on trouve pas, on retourne "unknown_user" - if( !($etudiantUID=$this->utilisateurUID($etudiant)) ) return 'unknown_user'; + if( !($etudiantUID=userRepo::UID($etudiant)) ) return 'unknown_user'; // si on trouve pas, on retourne 'unknown_group' sinon on définit la variable - if( !($groupeUID=$this->groupeUID($groupe)) ) return 'unknown_group'; - else $groupeUID = (int) $groupeUID; + if( !($groupeUID=groupRepo::UID($groupe)) ) return 'unknown_group'; else $groupeUID = (int) $groupeUID; // si on trouve pas, on retourne 'unknown_semestre', sinon on définit la variable - if( !($semestreUID=$this->semestreUID($semestre, $annee)) ) return 'unknown_semestre'; - else $semestreUID = (int) $semestreUID; + if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; - - - // si on a l'UID utilisateur & l'UID groupe => on créé l'association - $asso = $this->pdo->prepare("INSERT INTO appartenance(id_etudiant, id_groupe, id_semestre) ". - "VALUES( ". - "(SELECT identifiant FROM utilisateur WHERE identifiant = :etudiantUID), ". - "(SELECT id_groupe FROM groupe WHERE id_groupe = :groupeUID), ". - "(SELECT id_semestre FROM semestre WHERE id_semestre = :semestreUID) ". - " )"); - $asso->execute(array( - ':etudiantUID' => $etudiantUID, - ':groupeUID' => $groupeUID, - ':semestreUID' => $semestreUID - )); - - - - $getNewCount = $this->pdo->query('SELECT count(id_etudiant) as count FROM appartenance'); - $newCount = (int) $getNewCount->fetch()['count']; - - if( $newCount > $lastCount ) // si on a bien ajouté un entrée + if( groupRepo::ajouterMembre($etudiantUID, $groupeUID, $semestreUID) ) // si on a bien ajouté un entrée return 'success'; else return 'error'; @@ -243,12 +174,10 @@ class DataBase{ public function listeEtudiantsGroupe($groupe, $semestre, $annee){ // si on trouve pas, on retourne 'unknown_group' sinon on définit la variable - if( !($groupeUID=$this->groupeUID($groupe)) ) return 'unknown_group'; - else $groupeUID = (int) $groupeUID; + if( !($groupeUID=groupRepo::UID($groupe)) ) return 'unknown_group'; else $groupeUID = (int) $groupeUID; // si on trouve pas, on retourne 'unknown_semestre', sinon on définit la variable - if( !($semestreUID=$this->semestreUID($semestre, $annee)) ) return 'unknown_semestre'; - else $semestreUID = (int) $semestreUID; + if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; @@ -286,8 +215,7 @@ class DataBase{ /********************************************************************/ public function listeEtudiantsTousGroupesSemestre($semestre, $annee){ // si on trouve pas, on retourne 'unknown_semestre', sinon on définit la variable - if( !($semestreUID=$this->semestreUID($semestre, $annee)) ) return 'unknown_semestre'; - else $semestreUID = (int) $semestreUID; + if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; // on cherche tout les groupes du même semestre de la même année @@ -399,7 +327,7 @@ class DataBase{ // si on trouve pas, on retourne "unknown_user" - if( !($enseignantUID=$this->utilisateurUID($enseignant)) ) return 'unknown_user'; + if( !($enseignantUID=userRepo::UID($enseignant)) ) return 'unknown_user'; // on cherche tout les groupes du même semestre de la même année @@ -454,11 +382,10 @@ class DataBase{ public function getGroupeEtudiant($etudiant, $semestre, $annee){ // si on trouve pas, on retourne 'unknown_semestre', sinon on définit la variable - if( !($semestreUID=$this->semestreUID($semestre, $annee)) ) return 'unknown_semestre'; - else $semestreUID = (int) $semestreUID; + if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; // si on trouve pas, on retourne "unknown_user" - if( !($etudiantUID=$this->utilisateurUID($etudiant)) ) return 'unknown_user'; + if( !($etudiantUID=userRepo::UID($etudiant)) ) return 'unknown_user'; // on cherche le groupe associé @@ -611,11 +538,10 @@ class DataBase{ public function getModulesByUEByEtudiant($etudiant, $semestre, $annee){ // si on trouve pas, on retourne 'unknown_semestre', sinon on définit la variable - if( !($semestreUID=$this->semestreUID($semestre, $annee)) ) return 'unknown_semestre'; - else $semestreUID = (int) $semestreUID; + if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; // si on trouve pas, on retourne "unknown_user" - if( !($etudiantUID=$this->utilisateurUID($etudiant)) ) return 'unknown_user'; + if( !($etudiantUID=userRepo::UID($etudiant)) ) return 'unknown_user'; @@ -686,12 +612,10 @@ class DataBase{ public function getModulesEtudiant($etudiant, $semestre, $annee){ // si on trouve pas, on retourne 'unknown_semestre', sinon on définit la variable - if( !($semestreUID=$this->semestreUID($semestre, $annee)) ) return 'unknown_semestre'; - else $semestreUID = (int) $semestreUID; - + if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; // si on trouve pas, on retourne "unknown_user" - if( !($etudiantUID=$this->utilisateurUID($etudiant)) ) return 'unknown_user'; + if( !($etudiantUID=userRepo::UID($etudiant)) ) return 'unknown_user'; @@ -754,11 +678,10 @@ class DataBase{ public function getUEsEtudiant($etudiant, $semestre, $annee){ // si on trouve pas, on retourne 'unknown_semestre', sinon on définit la variable - if( !($semestreUID=$this->semestreUID($semestre, $annee)) ) return 'unknown_semestre'; - else $semestreUID = (int) $semestreUID; + if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; // si on trouve pas, on retourne "unknown_user" - if( !($etudiantUID=$this->utilisateurUID($etudiant)) ) return 'unknown_user'; + if( !($etudiantUID=userRepo::UID($etudiant)) ) return 'unknown_user'; @@ -994,8 +917,7 @@ class DataBase{ public function getNotesByModules($etudiant, $semestre, $annee){ // si on trouve pas, on retourne 'unknown_semestre', sinon on définit la variable - if( !($semestreUID=$this->semestreUID($semestre, $annee)) ) return 'unknown_semestre'; - else $semestreUID = (int) $semestreUID; + if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; /*** on cherche un utilisateur avec cet identifiant ***/ @@ -1042,7 +964,7 @@ class DataBase{ public function getNotesByUEs($etudiant, $semestre, $annee){ // si on trouve pas, on retourne 'unknown_semestre', sinon on définit la variable - if( !($semestreUID=$this->semestreUID($semestre, $annee)) ) return 'unknown_semestre'; + if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; @@ -1092,8 +1014,7 @@ class DataBase{ public function getModuleNotes($etudiant, $module, $semestre, $annee){ // si on trouve pas, on retourne 'unknown_semestre', sinon on définit la variable - if( !($semestreUID=$this->semestreUID($semestre, $annee)) ) return 'unknown_semestre'; - else $semestreUID = (int) $semestreUID; + if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; /*** on cherche un utilisateur avec cet identifiant ***/ @@ -1185,8 +1106,7 @@ class DataBase{ public function getUENotes($etudiant, $UE, $semestre, $annee){ // si on trouve pas, on retourne 'unknown_semestre', sinon on définit la variable - if( !($semestreUID=$this->semestreUID($semestre, $annee)) ) return 'unknown_semestre'; - else $semestreUID = (int) $semestreUID; + if( !($semestreUID=semestreRepo::UID($semestre, $annee)) ) return 'unknown_semestre'; else $semestreUID = (int) $semestreUID; /*** on cherche un utilisateur avec cet identifiant ***/ diff --git a/manager/repo/group.php b/manager/repo/group.php new file mode 100644 index 0000000..d29354d --- /dev/null +++ b/manager/repo/group.php @@ -0,0 +1,168 @@ + le nom du groupe recherché + * + * @return UID si le groupe est dans la BDD, retourne son UID (auto_incr) + * @return FALSE FAUX si aucun groupe avec ce nom n'est pas présent dans la BDD + * + */ + public static function UID($nom){ + $db = DataBase::getInstance(); + + /*** on cherche un groupe avec ce nom ***/ + $getGroupeUID = $db->pdo->prepare("SELECT id_groupe as id FROM groupe WHERE nom = :nom"); + $getGroupeUID->execute(array( + ':nom' => $nom + )); + + // on retourne le résultat : FAUX si aucun résultat, sinon la valeur de l'UID du groupe + return $getGroupeUID->fetch()['id']; + } + + + /* VERIFIE L'EXISTENCE D'UNE APPARTENANCE DANS LA BDD + * + * @etudiant l'identifiant (UID) de l'étudiant à ajouter au groupe + * @groupe le nom du groupe auquel on veut le ratacher + * @semestre l'UID du semestre pour lequel il sera membre + * + * @return UID si l'appartenance est dans la BDD, retourne son UID (auto_incr) + * @return FALSE FAUX si aucune appartenance pour cet étudiant à ce groupe pour ce semestre n'est pas présent dans la BDD + * + */ + public static function appartenanceUID($etudiant, $groupe, $semestre){ + $db = DataBase::getInstance(); + + /*** on cherche un groupe avec ce nom ***/ + $getAppartenanceUID = $db->pdo->prepare("SELECT id_appartenance as id ". + "FROM appartenance ". + "WHERE id_etudiant = :etudiant ". + "AND id_groupe = :groupe ". + "AND id_semestre = :semestre"); + $getAppartenanceUID->execute(array( + ':etudiant' => $etudiant, + ':groupe' => $groupe, + ':semestre' => $semestre + )); + + // on retourne le résultat : FAUX si aucun résultat, sinon la valeur de l'UID du groupe + return $getAppartenanceUID->fetch()['id']; + } + + + + + + + /* CREER UN GROUPE AVEC CE NOM + * + * @nom le nom du groupe à créer + * + * @return UID l'UID du groupe maintenant créé + * @return created FAUX si le groupe existait déjà ou qu'il n' pasa bien été créé + * + */ + public static function creer($nom){ + $db = DataBase::getInstance(); + + /* [1] On vérifie l'existence d'un groupe avec ce nom + ======================================================*/ + if( $this->UID($nom) ) // si le groupe existe déjà + return false; // on retourne FAUX + + /* [2] On créé le groupe + =========================*/ + $nom = strtoupper($nom); // on met le nom en majuscules + + // on créé et envoie la requête de création du groupe + $creerGroupe = $db->pdo->prepare("INSERT INTO groupe(id_groupe, nom) VALUES(default, :nom)"); + $creerGroupe->execute(array( + ':nom' => $nom + )); + + /* [3] On vérifie si le groupe a bien été créé + ===============================================*/ + return $this->UID($nom); + } + + + /* AJOUTER UN MEMBRE A UN GROUPE + * + * @etudiant l'identifiant (UID) de l'étudiant à ajouter au groupe + * @groupe l'UID du groupe auquel on veut le ratacher + * @semestre l'UID du semestre pour lequel il sera membre + * + * @UID l'UID de l'appartenance si l'utilisateur a été ajouté au groupe pour ce semestre + * @member FAUX si l'utilisateur n'a pas été créé pour une quelconque erreur + * + */ + public static function ajouterMembre($etudiant, $groupe, $semestre){ + $db = DataBase::getInstance(); + + /* [1] On vérifie si l'utilisateur appartient à un groupe pour ce semestre + ===========================================================================*/ + $dejaMembre = $db->pdo->prepare("SELECT id_appartenance as id ". + "FROM appartenance ". + "WHERE id_etudiant = :etudiant ". + "AND id_semestre = :semestre "); + $dejaMembre->execute(array( + ':etudiant' => $etudiant, + ':semestre' => $semestre + )); + + if( $appartenanceUID = $dejaMembre->fetch()['id'] ){ // si c'est le cas + + /* [2] On modifie l'appartenance + ==============================*/ + // création et exécution de la requête de modification de l'appartenance + $ajouterMembres = $db->pdo->prepare("UPDATE appartenance ". + "SET id_groupe = :groupe ". + "WHERE id_appartenance = :appartenanceUID"); + $ajouterMembre->execute(array( + ':groupe' => $groupeUID, + ':appartenanceUID' => $appartenanceUID + )); + + }else{ // si l'utilisateur n'a pas de groupe pour ce semestre + + /* [2] On créé l'appartenance + ==============================*/ + // création et exécution de la requête de création d'appartenance + $ajouterMembres = $db->pdo->prepare("INSERT INTO appartenance(id_etudiant, id_groupe, id_semestre) ". + "VALUES( ". + "(SELECT identifiant FROM utilisateur WHERE identifiant = :etudiant), ". + "(SELECT id_groupe FROM groupe WHERE id_groupe = :groupe), ". + "(SELECT id_semestre FROM semestre WHERE id_semestre = :semestre) ". + " )"); + $ajouterMembre->execute(array( + ':etudiant' => $etudiantUID, + ':groupe' => $groupeUID, + ':semestre' => $semestre + )); + + } + + /* [3] On vérifie que l'appartenance est bien définie + ======================================================*/ + return $this->appartenanceUID($etudiant, $groupe, $semestre); + + } + + + + + + +} \ No newline at end of file diff --git a/manager/repo/semestre.php b/manager/repo/semestre.php new file mode 100644 index 0000000..877e512 --- /dev/null +++ b/manager/repo/semestre.php @@ -0,0 +1,58 @@ + 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($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 + + + $db = DataBase::getInstance(); + + /*** on cherche un semestre avec ce rang et cette année (qui est forcément unique) ***/ + $getSemestreUID = $db->pdo->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']; + } + + + /* retourne le semestre courant d'un étudiant + * + * @etudiant l'identifiant (UID) de l'étudiant à ajouter au groupe + * + * @return semestreUID l'UID du semestre courant + * + */ + public static function studentCurrent($etudiant){ + + } + + + + + +} \ No newline at end of file diff --git a/manager/repo/user.php b/manager/repo/user.php new file mode 100644 index 0000000..2160f90 --- /dev/null +++ b/manager/repo/user.php @@ -0,0 +1,36 @@ + l'identifiant de l'utilisateur recherché + * + * @return UID si l'utilisateur est dans la BDD, retourne son UID + * @return FALSE FAUX si l'utilisateur n'est pas présent dans la BDD + * + */ + public static function UID($identifiant){ + $db = DataBase::getInstance(); + + /*** on cherche un utilisateur avec cet identifiant ***/ + $getUtilisateurUID = $db->pdo->prepare("SELECT identifiant as id FROM utilisateur WHERE identifiant = :identifiant"); + $getUtilisateurUID->execute(array( + ':identifiant' => $identifiant + )); + + // on retourne le résultat : FAUX si aucun résultat, sinon la valeur de l'UID de l'utilisateur + return $getUtilisateurUID->fetch()['id']; + } + + + +} \ No newline at end of file diff --git a/manager/security.php b/manager/security.php index 122447e..6fac1c3 100755 --- a/manager/security.php +++ b/manager/security.php @@ -84,7 +84,7 @@ // on vérifie l'intégrité des variables session $identifiantDefinedProperly = isset($_SESSION['identifiant']) && !empty($_SESSION['identifiant']) && gettype($_SESSION['identifiant']) == 'string' && strlen($_SESSION['identifiant']) > 0; - $droitsDefinedProperly = isset($_SESSION['droits']) && !empty($_SESSION['droits']) && is_array($_SESSION['droits']) && count($_SESSION['droits']) > 0; + $droitsDefinedProperly = isset($_SESSION['droits']) && !empty($_SESSION['droits']) && is_array($_SESSION['droits']) && count($_SESSION['droits']) > 0; if( $droitsDefinedProperly ) foreach($_SESSION['droits'] as $droit) diff --git a/manager/user.php b/manager/user.php index d6e2cb5..b197d62 100755 --- a/manager/user.php +++ b/manager/user.php @@ -172,14 +172,15 @@ require_once __ROOT__.'/manager/database.php'; // SI (mois < 8) ALORS (annee - 1) SINON (annee) $_SESSION['annee'] = (Date('m', time())<8) ? Date('Y', time()) - 1 : Date('Y', time()); + // on défini si le semestre est pair ou non + $_SESSION['semestre_pair'] = semestrePair(time()); + + /* TEMPORAIRE */ + $_SESSION['semestre'] = 2; + }else return 'not_in_db'; - /******************************* TEMPO *********************************/ - /*** ON VA CHERCHER LES INFOS DANS LA BDD ***/ - - $_SESSION['semestre'] = '2'; - /***********************************************************************/ return 'success'; }else return 'wrong_password'; @@ -189,4 +190,21 @@ require_once __ROOT__.'/manager/database.php'; } + + + /* RETOURNE LES SEMESTRES EN COURS + * + * détermine si les semestres IMPAIRS ou PAIRS sont en cours + * + * @return isEven VRAI si pair, sinon FAUX (impair) + * + */ + function semestrePair($timestamp=null){ + // si $datetime n'est pas défini, on prend la date actuelle + if( $timestamp == null ) + $timestamp = time(); + + return Date('m', $timestamp) < 8; + } + ?> \ No newline at end of file diff --git a/test.php b/test.php index 5375e5e..5a41915 100755 --- a/test.php +++ b/test.php @@ -1,7 +1,9 @@