From 2ace824fa462fd7ea851427378a870da2129ebdc Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Wed, 4 May 2016 19:02:44 +0200 Subject: [PATCH] =?UTF-8?q?Correction=20de=20`fiches`=20pour=20la=20cr?= =?UTF-8?q?=C3=A9ation=20des=20fiches=20apr=C3=A8s=20saisie=20manuelle=20d?= =?UTF-8?q?es=20contacts=20et=20aucun=20top=2010=20pr=C3=A9d=C3=A9fini?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/includes/input-phone-fiche-min.js | 18 ++++----- js/includes/input-phone-fiche.js | 59 +++++++++++++++++++++++++--- js/includes/input-phone-mini-min.js | 2 +- js/includes/input-phone-mini.js | 6 +-- view/input.php | 5 --- view/js/input.js | 5 +-- 6 files changed, 68 insertions(+), 27 deletions(-) diff --git a/js/includes/input-phone-fiche-min.js b/js/includes/input-phone-fiche-min.js index f03e667..6566e10 100644 --- a/js/includes/input-phone-fiche-min.js +++ b/js/includes/input-phone-fiche-min.js @@ -2,8 +2,8 @@ function inputPhoneFiche(a,b){this.container=a;this.nav_container=b} inputPhoneFiche.prototype={container:this.container,nav_container:this.nav_container,selected:0,handler:null,defaultData:{sexe:[{status:!0},{status:!1}],age:"",job:".",famsit:[{status:!0},{status:!1},{status:!1}],studies:".",reltype:[{status:!0},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1}],reltypeSpecial:"",city:"",loc:[{status:!0},{status:!1},{status:!1},{status:!1}],loc2:[{status:!0},{status:!1},{status:!1},{status:!1}],duration:["",""],context:[{status:!0}, {status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1}],contextSpecial:["","",""],freq:[[{status:!0},{status:!1},{status:!1},{status:!1}],[{status:!0},{status:!1},{status:!1},{status:!1}],[{status:!0},{status:!1},{status:!1},{status:!1}],[{status:!0},{status:!1},{status:!1},{status:!1}],[{status:!0},{status:!1},{status:!1},{status:!1}]],connect:[[{status:!1},{status:!0}],[{status:!1},{status:!0}], [{status:!1},{status:!0}],[{status:!1},{status:!0}],[{status:!1},{status:!0}],[{status:!1},{status:!0}]],connectSpecial:["",""],timestamp:0,valid:!1}}; -inputPhoneFiche.prototype.fieldsToStorage=function(){console.log("FICHE: FIELDS TO STORAGE");for(var a=$$("article.relation-panel .fiche-relation"),b=0;b FICHE UPDATE");c={contact:c.contact.value,uid:c.uid.value,sexe:c.sexe,age:c.age.value,job:c.job.value,famsit:c.famsit,studies:c.studies.value, -reltype:c.reltype,reltypeSpecial:c.reltypeSpecial.value,city:c.city.value,loc:c.loc,loc2:c.loc2,duration:[c.duration[0].value,c.duration[1].value],context:c.context,contextSpecial:[c.contextSpecial[0].value,c.contextSpecial[1].value,c.contextSpecial[2].value],freq:[c.freq0,c.freq1,c.freq2,c.freq3,c.freq4],connect:[c.connect0,c.connect1,c.connect2,c.connect3,c.connect4,c.connect5],connectSpecial:[c.connectSpecial[0].value,c.connectSpecial[1].value],hash:d};c.valid=this.check(c);c.timestamp=Date.now(); +inputPhoneFiche.prototype.fieldsToStorage=function(){console.log("FICHE: FIELDS TO STORAGE");for(var a=$$("article.relation-panel .fiche-relation"),b=0;b FICHE UPDATE");c={contact:c.contact.value,uid:c.uid.value,sexe:c.sexe,age:c.age.value,job:c.job.value,famsit:c.famsit,studies:c.studies.value, +reltype:c.reltype,reltypeSpecial:c.reltypeSpecial.value,city:c.city.value,loc:c.loc,loc2:c.loc2,duration:[c.duration[0].value,c.duration[1].value],context:c.context,contextSpecial:[c.contextSpecial[0].value,c.contextSpecial[1].value,c.contextSpecial[2].value],freq:[c.freq0,c.freq1,c.freq2,c.freq3,c.freq4],connect:[c.connect0,c.connect1,c.connect2,c.connect3,c.connect4,c.connect5],connectSpecial:[c.connectSpecial[0].value,c.connectSpecial[1].value],hash:f};c.valid=this.check(c);c.timestamp=Date.now(); lsi.set("fiches",c.uid,c)}}}; inputPhoneFiche.prototype.add=function(a){console.log("FICHE: ADD");if(null==a.uid||null==a.contact)return!1;a.age=null!=a.age?a.age:this.defaultData.age;a.city=null!=a.city?a.city:this.defaultData.city;a.duration[0]=null!=a.duration[0]?a.duration[0]:this.defaultData.duration[0];a.duration[1]=null!=a.duration[1]?a.duration[1]:this.defaultData.duration[1];a.reltypeSpecial=null!=a.reltypeSpecial?a.reltypeSpecial:this.defaultData.reltypeSpecial;a.contextSpecial[0]=null!=a.contextSpecial[0]?a.contextSpecial[0]: this.defaultData.contextSpecial[0];a.contextSpecial[1]=null!=a.contextSpecial[1]?a.contextSpecial[1]:this.defaultData.contextSpecial[1];a.contextSpecial[2]=null!=a.contextSpecial[2]?a.contextSpecial[2]:this.defaultData.contextSpecial[2];a.connectSpecial[0]=null!=a.connectSpecial[0]?a.connectSpecial[0]:this.defaultData.connectSpecial[0];a.connectSpecial[1]=null!=a.connectSpecial[1]?a.connectSpecial[1]:this.defaultData.connectSpecial[1];a.job=null!=a.job?a.job:this.defaultData.job;a.studies=null!=a.studies? @@ -12,14 +12,14 @@ if(!1===b)return!1;this.container.innerHTML+=ficheBuilder.build({firstname:b.fir b=$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="job"]>option[value="'+a.job+'"]');null!=b&&b.setAttribute("selected","selected");b=$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="studies"]>option[value="'+a.studies+'"]');null!=b&&b.setAttribute("selected","selected");for(var c=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]'),b=0;binput[type="radio"][data-name="famsit"]');for(b=0;binput[type="radio"][data-name="reltype"]');for(b=0;binput[type="radio"][data-name="loc"]');for(b=0;binput[type="radio"][data-name="loc2"]');for(b=0;binput[type="radio"][data-name="context"]');for(b=0;binput[type="radio"][data-name="freq'+c+'"]'),b=0;binput[type="radio"][data-name="connect'+c+'"]'),b=0;binput[type="radio"][data-name="context"]');for(b=0;binput[type="radio"][data-name="freq'+c+'"]'),b=0;binput[type="radio"][data-name="connect'+c+'"]'),b=0;ba[e].timestamp?(a[e].sexe=d[e].sexe,a[e].age=d[e].age, -a[e].job=d[e].job,a[e].loc=d[e].loc):(d[e].sexe=a[e].sexe,d[e].age=a[e].age,d[e].job=a[e].job,d[e].loc=a[e].loc),lsi.set("mini-fiches",e,a[e]),lsi.set("fiches",e,d[e]);for(e in d)a=lsi.get("contacts",d[e].contact),null!=a&&-1!=a.sms&&-1!=a.call&&(a=10>parseInt(e)?10+a.sms:a.call,a=d[a],a.timestamp>=d[e].timestamp||(b=d[e],b.uid=a.uid,lsi.set("fiches",a.uid,b)))}; -inputPhoneFiche.prototype.nav=function(a){if(null==a||!1===a.getData("n")||isNaN(a.getData("n"))||"nav-fiche"!=a.parentNode.id)return!1;for(var b=$$("#nav-fiche > span.active"),c=0;cAPPELS";for(var c=0;c'+(c%10+1)+"  ":(10==c&&(this.nav_container.innerHTML+='SMS'),this.nav_container.innerHTML+=''+(c%10+1)+"")}for(var d in a)b=$('#nav-fiche [data-n="'+ -a[d].uid+'"]'),!0===a[d].valid?b.addClass("done"):b.remClass("done");this.nav($('#nav-fiche [data-n="'+this.selected+'"]'))}; +inputPhoneFiche.prototype.sync=function(){console.log("FICHE: SYNC");var a=lsi["export"]("contacts"),b=[],c;for(c in a){if(-1b.length)for(c in console.log("need to add contacts sequentially to top 10s"),a){for(a= +0;-1a;)a++;b.push(a);d=lsi.get("fiches",a);null==d&&(d=this.defaultData);d.uid=a;d.contact=c;lsi.set("fiches",a,d);if(20<=b.length)break}var b=lsi["export"]("mini-fiches"),d=lsi["export"]("fiches"),e;for(e in d)d[e].timestamp>b[e].timestamp?(b[e].sexe=d[e].sexe,b[e].age=d[e].age,b[e].job=d[e].job,b[e].loc=d[e].loc):(d[e].sexe=b[e].sexe,d[e].age=b[e].age,d[e].job=b[e].job,d[e].loc=b[e].loc),lsi.set("mini-fiches",e,b[e]),lsi.set("fiches",e,d[e]);for(e in d)b=lsi.get("contacts",d[e].contact), +null!=b&&-1!=b.sms&&-1!=b.call&&(b=10>parseInt(e)?10+b.sms:b.call,b=d[b],b.timestamp>=d[e].timestamp||(c=d[e],c.uid=b.uid,lsi.set("fiches",b.uid,c)))};inputPhoneFiche.prototype.nav=function(a){if(null==a||!1===a.getData("n")||isNaN(a.getData("n"))||"nav-fiche"!=a.parentNode.id)return!1;for(var b=$$("#nav-fiche > span.active"),c=0;cAPPELS";for(var c=0;c'+(c%10+1)+"  ":(10==c&&(this.nav_container.innerHTML+='SMS'),this.nav_container.innerHTML+=''+(c%10+1)+"")}for(var f in a)b= +$('#nav-fiche [data-n="'+a[f].uid+'"]'),!0===a[f].valid?b.addClass("done"):b.remClass("done");this.nav($('#nav-fiche [data-n="'+this.selected+'"]'))}; inputPhoneFiche.prototype.check=function(a){if(isNaN(parseInt(a.age))||2>a.city.length||isNaN(parseInt(a.duration[0]))&&0a.reltypeSpecial.length||a.context[11].status&&2>a.contextSpecial[0].length||a.context[12].status&&2>a.contextSpecial[1].length||a.context[13].status&&2>a.contextSpecial[2].length?!1:!0}; inputPhoneFiche.prototype.attach=function(a){console.log("FICHE: ATTACH");lsi.createDataset("fiches");this.storageToFields();this.handler=a;var b=this,b=this;this.nav_container.addEventListener("click",function(a){b.nav(a.target);b.handler(a.target)},!1)}; diff --git a/js/includes/input-phone-fiche.js b/js/includes/input-phone-fiche.js index d5a1368..8948b6f 100644 --- a/js/includes/input-phone-fiche.js +++ b/js/includes/input-phone-fiche.js @@ -338,10 +338,11 @@ inputPhoneFiche.prototype.storageToFields = function(){ inputPhoneFiche.prototype.sync = function(){ console.log('FICHE: SYNC'); - /* (1) Mise à jour en fonction des contacts + /* (1) Mise à jour en fonction des contacts APRÈS IMPORT ---------------------------------------------------------*/ /* (1) On récupère tous les CONTACTS */ var contacts = lsi.export('contacts'); + var addedFicheUids = []; // Contiendra les uids des fiches qui seront crées /* (2) Pour chaque CONTACT, on met à jour/crée la FICHE associée, si dans le TOP 10 des APPELS ou des SMS */ for( var uid in contacts ){ @@ -352,6 +353,7 @@ inputPhoneFiche.prototype.sync = function(){ if( contacts[uid].call > -1 ){ // On calcule le rang de la fiche en fonction du classement var ficheIndex = contacts[uid].call; + addedFicheUids.push(ficheIndex); // On récupère les informations de la FICHE (si elle existe) */ var ficheData = lsi.get('fiches', ficheIndex); @@ -371,6 +373,7 @@ inputPhoneFiche.prototype.sync = function(){ if( contacts[uid].sms > -1 ){ // On calcule le rang de la fiche en fonction du classement var ficheIndex = 10+contacts[uid].sms; + addedFicheUids.push(ficheIndex); // On récupère les informations de la FICHE (si elle existe) */ var ficheData = lsi.get('fiches', ficheIndex); @@ -391,7 +394,47 @@ inputPhoneFiche.prototype.sync = function(){ } - /* (2) Mise à jour en fonction des MINI fiches + + + /* (2) Mise à jour en fonction des contacts APRÈS SAISIE MANUELLE + ---------------------------------------------------------*/ + console.log(addedFicheUids); + // Si moins de 10+10 contacts crées, on les complètes en fonction des contacts séquentiellement + if( addedFicheUids.length < 20 ){ + console.log('need to add contacts sequentially to top 10s'); + + /* (1) Pour chaque CONTACT, on met à jour/crée la FICHE associée*/ + for( var uid in contacts ){ + + /* (2) On cherche un uid de fiche non existant dans l'intervalle 0-19 */ + var ficheUid = 0; + while( addedFicheUids.indexOf(ficheUid) > -1 && ficheUid < 20 ) + ficheUid++; + // On enregistre le nouvel UID dans les uid crées + addedFicheUids.push(ficheUid); + + /* (3) On récupère les informations de la FICHE (si elle existe) */ + var ficheData = lsi.get('fiches', ficheUid); + + // Si la fiche n'existe pas, on la crée avec les valeurs par défaut + if( ficheData == null ) + ficheData = this.defaultData; + + /* (4) On met à jour la fiche ET on l'enregistre */ + ficheData.uid = ficheUid; + ficheData.contact = uid; + lsi.set('fiches', ficheUid, ficheData); + + + /* (5) Si on a déja crée 10+10 fiches, on arrête */ + if( addedFicheUids.length >= 20 ) + break; + } + + } + + + /* (3) Mise à jour en fonction des MINI fiches ---------------------------------------------------------*/ /* (1) On récupère les valeurs des MINI fiches et des FICHES */ var miniData = lsi.export('mini-fiches'); @@ -423,7 +466,7 @@ inputPhoneFiche.prototype.sync = function(){ } - /* (3) Mise à jour des fiches dupliquées entre le top 10 des APPELS et celui des SMS + /* (4) Mise à jour des fiches dupliquées entre le top 10 des APPELS et celui des SMS ---------------------------------------------------------*/ for( var key in ficheData ){ /* (1) On récupère le contact associé */ @@ -495,11 +538,12 @@ inputPhoneFiche.prototype.nav = function(element){ =========================================================*/ inputPhoneFiche.prototype.updateNavBar = function(){ var ficheData = lsi.export('fiches'); - var len = Object.keys(ficheData).length; + var len = lsi.keys('fiches').length; /* (1) On vérifie si la barre de navigation est à jour */ - var navBarUpToDate = this.nav_container.children.length == len; + console.log($$('#nav-fiche [data-n]').length); + var navBarUpToDate = $$('#nav-fiche [data-n]').length == len; /* (2) On vide et remplit la barre de nav, si elle n'est pas à jour */ @@ -526,7 +570,10 @@ inputPhoneFiche.prototype.updateNavBar = function(){ var currentElement = $('#nav-fiche [data-n="'+ficheData[key].uid+'"]'); - // Si la MINI fiche est valide + + // Si on ne trouve pas le bouton + + // Si la FICHE est valide if( ficheData[key].valid === true ) currentElement.addClass('done'); // Si elle est invalide else currentElement.remClass('done'); diff --git a/js/includes/input-phone-mini-min.js b/js/includes/input-phone-mini-min.js index 0bbc4bb..a01532a 100644 --- a/js/includes/input-phone-mini-min.js +++ b/js/includes/input-phone-mini-min.js @@ -5,5 +5,5 @@ inputPhoneMini.prototype.add=function(a){console.log("MINI FICHE: ADD");if(null= countsms:b.countsms,uid:a.uid,age:a.age,job:a.job});b=$('article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>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;b span.active"),c=0;c'+(c+1)+""}for(var e in a)b=this.nav_container.children[a[e].uid],!0===a[e].valid?b.addClass("done"):b.remClass("done");this.nav(this.nav_container.children[this.selected])}; +inputPhoneMini.prototype.updateNavBar=function(){var a=lsi["export"]("mini-fiches"),b=Object.keys(a).length;if($$("#nav-mini [data-n]").length!=b){this.nav_container.innerHTML="";for(var c=0;c'+(c+1)+""}for(var e in a)b=$('#nav-mini [data-n="'+a[e].uid+'"]'),!0===a[e].valid?b.addClass("done"):b.remClass("done");this.nav($('#nav-mini [data-n="'+this.selected+'"]'))}; inputPhoneMini.prototype.check=function(a){return!isNaN(parseInt(a.age))&&checkRadioValue(a.sexe)&&"."!=a.job&&checkRadioValue(a.loc)?!0:!1};inputPhoneMini.prototype.attach=function(a){console.log("MINI FICHE: ATTACH");lsi.createDataset("mini-fiches");this.storageToFields();this.handler=a;var b=this;this.nav_container.addEventListener("click",function(a){b.nav(a.target);b.handler(a.target)},!1)}; diff --git a/js/includes/input-phone-mini.js b/js/includes/input-phone-mini.js index 16a1c37..209d2ca 100644 --- a/js/includes/input-phone-mini.js +++ b/js/includes/input-phone-mini.js @@ -261,7 +261,7 @@ inputPhoneMini.prototype.updateNavBar = function(){ /* (1) On vérifie si la barre de navigation est à jour */ - var navBarUpToDate = this.nav_container.children.length == len; + var navBarUpToDate = $$('#nav-mini [data-n]').length == len; /* (2) On vide et remplit la barre de nav, si elle n'est pas à jour */ @@ -275,7 +275,7 @@ inputPhoneMini.prototype.updateNavBar = function(){ /* (3) On montre les MINI fiches qui sont correctes dans la navbar */ for( var key in miniData ){ - var currentElement = this.nav_container.children[ miniData[key].uid ]; + var currentElement = $('#nav-mini [data-n="'+miniData[key].uid+'"]'); // On remplit avec le numéro de la MINI fiche // currentElement.setAttribute('data-n', miniData[key].uid); @@ -291,7 +291,7 @@ inputPhoneMini.prototype.updateNavBar = function(){ /* (4) On séléctionne par défaut la dernière MINI fiche sélectionnée */ - this.nav( this.nav_container.children[this.selected] ); + this.nav( $('#nav-mini [data-n="'+this.selected+'"]') ); }; diff --git a/view/input.php b/view/input.php index cab683d..9962f47 100755 --- a/view/input.php +++ b/view/input.php @@ -96,9 +96,6 @@
- - - @@ -113,8 +110,6 @@ - - diff --git a/view/js/input.js b/view/js/input.js index 9bbf3c6..57b9f21 100644 --- a/view/js/input.js +++ b/view/js/input.js @@ -99,9 +99,8 @@ function dynamicUpdate(target){ miniManager.sync(); /* (5) On synchronise les FICHE avec les CONTACTS */ - // La synchronisation des champs communs est aussi faite entre `mini` et `fiches` - // 1. Si les valeurs de `fiche` sont pas définis, on prend les valeurs de `mini` - // 2. Sinon, on prend les valeurs de `fiche` + // 1. On synchronise les `mini` et `fiches` associées en fonction de la dernière date de modification + // 2. On synchronise les `fiches` dupliquées en fonction de la dernière date de modification ficheManager.sync();