From 1272d1a4cdee55cdbc6af3be4351a5692e13fbb1 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 22 Nov 2015 15:00:18 +0100 Subject: [PATCH] =?UTF-8?q?Int=C3=A9gration+d=C3=A9ploiement=20de=20la=20c?= =?UTF-8?q?r=C3=A9ation=20de=20semestre/formation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/career.php | 46 ++++++++++++++++++++++ manager/database.php | 22 +++++++++++ manager/repo/semestre.php | 82 +++++++++++++++++++++++++++++++++++++++ page/_JS/modules.js | 17 ++++---- 4 files changed, 160 insertions(+), 7 deletions(-) diff --git a/manager/career.php b/manager/career.php index 995bd32..ecf5de6 100755 --- a/manager/career.php +++ b/manager/career.php @@ -219,6 +219,52 @@ require_once __ROOT__.'/manager/database.php'; + + + + + + + + /**************************/ + /* création d'un semestre */ + /**************************/ + /* + * CRÉATION DU SEMESTRE D'UNE FORMATION DONNÉE + * - si code formation non référencé => on créé la formation + * - si rang+annee+formation du semestre non référencé => on créé le semestre + * + sinon on modifie juste le nom (même si identique) + * + */ + case 'creerSemestre': if( permission('admin') ){ + + $areSetParam = isset($request->annee) && isset($request->formation) && isset($request->nom_formation) && isset($request->semestre) && isset($request->rang); // les arguments existent + $typeOkParam = $areSetParam && is_string($request->formation) && is_string($request->nom_formation) && is_string($request->semestre); // si c'est des strings + $nEmptyParam = $typeOkParam && strlen($request->formation) > 0 && strlen($request->nom_formation) > 0 && strlen($request->semestre) > 0 && is_numeric($request->annee) && is_numeric($request->rang); // des bon types + $anneeCheck = $nEmptyParam && preg_match('/[0-4]/i', $request->annee); // l'année est au bon format + $formationCheck = $anneeCheck && preg_match('/[\w]{0,10}/i', $request->formation); // le code de la formation est au bon format + $nomFormationCheck = $formationCheck && preg_match('/[\w ]{0,100}/i', $request->nom_formation); // le nom de la formation est au bon format + $semestreCheck = $nomFormationCheck && preg_match('/[\w -]{0,10}/i', $request->semestre); // le nom du semestre est au bon format + $rangCheck = $semestreCheck && preg_match('/\d/i', $request->rang); // l'année est au bon format + + + if( $rangCheck ){ // si tout les paramètres sont bons + $creationOk = DataBase::getInstance()->creerSemestre($request->formation, $request->nom_formation, $request->semestre, $request->rang, $request->annee); + if( $creationOk ) + $answer->request = 'success'; + else + $answer->request = 'error'; + + }else + $answer->request = 'param_error'; + + }else + $answer->request = 'permission_error'; + break; + + + + /***********/ /* DEFAULT */ /***********/ diff --git a/manager/database.php b/manager/database.php index 3f8be06..76c45b0 100755 --- a/manager/database.php +++ b/manager/database.php @@ -145,6 +145,28 @@ class DataBase{ } + /* créé un semestre/formation dans la BDD + * + * @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 cree retourne VRAI si les éléments existaient ou ont bien été créés + * + */ + public static function creerSemestre($codeFormation, $nomFormation, $nomSemestre, $rangSemestre, $annee){ + // si on a tout créé ou que tout existe "creer" retourne l'UID du semestre, + // si on a un boolean c'est FALSE => erreur + // + if( !is_bool(semestreRepo::creer($codeFormation, $nomFormation, $nomSemestre, $rangSemestre, $annee)) ) + return true; + else + return false; + } + /*************************************************************************************/ diff --git a/manager/repo/semestre.php b/manager/repo/semestre.php index 9e2e297..110c316 100755 --- a/manager/repo/semestre.php +++ b/manager/repo/semestre.php @@ -218,4 +218,86 @@ class semestreRepo extends DBAccess{ } + + + + + /* 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; + + } + } \ No newline at end of file diff --git a/page/_JS/modules.js b/page/_JS/modules.js index 2f1058e..a3a7e3d 100755 --- a/page/_JS/modules.js +++ b/page/_JS/modules.js @@ -189,25 +189,28 @@ if( importMcc != null ){ var creerSemestre = document.getElementById('creer_semestre'); creerSemestre.addEventListener('click', function(e){ + addClass( creerSemestre, 'loading' ); + var form = creerSemestre.parentNode; - var fAnnee = form.children[2].value; - var fCursus = form.children[4].value; - var fLibelle = form.children[6].value; - var fSemestre = form.children[8].value; - var fRang = form.children[10].value; + var fAnnee = form.children[2].value; + var fFormation = form.children[4].value; + var fLibelle = form.children[6].value; + var fSemestre = form.children[8].value; + var fRang = form.children[10].value; var request = { level_0: 'career', level_1: 'creerSemestre', annee: fAnnee, - formation: fCursus, + formation: fFormation, nom_formation: fLibelle, semestre: fSemestre, rang: fRang } API.send(request, function(e){ - console.log( e ); + if( e.request == 'success' ) + reload(); });