From 40f156bedfd76fcefbd78f52590abba457bebffb Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Fri, 27 May 2016 12:13:19 +0200 Subject: [PATCH] =?UTF-8?q?Gestion=20de=20la=20s=C3=A9lection=20d'un=20id-?= =?UTF-8?q?sujet=20d=C3=A9ja=20existant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/includes/input-html-phone-data-min.js | 2 +- js/includes/input-html-phone-data.js | 1 + js/includes/input-phone-contact-min.js | 2 +- js/includes/input-phone-contact.js | 2 +- manager/module/subject.php | 57 +- src/dynamic/survey_db/data | 1 + src/dynamic/survey_db/index | 2 +- src/dynamic/uniqid | 2 +- view/input.php | 27 +- view/js/input-min.js | 52 +- view/js/input.js | 1305 ++++++++++------------ 11 files changed, 731 insertions(+), 722 deletions(-) diff --git a/js/includes/input-html-phone-data-min.js b/js/includes/input-html-phone-data-min.js index 6c148da..b205743 100644 --- a/js/includes/input-html-phone-data-min.js +++ b/js/includes/input-html-phone-data-min.js @@ -1,3 +1,3 @@ -var pContactBuilder=new HTMLBuilder;pContactBuilder.setLayout("

\n\t\n\t\n\t\n\t\n\t\n\t \n\t\n\tou\n\t \n\t\n

\n\n"); +var pContactBuilder=new HTMLBuilder;pContactBuilder.setLayout("

\n\t\n\t\n\t\n\t\n\t\n\t \n\t\n\tou\n\t \n\t\n

\n\n"); var pMiniFicheBuilder=new HTMLBuilder;pMiniFicheBuilder.setLayout("
\n\t\n\t\n\t

@name

\n\t
\t\t\t
\t
\t\t@countcall appels\t
\t
\t\t@countsms sms\t
\t
\n\t\t\n\t\t   \n\t\t   \n\t
\n\t
\n\t\t\n\t
\n\t
\n\t\t\n\t
\n\t

Type de relation

\n\t
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t
\n\t

O\u00f9 habite t-elle/il\u00a0?

\n\t
\n\t\t\u00c0 combien de temps est-ce de chez vous ?
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t
\n
"); var pFicheBuilder=new HTMLBuilder;pFicheBuilder.setLayout("
\n\t\n\t\n\t

@name

\n\t
\t\t@countcall appels\t
\t
\t\t@countsms sms\t
\t
\n\t\t\n\t\t   \n\t\t   \n\t
\n\t
\n\t\t\n\t
\n\t
\n\t\t\n\t
\n\t
\n\t\tSituation familiale:
\n\t\t
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   \n\t
\n\t
\n\t\t\n\t
\n\t

Type de relation

\n\t
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t
\n\t

O\u00f9 habite t-elle/il\u00a0?

\n\t
\n\t\t\n\t\t
\n\t
\n\t
\n\t\tSi Toulouse : \n\t
\n\t
\n\t\t\u00c0 combien de temps est-ce de chez vous ?
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t
\n\t
\n\t\tDepuis quand connaissez-vous cette personne ?

\n\t\tmois\n\t\tet    ans.\n\t
\n\t

Contexte de rencontre

\n\t
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t\t   
\n\t
\n\t
\n\t\t   
\n\t\t   
\n\t\t   
\n\t
\n\t

Avec quelle fr\u00e9quence discutez-vous avec cette personne\u00a0?

\n\t
\n\t\tFace \u00e0 face
\n\t\t   \n\t\t   \n\t\t   \n\t\t   \n\t\t   \n\t
\n\t
\n\t\tT\u00e9l\u00e9phone ou skype et \u00e9quivalent
\n\t\t   \n\t\t   \n\t\t   \n\t\t   \n\t\t   \n\t
\n\t
\n\t\tSMS, et \u00e9quivalents
\n\t\t   \n\t\t   \n\t\t   \n\t\t   \n\t\t   \n\t
\n\t
\n\t\tCourrier \u00e9lectronique
\n\t\t   \n\t\t   \n\t\t   \n\t\t   \n\t\t   \n\t
\n\t
\n\t\tFacebook ou autre r\u00e9seau social
\n\t\t   \n\t\t   \n\t\t   \n\t\t   \n\t\t   \n\t
\n\t

Comment \u00eates-vous \u00ab\u00a0connect\u00e9\u00a0\u00bb \u00e0 cette personne\u00a0?

\n\t
\n\t\tSes coordonn\u00e9es sont dans votre carnet d\u2019adresse
\n\t\t   \n\t\t   \n\t
\n\t
\n\t\tSon num\u00e9ro de mobile est enregistr\u00e9 sur votre mobile (ou vous-m\u00eames \u00eates sur le sien)
\n\t\t   \n\t\t   \n\t
\n\t
\n\t\tElle figure parmi vos amis facebook
\n\t\t   \n\t\t   \n\t
\n\t
\n\t\tElle figure parmi vos amis facebook et vous interagissez avec elle sur ce dispositif r\u00e9guli\u00e8rement
\n\t\t   \n\t\t   \n\t
\n\t
\n\t\tVous le suivez sur Twitter
\n\t\t   \n\t\t   \n\t
\n\t
\n\t\tVous communiquez avec cette personne sur Twitter
\n\t\t   \n\t\t   \n\t
\n\t
\n\t\tVous communiquez dans autre r\u00e9seau social : \n\t
\n\t
\n\t\tVous communiquez dans un autre dispositif (blogs, jeu vid\u00e9o ou autre) : \n\t
\n
\n"); diff --git a/js/includes/input-html-phone-data.js b/js/includes/input-html-phone-data.js index 639968e..015f80e 100644 --- a/js/includes/input-html-phone-data.js +++ b/js/includes/input-html-phone-data.js @@ -16,6 +16,7 @@ pContactBuilder.setLayout( "\t - + + + @@ -189,7 +205,14 @@

- + + +

