[OPT] Saisie multiple optimisé

This commit is contained in:
xdrm-brackets 2015-11-22 17:23:01 +01:00
parent c760d3201b
commit 7fdaa31ff1
5 changed files with 56 additions and 44 deletions

View File

@ -180,12 +180,12 @@ require_once __ROOT__.'/manager/database.php';
/****************************************************/ /****************************************************/
case 'saisieNoteMultiple': if( permission('teacher') ){ case 'saisieNoteMultiple': if( permission('teacher') ){
$areSetParam = isset($request->notes); // les arguments existent $areSetParam = isset($request->notes) && isset($request->controle); // les arguments existent
$typeOkParam = $areSetParam && is_array($request->notes); // si c'est des strings $typeOkParam = $areSetParam && is_array($request->notes) && is_numeric($request->controle); // si c'est des strings
$nEmptyParam = $typeOkParam && count($request->notes) > 1; // des bon types $nEmptyParam = $typeOkParam && count($request->notes) > 1; // des bon types
if( $nEmptyParam ){ // si tout les paramètres sont bons 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 }else
$answer->request = 'param_error'; $answer->request = 'param_error';

View File

@ -708,28 +708,22 @@ class DataBase{
/******************************/ /******************************/
/*** saisie notes multiples ***/ /*** saisie notes multiples ***/
/******************************/ /******************************/
public function saisieNoteMultiple($notes){ public function saisieNoteMultiple($controle, $notes){
if( !($controleInfo=controleRepo::info($notes[0]->controle)) ) return 'unknown_controle'; if( !($controleInfo=controleRepo::info($controle)) ) return 'unknown_controle';
foreach($notes as $iter=>$note){ 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) // 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( !(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 // 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] ); unset( $notes[$iter] );
} }
var_dump( $notes );
// saisie multiple des notes // saisie multiple des notes
$rep = noteRepo::creerMultiple($controleUID, $notes); $rep = noteRepo::creerMultiple($controleInfo['id'], $controleInfo['id_semestre'], $notes);
if( $rep ) if( $rep )
return 'success'; return 'success';

View File

@ -225,7 +225,7 @@ function xlsx_switch_lvl1($request, $answer){
case 'import_notes': 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 // Récupération du nom du fichier

View File

@ -278,41 +278,55 @@ class noteRepo extends DBAccess{
* @return cree<Boolean> FALSE si la note n'a pas été créé * @return cree<Boolean> FALSE si la note n'a pas été créé
* *
*/ */
public static function creerMultiple($etudiant, $controle, $semestre, $valeur){ public static function creerMultiple($controle, $semestre, $notes){
/* [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) $saisieFinie = true;
VALUES(
DEFAULT, foreach($notes as $iter=>$note){
(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 $cEtudiant = $note->etudiant;
============================================================================*/ $cValeur = $note->valeur;
}else{
$modificationNote = DataBase::getPDO()->prepare("UPDATE note SET valeur = :valeur WHERE id_note = :noteUID"); /* [1] Premier cas : il faut créer la note de cet étudiant pour ce contrôle
$modificationNote->execute(array( ':valeur' => $valeur, ':noteUID' => $noteUID )); ============================================================================*/
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 return $saisieFinie;
=================================================================================*/
$verificationValeur = DataBase::getPDO()->prepare("SELECT valeur FROM note WHERE id_note = :noteUID");
$verificationValeur->execute(array( ':noteUID' => $noteUID ));
return ( $verificationValeur->fetch()['valeur'] == $valeur );
} }

View File

@ -202,13 +202,16 @@ if( document.querySelector('#CONTAINER section[name=controlesenseignants]') != n
var toutesNotes = []; var toutesNotes = [];
var controleUID = null;
// on sélectionne toutes les valeurs contenues dans les lignes actives // 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) ){ for( var i = 0 ; i < saisieObj.length ; i++ ){ if( /active/.test(saisieObj[i].inputEl.className) ){
if( controleUID == null ) controleUID = saisieObj[i].ctrlid;
toutesNotes.push({ toutesNotes.push({
etudiant: saisieObj[i].userid, etudiant: saisieObj[i].userid,
controle: saisieObj[i].ctrlid, valeur: saisieObj[i].inputEl.value.replace(',', '.') // par précaution, on replace les virgules par des points pour le php (is_numeric)
note: 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 var request = { // on définit la requête pour API
level_0: 'career', level_0: 'career',
level_1: 'saisieNoteMultiple', level_1: 'saisieNoteMultiple',
controle: controleUID,
notes: toutesNotes // on donne toutes les notes notes: toutesNotes // on donne toutes les notes
}; };