2016-04-04 09:47:17 +00:00
|
|
|
/* classe API */
|
2016-04-19 13:30:33 +00:00
|
|
|
function APIClass(target){ this.target = target; }
|
2016-04-04 09:47:17 +00:00
|
|
|
|
|
|
|
APIClass.prototype = {
|
|
|
|
xhr: [], // tableau d'objets pour les requêtes ajax
|
|
|
|
|
|
|
|
|
|
|
|
/* transaction avec le serveur (http://host/api/)
|
|
|
|
*
|
2016-04-20 09:59:21 +00:00
|
|
|
* @param pRequest<Object> l'objet passé en POST (attribut->postfield) à http://host/api/
|
2016-04-04 09:47:17 +00:00
|
|
|
* @param pHandler<Function> fonction qui s'éxécutera lors de la réponse (1 argument -> réponse<Object>)
|
2016-04-11 10:20:34 +00:00
|
|
|
* @param pToken<String> si donne, token d'auth pour l'api
|
2016-04-04 09:47:17 +00:00
|
|
|
*
|
2016-04-18 06:42:26 +00:00
|
|
|
* @return answer<Object> l'objet retourné par http://host/api/ via pHandler (1er argument)
|
2016-04-04 09:47:17 +00:00
|
|
|
*
|
|
|
|
***************************************************************************************************
|
|
|
|
*
|
|
|
|
* @usecase
|
|
|
|
* 1. var answerObject = sendRequest(
|
2016-04-18 06:42:26 +00:00
|
|
|
* 2. { var1: "exemple", var2: 198294 },
|
|
|
|
* 3. function(rep){ alert(rep); }
|
2016-04-04 09:47:17 +00:00
|
|
|
* 4. );
|
|
|
|
* @explain
|
2016-04-18 06:42:26 +00:00
|
|
|
* 1. on appelle la fonction <=> on créé la requête
|
|
|
|
* 2. on passe l'objet qui sera envoyé
|
2016-04-04 09:47:17 +00:00
|
|
|
* 3. on passe une fonction qui utilise un argument (sera la réponse de http://host/api/) (sous forme d'objet)
|
|
|
|
*
|
|
|
|
*/
|
2016-04-11 10:20:34 +00:00
|
|
|
send: function(pRequest, pHandler, pToken){
|
2016-04-04 09:47:17 +00:00
|
|
|
|
|
|
|
// Si le chemin de delegation n'est pas renseigne, on renvoie une erreur
|
|
|
|
if( !pRequest.hasOwnProperty('path') )
|
|
|
|
pHandler({ModuleError:4});
|
|
|
|
|
|
|
|
// on efface les requêtes qui sont terminées (toutes celles de this.xhr)
|
|
|
|
for( var i = 0 ; i < this.xhr.length ; i++ ){
|
|
|
|
if( this.xhr[i].readyState == 4 ) // si terminée
|
|
|
|
this.xhr = this.xhr.slice(0,i-1).concat(this.xhr.slice(i,this.xhr.length-1)); // suppression entrée
|
|
|
|
}
|
|
|
|
|
|
|
|
// on créé une nouvelle entrée
|
|
|
|
this.xhr.push(null);
|
|
|
|
i = this.xhr.length-1;
|
|
|
|
|
|
|
|
// création de l'objet AJAX
|
|
|
|
if(window.XMLHttpRequest) // IE7+, Firefox, Chrome, Opera, Safari
|
|
|
|
this.xhr[i] = new XMLHttpRequest();
|
2016-04-18 06:42:26 +00:00
|
|
|
else // IE5, IE6
|
2016-04-04 09:47:17 +00:00
|
|
|
this.xhr[i] = new ActiveXObject('Microsoft.XMLHttpRequest');
|
|
|
|
|
|
|
|
console.log(pRequest);
|
|
|
|
|
|
|
|
var ptrAPI = this;
|
|
|
|
this.xhr[i].onreadystatechange = function(){
|
|
|
|
if( ptrAPI.xhr[i].readyState == 4 ){ // si la requête est terminée
|
|
|
|
|
|
|
|
/* DEBUG : affiche la réponse BRUTE de http://host/api/ */
|
2016-04-19 14:00:17 +00:00
|
|
|
// console.log('http://host/api/ => '+ptrAPI.xhr[i].responseText);
|
2016-04-19 13:30:33 +00:00
|
|
|
// console.log( JSON.parse(ptrAPI.xhr[i].responseText) );
|
2016-04-04 09:47:17 +00:00
|
|
|
|
|
|
|
/* si success de requête */
|
|
|
|
if( [0,200].indexOf(ptrAPI.xhr[i].status) > -1 ){ // si fichier existe et reçu
|
|
|
|
try{ pHandler( JSON.parse(ptrAPI.xhr[i].responseText) ); } // si on peut parser, on envoie
|
|
|
|
catch(e){ pHandler({ModuleError:1}); } // sinon on envoie obj.request = 'corrupted'
|
|
|
|
}
|
|
|
|
/* sinon retourne obj.request = 'unreachable' */
|
|
|
|
else
|
|
|
|
pHandler({ModuleError:3});
|
|
|
|
|
|
|
|
}
|
2016-04-19 13:30:33 +00:00
|
|
|
};
|
2016-04-04 09:47:17 +00:00
|
|
|
|
|
|
|
// on créé un formulaire POST (virtuel)
|
|
|
|
var form = new FormData();
|
|
|
|
|
2016-04-12 13:16:10 +00:00
|
|
|
// On ajoute tous les attributs en POST
|
|
|
|
for( var key in pRequest )
|
|
|
|
form.append(key, pRequest[key]);
|
2016-04-04 09:47:17 +00:00
|
|
|
|
2016-04-11 10:20:34 +00:00
|
|
|
|
|
|
|
|
2016-04-04 09:47:17 +00:00
|
|
|
this.xhr[i].open('POST', this.target, true);
|
2016-04-11 10:20:34 +00:00
|
|
|
|
|
|
|
|
|
|
|
// Gestion du token optionnel
|
|
|
|
if( pToken != null ) this.xhr[i].setRequestHeader('Authorization', 'Digest '+pToken);
|
2016-04-18 06:42:26 +00:00
|
|
|
|
2016-04-11 10:20:34 +00:00
|
|
|
|
|
|
|
|
2016-04-04 09:47:17 +00:00
|
|
|
this.xhr[i].send( form );
|
|
|
|
|
|
|
|
}
|
|
|
|
};
|
2016-04-20 09:59:21 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* GESTION DE L'UPLOAD DE FICHIER, DE SON ENREGISTREMENT+FEEDBACK
|
|
|
|
*
|
|
|
|
* @file<File> Fichier en question (input.files[0])
|
|
|
|
* @prefix<String> Préfixe du futur nom du fichier
|
|
|
|
* @handler<Function> Fonction qui s'exécutera quand le fichier sera uploadé
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
function fileUploader(file, prefix, handler){
|
|
|
|
/* [1] IMPORTATION DU FICHIER
|
|
|
|
=======================================*/
|
|
|
|
var fd = new FormData();
|
|
|
|
fd.append('filename', filename);
|
|
|
|
fd.append('file', file, file.name);
|
|
|
|
|
|
|
|
var xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHttpRequest');
|
|
|
|
|
|
|
|
xhr.open('POST', 'manager/import.php', true);
|
|
|
|
|
|
|
|
xhr.onreadystatechange = function(){
|
|
|
|
if( xhr.readyState == 4 && [0, 200].indexOf(xhr.status) > -1 ){
|
|
|
|
|
|
|
|
console.log('[1] IMPORT=> '+xhr.responseText);
|
|
|
|
if( xhr.responseText == 'success' ){
|
|
|
|
/* [2] LECTURE DU FICHIER
|
|
|
|
=======================================*/
|
|
|
|
var request = { level_0: 'excel', level_1: 'import_inscrits' };
|
|
|
|
API.send(request, function(ex){
|
|
|
|
console.log('[2] PARSE=>'+ex.request);
|
|
|
|
if( ex.request == 'success' ){
|
|
|
|
|
|
|
|
/* [3] INTÉGRATION À LA BDD
|
|
|
|
=======================================*/
|
|
|
|
requestIntegration = { level_0: 'groups', level_1: 'addUserlist', rang: rang, annee: annee, formationList: ex.formationList };
|
|
|
|
API.send( requestIntegration, function(f){
|
|
|
|
console.log('[3] INTEGRATION=>'+f.request);
|
|
|
|
if( f.request == 'success' ){
|
|
|
|
console.log('liste intégrée');
|
|
|
|
reload();
|
|
|
|
}else{
|
|
|
|
console.log('integration error');
|
|
|
|
makeBounce(e.target.parentNode);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
}else{
|
|
|
|
console.log('import error');
|
|
|
|
makeBounce(e.target.parentNode);
|
|
|
|
console.log( e.target );
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}else makeBounce(e.target.parentNode);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
xhr.send(fd);
|
|
|
|
}
|