diff --git a/view/js/input-min.js b/view/js/input-min.js index 0a41b20..aed7237 100644 --- a/view/js/input-min.js +++ b/view/js/input-min.js @@ -1,24 +1,24 @@ var sField=$("#search-field"),sSubmit=$("#search-subject"),sList=$('section[data-sublink="survey"] ul[data-list]'); -sSubmit.addEventListener("click",function(b){api.send({path:"subject/search",name:sField.value},function(a){if(0!=a.ModuleError)return Notification.error("Erreur","La recherche a \u00e9chou\u00e9."),!1;console.log(a);var c="",b;for(b in a.results)c+="
  • ",c+="
    SUJET
    ",c+="
    ",c+="
    "+ -a.results[b].name+"
    ",c+="
    "+a.results[b].creation+"
    ",c+="
    ",c+="
    ",c+="
    ",c+="
    ",c+="
  • ";sList.innerHTML=c})},!1); +sSubmit.addEventListener("click",function(c){api.send({path:"subject/search",name:sField.value},function(b){if(0!=b.ModuleError)return Notification.error("Erreur","La recherche a \u00e9chou\u00e9."),!1;console.log(b);var a="",e;for(e in b.results)a+="
  • ",a+="
    SUJET
    ",a+="
    ",a+="
    "+ +b.results[e].name+"
    ",a+="
    "+b.results[e].creation+"
    ",a+="
    ",a+="
    ",a+="
    ",a+="
    ",a+="
  • ";sList.innerHTML=a})},!1); var pSubjectManager,pContactManager,pMiniManager,pFicheManager,pMatriceManager; -function pDynamicUpdate(b){var a=b instanceof Element,c=a&&"INPUT"==b.tagName&&"submit"==b.type,g=a&&"SPAN"==b.tagName&&("p_nav-mini"==b.parentNode.id||"p_nav-fiche"==b.parentNode.id),a=a&&"SPAN"==b.tagName&&"p_nav-contact"==b.parentNode.id;if(!c&&!g&&!a&&!0!==b)return!1;console.log("> dynamic update");pMiniManager.fieldsToStorage();pFicheManager.fieldsToStorage();pContactManager.fieldsToStorage();pMatriceManager.fieldsToStorage();pFicheManager.sync();pMiniManager.sync();pMiniManager.storageToFields(); -pFicheManager.storageToFields();pMatriceManager.storageToFields();(c||a)&&pContactManager.storageToFields()} -include("/js/includes/input-phone-subject-min.js",function(){include("/js/includes/input-phone-contact-min.js",function(){include("/js/includes/input-phone-mini-min.js",function(){include("/js/includes/input-phone-fiche-min.js",function(){include("/js/includes/input-phone-matrice-min.js",function(){pSubjectManager=new inputPhoneSubject($('[data-sublink="phone"] article.subject-panel [data-name="tmp_id"]'),$('[data-sublink="phone"] article.subject-panel [data-name="subject_id"]'),$('[data-sublink="phone"] article.subject-panel [data-name="number"]'), -$('[data-sublink="phone"] article.subject-panel [data-name="submit"]'));pSubjectManager.attach();pContactManager=new inputPhoneContact($('[data-sublink="phone"] article.contact-panel'),$('[data-sublink="phone"] #p_nav-contact'));pContactManager.attach(pDynamicUpdate);pMiniManager=new inputPhoneMini($('[data-sublink="phone"] article.mini-relation-panel'),$('[data-sublink="phone"] #p_nav-mini'));pMiniManager.attach(pDynamicUpdate);pFicheManager=new inputPhoneFiche($('[data-sublink="phone"] article.relation-panel'), -$('[data-sublink="phone"] #p_nav-fiche'));pFicheManager.attach(pDynamicUpdate);pMatriceManager=new inputPhoneMatrice($('[data-sublink="phone"] article.matrice-panel'));pMatriceManager.attach(pDynamicUpdate);var b=new ShortcutManager;b.append("s+n+a+k+e",function(){pMatriceManager.snake()});b.listen();$('[data-sublink="phone"] input#p_call_log-import[type="file"]').addEventListener("click",function(a){a.target.value=null},!1);$('[data-sublink="phone"] input#p_call_log-import[type="file"]').addEventListener("change", -function(a){a={path:"upload/call_log",phone_number:$('[data-sublink="phone"] #p_subject_phone_number').value,file:a.target.files[0]};api.send(a,function(a){console.log(a);var b=null;if(0!=a.ModuleError)9==a.ModuleError?Notification.error("Erreur","Il est n\u00e9cessaire de saisir les informations du sujet avant d'exporter son journal d'appel"):Notification.error("Erreur",a.ModuleError);else{b=Notification.info("Info","Chargement du journal d'appel");pSubjectManager.tmp_id.value=a.tmp_id;pSubjectManager.fieldsToStorage(); -pSubjectManager.storageToFields();for(var e=0;e GATHERING ALL DATA");pSubjectManager.fieldsToStorage();pContactManager.fieldsToStorage();pMiniManager.fieldsToStorage();pFicheManager.fieldsToStorage();if(!pSubjectManager.check())return Notification.warning("Attention","Vous devez saisir les informations du sujet"),!1;a=lsi["export"]("p_mini-fiches");var b=0,g;for(g in a)if(!isNaN(g)&&(b++, -!a[g].valid))return Notification.warning("Attention","La fiche rapide "+b+" est incompl\u00e8te et/ou incorrecte"),!1;a=lsi["export"]("p_fiches");for(g in a)if(!a[g].valid)return Notification.warning("Attention","La fiche compl\u00e8te "+(parseInt(g)+1)+" est incompl\u00e8te et/ou incorrecte"),!1;g={path:"input/phone",subject:lsi["export"]("p_subject")[0],contacts:lsi["export"]("p_contacts"),mini:lsi["export"]("p_mini-fiches"),fiches:lsi["export"]("p_fiches"),matrice:lsi["export"]("p_matrice")[0]}; -api.send(g,function(a){console.log(a);if(0!=a.ModuleError)return Notification.error("ERREUR",a.ModuleError),!1;Notification.success("OK","L'identifiant du sujet est "+a.subject_id+" ! Tout s'est bien d\u00e9roul\u00e9.",1E4);console.log(a)},!1)},!1)})})})})});var fSubjectManager,fContactManager,fMiniManager,fFicheManager,fMatriceManager; -function fDynamicUpdate(b){var a=b instanceof Element,c=a&&"INPUT"==b.tagName&&"submit"==b.type,g=a&&"SPAN"==b.tagName&&("f_nav-mini"==b.parentNode.id||"f_nav-fiche"==b.parentNode.id),a=a&&"SPAN"==b.tagName&&"f_nav-contact"==b.parentNode.id;if(!c&&!g&&!a&&!0!==b)return!1;console.log("> dynamic update");fMiniManager.fieldsToStorage();fFicheManager.fieldsToStorage();fContactManager.fieldsToStorage();fMatriceManager.fieldsToStorage();fFicheManager.sync();fMiniManager.sync();fMiniManager.storageToFields(); -fFicheManager.storageToFields();fMatriceManager.storageToFields();(c||a)&&fContactManager.storageToFields()} -include("/js/includes/input-facebook-subject-min.js",function(){include("/js/includes/input-facebook-contact-min.js",function(){include("/js/includes/input-facebook-mini-min.js",function(){include("/js/includes/input-facebook-fiche-min.js",function(){include("/js/includes/input-facebook-matrice-min.js",function(){fSubjectManager=new inputFacebookSubject($('[data-sublink="facebook"] article.subject-panel [data-name="subject_id"]'),$('[data-sublink="facebook"] article.subject-panel [data-name="submit"]')); +function pDynamicUpdate(c){var b=c instanceof Element,a=b&&"INPUT"==c.tagName&&"submit"==c.type,e=b&&"SPAN"==c.tagName&&("p_nav-mini"==c.parentNode.id||"p_nav-fiche"==c.parentNode.id),b=b&&"SPAN"==c.tagName&&"p_nav-contact"==c.parentNode.id;if(!a&&!e&&!b&&!0!==c)return!1;console.log("> dynamic update");pMiniManager.fieldsToStorage();pFicheManager.fieldsToStorage();pContactManager.fieldsToStorage();pMatriceManager.fieldsToStorage();pFicheManager.sync();pMiniManager.sync();pMiniManager.storageToFields(); +pFicheManager.storageToFields();pMatriceManager.storageToFields();(a||b)&&pContactManager.storageToFields()}var fSubjectManager,fContactManager,fMiniManager,fFicheManager,fMatriceManager; +function fDynamicUpdate(c){var b=c instanceof Element,a=b&&"INPUT"==c.tagName&&"submit"==c.type,e=b&&"SPAN"==c.tagName&&("f_nav-mini"==c.parentNode.id||"f_nav-fiche"==c.parentNode.id),b=b&&"SPAN"==c.tagName&&"f_nav-contact"==c.parentNode.id;if(!a&&!e&&!b&&!0!==c)return!1;console.log("> dynamic update");fMiniManager.fieldsToStorage();fFicheManager.fieldsToStorage();fContactManager.fieldsToStorage();fMatriceManager.fieldsToStorage();fFicheManager.sync();fMiniManager.sync();fMiniManager.storageToFields(); +fFicheManager.storageToFields();fMatriceManager.storageToFields();(a||b)&&fContactManager.storageToFields()} +api.send({path:"subject/getAll"},function(c){if(0!=c.ModuleError)return Notification.error("Erreur",c.ModuleError),!1;lsi.createDataset("all-subjects");lsi["import"]("all-subjects",c.subjects);include("/js/includes/input-phone-subject-min.js",function(){include("/js/includes/input-phone-contact-min.js",function(){include("/js/includes/input-phone-mini-min.js",function(){include("/js/includes/input-phone-fiche-min.js",function(){include("/js/includes/input-phone-matrice-min.js",function(){pSubjectManager= +new inputPhoneSubject($('[data-sublink="phone"] article.subject-panel [data-name="tmp_id"]'),$('[data-sublink="phone"] article.subject-panel [data-name="subject_id"]'),$('[data-sublink="phone"] article.subject-panel [data-name="number"]'),$('[data-sublink="phone"] article.subject-panel [data-name="submit"]'));pSubjectManager.attach();pContactManager=new inputPhoneContact($('[data-sublink="phone"] article.contact-panel'),$('[data-sublink="phone"] #p_nav-contact'));pContactManager.attach(pDynamicUpdate); +pMiniManager=new inputPhoneMini($('[data-sublink="phone"] article.mini-relation-panel'),$('[data-sublink="phone"] #p_nav-mini'));pMiniManager.attach(pDynamicUpdate);pFicheManager=new inputPhoneFiche($('[data-sublink="phone"] article.relation-panel'),$('[data-sublink="phone"] #p_nav-fiche'));pFicheManager.attach(pDynamicUpdate);pMatriceManager=new inputPhoneMatrice($('[data-sublink="phone"] article.matrice-panel'));pMatriceManager.attach(pDynamicUpdate);var b=new ShortcutManager;b.append("s+n+a+k+e", +function(){pMatriceManager.snake()});b.listen();$('[data-sublink="phone"] input#p_call_log-import[type="file"]').addEventListener("click",function(a){a.target.value=null},!1);$('[data-sublink="phone"] input#p_call_log-import[type="file"]').addEventListener("change",function(a){a={path:"upload/call_log",phone_number:$('[data-sublink="phone"] #p_subject_phone_number').value,file:a.target.files[0]};api.send(a,function(a){console.log(a);var b=null;if(0!=a.ModuleError)9==a.ModuleError?Notification.error("Erreur", +"Il est n\u00e9cessaire de saisir les informations du sujet avant d'exporter son journal d'appel"):Notification.error("Erreur",a.ModuleError);else{b=Notification.info("Info","Chargement du journal d'appel");pSubjectManager.tmp_id.value=a.tmp_id;pSubjectManager.fieldsToStorage();pSubjectManager.storageToFields();for(var c=0;c GATHERING ALL DATA");pSubjectManager.fieldsToStorage(); +pContactManager.fieldsToStorage();pMiniManager.fieldsToStorage();pFicheManager.fieldsToStorage();if(!pSubjectManager.check())return Notification.warning("Attention","Vous devez saisir les informations du sujet"),!1;a=lsi["export"]("p_mini-fiches");var b=0,c;for(c in a)if(!isNaN(c)&&(b++,!a[c].valid))return Notification.warning("Attention","La fiche rapide "+b+" est incompl\u00e8te et/ou incorrecte"),!1;a=lsi["export"]("p_fiches");for(c in a)if(!a[c].valid)return Notification.warning("Attention", +"La fiche compl\u00e8te "+(parseInt(c)+1)+" est incompl\u00e8te et/ou incorrecte"),!1;c={path:"input/phone",subject:lsi["export"]("p_subject")[0],contacts:lsi["export"]("p_contacts"),mini:lsi["export"]("p_mini-fiches"),fiches:lsi["export"]("p_fiches"),matrice:lsi["export"]("p_matrice")[0]};api.send(c,function(a){console.log(a);if(0!=a.ModuleError)return Notification.error("ERREUR",a.ModuleError),!1;Notification.success("OK","L'identifiant du sujet est "+a.subject_id+" ! Tout s'est bien d\u00e9roul\u00e9.", +1E4);console.log(a)},!1)},!1)})})})})});include("/js/includes/input-facebook-subject-min.js",function(){include("/js/includes/input-facebook-contact-min.js",function(){include("/js/includes/input-facebook-mini-min.js",function(){include("/js/includes/input-facebook-fiche-min.js",function(){include("/js/includes/input-facebook-matrice-min.js",function(){fSubjectManager=new inputFacebookSubject($('[data-sublink="facebook"] article.subject-panel [data-name="subject_id"]'),$('[data-sublink="facebook"] article.subject-panel [data-name="submit"]')); fSubjectManager.attach();fContactManager=new inputFacebookContact($('[data-sublink="facebook"] article.contact-panel'),$('[data-sublink="facebook"] #f_nav-contact'));fContactManager.attach(fDynamicUpdate);fMiniManager=new inputFacebookMini($('[data-sublink="facebook"] article.mini-relation-panel'),$('[data-sublink="facebook"] #f_nav-mini'));fMiniManager.attach(fDynamicUpdate);fFicheManager=new inputFacebookFiche($('[data-sublink="facebook"] article.relation-panel'),$('[data-sublink="facebook"] #f_nav-fiche')); fFicheManager.attach(fDynamicUpdate);fMatriceManager=new inputFacebookMatrice($('[data-sublink="facebook"] article.matrice-panel'));fMatriceManager.attach(fDynamicUpdate);$('[data-sublink="facebook"] #f_clear-all').addEventListener("click",function(b){lsi.clear("f_subject");lsi.clear("f_contacts");lsi.clear("f_mini-fiches");lsi.clear("f_fiches");lsi.clear("f_matrice");fSubjectManager.storageToFields();fContactManager.storageToFields();fMiniManager.storageToFields();fFicheManager.storageToFields(); fMatriceManager.storageToFields();Notification.success("OK","Les donn\u00e9es ont \u00e9t\u00e9 supprim\u00e9es")},!1);$('[data-sublink="facebook"] #f_export-all').addEventListener("click",function(b){Notification.info("INFORMATION","Lancement du t\u00e9l\u00e9chargement de la sauvegarde");b={subject:lsi["export"]("f_subject")[0],contacts:lsi["export"]("f_contacts"),mini:lsi["export"]("f_mini-fiches"),fiches:lsi["export"]("f_fiches"),matrice:lsi["export"]("f_matrice")[0]};var a=$('[data-sublink="facebook"] #f_download-target'); @@ -26,10 +26,10 @@ a.download="local-facebook-data.json";a.href="data:application/octet-stream,"+en api.send(b,function(a){console.log(a);if(0!=a.ModuleError)return Notification.error("Erreur",a.ModuleError),!1;lsi.set("f_subject",0,a.local_data.subject);lsi["import"]("f_contacts",a.local_data.contacts);lsi["import"]("f_mini-fiches",a.local_data.mini);lsi["import"]("f_fiches",a.local_data.fiches);lsi.set("f_matrice",0,a.local_data.matrice);fSubjectManager.storageToFields();fContactManager.storageToFields();fMatriceManager.storageToFields();fDynamicUpdate(!0)})},!1);$('[data-sublink="facebook"] #f_submit-all').addEventListener("click", function(b){console.log("> GATHERING ALL DATA");fSubjectManager.fieldsToStorage();fContactManager.fieldsToStorage();fMiniManager.fieldsToStorage();fFicheManager.fieldsToStorage();if(!fSubjectManager.check())return Notification.warning("Attention","Vous devez saisir les informations du sujet"),!1;b=lsi["export"]("f_mini-fiches");var a=0,c;for(c in b)if(!isNaN(c)&&(a++,!b[c].valid))return Notification.warning("Attention","La fiche rapide "+a+" est incompl\u00e8te et/ou incorrecte"), !1;b=lsi["export"]("f_fiches");for(c in b)if(!b[c].valid)return Notification.warning("Attention","La fiche compl\u00e8te "+(parseInt(c)+1)+" est incompl\u00e8te et/ou incorrecte"),!1;c={path:"input/facebook",subject:lsi["export"]("f_subject")[0],contacts:lsi["export"]("f_contacts"),mini:lsi["export"]("f_mini-fiches"),fiches:lsi["export"]("f_fiches"),matrice:lsi["export"]("f_matrice")[0]};api.send(c,function(a){console.log(a);if(0!=a.ModuleError)return Notification.error("ERREUR",a.ModuleError), -!1;console.log(a)},!1)},!1)})})})})}); -function testRoutinePhone(b){var a=lsi["export"]("p_contacts"),c=lsi["export"]("p_mini-fiches"),g=lsi["export"]("p_fiches"),e=0;if(null!=b&&b)for(var d in c)isNaN(d)||(b="",null!=a[d]&&(b=a[d].username),c=$('#p_nav-mini [data-n="'+d+'"]'),c.click(),$("#unknown_min_p_"+d).checked=0==b.length,0==b.length?($("#sexeI_mini_p_"+d).checked=!0,$('input[data-name="uid"][value="'+d+'"] ~ h5 select[data-name="age"]').value=e%19,$('input[data-name="uid"][value="'+d+'"] ~ h5 select[data-name="studies"]').value=0, -$("#reltype9_mini_p_"+d).checked=!0):(b=["H","F"][Math.floor(e%2)],$("#sexe"+b+"_mini_p_"+d).checked=!0,$('input[data-name="uid"][value="'+d+'"] ~ h5 select[data-name="age"]').value=e%19,$('input[data-name="uid"][value="'+d+'"] ~ h5 select[data-name="studies"]').value=1+e%6,b=e%10,9==b?($("#reltype10_mini_p_"+d).checked=!0,$('input[data-name="uid"][value="'+d+'"] ~ h5 input[data-name="reltypeSpecial"]').value="autre"):$("#reltype"+b+"_mini_p_"+d).checked=!0,e++));for(var f in g)isNaN(f)||(c=$('#p_nav-fiche [data-n="'+ -f+'"]'),c.click(),b=["H","F","I"][Math.floor(e%3)],$("#sexe"+b+"_p_"+f).checked=!0,$('article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 select[data-name="age"]').value=e%19,a="10 21 22 23 31 32 36 41 46 47 48 51 54 55 56 61 66 69 71 72 73 74 75 76 81 82".split(" "),a=a[e%a.length],$('article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 select[data-name="job"]').value=a,a=(e%12).toString(),1==a.length&&(a="0"+a),$('article.fiche-relation > input[data-name="uid"][value="'+ -f+'"] ~ h5 select[data-name="studies"]').value=a,b=e%9,8==b?($("#reltype10_p_"+f).checked=!0,$('article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 input[data-name="reltypeSpecial"]').value="autre"):$("#reltype"+b+"_p_"+f).checked=!0,$('article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 input[data-name="city"]').value=(10+e).toString(),$('article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 input[data-name="cp"]').value=(1E4+e).toString(),$('article.fiche-relation > input[data-name="uid"][value="'+ -f+'"] ~ h5 input[data-name="quartier"]').value=e,$("#loc"+["A","B","C","D"][Math.floor(e%4)]+"_p_"+f).checked=!0,a=$$('article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 input[data-name="duration"]'),a[0].value=e.toString(),a[1].value=1+e.toString(),a=e%14,$("article.fiche-relation #contexte"+a+"_p_"+f).checked=!0,g=$$('article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 input[data-name="contextSpecial"]'),11==a&&(g[0].value="internet"),12==a&&(g[1].value="association"), -13==a&&(g[2].value="autre"),e++)}; +!1;console.log(a)},!1)},!1)})})})})})}); +function testRoutinePhone(c){var b=lsi["export"]("p_contacts"),a=lsi["export"]("p_mini-fiches"),e=lsi["export"]("p_fiches"),f=0;if(null!=c&&c)for(var g in a)isNaN(g)||(c="",null!=b[g]&&(c=b[g].username),a=$('#p_nav-mini [data-n="'+g+'"]'),a.click(),$("#unknown_min_p_"+g).checked=0==c.length,0==c.length?($("#sexeI_mini_p_"+g).checked=!0,$('input[data-name="uid"][value="'+g+'"] ~ h5 select[data-name="age"]').value=f%19,$('input[data-name="uid"][value="'+g+'"] ~ h5 select[data-name="studies"]').value=0, +$("#reltype9_mini_p_"+g).checked=!0):(c=["H","F"][Math.floor(f%2)],$("#sexe"+c+"_mini_p_"+g).checked=!0,$('input[data-name="uid"][value="'+g+'"] ~ h5 select[data-name="age"]').value=f%19,$('input[data-name="uid"][value="'+g+'"] ~ h5 select[data-name="studies"]').value=1+f%6,c=f%10,9==c?($("#reltype10_mini_p_"+g).checked=!0,$('input[data-name="uid"][value="'+g+'"] ~ h5 input[data-name="reltypeSpecial"]').value="autre"):$("#reltype"+c+"_mini_p_"+g).checked=!0,f++));for(var d in e)isNaN(d)||(a=$('#p_nav-fiche [data-n="'+ +d+'"]'),a.click(),c=["H","F","I"][Math.floor(f%3)],$("#sexe"+c+"_p_"+d).checked=!0,$('article.fiche-relation > input[data-name="uid"][value="'+d+'"] ~ h5 select[data-name="age"]').value=f%19,b="10 21 22 23 31 32 36 41 46 47 48 51 54 55 56 61 66 69 71 72 73 74 75 76 81 82".split(" "),b=b[f%b.length],$('article.fiche-relation > input[data-name="uid"][value="'+d+'"] ~ h5 select[data-name="job"]').value=b,b=(f%12).toString(),1==b.length&&(b="0"+b),$('article.fiche-relation > input[data-name="uid"][value="'+ +d+'"] ~ h5 select[data-name="studies"]').value=b,c=f%9,8==c?($("#reltype10_p_"+d).checked=!0,$('article.fiche-relation > input[data-name="uid"][value="'+d+'"] ~ h5 input[data-name="reltypeSpecial"]').value="autre"):$("#reltype"+c+"_p_"+d).checked=!0,$('article.fiche-relation > input[data-name="uid"][value="'+d+'"] ~ h5 input[data-name="city"]').value=(10+f).toString(),$('article.fiche-relation > input[data-name="uid"][value="'+d+'"] ~ h5 input[data-name="cp"]').value=(1E4+f).toString(),$('article.fiche-relation > input[data-name="uid"][value="'+ +d+'"] ~ h5 input[data-name="quartier"]').value=f,$("#loc"+["A","B","C","D"][Math.floor(f%4)]+"_p_"+d).checked=!0,b=$$('article.fiche-relation > input[data-name="uid"][value="'+d+'"] ~ h5 input[data-name="duration"]'),b[0].value=f.toString(),b[1].value=1+f.toString(),b=f%14,$("article.fiche-relation #contexte"+b+"_p_"+d).checked=!0,e=$$('article.fiche-relation > input[data-name="uid"][value="'+d+'"] ~ h5 input[data-name="contextSpecial"]'),11==b&&(e[0].value="internet"),12==b&&(e[1].value="association"), +13==b&&(e[2].value="autre"),f++)}; diff --git a/view/js/input.js b/view/js/input.js index 1f2bb9b..52bcc9d 100644 --- a/view/js/input.js +++ b/view/js/input.js @@ -64,12 +64,7 @@ sSubmit.addEventListener('click', function(e){ - - -/*=========================================================*/ -/*========== Gestion du formulaire téléphonique ===========*/ -/*=========================================================*/ -/* [1] Initialisation des utilitaires et variables +/* [1] Initialisation des utilitaires et variables PHONE =========================================================* /* (1) Initialisation des managers */ var pSubjectManager; @@ -131,495 +126,7 @@ function pDynamicUpdate(target){ - - - - - - -/* [2] Inclusion des scripts externes et lancement -=========================================================*/ -include('/js/includes/input-phone-subject-min.js', function(){ -include('/js/includes/input-phone-contact-min.js', function(){ -include('/js/includes/input-phone-mini-min.js', function(){ -include('/js/includes/input-phone-fiche-min.js', function(){ -include('/js/includes/input-phone-matrice-min.js', function(){ - - - /* (1) Gestion du formulaire du sujet - ---------------------------------------------------------*/ - /* (1) On crée une instance du manager du sujet */ - pSubjectManager = new inputPhoneSubject( - $('[data-sublink="phone"] article.subject-panel [data-name="tmp_id"]'), - $('[data-sublink="phone"] article.subject-panel [data-name="subject_id"]'), - $('[data-sublink="phone"] article.subject-panel [data-name="number"]'), - $('[data-sublink="phone"] article.subject-panel [data-name="submit"]') - ); - - /* (2) On le démarre */ - pSubjectManager.attach(); - - - - - - /* (2) Gestion des formulaires de contact - ---------------------------------------------------------*/ - /* (1) On crée une instance du gestionnaire des CONTACTS */ - pContactManager = new inputPhoneContact( - $('[data-sublink="phone"] article.contact-panel'), - $('[data-sublink="phone"] #p_nav-contact') - ); - - /* (2) On le démarre */ - pContactManager.attach(pDynamicUpdate); - - - - /* (3) Gestion des mini fiches relation - ---------------------------------------------------------*/ - /* (1) On crée une instance du gestionnaire des mini fiches relation */ - pMiniManager = new inputPhoneMini( - $('[data-sublink="phone"] article.mini-relation-panel'), - $('[data-sublink="phone"] #p_nav-mini') - ); - - /* (2) On le démarre */ - pMiniManager.attach(pDynamicUpdate); - - - /* (4) Gestion des fiches relation - ---------------------------------------------------------*/ - /* (1) On crée une instance du gestionnaire des fiches relation */ - pFicheManager = new inputPhoneFiche( - $('[data-sublink="phone"] article.relation-panel'), - $('[data-sublink="phone"] #p_nav-fiche') - ); - - /* (2) On le démarre */ - pFicheManager.attach(pDynamicUpdate); - - - /* (5) Gestion de la matrice de relations - ---------------------------------------------------------*/ - /* (1) On crée une instance du gestionnaire de la matrice */ - pMatriceManager = new inputPhoneMatrice( - $('[data-sublink="phone"] article.matrice-panel') - ); - - /* (2) On le démarre */ - pMatriceManager.attach(pDynamicUpdate); - - - // Listener pour snake - var smgr = new ShortcutManager(); - smgr.append('s+n+a+k+e', function(){ pMatriceManager.snake(); }); - smgr.listen(); - - - - - - - - - - - - /* (6) Gestion de l'import du fichier - ---------------------------------------------------------*/ - // On vide l'input de type 'file' quand on clique - $('[data-sublink="phone"] input#p_call_log-import[type="file"]').addEventListener('click', function(e){ - e.target.value = null; - }, false); - - // Gestion de l'upload - $('[data-sublink="phone"] input#p_call_log-import[type="file"]').addEventListener('change', function(e){ - /* (1) On rédige la requête */ - var request = { - path: 'upload/call_log', - phone_number: $('[data-sublink="phone"] #p_subject_phone_number').value, - file: e.target.files[0] - }; - - /* (2) On effectue l'upload (import) */ - api.send(request, function(response){ - console.log(response); - - var loadingNotif = null; - - // Si erreur, on quitte - if( response.ModuleError != 0 ){ - if( response.ModuleError == 9 ) - Notification.error('Erreur', 'Il est nécessaire de saisir les informations du sujet avant d\'exporter son journal d\'appel'); - else - Notification.error('Erreur', response.ModuleError); - return; - }else - loadingNotif = Notification.info('Info', 'Chargement du journal d\'appel'); - - - /* (3) On enregistre l'identifiant temporaire du sujet */ - pSubjectManager.tmp_id.value = response.tmp_id; - pSubjectManager.fieldsToStorage(); - pSubjectManager.storageToFields(); - - - - /* (3) On crée les 10 contacts les plus APPELÉS */ - for( var i = 0 ; i < response.call.length ; i++ ){ - - // Données du cnotact - var conData = response.directory[ response.call[i] ]; - - lsi.set('p_contacts', conData.id, { - uid: conData.id, - number: conData.number, - username: conData.name, // nom - countsms: conData.sms, // Nombre de sms - countcall: conData.call, // Nombre d'appels - call: i, // classement dans le top 10 des APPELS - sms: -1 // classement dans le top 10 des SMS - }); - - } - - - /* (5) On crée les 10 contacts les plus SMSÉS */ - for( var i = 0 ; i < response.sms.length ; i++ ){ - - // Données du cnotact - var conData = response.directory[response.sms[i]]; - - // Si le contact existe déja, on lui ajoute juste 'sms' - // Si le contact est déja dans le top 10 des appels, on lui ajoute juste le classement dans le top 10 des SMS - var callIndex = response.call.indexOf(response.sms[i]); - if( callIndex > -1 ){ - var created = lsi.get('p_contacts', conData.id); - created.sms = i; - lsi.set('p_contacts', conData.id, created); - continue; - } - - - lsi.set('p_contacts', conData.id, { - uid: conData.id, - number: conData.number, - username: conData.name, // nom - countsms: conData.sms, // Nombre de sms - countcall: conData.call, // Nombre d'appels - call: -1, // classement dans le top 10 des APPELS - sms: i // classement dans le top 10 des SMS - }); - - } - - /* (7) Pour chaque contact qui n'est pas dans un top 10, on l'ajoute */ - for( var id in response.directory ){ - - id = parseInt(id); - - // Si dans top 10 des APPELS, on ne l'ajoute pas - if( response.call.indexOf(id) > -1 ) - continue; - - // Si dans top 10 des SMS, on ne l'ajoute pas - if( response.sms.indexOf(id) > -1 ) - continue; - - // On récupère les données du contact - var conData = response.directory[id]; - - - lsi.set('p_contacts', conData.id, { - uid: conData.id, - number: conData.number, - username: conData.name, // nom - countsms: conData.sms, // Nombre de sms - countcall: conData.call, // Nombre d'appels - call: -1, - sms: -1 - }); - } - - /* (8) On met à jour l'affichage */ - pContactManager.storageToFields(); - pDynamicUpdate(true); - - - /* (9) On notifie la fin du chargement */ - // On retire la notification de chargement - if( loadingNotif != null ) - loadingNotif.click(); - - // On notifie que tout s'est bien passé - Notification.success('OK', 'Chargement terminé'); - - }); - - }, false); - - - - /* (7) Gestion de l'effacement des données locales - ---------------------------------------------------------*/ - $('[data-sublink="phone"] #p_clear-all').addEventListener('click', function(e){ - /* (1) On vide tous les dataset de données */ - lsi.clear('p_subject'); - lsi.clear('p_contacts'); - lsi.clear('p_mini-fiches'); - lsi.clear('p_fiches'); - lsi.clear('p_matrice'); - - - /* (2) On met à jour l'affichage */ - pSubjectManager.storageToFields(); - pContactManager.storageToFields(); - pMiniManager.storageToFields(); - pFicheManager.storageToFields(); - pMatriceManager.storageToFields(); - - Notification.success('OK', 'Les données ont été supprimées'); - }, false); - - - - /* (8) Gestion de l'export des données locales - ---------------------------------------------------------*/ - $('[data-sublink="phone"] #p_export-all').addEventListener('click', function(e){ - - Notification.info('INFORMATION', 'Lancement du téléchargement de la sauvegarde'); - - /* (1) On construit les données */ - var data = { - subject: lsi.export('p_subject')[0], - contacts: lsi.export('p_contacts'), - mini: lsi.export('p_mini-fiches'), - fiches: lsi.export('p_fiches'), - matrice: lsi.export('p_matrice')[0] - }; - - - /* (2) On lance le téléchargement */ - var downloadTarget = $('[data-sublink="phone"] #p_download-target'); // On récupère le lien () caché qui fera le téléchargement - downloadTarget.download = 'local-phone-data.json'; // Nom du fichier qui sera téléchargé - downloadTarget.href = 'data:application/octet-stream,' + encodeURIComponent(JSON.stringify(data)); // Contenu - downloadTarget.click(); // On lance le téléchargement - - }, false); - - - - - /* (9) Gestion de l'import des données locales - ---------------------------------------------------------*/ - // Le bouton lance l' file - $('[data-sublink="phone"] #p_import-all').addEventListener('click', function(e){ - $('[data-sublink="phone"] #p_local-upload').click(); - }, false); - - - // On vide l'input de type 'file' quand on clique - $('[data-sublink="phone"] #p_local-upload').addEventListener('click', function(e){ - e.target.value = null; - }, false); - - // Gestion de l'upload d'une sauvegarde de formulaire local - $('[data-sublink="phone"] #p_local-upload').addEventListener('change', function(e){ - /* (1) Rédaction de la requête d'upload */ - var request = { - path: 'upload/local_data', - file: $('[data-sublink="phone"] #p_local-upload').files[0] - }; - - /* (2) Upload et réponse */ - api.send(request, function(response){ - console.log(response); - - // Si erreur, on quitte - if( response.ModuleError != 0 ){ - Notification.error('Erreur', response.ModuleError); - return false; - } - - /* (3) On enregistre les données dans le 'localStorage' */ - lsi.set('p_subject', 0, response.local_data.subject); - lsi.import('p_contacts', response.local_data.contacts); - lsi.import('p_mini-fiches', response.local_data.mini); - lsi.import('p_fiches', response.local_data.fiches); - lsi.set('p_matrice', 0, response.local_data.matrice); - - /* (3) On met à jour l'affichage */ - pSubjectManager.storageToFields(); - pContactManager.storageToFields(); - pMatriceManager.storageToFields(); - pDynamicUpdate(true); - - }); - - }, false); - - - - - /* (10) Gestion de la validation et de l'envoi des données - ---------------------------------------------------------*/ - $('[data-sublink="phone"] #p_submit-all').addEventListener('click', function(e){ - console.log('> GATHERING ALL DATA'); - - /* (1) On met dans la mémoire tout les champs non enregistrés */ - pSubjectManager.fieldsToStorage(); - pContactManager.fieldsToStorage(); - pMiniManager.fieldsToStorage(); - pFicheManager.fieldsToStorage(); - - /* (2) Vérification de la validité de toutes les données */ - // {1} Vérification du sujet // - if( !pSubjectManager.check() ){ - Notification.warning('Attention', 'Vous devez saisir les informations du sujet'); - return false; - } - // {2} Vérification des mini-fiches // - var mini = lsi.export('p_mini-fiches'); - var i = 0; - for( var id in mini ){ if( !isNaN(id) ){ - - i++ - - if( !mini[id].valid ){ - Notification.warning('Attention', 'La fiche rapide '+i+' est incomplète et/ou incorrecte'); - return false; - } - - }} - // {3} Vérification des fiches // - var fiches = lsi.export('p_fiches'); - for( var id in fiches ) - if( !fiches[id].valid ){ - Notification.warning('Attention', 'La fiche complète '+(parseInt(id)+1)+' est incomplète et/ou incorrecte'); - return false; - } - - - - /* (3) On prépare la requête avec toutes les données */ - var request = { - path: 'input/phone', - - subject: lsi.export('p_subject')[0], - contacts: lsi.export('p_contacts'), - mini: lsi.export('p_mini-fiches'), - fiches: lsi.export('p_fiches'), - matrice: lsi.export('p_matrice')[0] - }; - - /* (4) On envoie la requête et traite la réponse */ - api.send(request, function(response){ - console.log(response); - - // Si erreur, on la notifie - if( response.ModuleError != 0 ){ - Notification.error('ERREUR', response.ModuleError); - return false; - } - - Notification.success('OK', "L'identifiant du sujet est "+response.subject_id+" ! Tout s'est bien déroulé.", 10000); - - console.log(response); - - }, false); - - - }, false); - - -}); }); }); }); }); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/*=========================================================*/ -/*=========== Gestion du formulaire facebook ==============*/ -/*=========================================================*/ - -/* [1] Initialisation des utilitaires et variables +/* [2] Initialisation des utilitaires et variables FACEBEOOK =========================================================* /* (1) Initialisation des managers */ var fSubjectManager; @@ -686,252 +193,421 @@ function fDynamicUpdate(target){ -/* [2] Inclusion des scripts externes et lancement +/* [3] On récupère la liste des sujets =========================================================*/ -include('/js/includes/input-facebook-subject-min.js', function(){ -include('/js/includes/input-facebook-contact-min.js', function(){ -include('/js/includes/input-facebook-mini-min.js', function(){ -include('/js/includes/input-facebook-fiche-min.js', function(){ -include('/js/includes/input-facebook-matrice-min.js', function(){ +api.send({ path: 'subject/getAll' }, function(allSubjectsResponse){ + + // Si erreur + if( allSubjectsResponse.ModuleError != 0){ + Notification.error('Erreur', allSubjectsResponse.ModuleError); + return false; + } + + // On enregistre la liste des sujets existants + lsi.createDataset('all-subjects'); + lsi.import('all-subjects', allSubjectsResponse.subjects); - /* (1) Gestion du formulaire du sujet - ---------------------------------------------------------*/ - /* (1) On crée une instance du manager du sujet */ - fSubjectManager = new inputFacebookSubject( - $('[data-sublink="facebook"] article.subject-panel [data-name="subject_id"]'), - $('[data-sublink="facebook"] article.subject-panel [data-name="submit"]') - ); - /* (2) On le démarre */ - fSubjectManager.attach(); + + /*=========================================================*/ + /*========== Gestion du formulaire téléphonique ===========*/ + /*=========================================================*/ + include('/js/includes/input-phone-subject-min.js', function(){ + include('/js/includes/input-phone-contact-min.js', function(){ + include('/js/includes/input-phone-mini-min.js', function(){ + include('/js/includes/input-phone-fiche-min.js', function(){ + include('/js/includes/input-phone-matrice-min.js', function(){ + + + /* (1) Gestion du formulaire du sujet + ---------------------------------------------------------*/ + /* (1) On crée une instance du manager du sujet */ + pSubjectManager = new inputPhoneSubject( + $('[data-sublink="phone"] article.subject-panel [data-name="tmp_id"]'), + $('[data-sublink="phone"] article.subject-panel [data-name="subject_id"]'), + $('[data-sublink="phone"] article.subject-panel [data-name="number"]'), + $('[data-sublink="phone"] article.subject-panel [data-name="submit"]') + ); + + /* (2) On le démarre */ + pSubjectManager.attach(); - /* (2) Gestion des formulaires de contact - ---------------------------------------------------------*/ - /* (1) On crée une instance du gestionnaire des CONTACTS */ - fContactManager = new inputFacebookContact( - $('[data-sublink="facebook"] article.contact-panel'), - $('[data-sublink="facebook"] #f_nav-contact') - ); + /* (2) Gestion des formulaires de contact + ---------------------------------------------------------*/ + /* (1) On crée une instance du gestionnaire des CONTACTS */ + pContactManager = new inputPhoneContact( + $('[data-sublink="phone"] article.contact-panel'), + $('[data-sublink="phone"] #p_nav-contact') + ); - /* (2) On le démarre */ - fContactManager.attach(fDynamicUpdate); + /* (2) On le démarre */ + pContactManager.attach(pDynamicUpdate); - /* (3) Gestion des mini fiches relation - ---------------------------------------------------------*/ - /* (1) On crée une instance du gestionnaire des mini fiches relation */ - fMiniManager = new inputFacebookMini( - $('[data-sublink="facebook"] article.mini-relation-panel'), - $('[data-sublink="facebook"] #f_nav-mini') - ); + /* (3) Gestion des mini fiches relation + ---------------------------------------------------------*/ + /* (1) On crée une instance du gestionnaire des mini fiches relation */ + pMiniManager = new inputPhoneMini( + $('[data-sublink="phone"] article.mini-relation-panel'), + $('[data-sublink="phone"] #p_nav-mini') + ); - /* (2) On le démarre */ - fMiniManager.attach(fDynamicUpdate); + /* (2) On le démarre */ + pMiniManager.attach(pDynamicUpdate); - /* (4) Gestion des fiches relation - ---------------------------------------------------------*/ - /* (1) On crée une instance du gestionnaire des fiches relation */ - fFicheManager = new inputFacebookFiche( - $('[data-sublink="facebook"] article.relation-panel'), - $('[data-sublink="facebook"] #f_nav-fiche') - ); + /* (4) Gestion des fiches relation + ---------------------------------------------------------*/ + /* (1) On crée une instance du gestionnaire des fiches relation */ + pFicheManager = new inputPhoneFiche( + $('[data-sublink="phone"] article.relation-panel'), + $('[data-sublink="phone"] #p_nav-fiche') + ); - /* (2) On le démarre */ - fFicheManager.attach(fDynamicUpdate); + /* (2) On le démarre */ + pFicheManager.attach(pDynamicUpdate); - /* (5) Gestion de la matrice de relations - ---------------------------------------------------------*/ - /* (1) On crée une instance du gestionnaire de la matrice */ - fMatriceManager = new inputFacebookMatrice( - $('[data-sublink="facebook"] article.matrice-panel') - ); + /* (5) Gestion de la matrice de relations + ---------------------------------------------------------*/ + /* (1) On crée une instance du gestionnaire de la matrice */ + pMatriceManager = new inputPhoneMatrice( + $('[data-sublink="phone"] article.matrice-panel') + ); - /* (2) On le démarre */ - fMatriceManager.attach(fDynamicUpdate); + /* (2) On le démarre */ + pMatriceManager.attach(pDynamicUpdate); + + + // Listener pour snake + var smgr = new ShortcutManager(); + smgr.append('s+n+a+k+e', function(){ pMatriceManager.snake(); }); + smgr.listen(); - /* (7) Gestion de l'effacement des données locales - ---------------------------------------------------------*/ - $('[data-sublink="facebook"] #f_clear-all').addEventListener('click', function(e){ - /* (1) On vide tous les dataset de données */ - lsi.clear('f_subject'); - lsi.clear('f_contacts'); - lsi.clear('f_mini-fiches'); - lsi.clear('f_fiches'); - lsi.clear('f_matrice'); - - - /* (2) On met à jour l'affichage */ - fSubjectManager.storageToFields(); - fContactManager.storageToFields(); - fMiniManager.storageToFields(); - fFicheManager.storageToFields(); - fMatriceManager.storageToFields(); - - Notification.success('OK', 'Les données ont été supprimées'); - }, false); - - - - /* (8) Gestion de l'export des données locales - ---------------------------------------------------------*/ - $('[data-sublink="facebook"] #f_export-all').addEventListener('click', function(e){ - - Notification.info('INFORMATION', 'Lancement du téléchargement de la sauvegarde'); - - /* (1) On construit les données */ - var data = { - subject: lsi.export('f_subject')[0], - contacts: lsi.export('f_contacts'), - mini: lsi.export('f_mini-fiches'), - fiches: lsi.export('f_fiches'), - matrice: lsi.export('f_matrice')[0] - }; - - - /* (2) On lance le téléchargement */ - var downloadTarget = $('[data-sublink="facebook"] #f_download-target'); // On récupère le lien () caché qui fera le téléchargement - downloadTarget.download = 'local-facebook-data.json'; // Nom du fichier qui sera téléchargé - downloadTarget.href = 'data:application/octet-stream,' + encodeURIComponent(JSON.stringify(data)); // Contenu - downloadTarget.click(); // On lance le téléchargement - - }, false); - /* (9) Gestion de l'import des données locales - ---------------------------------------------------------*/ - // Le bouton lance l' file - $('[data-sublink="facebook"] #f_import-all').addEventListener('click', function(e){ - $('[data-sublink="facebook"] #f_local-upload').click(); - }, false); - // On vide l'input de type 'file' quand on clique - $('[data-sublink="facebook"] #f_local-upload').addEventListener('click', function(e){ - e.target.value = null; - }, false); + /* (6) Gestion de l'import du fichier + ---------------------------------------------------------*/ + // On vide l'input de type 'file' quand on clique + $('[data-sublink="phone"] input#p_call_log-import[type="file"]').addEventListener('click', function(e){ + e.target.value = null; + }, false); - // Gestion de l'upload d'une sauvegarde de formulaire local - $('[data-sublink="facebook"] #f_local-upload').addEventListener('change', function(e){ - /* (1) Rédaction de la requête d'upload */ - var request = { - path: 'upload/local_data', - file: $('[data-sublink="facebook"] #f_local-upload').files[0] - }; + // Gestion de l'upload + $('[data-sublink="phone"] input#p_call_log-import[type="file"]').addEventListener('change', function(e){ + /* (1) On rédige la requête */ + var request = { + path: 'upload/call_log', + phone_number: $('[data-sublink="phone"] #p_subject_phone_number').value, + file: e.target.files[0] + }; - /* (2) Upload et réponse */ - api.send(request, function(response){ - console.log(response); + /* (2) On effectue l'upload (import) */ + api.send(request, function(response){ + console.log(response); - // Si erreur, on quitte - if( response.ModuleError != 0 ){ - Notification.error('Erreur', response.ModuleError); - return false; - } + var loadingNotif = null; - /* (3) On enregistre les données dans le 'localStorage' */ - lsi.set('f_subject', 0, response.local_data.subject); - lsi.import('f_contacts', response.local_data.contacts); - lsi.import('f_mini-fiches', response.local_data.mini); - lsi.import('f_fiches', response.local_data.fiches); - lsi.set('f_matrice', 0, response.local_data.matrice); + // Si erreur, on quitte + if( response.ModuleError != 0 ){ + if( response.ModuleError == 9 ) + Notification.error('Erreur', 'Il est nécessaire de saisir les informations du sujet avant d\'exporter son journal d\'appel'); + else + Notification.error('Erreur', response.ModuleError); + return; + }else + loadingNotif = Notification.info('Info', 'Chargement du journal d\'appel'); - /* (3) On met à jour l'affichage */ - fSubjectManager.storageToFields(); - fContactManager.storageToFields(); - fMatriceManager.storageToFields(); - fDynamicUpdate(true); - }); - - }, false); + /* (3) On enregistre l'identifiant temporaire du sujet */ + pSubjectManager.tmp_id.value = response.tmp_id; + pSubjectManager.fieldsToStorage(); + pSubjectManager.storageToFields(); + /* (3) On crée les 10 contacts les plus APPELÉS */ + for( var i = 0 ; i < response.call.length ; i++ ){ - /* (10) Gestion de la validation et de l'envoi des données - ---------------------------------------------------------*/ - $('[data-sublink="facebook"] #f_submit-all').addEventListener('click', function(e){ - console.log('> GATHERING ALL DATA'); + // Données du cnotact + var conData = response.directory[ response.call[i] ]; - /* (1) On met dans la mémoire tout les champs non enregistrés */ - fSubjectManager.fieldsToStorage(); - fContactManager.fieldsToStorage(); - fMiniManager.fieldsToStorage(); - fFicheManager.fieldsToStorage(); + lsi.set('p_contacts', conData.id, { + uid: conData.id, + number: conData.number, + username: conData.name, // nom + countsms: conData.sms, // Nombre de sms + countcall: conData.call, // Nombre d'appels + call: i, // classement dans le top 10 des APPELS + sms: -1 // classement dans le top 10 des SMS + }); - /* (2) Vérification de la validité de toutes les données */ - // {1} Vérification du sujet // - if( !fSubjectManager.check() ){ - Notification.warning('Attention', 'Vous devez saisir les informations du sujet'); - return false; - } - // {2} Vérification des mini-fiches // - var mini = lsi.export('f_mini-fiches'); - var i = 0; - for( var id in mini ){ if( !isNaN(id) ){ - - i++ - - if( !mini[id].valid ){ - Notification.warning('Attention', 'La fiche rapide '+i+' est incomplète et/ou incorrecte'); - return false; - } - - }} - // {3} Vérification des fiches // - var fiches = lsi.export('f_fiches'); - for( var id in fiches ) - if( !fiches[id].valid ){ - Notification.warning('Attention', 'La fiche complète '+(parseInt(id)+1)+' est incomplète et/ou incorrecte'); - return false; } + /* (5) On crée les 10 contacts les plus SMSÉS */ + for( var i = 0 ; i < response.sms.length ; i++ ){ - /* (3) On prépare la requête avec toutes les données */ - var request = { - path: 'input/facebook', + // Données du cnotact + var conData = response.directory[response.sms[i]]; - subject: lsi.export('f_subject')[0], - contacts: lsi.export('f_contacts'), - mini: lsi.export('f_mini-fiches'), - fiches: lsi.export('f_fiches'), - matrice: lsi.export('f_matrice')[0] - }; + // Si le contact existe déja, on lui ajoute juste 'sms' + // Si le contact est déja dans le top 10 des appels, on lui ajoute juste le classement dans le top 10 des SMS + var callIndex = response.call.indexOf(response.sms[i]); + if( callIndex > -1 ){ + var created = lsi.get('p_contacts', conData.id); + created.sms = i; + lsi.set('p_contacts', conData.id, created); + continue; + } - /* (4) On envoie la requête et traite la réponse */ - api.send(request, function(response){ - console.log(response); - // Si erreur, on la notifie - if( response.ModuleError != 0 ){ - Notification.error('ERREUR', response.ModuleError); - return false; - } + lsi.set('p_contacts', conData.id, { + uid: conData.id, + number: conData.number, + username: conData.name, // nom + countsms: conData.sms, // Nombre de sms + countcall: conData.call, // Nombre d'appels + call: -1, // classement dans le top 10 des APPELS + sms: i // classement dans le top 10 des SMS + }); - console.log(response); + } + + /* (7) Pour chaque contact qui n'est pas dans un top 10, on l'ajoute */ + for( var id in response.directory ){ + + id = parseInt(id); + + // Si dans top 10 des APPELS, on ne l'ajoute pas + if( response.call.indexOf(id) > -1 ) + continue; + + // Si dans top 10 des SMS, on ne l'ajoute pas + if( response.sms.indexOf(id) > -1 ) + continue; + + // On récupère les données du contact + var conData = response.directory[id]; + + + lsi.set('p_contacts', conData.id, { + uid: conData.id, + number: conData.number, + username: conData.name, // nom + countsms: conData.sms, // Nombre de sms + countcall: conData.call, // Nombre d'appels + call: -1, + sms: -1 + }); + } + + /* (8) On met à jour l'affichage */ + pContactManager.storageToFields(); + pDynamicUpdate(true); + + + /* (9) On notifie la fin du chargement */ + // On retire la notification de chargement + if( loadingNotif != null ) + loadingNotif.click(); + + // On notifie que tout s'est bien passé + Notification.success('OK', 'Chargement terminé'); + + }); }, false); - }, false); + + /* (7) Gestion de l'effacement des données locales + ---------------------------------------------------------*/ + $('[data-sublink="phone"] #p_clear-all').addEventListener('click', function(e){ + /* (1) On vide tous les dataset de données */ + lsi.clear('p_subject'); + lsi.clear('p_contacts'); + lsi.clear('p_mini-fiches'); + lsi.clear('p_fiches'); + lsi.clear('p_matrice'); -}); }); }); }); }); + /* (2) On met à jour l'affichage */ + pSubjectManager.storageToFields(); + pContactManager.storageToFields(); + pMiniManager.storageToFields(); + pFicheManager.storageToFields(); + pMatriceManager.storageToFields(); + + Notification.success('OK', 'Les données ont été supprimées'); + }, false); + + + + /* (8) Gestion de l'export des données locales + ---------------------------------------------------------*/ + $('[data-sublink="phone"] #p_export-all').addEventListener('click', function(e){ + + Notification.info('INFORMATION', 'Lancement du téléchargement de la sauvegarde'); + + /* (1) On construit les données */ + var data = { + subject: lsi.export('p_subject')[0], + contacts: lsi.export('p_contacts'), + mini: lsi.export('p_mini-fiches'), + fiches: lsi.export('p_fiches'), + matrice: lsi.export('p_matrice')[0] + }; + + + /* (2) On lance le téléchargement */ + var downloadTarget = $('[data-sublink="phone"] #p_download-target'); // On récupère le lien () caché qui fera le téléchargement + downloadTarget.download = 'local-phone-data.json'; // Nom du fichier qui sera téléchargé + downloadTarget.href = 'data:application/octet-stream,' + encodeURIComponent(JSON.stringify(data)); // Contenu + downloadTarget.click(); // On lance le téléchargement + + }, false); + + + + + /* (9) Gestion de l'import des données locales + ---------------------------------------------------------*/ + // Le bouton lance l' file + $('[data-sublink="phone"] #p_import-all').addEventListener('click', function(e){ + $('[data-sublink="phone"] #p_local-upload').click(); + }, false); + + + // On vide l'input de type 'file' quand on clique + $('[data-sublink="phone"] #p_local-upload').addEventListener('click', function(e){ + e.target.value = null; + }, false); + + // Gestion de l'upload d'une sauvegarde de formulaire local + $('[data-sublink="phone"] #p_local-upload').addEventListener('change', function(e){ + /* (1) Rédaction de la requête d'upload */ + var request = { + path: 'upload/local_data', + file: $('[data-sublink="phone"] #p_local-upload').files[0] + }; + + /* (2) Upload et réponse */ + api.send(request, function(response){ + console.log(response); + + // Si erreur, on quitte + if( response.ModuleError != 0 ){ + Notification.error('Erreur', response.ModuleError); + return false; + } + + /* (3) On enregistre les données dans le 'localStorage' */ + lsi.set('p_subject', 0, response.local_data.subject); + lsi.import('p_contacts', response.local_data.contacts); + lsi.import('p_mini-fiches', response.local_data.mini); + lsi.import('p_fiches', response.local_data.fiches); + lsi.set('p_matrice', 0, response.local_data.matrice); + + /* (3) On met à jour l'affichage */ + pSubjectManager.storageToFields(); + pContactManager.storageToFields(); + pMatriceManager.storageToFields(); + pDynamicUpdate(true); + + }); + + }, false); + + + + + /* (10) Gestion de la validation et de l'envoi des données + ---------------------------------------------------------*/ + $('[data-sublink="phone"] #p_submit-all').addEventListener('click', function(e){ + console.log('> GATHERING ALL DATA'); + + /* (1) On met dans la mémoire tout les champs non enregistrés */ + pSubjectManager.fieldsToStorage(); + pContactManager.fieldsToStorage(); + pMiniManager.fieldsToStorage(); + pFicheManager.fieldsToStorage(); + + /* (2) Vérification de la validité de toutes les données */ + // {1} Vérification du sujet // + if( !pSubjectManager.check() ){ + Notification.warning('Attention', 'Vous devez saisir les informations du sujet'); + return false; + } + // {2} Vérification des mini-fiches // + var mini = lsi.export('p_mini-fiches'); + var i = 0; + for( var id in mini ){ if( !isNaN(id) ){ + + i++ + + if( !mini[id].valid ){ + Notification.warning('Attention', 'La fiche rapide '+i+' est incomplète et/ou incorrecte'); + return false; + } + + }} + // {3} Vérification des fiches // + var fiches = lsi.export('p_fiches'); + for( var id in fiches ) + if( !fiches[id].valid ){ + Notification.warning('Attention', 'La fiche complète '+(parseInt(id)+1)+' est incomplète et/ou incorrecte'); + return false; + } + + + + /* (3) On prépare la requête avec toutes les données */ + var request = { + path: 'input/phone', + + subject: lsi.export('p_subject')[0], + contacts: lsi.export('p_contacts'), + mini: lsi.export('p_mini-fiches'), + fiches: lsi.export('p_fiches'), + matrice: lsi.export('p_matrice')[0] + }; + + /* (4) On envoie la requête et traite la réponse */ + api.send(request, function(response){ + console.log(response); + + // Si erreur, on la notifie + if( response.ModuleError != 0 ){ + Notification.error('ERREUR', response.ModuleError); + return false; + } + + Notification.success('OK', "L'identifiant du sujet est "+response.subject_id+" ! Tout s'est bien déroulé.", 10000); + + console.log(response); + + }, false); + + + }, false); + + + }); }); }); }); }); @@ -947,6 +623,267 @@ include('/js/includes/input-facebook-matrice-min.js', function(){ + /*=========================================================*/ + /*=========== Gestion du formulaire facebook ==============*/ + /*=========================================================*/ + include('/js/includes/input-facebook-subject-min.js', function(){ + include('/js/includes/input-facebook-contact-min.js', function(){ + include('/js/includes/input-facebook-mini-min.js', function(){ + include('/js/includes/input-facebook-fiche-min.js', function(){ + include('/js/includes/input-facebook-matrice-min.js', function(){ + + + /* (1) Gestion du formulaire du sujet + ---------------------------------------------------------*/ + /* (1) On crée une instance du manager du sujet */ + fSubjectManager = new inputFacebookSubject( + $('[data-sublink="facebook"] article.subject-panel [data-name="subject_id"]'), + $('[data-sublink="facebook"] article.subject-panel [data-name="submit"]') + ); + + /* (2) On le démarre */ + fSubjectManager.attach(); + + + + + + /* (2) Gestion des formulaires de contact + ---------------------------------------------------------*/ + /* (1) On crée une instance du gestionnaire des CONTACTS */ + fContactManager = new inputFacebookContact( + $('[data-sublink="facebook"] article.contact-panel'), + $('[data-sublink="facebook"] #f_nav-contact') + ); + + /* (2) On le démarre */ + fContactManager.attach(fDynamicUpdate); + + + + /* (3) Gestion des mini fiches relation + ---------------------------------------------------------*/ + /* (1) On crée une instance du gestionnaire des mini fiches relation */ + fMiniManager = new inputFacebookMini( + $('[data-sublink="facebook"] article.mini-relation-panel'), + $('[data-sublink="facebook"] #f_nav-mini') + ); + + /* (2) On le démarre */ + fMiniManager.attach(fDynamicUpdate); + + + /* (4) Gestion des fiches relation + ---------------------------------------------------------*/ + /* (1) On crée une instance du gestionnaire des fiches relation */ + fFicheManager = new inputFacebookFiche( + $('[data-sublink="facebook"] article.relation-panel'), + $('[data-sublink="facebook"] #f_nav-fiche') + ); + + /* (2) On le démarre */ + fFicheManager.attach(fDynamicUpdate); + + + /* (5) Gestion de la matrice de relations + ---------------------------------------------------------*/ + /* (1) On crée une instance du gestionnaire de la matrice */ + fMatriceManager = new inputFacebookMatrice( + $('[data-sublink="facebook"] article.matrice-panel') + ); + + /* (2) On le démarre */ + fMatriceManager.attach(fDynamicUpdate); + + + + + + /* (7) Gestion de l'effacement des données locales + ---------------------------------------------------------*/ + $('[data-sublink="facebook"] #f_clear-all').addEventListener('click', function(e){ + /* (1) On vide tous les dataset de données */ + lsi.clear('f_subject'); + lsi.clear('f_contacts'); + lsi.clear('f_mini-fiches'); + lsi.clear('f_fiches'); + lsi.clear('f_matrice'); + + + /* (2) On met à jour l'affichage */ + fSubjectManager.storageToFields(); + fContactManager.storageToFields(); + fMiniManager.storageToFields(); + fFicheManager.storageToFields(); + fMatriceManager.storageToFields(); + + Notification.success('OK', 'Les données ont été supprimées'); + }, false); + + + + /* (8) Gestion de l'export des données locales + ---------------------------------------------------------*/ + $('[data-sublink="facebook"] #f_export-all').addEventListener('click', function(e){ + + Notification.info('INFORMATION', 'Lancement du téléchargement de la sauvegarde'); + + /* (1) On construit les données */ + var data = { + subject: lsi.export('f_subject')[0], + contacts: lsi.export('f_contacts'), + mini: lsi.export('f_mini-fiches'), + fiches: lsi.export('f_fiches'), + matrice: lsi.export('f_matrice')[0] + }; + + + /* (2) On lance le téléchargement */ + var downloadTarget = $('[data-sublink="facebook"] #f_download-target'); // On récupère le lien () caché qui fera le téléchargement + downloadTarget.download = 'local-facebook-data.json'; // Nom du fichier qui sera téléchargé + downloadTarget.href = 'data:application/octet-stream,' + encodeURIComponent(JSON.stringify(data)); // Contenu + downloadTarget.click(); // On lance le téléchargement + + }, false); + + + + + /* (9) Gestion de l'import des données locales + ---------------------------------------------------------*/ + // Le bouton lance l' file + $('[data-sublink="facebook"] #f_import-all').addEventListener('click', function(e){ + $('[data-sublink="facebook"] #f_local-upload').click(); + }, false); + + + // On vide l'input de type 'file' quand on clique + $('[data-sublink="facebook"] #f_local-upload').addEventListener('click', function(e){ + e.target.value = null; + }, false); + + // Gestion de l'upload d'une sauvegarde de formulaire local + $('[data-sublink="facebook"] #f_local-upload').addEventListener('change', function(e){ + /* (1) Rédaction de la requête d'upload */ + var request = { + path: 'upload/local_data', + file: $('[data-sublink="facebook"] #f_local-upload').files[0] + }; + + /* (2) Upload et réponse */ + api.send(request, function(response){ + console.log(response); + + // Si erreur, on quitte + if( response.ModuleError != 0 ){ + Notification.error('Erreur', response.ModuleError); + return false; + } + + /* (3) On enregistre les données dans le 'localStorage' */ + lsi.set('f_subject', 0, response.local_data.subject); + lsi.import('f_contacts', response.local_data.contacts); + lsi.import('f_mini-fiches', response.local_data.mini); + lsi.import('f_fiches', response.local_data.fiches); + lsi.set('f_matrice', 0, response.local_data.matrice); + + /* (3) On met à jour l'affichage */ + fSubjectManager.storageToFields(); + fContactManager.storageToFields(); + fMatriceManager.storageToFields(); + fDynamicUpdate(true); + + }); + + }, false); + + + + + /* (10) Gestion de la validation et de l'envoi des données + ---------------------------------------------------------*/ + $('[data-sublink="facebook"] #f_submit-all').addEventListener('click', function(e){ + console.log('> GATHERING ALL DATA'); + + /* (1) On met dans la mémoire tout les champs non enregistrés */ + fSubjectManager.fieldsToStorage(); + fContactManager.fieldsToStorage(); + fMiniManager.fieldsToStorage(); + fFicheManager.fieldsToStorage(); + + /* (2) Vérification de la validité de toutes les données */ + // {1} Vérification du sujet // + if( !fSubjectManager.check() ){ + Notification.warning('Attention', 'Vous devez saisir les informations du sujet'); + return false; + } + // {2} Vérification des mini-fiches // + var mini = lsi.export('f_mini-fiches'); + var i = 0; + for( var id in mini ){ if( !isNaN(id) ){ + + i++ + + if( !mini[id].valid ){ + Notification.warning('Attention', 'La fiche rapide '+i+' est incomplète et/ou incorrecte'); + return false; + } + + }} + // {3} Vérification des fiches // + var fiches = lsi.export('f_fiches'); + for( var id in fiches ) + if( !fiches[id].valid ){ + Notification.warning('Attention', 'La fiche complète '+(parseInt(id)+1)+' est incomplète et/ou incorrecte'); + return false; + } + + + + /* (3) On prépare la requête avec toutes les données */ + var request = { + path: 'input/facebook', + + subject: lsi.export('f_subject')[0], + contacts: lsi.export('f_contacts'), + mini: lsi.export('f_mini-fiches'), + fiches: lsi.export('f_fiches'), + matrice: lsi.export('f_matrice')[0] + }; + + /* (4) On envoie la requête et traite la réponse */ + api.send(request, function(response){ + console.log(response); + + // Si erreur, on la notifie + if( response.ModuleError != 0 ){ + Notification.error('ERREUR', response.ModuleError); + return false; + } + + console.log(response); + + }, false); + + + }, false); + + + }); }); }); }); }); + + + + +}); + + + + + + + + +