From 0b6702222fc456430fa7c891745ce46819fbd74f Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Tue, 18 Oct 2016 13:09:39 +0200 Subject: [PATCH] Correction arborescence + avancement feature --- index.php | 2 +- js/action-script-min.js | 8 - js/includes/input-phone-fiche.js | 265 ++++++++++++++------------ js/includes/input-phone-mini.js | 7 +- js/includes/min/input-phone-fiche.js | 9 +- {router => manager/router}/Route.php | 4 +- {router => manager/router}/Router.php | 2 +- 7 files changed, 160 insertions(+), 137 deletions(-) delete mode 100644 js/action-script-min.js rename {router => manager/router}/Route.php (97%) mode change 100755 => 100644 rename {router => manager/router}/Router.php (98%) mode change 100755 => 100644 diff --git a/index.php b/index.php index ee7436e..b7f6a8e 100755 --- a/index.php +++ b/index.php @@ -2,7 +2,7 @@ require_once __ROOT__.'/manager/autoloader.php'; - use \router\Router; + use \manager\router\Router; use \manager\ModuleRequest; use \manager\ModuleResponse; use \manager\ManagerError; diff --git a/js/action-script-min.js b/js/action-script-min.js deleted file mode 100644 index 229a057..0000000 --- a/js/action-script-min.js +++ /dev/null @@ -1,8 +0,0 @@ -var DOM,pageManager,api,Notification,navSubMenu=function(a){var c=$("#MENU-SIDE > span[data-link="+pageManager.page+'] + div.sub > span[data-sublink="'+pageManager.vars[0]+'"]'),b=null,b=a instanceof Element?a:null,b="string"==typeof a?$("#MENU-SIDE > span[data-link="+pageManager.page+'] + div.sub > span[data-sublink="'+a+'"]'):b,b=null==b?$("#MENU-SIDE > span[data-link="+pageManager.page+"] + div.sub > span[data-sublink]"):b;if(null==b)return!1;null!=c&&c.remClass("active");c=$$("#CONTAINER > section[data-sublink].active"); -for(a=0;a section[data-sublink="'+b.getData("sublink")+'"]'),a=0;a #MENU-SIDE > span[data-link="'+pageManager.page+'"]'),b=null,b=a instanceof Element?a:null,b="string"==typeof a?$('#WRAPPER > #MENU-SIDE > span[data-link="'+ -a+'"]'):b,b=null==b?$('#WRAPPER > #MENU-SIDE > span[data-link="'+pageManager.pagelist[0]+'"]'):b;if(null==b)return!1;null!=c&&c.remClass("active");null!=b&&b.addClass("active");b.getData("link")&&(DOM.HEADER.addClass("loading"),pageManager.setPage(b.getData("link")),pageManager.activeXHR.addEventListener("loadend",function(){1<=pageManager.vars.length&&null!=$('#CONTAINER > section[data-sublink="'+pageManager.vars[0]+'"]')?navSubMenu(pageManager.vars[0]):navSubMenu(null);var a=$("#MENU-SIDE > span[data-link="+ -pageManager.page+"] + div.sub");null!=a&&a.addEventListener("click",function(a){for(a=a.target;a!=document.body&&!a.getData("sublink");)a=a.parentNode;a.getData("sublink")&&navSubMenu(a)},!1);DOM.HEADER.remClass("loading")},!1))};DOM={WRAPPER:$("body > #WRAPPER"),HEADER:$("body > #WRAPPER > #HEADER"),MENUSIDE:$("body > #WRAPPER > #MENU-SIDE"),CONTAINER:$("body > #WRAPPER > #CONTAINER")};api=new APIClass("/api/");Notification=new NotificationClass($("#notification-container")); -Notification.defaultTimeout=4E3; -Notification.errorCodes={"-1":"Erreur de r\u00e9seau, veuillez recharger la page et r\u00e9essayer",0:"Erreur interne",1:"Erreur interne",2:"Erreur interne",3:"Le fichier est introuvable",4:"Erreur interne",5:"Erreur interne",6:"Erreur interne",7:"Erreur interne",8:"Erreur interne",9:"Certaines donn\u00e9es sont manquantes",10:"Erreur interne",11:"Erreur interne",12:"Erreur interne",13:"Erreur interne",14:"Erreur interne",15:"Erreur interne",16:"Vous n'avez pas la permission d'effectuer cette action",17:"Le t\u00e9l\u00e9chargement a \u00e9chou\u00e9", -18:"Le fichier est invalide (format incorrect)"};lsi.setStorage(localStorage);DOM.MENUSIDE.addEventListener("click",function(a){for(a=a.target;a!=document.body&&!a.getData("link");)a=a.parentNode;a.getData("link")&&navMenu(a.getData("link"))},!1);function reload(){navMenu(pageManager.page)}var LOGIN={show:document.getElementById("user-data"),hide:document.getElementById("login-close"),page:document.getElementById("LOGIN")}; -LOGIN.show.addEventListener("click",function(a){LOGIN.page.className="active"},!1);LOGIN.hide.addEventListener("click",function(a){LOGIN.page.className=""},!1);api.send({path:"download/menu"},function(a){if(0==a.ModuleError){pagelist=[];for(var c=0;c FICHE UPDATE'); + // console.warn('fiche-ts', existingData.timestamp, obj.timestamp); obj.timestamp = Date.now(); - }else if( existingData['timestamp'] == undefined ) + }else if( existingData['timestamp'] == undefined ){ + // console.warn('fiche-refresh'); obj.timestamp = this.defaultData.timestamp; + } /* (7) On enregistre les données dans le 'localStorage' */ lsi.set('p_fiches', obj.uid, obj); @@ -341,7 +344,7 @@ inputPhoneFiche.prototype.sync = function(){ /* (2) Contiendra les uids des fiches qui seront crées */ var addedFicheUids = []; - var ficheData, contactData, miniData; + var ficheData, contactData, miniData, i; } @@ -390,113 +393,21 @@ inputPhoneFiche.prototype.sync = function(){ ficheData = lsi.export('p_fiches'); miniData = lsi.export('p_mini-fiches'); - // Pour chaque fiche - for( var key in ficheData ){ + // Pour chaque mini-fiche + for( var key in miniData ){ /* (1) On récupère le contact associé */ - var associatedContact = lsi.get('p_contacts', ficheData[key].contact); + var associatedContact = lsi.get('p_contacts', miniData[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; + /* (3) On récupère les/la fiche(s) clone(s) si existe */ + var clone = []; - // 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, mini_ts-global_start_timestamp, fiche_ts-global_start_timestamp); - 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, fiche_ts-global_start_timestamp, mini_ts-global_start_timestamp); - 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) 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; + // Pour chaque fiche + for( i in ficheData ){ // 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); @@ -510,37 +421,155 @@ inputPhoneFiche.prototype.sync = function(){ 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; + ( hasSameUsername || hasSameLink ) && clone.push( ficheData[i] ); } - - /* (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 ) + // si aucun clone, on quitte + if( clone.length === 0 ) continue; - console.warn('copying fiche#'+ficheData[key].uid+' to fiche#'+clone.uid, fiche_ts-global_start_timestamp, clone_ts-global_start_timestamp); + + /* (4) On récupère le modèle (dernier modifié) */ + var mini_ts = ( miniData[key].hasOwnProperty('timestamp') ) ? miniData[key].timestamp : 0; + + var clones_ts = []; // contiendra les temps des clones + var mini_update = true; // true si dernier modifié + + for( i in clone ){ + clones_ts[i] = clone[i].hasOwnProperty('timestamp') ? clone[i].timestamp : 0; + mini_update = mini_update && mini_ts > clones_ts[i]; + } + + var last_index = clones_ts.indexOf( Math.max.apply(Math, clones_ts) ); - /* (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]); + + + + /* (5.1) Si mini est le modèle -> On copie les données de MINI dans les CLONES */ + var copied; + if( mini_update ){ + + for( i in clone ){ + + console.warn('copying mini#'+miniData[key].uid+' to fiche#'+clone[i].uid, mini_ts-global_start_timestamp, clones_ts[i]-global_start_timestamp); + copied = clone[i]; + copied.age = miniData[key].age; + copied.sexe = miniData[key].sexe; + copied.loc = miniData[key].loc; + copied.reltype = miniData[key].reltype; + copied.reltypeSpecial = miniData[key].reltypeSpecial; + // copied.timestamp = Date.now(); + console.warn(copied); + lsi.set('p_fiches', copied.uid, copied); + + } + + // clone.timestamp = copied.timestamp+1; + // lsi.set('p_mini-fiches', clone.uid, clone); + + /* (5.2) Si un clone est le modèle > On copie les données de la FICHE dans la fiche (autres clones) et dans MINI */ + }else if( last_index > -1 ){ + + // {1} On copie dans MINI // + console.warn('copying fiche#'+clone[last_index].uid+' to mini#'+miniData[key].uid, clones_ts[last_index]-global_start_timestamp, mini_ts-global_start_timestamp); + copied = miniData[key]; + copied.age = clone[last_index].age; + copied.sexe = clone[last_index].sexe; + copied.loc = clone[last_index].loc; + copied.reltype = clone[last_index].reltype; + copied.reltypeSpecial = clone[last_index].reltypeSpecial; + // copied.timestamp = Date.now(); + lsi.set('p_mini-fiches', copied.uid, copied); + + // {2} On copie dans les autres fiches // + for( i in clone ){ + // sauf le modele + if( i == last_index ) continue; + + console.warn('copying fiche#'+clone[last_index].uid+' to fiche#'+clone[i].uid, clones_ts[last_index]-global_start_timestamp, clones_ts[i]-global_start_timestamp); + copied = clone[last_index]; + copied.uid = clone[i].uid; + // copied.timestamp = Date.now(); + lsi.set('p_fiches', copied.uid, copied); + + } + + } } } + // { /* (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, fiche_ts-global_start_timestamp, clone_ts-global_start_timestamp); + // + // + // /* (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 d0e309e..13f8584 100644 --- a/js/includes/input-phone-mini.js +++ b/js/includes/input-phone-mini.js @@ -82,11 +82,14 @@ inputPhoneMini.prototype.fieldsToStorage = function(){ // On met à jour la date de modification, si on a pas qu'@uid de différent if( diff(existingData, obj, ['hash', 'valid', 'timestamp']).length > 0 ){ console.log( diff(existingData, obj, ['hash', 'valid', 'timestamp']) ); - console.warn('> MINI UPDATE'); + // console.warn('mini-ts', existingData.timestamp, obj.timestamp); obj.timestamp = Date.now(); - }else if( existingData['timestamp'] == undefined ) + + }else if( existingData['timestamp'] == undefined ){ + // console.warn('mini-refresh'); obj.timestamp = this.defaultData.timestamp; + } /* (9) On enregistre les données dans le 'localStorage' */ diff --git a/js/includes/min/input-phone-fiche.js b/js/includes/min/input-phone-fiche.js index 0635c65..51165f1 100644 --- a/js/includes/min/input-phone-fiche.js +++ b/js/includes/min/input-phone-fiche.js @@ -12,11 +12,10 @@ a.uid+'"] ~ h5>input[type="radio"][data-name="famsit"]');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=e)break}a=lsi["export"]("p_fiches");e=lsi["export"]("p_mini-fiches"); -for(var f in a){var g=lsi.get("p_contacts",a[f].contact);if(g){var c=null,h;for(h in e)if(b=lsi.get("p_contacts",e[h].contact))if(d=0d?(console.warn("copying mini#"+c.uid+" to fiche#"+a[f].uid,g-global_start_timestamp,d-global_start_timestamp),d=a[f], -d.age=c.age,d.sexe=c.sexe,d.loc=c.loc,d.reltype=c.reltype,d.reltypeSpecial=c.reltypeSpecial,d.timestamp=Date.now(),lsi.set("p_fiches",d.uid,d)):d>g&&(console.warn("copying fiche#"+a[f].uid+" to mini#"+c.uid,d-global_start_timestamp,g-global_start_timestamp),d=c,d.age=a[f].age,d.sexe=a[f].sexe,d.loc=a[f].loc,d.reltype=a[f].reltype,d.reltypeSpecial=a[f].reltypeSpecial,d.timestamp=Date.now(),lsi.set("p_mini-fiches",d.uid,d)))}}a=lsi["export"]("p_fiches");for(f in a)if(g=lsi.get("p_contacts",a[f].contact)){c= -null;e=parseInt(a[f].uid)=this.top_size)&&(b=lsi.get("p_contacts",a[h].contact),h!=f&&b&&(d=0d||(console.warn("copying fiche#"+a[f].uid+" to fiche#"+c.uid,d-global_start_timestamp,e-global_start_timestamp), -d=a[f],d.uid=c.uid,lsi.set("p_fiches",d.uid,d))}console.groupEnd()};inputPhoneFiche.prototype.nav=function(a){if(!(a instanceof Element&&a.getData("n"))||isNaN(a.getData("n"))||"p_nav-fiche"!=a.parentNode.id)return!1;for(var c=$$('[data-sublink="phone"] #p_nav-fiche > span.active'),b=0;b=d)break}var a=lsi["export"]("p_fiches"),c=lsi["export"]("p_mini-fiches"), +g;for(g in c){var h=lsi.get("p_contacts",c[g].contact);if(h){d=[];for(e in a)b=lsi.get("p_contacts",a[e].contact),e!=g&&b&&(k=0h[e];b=h.indexOf(Math.max.apply(Math,h));if(f)for(e in d)console.warn("copying mini#"+c[g].uid+" to fiche#"+ +d[e].uid,k-global_start_timestamp,h[e]-global_start_timestamp),f=d[e],f.age=c[g].age,f.sexe=c[g].sexe,f.loc=c[g].loc,f.reltype=c[g].reltype,f.reltypeSpecial=c[g].reltypeSpecial,console.warn(f),lsi.set("p_fiches",f.uid,f);else if(-1 span.active'),b=0;bAPPELS");20>e&&b'+(e%20+1)+"  ":(20==e&&(this.nav_container.innerHTML+='
   SMS   '),this.nav_container.innerHTML+=''+(e%20+1)+"")}for(var d in a)c=$('[data-sublink="phone"] #p_nav-fiche [data-n="'+a[d].uid+'"]'),null!=c&&(!0===a[d].valid?c.addClass("done"):c.remClass("done"));this.nav($('[data-sublink="phone"] #p_nav-fiche [data-n="'+this.selected+'"]'))}; inputPhoneFiche.prototype.check=function(a){if(2>a.city.length||isNaN(parseInt(a.duration[0]))&&0a.reltypeSpecial.length|| diff --git a/router/Route.php b/manager/router/Route.php old mode 100755 new mode 100644 similarity index 97% rename from router/Route.php rename to manager/router/Route.php index 987d2d8..0fdcc15 --- a/router/Route.php +++ b/manager/router/Route.php @@ -3,7 +3,7 @@ /* Classe de gestion de route (match) */ /**************************************/ -namespace router; +namespace manager\router; class Route{ @@ -60,4 +60,4 @@ class Route{ } -?> \ No newline at end of file +?> diff --git a/router/Router.php b/manager/router/Router.php old mode 100755 new mode 100644 similarity index 98% rename from router/Router.php rename to manager/router/Router.php index 0923396..817d61f --- a/router/Router.php +++ b/manager/router/Router.php @@ -3,7 +3,7 @@ /* Classe de gestion des routes (URL/ressources) */ /*************************************************/ -namespace router; +namespace manager\router; class Router{ // ATTRIBUTS