From c760d3201be1f791301f6ed6badb96eae5204eac Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sun, 22 Nov 2015 16:34:07 +0100 Subject: [PATCH] Modification empty.sql + import_multiple etape 1 --- API.js | 2 +- manager/career.php | 13 ++++---- manager/database.php | 36 +++++++++++++++++++++- manager/gestionLog.php | 44 --------------------------- manager/repo/note.php | 52 +++++++++++++++++++++++++++++++ manager/sys.log | 0 page/_JS/career.js | 69 ++++++++++++++++++++++-------------------- xdoc/empty.sql | 54 +++++++++++++++++---------------- 8 files changed, 159 insertions(+), 111 deletions(-) delete mode 100644 manager/gestionLog.php delete mode 100644 manager/sys.log diff --git a/API.js b/API.js index 4111cce..a272c54 100755 --- a/API.js +++ b/API.js @@ -51,7 +51,7 @@ APIClass.prototype = { if( ptrAPI.xhr[i].readyState == 4 ){ // si la requête est terminée /* DEBUG : affiche la réponse BRUTE de API.php */ - // console.log('API.php => '+ptrAPI.xhr[i].responseText); + console.log('API.php => '+ptrAPI.xhr[i].responseText); console.log( JSON.parse(ptrAPI.xhr[i].responseText) ); /* si success de requête */ diff --git a/manager/career.php b/manager/career.php index ecf5de6..0970249 100755 --- a/manager/career.php +++ b/manager/career.php @@ -178,15 +178,14 @@ require_once __ROOT__.'/manager/database.php'; /****************************************************/ /* saisie d'une note pour un groupe à un contrôle */ /****************************************************/ - case 'saisieNoteGroupe': if( permission('teacher') ){ + case 'saisieNoteMultiple': if( permission('teacher') ){ - $areSetParam = isset($request->etudiant) && isset($request->controle) && isset($request->note); // les arguments existent - $typeOkParam = $areSetParam && is_string($request->etudiant); // si c'est des strings - $nEmptyParam = $typeOkParam && strlen($request->etudiant) > 0 && is_numeric($request->controle) && is_numeric($request->note); // des bon types - $etudiantCheck = $nEmptyParam && preg_match('/^[\w -]{3,50}$/i', $request->etudiant); // nom bon format + $areSetParam = isset($request->notes); // les arguments existent + $typeOkParam = $areSetParam && is_array($request->notes); // si c'est des strings + $nEmptyParam = $typeOkParam && count($request->notes) > 1; // des bon types - if( $etudiantCheck ){ // si tout les paramètres sont bons - $answer->request = DataBase::getInstance()->saisieNoteGroupe($request->etudiant, $request->controle, $request->note); + if( $nEmptyParam ){ // si tout les paramètres sont bons + $answer->request = DataBase::getInstance()->saisieNoteMultiple($request->notes); }else $answer->request = 'param_error'; diff --git a/manager/database.php b/manager/database.php index 76c45b0..7514926 100755 --- a/manager/database.php +++ b/manager/database.php @@ -160,7 +160,7 @@ class DataBase{ 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 @@ -704,6 +704,40 @@ class DataBase{ } + + /******************************/ + /*** saisie notes multiples ***/ + /******************************/ + public function saisieNoteMultiple($notes){ + if( !($controleInfo=controleRepo::info($notes[0]->controle)) ) return 'unknown_controle'; + + foreach($notes as $iter=>$note){ + + var_dump($note); + + // on vérifie l'existence de l'étudiant et du contrôle, ainsi que la cohérence de la note (pas supérieure à la base) + if( !($etudiantUID=userRepo::UID($note->etudiant)) ) return 'unknown_user'; + if( $note->controle != $controleInfo['id'] ) return 'unknown_controle'; + + $notes[$iter]->semestre = $controleInfo['id_semestre']; + + // si la note > base du contrôle, on supprime la note + if( $note->note > $controleInfo['base'] ) return 'unknown_note'; + unset( $notes[$iter] ); + } + + var_dump( $notes ); + + // saisie multiple des notes + $rep = noteRepo::creerMultiple($controleUID, $notes); + + if( $rep ) + return 'success'; + else + return 'error'; + + } + } ?> diff --git a/manager/gestionLog.php b/manager/gestionLog.php deleted file mode 100644 index 7a2e6c1..0000000 --- a/manager/gestionLog.php +++ /dev/null @@ -1,44 +0,0 @@ -utilisateur.' ]'.' '.'[ '.$request->action.' ]'); - - fclose($monfichier); - - $answer->request = 'succes'; - - } - - else { - - $answer->request = 'echec_ouverture_fichier'; - } - - } - -?> \ No newline at end of file diff --git a/manager/repo/note.php b/manager/repo/note.php index 8110e55..14593e4 100755 --- a/manager/repo/note.php +++ b/manager/repo/note.php @@ -264,4 +264,56 @@ class noteRepo extends DBAccess{ } + + /* CRÉATION/MODIFICATION DE NOTES MULTIPLE + * + * @notes + * @etudiant l'UID de l'étudiant en question + * @controle l'UID du contrôle en question + * @semestre l'UID du semestre en question + * @valeur valeur de la note à saisir + * + * + * @return noteUID l'UID de la note si elle a bien été créé + * @return cree FALSE si la note n'a pas été créé + * + */ + public static function creerMultiple($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 valeur FROM note WHERE id_note = :noteUID"); + $verificationValeur->execute(array( ':noteUID' => $noteUID )); + + return ( $verificationValeur->fetch()['valeur'] == $valeur ); + } + + } \ No newline at end of file diff --git a/manager/sys.log b/manager/sys.log deleted file mode 100644 index e69de29..0000000 diff --git a/page/_JS/career.js b/page/_JS/career.js index ce89443..da4cd69 100755 --- a/page/_JS/career.js +++ b/page/_JS/career.js @@ -191,41 +191,46 @@ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != n }, false); - // on créé l'évènement de confirmation de la saisie de TOUTES les notes saisies ou modifiées - toutEnregistrerBtn.addEventListener('click', function(e){ - - addClass( toutEnregistrerBtn, 'loading' ); - - var nbRequest = 0; - var nbSuccess = 0; - - // on sélectionne toutes les valeurs contenues dans les lignes actives - for( var i = 0 ; i < saisieObj.length ; i++ ){ if( /active/.test(saisieObj[i].inputEl.className) ){ - - nbRequest += 1; - - var request = { // on définit la requête pour API - level_0: 'career', - level_1: 'saisieNote', - etudiant: saisieObj[i].userid, - controle: saisieObj[i].ctrlid, - note: saisieObj[i].inputEl.value.replace(',', '.'), // par précaution, on replace les virgules par des points pour le php (is_numeric) - }; - - API.send(request, function(response){ // on gère la réponse de API - if( response.request == 'success' ) nbSuccess += 1; // si on a une réponse positive, on incrémente le nombre de succès - - // si tout est validé, on recharge la page - if( nbSuccess == nbRequest) reload(); - }); - - }} - - }, false); - } + + // on créé l'évènement de confirmation de la saisie de TOUTES les notes saisies ou modifiées + toutEnregistrerBtn.addEventListener('click', function(e){ + + addClass( toutEnregistrerBtn, 'loading' ); + + var toutesNotes = []; + + // on sélectionne toutes les valeurs contenues dans les lignes actives + for( var i = 0 ; i < saisieObj.length ; i++ ){ if( /active/.test(saisieObj[i].inputEl.className) ){ + + toutesNotes.push({ + etudiant: saisieObj[i].userid, + controle: saisieObj[i].ctrlid, + note: saisieObj[i].inputEl.value.replace(',', '.') // par précaution, on replace les virgules par des points pour le php (is_numeric) + }); + + }} + + + var request = { // on définit la requête pour API + level_0: 'career', + level_1: 'saisieNoteMultiple', + notes: toutesNotes // on donne toutes les notes + }; + + + API.send(request, function(response){ // on gère la réponse de API + if( response.request == 'success' ) // si on a une réponse positive, on incrémente le nombre de succès + reload(); + }); + + }, false); + + + + } diff --git a/xdoc/empty.sql b/xdoc/empty.sql index 870efb9..10579e3 100755 --- a/xdoc/empty.sql +++ b/xdoc/empty.sql @@ -1,9 +1,9 @@ --- phpMyAdmin SQL Dump +-- phpMyAdmin SQL Dump -- version 4.0.10deb1 -- http://www.phpmyadmin.net -- -- Host: localhost --- Generation Time: Nov 20, 2015 at 05:08 PM +-- Generation Time: Nov 22, 2015 at 04:33 PM -- Server version: 5.5.46-0ubuntu0.14.04.2 -- PHP Version: 5.5.9-1ubuntu4.14 @@ -167,13 +167,14 @@ INSERT INTO `appartenance` (`id_appartenance`, `id_etudiant`, `id_groupe`, `id_s CREATE TABLE IF NOT EXISTS `controle` ( `id_controle` int(11) NOT NULL AUTO_INCREMENT, `id_mcc_module` int(11) NOT NULL, - `intitule` varchar(50) CHARACTER SET utf32 COLLATE utf32_unicode_ci NOT NULL, + `nom` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, + `libelle` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `base` int(11) NOT NULL, `coefficient` float NOT NULL, `date_publication` date NOT NULL, PRIMARY KEY (`id_controle`), KEY `id_mcc_module` (`id_mcc_module`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=64 ; -- -- RELATIONS FOR TABLE `controle`: @@ -195,7 +196,7 @@ CREATE TABLE IF NOT EXISTS `enseignement` ( PRIMARY KEY (`id_enseignement`), KEY `id_enseignant` (`id_enseignant`), KEY `id_mcc_module` (`id_mcc_module`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; -- -- RELATIONS FOR TABLE `enseignement`: @@ -214,10 +215,10 @@ CREATE TABLE IF NOT EXISTS `enseignement` ( CREATE TABLE IF NOT EXISTS `formation` ( `id_formation` int(11) NOT NULL AUTO_INCREMENT, `code` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, - `nom` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, + `nom` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `nb_semestres` int(11) NOT NULL, PRIMARY KEY (`id_formation`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ; -- -- Dumping data for table `formation` @@ -283,14 +284,14 @@ CREATE TABLE IF NOT EXISTS `mcc_module` ( PRIMARY KEY (`id_mcc_module`), KEY `id_mcc_ue` (`id_mcc_ue`), KEY `id_module` (`id_module`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=44 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=40 ; -- -- RELATIONS FOR TABLE `mcc_module`: --- `id_module` --- `module` -> `id_module` -- `id_mcc_ue` -- `mcc_ue` -> `id_mcc_ue` +-- `id_module` +-- `module` -> `id_module` -- -- -------------------------------------------------------- @@ -307,14 +308,14 @@ CREATE TABLE IF NOT EXISTS `mcc_ue` ( PRIMARY KEY (`id_mcc_ue`), KEY `id_semestre` (`id_semestre`), KEY `id_ue` (`id_ue`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=45458 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ; -- -- RELATIONS FOR TABLE `mcc_ue`: --- `id_ue` --- `ue` -> `id_ue` -- `id_semestre` -- `semestre` -> `id_semestre` +-- `id_ue` +-- `ue` -> `id_ue` -- -- -------------------------------------------------------- @@ -328,7 +329,7 @@ CREATE TABLE IF NOT EXISTS `module` ( `nom` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `libelle` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id_module`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2042 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ; -- -------------------------------------------------------- @@ -344,14 +345,14 @@ CREATE TABLE IF NOT EXISTS `note` ( PRIMARY KEY (`id_note`), KEY `id_appartenance` (`id_appartenance`), KEY `id_controle` (`id_controle`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; -- -- RELATIONS FOR TABLE `note`: --- `id_controle` --- `controle` -> `id_controle` -- `id_appartenance` -- `appartenance` -> `id_appartenance` +-- `id_controle` +-- `controle` -> `id_controle` -- -- -------------------------------------------------------- @@ -369,7 +370,7 @@ CREATE TABLE IF NOT EXISTS `semestre` ( PRIMARY KEY (`id_semestre`), UNIQUE KEY `rang` (`rang`,`annee`), KEY `id_formation` (`id_formation`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ; -- -- RELATIONS FOR TABLE `semestre`: @@ -389,7 +390,8 @@ INSERT INTO `semestre` (`id_semestre`, `id_formation`, `nom`, `rang`, `annee`) V (5, 1, 'S1', 1, 2016), (6, 1, 'S2', 2, 2016), (7, 2, 'S3', 3, 2016), -(8, 2, 'S4', 4, 2016); +(8, 2, 'S4', 4, 2016), +(15, 1, 'S1', 1, 2017); -- -------------------------------------------------------- @@ -402,7 +404,7 @@ CREATE TABLE IF NOT EXISTS `ue` ( `nom` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `libelle` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id_ue`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=28 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; -- -------------------------------------------------------- @@ -561,22 +563,22 @@ ALTER TABLE `enseignement` -- Constraints for table `mcc_module` -- ALTER TABLE `mcc_module` - ADD CONSTRAINT `mcc_module_id_module` FOREIGN KEY (`id_module`) REFERENCES `module` (`id_module`) ON DELETE CASCADE, - ADD CONSTRAINT `mcc_module_id_mcc_ue` FOREIGN KEY (`id_mcc_ue`) REFERENCES `mcc_ue` (`id_mcc_ue`) ON DELETE CASCADE; + ADD CONSTRAINT `mcc_module_id_mcc_ue` FOREIGN KEY (`id_mcc_ue`) REFERENCES `mcc_ue` (`id_mcc_ue`) ON DELETE CASCADE, + ADD CONSTRAINT `mcc_module_id_module` FOREIGN KEY (`id_module`) REFERENCES `module` (`id_module`) ON DELETE CASCADE; -- -- Constraints for table `mcc_ue` -- ALTER TABLE `mcc_ue` - ADD CONSTRAINT `mcc_ue_id_ue` FOREIGN KEY (`id_ue`) REFERENCES `ue` (`id_ue`) ON DELETE CASCADE, - ADD CONSTRAINT `mcc_ue_id_semestre` FOREIGN KEY (`id_semestre`) REFERENCES `semestre` (`id_semestre`) ON DELETE CASCADE; + ADD CONSTRAINT `mcc_ue_id_semestre` FOREIGN KEY (`id_semestre`) REFERENCES `semestre` (`id_semestre`) ON DELETE CASCADE, + ADD CONSTRAINT `mcc_ue_id_ue` FOREIGN KEY (`id_ue`) REFERENCES `ue` (`id_ue`) ON DELETE CASCADE; -- -- Constraints for table `note` -- ALTER TABLE `note` - ADD CONSTRAINT `note_id_controle` FOREIGN KEY (`id_controle`) REFERENCES `controle` (`id_controle`) ON DELETE CASCADE, - ADD CONSTRAINT `note_id_appartenance` FOREIGN KEY (`id_appartenance`) REFERENCES `appartenance` (`id_appartenance`) ON DELETE CASCADE; + ADD CONSTRAINT `note_id_appartenance` FOREIGN KEY (`id_appartenance`) REFERENCES `appartenance` (`id_appartenance`) ON DELETE CASCADE, + ADD CONSTRAINT `note_id_controle` FOREIGN KEY (`id_controle`) REFERENCES `controle` (`id_controle`) ON DELETE CASCADE; -- -- Constraints for table `semestre`