diff --git a/manager/career.php b/manager/career.php index 0970249..9463370 100755 --- a/manager/career.php +++ b/manager/career.php @@ -180,12 +180,12 @@ require_once __ROOT__.'/manager/database.php'; /****************************************************/ case 'saisieNoteMultiple': if( permission('teacher') ){ - $areSetParam = isset($request->notes); // les arguments existent - $typeOkParam = $areSetParam && is_array($request->notes); // si c'est des strings + $areSetParam = isset($request->notes) && isset($request->controle); // les arguments existent + $typeOkParam = $areSetParam && is_array($request->notes) && is_numeric($request->controle); // si c'est des strings $nEmptyParam = $typeOkParam && count($request->notes) > 1; // des bon types if( $nEmptyParam ){ // si tout les paramètres sont bons - $answer->request = DataBase::getInstance()->saisieNoteMultiple($request->notes); + $answer->request = DataBase::getInstance()->saisieNoteMultiple($request->controle, $request->notes); }else $answer->request = 'param_error'; diff --git a/manager/database.php b/manager/database.php index 7514926..593c429 100755 --- a/manager/database.php +++ b/manager/database.php @@ -708,28 +708,22 @@ class DataBase{ /******************************/ /*** saisie notes multiples ***/ /******************************/ - public function saisieNoteMultiple($notes){ - if( !($controleInfo=controleRepo::info($notes[0]->controle)) ) return 'unknown_controle'; + public function saisieNoteMultiple($controle, $notes){ + if( !($controleInfo=controleRepo::info($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']; + if( !(userRepo::UID($note->etudiant)) ) return 'unknown_user'; // si la note > base du contrôle, on supprime la note - if( $note->note > $controleInfo['base'] ) return 'unknown_note'; + if( $note->valeur > $controleInfo['base'] ) unset( $notes[$iter] ); } - var_dump( $notes ); // saisie multiple des notes - $rep = noteRepo::creerMultiple($controleUID, $notes); + $rep = noteRepo::creerMultiple($controleInfo['id'], $controleInfo['id_semestre'], $notes); if( $rep ) return 'success'; diff --git a/manager/phpExcel.php b/manager/phpExcel.php index 66b77ad..29d77fe 100755 --- a/manager/phpExcel.php +++ b/manager/phpExcel.php @@ -225,7 +225,7 @@ function xlsx_switch_lvl1($request, $answer){ case 'import_notes': - if(isset($request->docPath) && isset($request->formation) && isset($request->groupe) && isset($request->controle)) { + if( isset($request->docPath) ) { // Récupération du nom du fichier diff --git a/manager/repo/note.php b/manager/repo/note.php index 14593e4..fe02d29 100755 --- a/manager/repo/note.php +++ b/manager/repo/note.php @@ -278,41 +278,55 @@ class noteRepo extends DBAccess{ * @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)) ){ + public static function creerMultiple($controle, $semestre, $notes){ - $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 )); + $saisieFinie = true; + + foreach($notes as $iter=>$note){ - /* [2] Second cas : il faut modifier la note de cet étudiant - ============================================================================*/ - }else{ + $cEtudiant = $note->etudiant; + $cValeur = $note->valeur; - $modificationNote = DataBase::getPDO()->prepare("UPDATE note SET valeur = :valeur WHERE id_note = :noteUID"); - $modificationNote->execute(array( ':valeur' => $valeur, ':noteUID' => $noteUID )); + /* [1] Premier cas : il faut créer la note de cet étudiant pour ce contrôle + ============================================================================*/ + if( !($noteUID=noteRepo::UID($cEtudiant, $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' => $cEtudiant, ':semestre' => $semestre, ':controle' => $controle, ':valeur' => $cValeur )); + + + /* [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' => $cValeur, ':noteUID' => $noteUID )); + + } + + /* [3] On vérifie que la note a bien été créé pour cet étudiant et ce contrôle + =================================================================================*/ + if( !($noteUID=noteRepo::UID($cEtudiant, $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 )); + + $saisieFinie = $saisieFinie && ( $verificationValeur->fetch()['valeur'] == $cValeur ); } - /* [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 ); + return $saisieFinie; } diff --git a/page/_JS/career.js b/page/_JS/career.js index da4cd69..3dbbc16 100755 --- a/page/_JS/career.js +++ b/page/_JS/career.js @@ -202,13 +202,16 @@ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != n var toutesNotes = []; + var controleUID = null; + // 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) ){ + if( controleUID == null ) controleUID = saisieObj[i].ctrlid; + 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) + valeur: saisieObj[i].inputEl.value.replace(',', '.') // par précaution, on replace les virgules par des points pour le php (is_numeric) }); }} @@ -217,6 +220,7 @@ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != n var request = { // on définit la requête pour API level_0: 'career', level_1: 'saisieNoteMultiple', + controle: controleUID, notes: toutesNotes // on donne toutes les notes };