From 994e48da2e3ae8f2bd8a95b78be32c37b0a9f312 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sat, 30 Apr 2016 16:13:37 +0200 Subject: [PATCH] Gestion automatique du json pour les modules. --- config/modules.json | 10 +++++----- js/includes/input-phone-contact-min.js | 2 +- js/includes/input-phone-contact.js | 2 +- js/includes/input-phone-fiche-min.js | 4 ++-- js/includes/input-phone-fiche.js | 4 ++-- js/includes/input-phone-mini-min.js | 6 +++--- js/includes/input-phone-mini.js | 6 +++--- js/lib/api-min.js | 4 ++-- js/lib/api.js | 6 +++--- manager/Database.php | 10 ++++++++++ manager/ModuleRequest.php | 7 ++++++- manager/module/input.php | 11 ++++++++--- view/js/input-min.js | 4 ++-- view/js/input.js | 13 ++++--------- 14 files changed, 52 insertions(+), 37 deletions(-) diff --git a/config/modules.json b/config/modules.json index 2205fb9..3b16e01 100755 --- a/config/modules.json +++ b/config/modules.json @@ -189,12 +189,12 @@ "phone": { "description": "Enregistre les données d'une enquête téléphonique.", - "permissions": ["admin"], + "permissions": [], "parameters": { - "subject": { "description": "Données sur le sujet de l'enquête.", "type": "array" }, - "contacts": { "description": "Données des contacts de l'enquête.", "type": "array" }, - "mini": { "description": "Mini fiches relations sur les contacts de l'enquête.", "type": "array" }, - "fiches": { "description": "Fiches relation sur les plus proches contacts de l'enquête.", "type": "array" } + "subject": { "description": "Données sur le sujet de l'enquête.", "type": "json" }, + "contacts": { "description": "Données des contacts de l'enquête.", "type": "json" }, + "mini": { "description": "Mini fiches relations sur les contacts de l'enquête.", "type": "json" }, + "fiches": { "description": "Fiches relation sur les plus proches contacts de l'enquête.", "type": "json" } } } diff --git a/js/includes/input-phone-contact-min.js b/js/includes/input-phone-contact-min.js index 443660f..1013e51 100644 --- a/js/includes/input-phone-contact-min.js +++ b/js/includes/input-phone-contact-min.js @@ -1,6 +1,6 @@ function inputPhoneContact(a,b){this.container=a;this.nav_container=b}inputPhoneContact.prototype={container:this.container,nav_container:this.nav_container,selected:1,handler:null}; inputPhoneContact.prototype.fieldsToStorage=function(){console.log("CONTACTS: FIELDS TO STORAGE");for(var a=$$("article.contact-panel .new-contact"),b=0;b=a.length&&this.add({number:"",firstname:"",lastname:"",username:""});this.updateNavBar()}; inputPhoneContact.prototype.nav=function(a){if("undefined"==typeof a||isNaN(a.innerHTML)||"nav-contact"!=a.parentNode.id)return!1;for(var b=$$("#nav-contact > span.active"),c=0;cspan>select[data-name="job"]>option[value="'+a.job+'"]');null!=b&&b.setAttribute("selected","selected");for(var c=$$('article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]'),b=0;binput[type="radio"][data-name="loc"]');for(b=0;binput[type="radio"][data-name="loc"]');for(b=0;b span.active"),c=0;c"}for(var d in a)b=this.nav_container.children[a[d].uid],b.innerHTML=a[d].uid+1,!0===a[d].valid?b.addClass("done"):b.remClass("done");this.nav(this.nav_container.children[this.selected])}; diff --git a/js/includes/input-phone-mini.js b/js/includes/input-phone-mini.js index 5e2fb09..31ff70b 100644 --- a/js/includes/input-phone-mini.js +++ b/js/includes/input-phone-mini.js @@ -43,7 +43,7 @@ inputPhoneMini.prototype.fieldsToStorage = function(){ // {4} On récupère les données du LSI si elles existent // - var existingData = lsi.get('mini-fiches', 'form'+deflated.uid.value); + var existingData = lsi.get('mini-fiches', deflated.uid.value); // Si n'existe pas, on initialise if( existingData === false ){ @@ -70,7 +70,7 @@ inputPhoneMini.prototype.fieldsToStorage = function(){ /* (9) On enregistre les données dans le 'localStorage' */ - lsi.set('mini-fiches', 'form'+obj.uid, obj); + lsi.set('mini-fiches', obj.uid, obj); } }; @@ -158,7 +158,7 @@ inputPhoneMini.prototype.storageToFields = function(){ this.container.innerHTML = ''; // {2} On affiche la MINI fiche sélectionnée // - this.add(miniData['form'+this.selected]); + this.add(miniData[this.selected]); // {3} On met à jour la navigation // this.updateNavBar(); diff --git a/js/lib/api-min.js b/js/lib/api-min.js index daa0b69..4516cca 100644 --- a/js/lib/api-min.js +++ b/js/lib/api-min.js @@ -1,3 +1,3 @@ function APIClass(b){this.target=b} -APIClass.prototype={xhr:[],send:function(b,c,f){b.hasOwnProperty("path")||c({ModuleError:4});for(var a=0;a "+e.xhr[a].responseText), +-1<[0,200].indexOf(e.xhr[a].status))try{d(JSON.parse(e.xhr[a].responseText))}catch(b){d({ModuleError:1})}else d({ModuleError:3})};var f=new FormData,c;for(c in b)"path"!=c?f.append(c,JSON.stringify(b[c])):f.append(c,b[c]);this.xhr[a].open("POST",this.target,!0);null!=g&&this.xhr[a].setRequestHeader("Authorization","Digest "+g);this.xhr[a].send(f)}}; diff --git a/js/lib/api.js b/js/lib/api.js index a71af43..38e8a65 100755 --- a/js/lib/api.js +++ b/js/lib/api.js @@ -55,7 +55,7 @@ APIClass.prototype = { if( ptrAPI.xhr[i].readyState == 4 ){ // si la requête est terminée /* DEBUG : affiche la réponse BRUTE de http://host/api/ */ - // console.log('http://host/api/ => '+ptrAPI.xhr[i].responseText); + console.log('http://host/api/ => '+ptrAPI.xhr[i].responseText); // console.log( JSON.parse(ptrAPI.xhr[i].responseText) ); /* si success de requête */ @@ -75,8 +75,8 @@ APIClass.prototype = { // On ajoute tous les attributs en POST for( var key in pRequest ) - form.append(key, pRequest[key]); - + if( key != 'path' ) form.append(key, JSON.stringify(pRequest[key])); + else form.append(key, pRequest[key]); this.xhr[i].open('POST', this.target, true); diff --git a/manager/Database.php b/manager/Database.php index d42c135..b715d6f 100755 --- a/manager/Database.php +++ b/manager/Database.php @@ -256,6 +256,16 @@ return $checker && is_array($value) && count($value) > 0; break; + // Objet non vide + case 'object': + return $checker && is_object($value) && count((array) $value) > 0; + break; + + // Chaine JSON (on vérifie via le parser) + case 'json': + return $checker && is_string($value) && json_decode($value, true) !== NULL; + break; + default: return false; break; diff --git a/manager/ModuleRequest.php b/manager/ModuleRequest.php index 9dc9dba..1b67416 100755 --- a/manager/ModuleRequest.php +++ b/manager/ModuleRequest.php @@ -366,9 +366,14 @@ /* (6) Si le paramètre est renseigné */ - }else + }else{ // Si la verification est fausse, on retourne faux if( !Database::check($paramsdata['type'], $params[$name]) ) return false; + + // Si c'est du JSON, on le décode + if( $paramsdata['type'] == 'json' ) + $params[$name] = json_decode( $params[$name], true ); + } } /* [3] Gestion du retour, si tout s'est bien passe diff --git a/manager/module/input.php b/manager/module/input.php index 03e5fa9..66537c3 100644 --- a/manager/module/input.php +++ b/manager/module/input.php @@ -13,7 +13,10 @@ /* TRAITE LES DONNÉES D'UN FORMULAIRE DE TYPE TÉLÉPHONIQUE * - * @data Tableau contenant les données du formulaire + * @subject Tableau contenant les données du sujet + * @contacts Tableau contenant les données des contacts + * @mini Tableau contenant les données des mini fiches relation + * @fiches Tableau contenant les données des fiches relation * * @return subject_id Retourne l'id sujet de l'enquête * @@ -21,7 +24,9 @@ public static function phone($params){ extract($params); - var_dump($params); + + return array('ModulError' => 100); + /* [1] On crée le sujet de l'enquête =========================================================*/ @@ -51,7 +56,7 @@ =========================================================*/ return array( 'ModuleError' => ManagerError::Success, - 'subject_id' => $subject_id + 'subject_id' => $subject_id ); } diff --git a/view/js/input-min.js b/view/js/input-min.js index 687b936..f1a167a 100644 --- a/view/js/input-min.js +++ b/view/js/input-min.js @@ -4,6 +4,6 @@ d;else if(b){console.log("> switch firstname+lastname -> username");b=a.parentNo function checkRadioValue(a){for(var c=0,b=0;b GATHERING ALL DATA");subjectManager.fieldsToStorage();contactManager.fieldsToStorage();miniManager.fieldsToStorage();ficheManager.fieldsToStorage();console.log({});a={path:"input/phone",subject:lsi["export"]("subject")[0],contacts:lsi["export"]("contacts"),mini:lsi["export"]("mini-fiches"),fiche:lsi["export"]("fiches")};api.send(a,function(a){console.log(a)}, +0==a.ModuleError&&(importCallLog.addClass("active"),a={path:"call_log/unserialize",phone_number:$("#subject_phone_number").value},api.send(a,function(a){console.log(a);if(0==a.ModuleError){for(var d=0;d GATHERING ALL DATA");subjectManager.fieldsToStorage();contactManager.fieldsToStorage();miniManager.fieldsToStorage();ficheManager.fieldsToStorage();a={path:"input/phone",subject:lsi["export"]("subject")[0],contacts:lsi["export"]("contacts"),mini:lsi["export"]("mini-fiches"),fiches:lsi["export"]("fiches")};api.send(a,function(a){console.log(a)}, !1)},!1)})})})}); diff --git a/view/js/input.js b/view/js/input.js index d96f909..6d9c2ad 100644 --- a/view/js/input.js +++ b/view/js/input.js @@ -250,7 +250,7 @@ include('/js/includes/input-phone-fiche.js', function(){ var name = dataResponse.directory[i].name===null ? '' : dataResponse.directory[i].name; var splitted = name.split(' '); - lsi.set('contacts', 'form'+i, { + lsi.set('contacts', i, { uid: i, number: dataResponse.directory[i].number, username: splitted.length == 1 ? splitted[0] : '', // Si un seul mot -> pseudo @@ -289,22 +289,17 @@ include('/js/includes/input-phone-fiche.js', function(){ miniManager.fieldsToStorage(); ficheManager.fieldsToStorage(); - /* (2) On construit un objet qui contiendra toutes les données */ - var data = { - }; - console.log( data ); - - /* (3) On prépare la requête avec toutes les données*/ + /* (2) On prépare la requête avec toutes les données */ var request = { path: 'input/phone', subject: lsi.export('subject')[0], contacts: lsi.export('contacts'), mini: lsi.export('mini-fiches'), - fiche: lsi.export('fiches') + fiches: lsi.export('fiches') }; - /* (4) On envoie la requête et traite la réponse */ + /* (3) On envoie la requête et traite la réponse */ api.send(request, function(response){ console.log(response); }, false);