\n"+
diff --git a/js/includes/input-phone-fiche.js b/js/includes/input-phone-fiche.js
index 892aae3..deffc68 100644
--- a/js/includes/input-phone-fiche.js
+++ b/js/includes/input-phone-fiche.js
@@ -332,109 +332,216 @@ inputPhoneFiche.prototype.storageToFields = function(){
inputPhoneFiche.prototype.sync = function(){
console.group('[phone.fiche] synchronisation');
- /* (1) Initialisation
- ---------------------------------------------------------*/
- /* (1) On récupère tous les CONTACTS */
- var contacts = lsi.export('p_contacts');
+ { /* (1) Initialisation
+ ---------------------------------------------------------*/
- /* (2) Contiendra les uids des fiches qui seront crées */
- var addedFicheUids = [];
- var ficheData, contactData;
+ /* (1) On récupère tous les CONTACTS */
+ var contacts = lsi.export('p_contacts');
+ /* (2) Contiendra les uids des fiches qui seront crées */
+ var addedFicheUids = [];
+ var ficheData, contactData, miniData;
-
- /* (2) Mise à jour en fonction des contacts APRÈS SAISIE
- ---------------------------------------------------------*/
- // Nombre maximum de fiches (40, sauf si moins de 40 contacts, dans ce cas, le nombre de contacts);
- var nbMaxFiche = lsi.keys('p_contacts').length < 2*this.top_size ? lsi.keys('p_contacts').length : 2*this.top_size;
-
- /* (1) Pour chaque CONTACT, on met à jour/crée la FICHE associée */
- for( var uid in contacts ){
-
- /* (1) On cherche un uid de fiche non existant dans l'intervalle [0;40[ */
- ficheUid = 0;
- while( addedFicheUids.indexOf(ficheUid) > -1 && ficheUid < nbMaxFiche )
- ficheUid++;
-
- // On enregistre le nouvel UID dans les uid crées
- addedFicheUids.push(ficheUid);
-
- /* (2) On récupère les informations de la FICHE (si elle existe) */
- var ficheData = lsi.get('p_fiches', ficheUid);
-
- // Si la fiche n'existe pas, on la crée avec les valeurs par défaut
- !ficheData && ( ficheData = this.defaultData );
-
- /* (3) On met à jour la fiche ET on l'enregistre */
- ficheData.uid = ficheUid;
- ficheData.contact = parseInt(uid);
- lsi.set('p_fiches', ficheUid, ficheData);
-
-
- /* (4) Si on a déja crée 20+20 fiches, on arrête */
- if( addedFicheUids.length >= nbMaxFiche )
- break;
}
- /* (3) Gestion des fiches dupliquées
- ---------------------------------------------------------*/
- ficheData = lsi.export('p_fiches');
+ { /* (2) Mise à jour en fonction des contacts APRÈS SAISIE
+ ---------------------------------------------------------*/
- for( var key in ficheData ){
+ // Nombre maximum de fiches (40, sauf si moins de 40 contacts, dans ce cas, le nombre de contacts);
+ var nbMaxFiche = lsi.keys('p_contacts').length < 2*this.top_size ? lsi.keys('p_contacts').length : 2*this.top_size;
- /* (1) On récupère le contact associé */
- var associatedContact = lsi.get('p_contacts', ficheData[key].contact);
+ /* (1) Pour chaque CONTACT, on met à jour/crée la FICHE associée */
+ for( var uid in contacts ){
- // Si erreur, on passe au suivant
- if( !associatedContact )
- continue;
+ /* (1) On cherche un uid de fiche non existant dans l'intervalle [0;40[ */
+ ficheUid = 0;
+ while( addedFicheUids.indexOf(ficheUid) > -1 && ficheUid < nbMaxFiche )
+ ficheUid++;
- /* (3) On récupère la/les autre(s) fiche(s) (clone(s)) */
- var clone = null;
- var inCall = parseInt( ficheData[key].uid ) < this.top_size; // vrai si dans les APPELS, sinon dans les SMS
+ // On enregistre le nouvel UID dans les uid crées
+ addedFicheUids.push(ficheUid);
- for( var i in ficheData ){
+ /* (2) On récupère les informations de la FICHE (si elle existe) */
+ var ficheData = lsi.get('p_fiches', ficheUid);
- // si on est pas dans le bonne tranche, on passe au suivant
- if( inCall && i < this.top_size || !inCall && i >= this.top_size )
- continue;
+ // Si la fiche n'existe pas, on la crée avec les valeurs par défaut
+ !ficheData && ( ficheData = this.defaultData );
- // on récupère le contact associé (si on est dans `call`, celui dans la tranche avec `sms` / et inversement)
- contactData = lsi.get('p_contacts', ficheData[i].contact);
+ /* (3) On met à jour la fiche ET on l'enregistre */
+ ficheData.uid = ficheUid;
+ ficheData.contact = parseInt(uid);
+ lsi.set('p_fiches', ficheUid, ficheData);
- if( i == key || !contactData )
- continue;
- // meme pseudo
- var hasSameUsername = contactData.username.length > 0 && associatedContact.username === contactData.username;
- // meme lien de contact
- var hasSameLink = !isNaN(contactData.existing) && associatedContact.existing === contactData.existing;
-
- // si ont le même contact, alors on enregistre le clone (sauf si la même fiche)
- ( hasSameUsername || hasSameLink ) && ( clone = ficheData[i] );
-
- if( clone !== null )
+ /* (4) Si on a déja crée 20+20 fiches, on arrête */
+ if( addedFicheUids.length >= nbMaxFiche )
break;
+ }
+
+ }
+
+
+ { /* (3) Gestion des liens entre mini-fiches et fiches
+ ---------------------------------------------------------*/
+ var hasSameUsername, hasSameLink;
+
+ ficheData = lsi.export('p_fiches');
+ miniData = lsi.export('p_mini-fiches');
+
+ // Pour chaque fiche
+ for( var key in ficheData ){
+
+ /* (1) On récupère le contact associé */
+ var associatedContact = lsi.get('p_contacts', ficheData[key].contact);
+
+ // Si erreur, on passe au suivant
+ if( !associatedContact )
+ continue;
+
+ /* (3) On récupère la mini-fiche clone si existe */
+ var clone = null;
+
+ // Pour chaque mini-fiche
+ for( var i in miniData ){
+
+ // on récupère le contact associé (si on est dans `call`, celui dans la tranche avec `sms` / et inversement)
+ contactData = lsi.get('p_contacts', miniData[i].contact);
+
+ if( !contactData )
+ continue;
+
+ // meme pseudo
+ hasSameUsername = contactData.username.length > 0 && associatedContact.username === contactData.username;
+ // meme lien de contact
+ hasSameLink = !isNaN(contactData.existing) && associatedContact.existing === contactData.existing;
+
+ // si ont le même contact, alors on enregistre le clone (sauf si la même fiche)
+ ( hasSameUsername || hasSameLink ) && ( clone = miniData[i] );
+
+ if( clone !== null )
+ break;
+
+ }
+
+
+ /* (4) Si c'est le clone qui a été modifié en dernier, on ne fait rien */
+ var fiche_ts = ( ficheData[key].hasOwnProperty('timestamp') ) ? ficheData[key].timestamp : 0;
+ var mini_ts = ( clone instanceof Object && clone.hasOwnProperty('timestamp') ) ? clone.timestamp : 0;
+
+ if( clone === null )
+ continue;
+
+
+
+ /* (5.1) Si clone modifiée en dernier > On copie les données de la mini (CLONE) dans la FICHE */
+ var copied;
+ if( mini_ts > fiche_ts ){
+
+ console.warn('copying mini#'+clone.uid+' to fiche#'+ficheData[key].uid);
+ copied = ficheData[key];
+ copied.age = clone.age;
+ copied.sexe = clone.sexe;
+ copied.loc = clone.loc;
+ copied.reltype = clone.reltype;
+ copied.reltypeSpecial = clone.reltypeSpecial;
+ copied.timestamp = Date.now();
+ lsi.set('p_fiches', copied.uid, copied);
+
+ clone.timestamp = copied.timestamp;
+ lsi.set('p_mini-fiches', clone.uid, clone);
+
+ /* (5.2) Si fiche modifiée en dernier > On copie les données de la FICHE dans la mini (CLONE) */
+ }else if( fiche_ts > mini_ts ){
+
+ console.warn('copying fiche#'+ficheData[key].uid+' to mini#'+clone.uid);
+ copied = clone;
+ copied.age = ficheData[key].age;
+ copied.sexe = ficheData[key].sexe;
+ copied.loc = ficheData[key].loc;
+ copied.reltype = ficheData[key].reltype;
+ copied.reltypeSpecial = ficheData[key].reltypeSpecial;
+ copied.timestamp = Date.now();
+ lsi.set('p_mini-fiches', copied.uid, copied);
+
+ ficheData[key].timestamp = copied.timestamp;
+ lsi.set('p_fiches', ficheData[key].uid, ficheData[key]);
+
+ }
}
+ }
- /* (4) Si c'est le clone qui a été modifié en dernier, on ne fait rien */
- var fiche_ts = ( ficheData[key].hasOwnProperty('timestamp') ) ? ficheData[key].timestamp : 0;
- var clone_ts = ( clone instanceof Object && clone.hasOwnProperty('timestamp') ) ? clone.timestamp : 0;
- if( clone === null || clone_ts > fiche_ts )
- continue;
- /* (5) On copie les données de la FICHE dans le CLONE */
- var obj = ficheData[key];
- obj.uid = clone.uid;
- obj.timestamp = Date.now();
- lsi.set('p_fiches', clone.uid, obj);
+ { /* (4) Gestion des fiches dupliquées
+ ---------------------------------------------------------*/
+ ficheData = lsi.export('p_fiches');
+
+ for( var key in ficheData ){
+
+ /* (1) On récupère le contact associé */
+ var associatedContact = lsi.get('p_contacts', ficheData[key].contact);
+
+ // Si erreur, on passe au suivant
+ if( !associatedContact )
+ continue;
+
+ /* (3) On récupère la/les autre(s) fiche(s) (clone(s)) */
+ var clone = null;
+ var inCall = parseInt( ficheData[key].uid ) < this.top_size; // vrai si dans les APPELS, sinon dans les SMS
+
+ for( var i in ficheData ){
+
+ // si on est pas dans le bonne tranche, on passe au suivant
+ if( inCall && i < this.top_size || !inCall && i >= this.top_size )
+ continue;
+
+ // on récupère le contact associé (si on est dans `call`, celui dans la tranche avec `sms` / et inversement)
+ contactData = lsi.get('p_contacts', ficheData[i].contact);
+
+ if( i == key || !contactData )
+ continue;
+
+ // meme pseudo
+ hasSameUsername = contactData.username.length > 0 && associatedContact.username === contactData.username;
+ // meme lien de contact
+ hasSameLink = !isNaN(contactData.existing) && associatedContact.existing === contactData.existing;
+
+ // si ont le même contact, alors on enregistre le clone (sauf si la même fiche)
+ ( hasSameUsername || hasSameLink ) && ( clone = ficheData[i] );
+
+ if( clone !== null )
+ break;
+
+ }
+
+
+ /* (4) Si c'est le clone qui a été modifié en dernier, on ne fait rien */
+ var fiche_ts = ( ficheData[key].hasOwnProperty('timestamp') ) ? ficheData[key].timestamp : 0;
+ var clone_ts = ( clone instanceof Object && clone.hasOwnProperty('timestamp') ) ? clone.timestamp : 0;
+ if( clone === null || clone_ts > fiche_ts )
+ continue;
+
+ console.warn('copying fiche#'+ficheData[key].uid+' to fiche#'+clone.uid);
+
+
+ /* (5) On copie les données de la FICHE dans le CLONE */
+ var copied = ficheData[key];
+ copied.uid = clone.uid;
+ copied.timestamp = Date.now();
+ lsi.set('p_fiches', copied.uid, copied);
+
+ ficheData[key].timestamp = copied.timestamp;
+ lsi.set('p_fiches', ficheData[key].uid, ficheData[key]);
+
+ }
}
+
+
console.groupEnd();
};
diff --git a/js/includes/input-phone-mini.js b/js/includes/input-phone-mini.js
index 8082c2a..e6c7ceb 100644
--- a/js/includes/input-phone-mini.js
+++ b/js/includes/input-phone-mini.js
@@ -65,6 +65,7 @@ inputPhoneMini.prototype.fieldsToStorage = function(){
var obj = {
uid: parseInt(deflated.uid),
+ contact: parseInt(deflated.uid),
sexe: deflated.sexe, // [0] Homme, [1] Femme, [2] Indéterminé
age: deflated.age,
studies: deflated.studies,
@@ -292,7 +293,6 @@ inputPhoneMini.prototype.sync = function(){
var contactData = lsi.export('p_contacts');
var ficheData, miniData;
-
/* (2) On enregistre les contacts qui ne sont pas déja dans les FICHES */
ficheIndexes = lsi.keys('p_fiches');
@@ -343,6 +343,8 @@ inputPhoneMini.prototype.sync = function(){
}
+
+
console.groupEnd();
};
diff --git a/js/includes/min/input-facebook-fiche.js b/js/includes/min/input-facebook-fiche.js
index 1a29d30..c7364c2 100644
--- a/js/includes/min/input-facebook-fiche.js
+++ b/js/includes/min/input-facebook-fiche.js
@@ -4,13 +4,13 @@ reltypeSpecial:b.reltypeSpecial,city:b.city,quartier:b.quartier,cp:b.cp,loc:b.lo
inputFacebookFiche.prototype.add=function(a){if(null==a.uid||isNaN(a.uid)||null==a.contact||isNaN(a.contact))return!1;a.city=null!=a.city?a.city:this.defaultData.city;a.quartier=null!=a.quartier?a.quartier:this.defaultData.quartier;a.cp=null!=a.cp?a.cp:this.defaultData.cp;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?a.studies:this.defaultData.studies;a.age=null!=a.age?a.age:this.defaultData.age;a.sexe=null!=a.sexe?a.sexe:this.defaultData.sexe;a.famsit=null!=a.famsit?a.famsit:this.defaultData.famsit;a.reltype=null!=a.reltype?a.reltype:this.defaultData.reltype;a.loc=null!=a.loc?a.loc:this.defaultData.loc;a.context=null!=a.context?a.context:this.defaultData.context;a.freq=null!=a.freq?a.freq:this.defaultData.freq;a.connect=null!=a.connect?a.connect:
-this.defaultData.connect;var c=lsi.get("f_contacts",a.contact);if(!1===c)return!1;if(!isNaN(c.existing)){var b=lsi.get("f_friends",c.existing);c.username=b.name;a.age=b.age;a.sexe=b.sexe;a.loc=b.dist;isNaN(b.reltype)?(a.reltype=10,a.reltypeSpecial=b.reltype):(a.reltype=b.reltype,a.reltypeSpecial="");null!=b.studies2&&(a.studies=b.studies2,a.job=b.job,a.famsit=b.famsit,a.city=b.city,a.cp=b.cp,a.quartier=b.quartier,a.duration[0]=b.duration[0],a.duration[1]=b.duration[1],a.context=b.context,a.contextSpecial=
-b.contextExtra,a.connect=b.connect,a.connectSpecial=b.connectExtra,a.freq=b.freq)}this.container.innerHTML+=fFicheBuilder.build({name:c.username,countcall:c.countcall,countsms:c.countsms,uid:a.uid,contact:a.contact,city:a.city,quartier:a.quartier,cp:a.cp,duration0:a.duration[0],duration1:a.duration[1],reltypespecial:a.reltypeSpecial,contextspecial0:a.contextSpecial[0],contextspecial1:a.contextSpecial[1],contextspecial2:a.contextSpecial[2],connectspecial0:a.connectSpecial[0],connectspecial1:a.connectSpecial[1]});
-c=$('[data-sublink="facebook"] article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="job"]>option[value="'+a.job+'"]');null!=c&&c.setAttribute("selected","selected");c=$('[data-sublink="facebook"] article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="studies"]>option[value="'+a.studies+'"]');null!=c&&c.setAttribute("selected","selected");c=$('[data-sublink="facebook"] article.fiche-relation input[data-name="uid"][value="'+
-a.uid+'"] ~ h5>span>select[data-name="age"]>option[value="'+a.age+'"]');null!=c&&c.setAttribute("selected","selected");b=$$('[data-sublink="facebook"] article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]');for(c=0;cinput[type="radio"][data-name="famsit"]');
-for(c=0;cinput[type="radio"][data-name="reltype"]');for(c=0;cinput[type="radio"][data-name="loc"]');
-for(c=0;cinput[type="radio"][data-name="context"]');for(c=0;cinput[type="radio"][data-name="freq"]');
-for(c=0;cinput[type="radio"][data-name="connect"]');for(c=0;cspan>select[data-name="job"]>option[value="'+a.job+'"]');null!=c&&c.setAttribute("selected","selected");c=$('[data-sublink="facebook"] article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="studies"]>option[value="'+a.studies+'"]');null!=c&&c.setAttribute("selected",
+"selected");c=$('[data-sublink="facebook"] article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="age"]>option[value="'+a.age+'"]');null!=c&&c.setAttribute("selected","selected");b=$$('[data-sublink="facebook"] article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]');for(c=0;cinput[type="radio"][data-name="famsit"]');for(c=0;cinput[type="radio"][data-name="reltype"]');for(c=0;cinput[type="radio"][data-name="loc"]');for(c=0;cinput[type="radio"][data-name="context"]');for(c=0;cinput[type="radio"][data-name="freq"]');for(c=0;cinput[type="radio"][data-name="connect"]');for(c=0;c=d)break}var a=lsi["export"]("f_fiches"),f;
for(f in a)if(d=lsi.get("f_contacts",a[f].contact)){c=null;e=parseInt(a[f].uid)=this.top_size)&&(b=lsi.get("f_contacts",a[g].contact),g!=f&&b)){var h=0d||(d=a[f],d.uid=c.uid,d.timestamp=
diff --git a/js/includes/min/input-html-facebook-data.js b/js/includes/min/input-html-facebook-data.js
index fc8e5ad..78fae67 100644
--- a/js/includes/min/input-html-facebook-data.js
+++ b/js/includes/min/input-html-facebook-data.js
@@ -1,3 +1,3 @@
var fContactBuilder=new HTMLBuilder;fContactBuilder.setLayout("
\n\t\n\t\n\t ou \n\t \n\t\n
\n\n");
var fMiniFicheBuilder=new HTMLBuilder;fMiniFicheBuilder.setLayout("\n\t\n\t\n\t