NxTIC/view/js/input.js

1310 lines
40 KiB
JavaScript

/*=========================================================*/
/*=========== Gestion de la recherche de sujet ============*/
/*=========================================================*/
var sField = $('#search-field');
var sSubmit = $('#search-subject');
var sList = $('section[data-sublink="survey"] ul[data-list]');
var tmpSubjectSearchListener = function(e){
/* (1) On construit la requête */
var request = {
path: 'subject/search',
name: sField.value
};
/* (2) On effectue la requête */
api.send(request, function(response){
// Si erreur
if( response.ModuleError != 0 ){
Notification.error('Erreur', 'La recherche a échoué.')
return false;
}
console.log(response);
/* (3) On remplit la liste des résultats */
var htmlContent = '';
for( var id in response.results ){
htmlContent += "<li data-element data-id='"+id+"'>";
htmlContent += "<div data-user><span>SUJET</span></div>";
htmlContent += "<div> <span><input type='text' readonly style='text-align: center' onclick='this.select()' class='flag' value='"+id+"'></span> </div>";
htmlContent += "<div> <span data-prefix='Nom'>"+response.results[id].name+"</span> </div>";
htmlContent += "<div> <span data-prefix='Création'>"+response.results[id].creation+"</span> </div>";
htmlContent += "<div> <span><input type='checkbox' id='s_"+id+"' "+((response.results[id].phone!=null)?'checked':'')+" disabled><label for='s_"+id+"'>Cellulaire</label>";
htmlContent += "</span> </div>";
htmlContent += "<div> <span><input type='checkbox' id='s_"+id+"' "+((response.results[id].facebook!=null)?'checked':'')+" disabled><label for='s_"+id+"'>Facebook</label>";
htmlContent += "</span> </div>";
htmlContent += "</li>";
}
sList.innerHTML = htmlContent;
});
};
sSubmit.addEventListener('click', tmpSubjectSearchListener, false);
sField.addEventListener('keypress', function(e){
if( e.keyCode === 13 )
tmpSubjectSearchListener(e);
}, false);
/* [1] Initialisation des utilitaires et variables PHONE
=========================================================*
/* (1) Initialisation des managers */
var pSubjectManager;
var pContactManager;
var pMiniManager;
var pFicheManager;
var pMatriceManager;
/* (2) Fonctions utiles */
function pDynamicUpdate(target){
/* (0) Vérification de la cohérence de la @target
---------------------------------------------------------*/
var isElement = target instanceof Element;
var isSaveButton = isElement && target.tagName == 'INPUT' && target.type == 'submit';
var isNavButton = isElement && target.tagName == 'SPAN' && (target.parentNode.id == 'p_nav-mini' || target.parentNode.id == 'p_nav-fiche');
var isNavContact = isElement && target.tagName == 'SPAN' && target.parentNode.id == 'p_nav-contact';
// Si erreur, on retourne une erreur
if( !isSaveButton && !isNavButton && !isNavContact && target !== true )
return false;
console.log('> dynamic update');
/* (1) On enregistre les MINI fiches relation */
pMiniManager.fieldsToStorage();
/* (2) On enregister les FICHES relation */
pFicheManager.fieldsToStorage();
/* (3) On enregistre les CONTACTS */
pContactManager.fieldsToStorage();
/* (4) On enregistre la MATRICE */
pMatriceManager.fieldsToStorage();
/* (5) On synchronise les FICHE avec les CONTACTS */
// 1. On synchronise les `mini` et `fiches` associées en fonction de la dernière date de modification
// 2. On synchronise les `fiches` dupliquées en fonction de la dernière date de modification
pFicheManager.sync();
/* (6) On synchronise les MINI avec les CONTACTS */
// Supprime les contacts déja dans les FICHES
pMiniManager.sync();
/* (7) On récupère tous les amis du sujet */
if( target === true ){
api.send({ path: 'subject/getFriends', subject_id: pSubjectManager.subject_id.value }, function(response){
// Si erreur, on quitte
if( response.ModuleError != 0 )
return false;
// On enregistre les contacts existants
lsi.import('p_friends', response.subjects);
/* (8) On affiche le tout */
pMiniManager.storageToFields();
pFicheManager.storageToFields();
pMatriceManager.storageToFields();
/* (8) On met à jour les contacts si on les a modifié on si on navigue dans les contacts */
pContactManager.storageToFields();
});
}else{
/* (8) On affiche le tout */
pMiniManager.storageToFields();
pFicheManager.storageToFields();
pMatriceManager.storageToFields();
/* (8) On met à jour les contacts si on les a modifié on si on navigue dans les contacts */
( isSaveButton || isNavContact ) && pContactManager.storageToFields();
}
}
/* [2] Initialisation des utilitaires et variables FACEBEOOK
=========================================================*
/* (1) Initialisation des managers */
var fSubjectManager;
var fContactManager;
var fMiniManager;
var fFicheManager;
var fMatriceManager;
/* (2) Fonctions utiles */
function fDynamicUpdate(target){
/* (0) Vérification de la cohérence de la @target
---------------------------------------------------------*/
var isElement = target instanceof Element;
var isSaveButton = isElement && target.tagName == 'INPUT' && target.type == 'submit';
var isNavButton = isElement && target.tagName == 'SPAN' && (target.parentNode.id == 'f_nav-mini' || target.parentNode.id == 'f_nav-fiche');
var isNavContact = isElement && target.tagName == 'SPAN' && target.parentNode.id == 'f_nav-contact';
// Si erreur, on retourne une erreur
if( !isSaveButton && !isNavButton && !isNavContact && target !== true )
return false;
console.log('> dynamic update');
/* (1) On enregistre les MINI fiches relation */
fMiniManager.fieldsToStorage();
/* (2) On enregister les FICHES relation */
fFicheManager.fieldsToStorage();
/* (3) On enregistre les CONTACTS */
fContactManager.fieldsToStorage();
/* (4) On enregistre la MATRICE */
fMatriceManager.fieldsToStorage();
/* (5) On synchronise les FICHE avec les CONTACTS */
// 1. On synchronise les `mini` et `fiches` associées en fonction de la dernière date de modification
// 2. On synchronise les `fiches` dupliquées en fonction de la dernière date de modification
fFicheManager.sync();
/* (6) On synchronise les MINI avec les CONTACTS */
// Supprime les contacts déja dans les FICHES
fMiniManager.sync();
/* (7) On récupère tous les amis du sujet */
if( target === true ){
api.send({ path: 'subject/getFriends', subject_id: fSubjectManager.subject_id.value }, function(response){
// Si erreur, on quitte
if( response.ModuleError != 0 )
return false;
// On enregistre les contacts existants
lsi.import('f_friends', response.subjects);
/* (8) On affiche le tout */
fMiniManager.storageToFields();
fFicheManager.storageToFields();
fMatriceManager.storageToFields();
/* (8) On met à jour les contacts si on les a modifié on si on navigue dans les contacts */
fContactManager.storageToFields();
});
}else{
/* (8) On affiche le tout */
fMiniManager.storageToFields();
fFicheManager.storageToFields();
fMatriceManager.storageToFields();
/* (8) On met à jour les contacts si on les a modifié on si on navigue dans les contacts */
if( isSaveButton || isNavContact )
fContactManager.storageToFields();
}
}
/*=========================================================*/
/*========== Gestion du formulaire téléphonique ===========*/
/*=========================================================*/
include('/js/includes/input-phone-subject-min.js', function(){
//TODO: Remettre version min
include('/js/includes/input-phone-contact.js', function(){
//TODO: Remettre version min
include('/js/includes/input-phone-mini.js', function(){
//TODO: Remettre version min
include('/js/includes/input-phone-fiche.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="submit"]')
);
/* (2) On le démarre */
pSubjectManager.attach(pDynamicUpdate);
/* (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();
var snakeAlready = false;
smgr.append('s+n+a+k+e', function(){ if( !snakeAlready ){ snakeAlready = true; 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',
// 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 <b>sujet</b> 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');
lsi.clear('p_friends');
/* (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 (<a>) 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'<input> 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 <i>sujet</i>');
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 <i>fiche rapide</i> <b>'+i+'</b> 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 <i>fiche complète</i> <b>'+(parseInt(id)+1)+'</b> 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 <strong>"+response.subject_id+"</strong> ! Tout s'est bien déroulé.", 10000);
console.log(response);
}, false);
}, false);
}); }); }); }); });
/*=========================================================*/
/*=========== Gestion du formulaire facebook ==============*/
/*=========================================================*/
include('/js/includes/input-facebook-subject-min.js', function(){
//TODO: Remettre version min
include('/js/includes/input-facebook-contact.js', function(){
//TODO: Remettre version min
include('/js/includes/input-facebook-mini.js', function(){
//TODO: Remettre version min
include('/js/includes/input-facebook-fiche.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(fDynamicUpdate);
/* (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');
lsi.clear('f_friends');
/* (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 (<a>) 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'<input> 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 <i>sujet</i>');
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 <i>fiche rapide</i> <b>'+i+'</b> 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 <i>fiche complète</i> <b>'+(parseInt(id)+1)+'</b> 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);
}); }); }); }); });
/*=========================================================*/
/*============= Routine de test CELLULAIRE ================*/
/*=========================================================*/
function testRoutinePhone(doMini){
/* [0] Récupération des données
=========================================================*/
var contacts = lsi.export('p_contacts');
var mini = lsi.export('p_mini-fiches');
var fiches = lsi.export('p_fiches');
var count = 0;
/* [1] Remplissage des mini-fiches
=========================================================*/
if( doMini != null && doMini ){
for( var m in mini ){
/* (0) Si la fiche n'est pas affichée, on passe à la suivante */
if( isNaN(m) )
continue;
/* (1) On récupére le nom du contact associé */
var name = '';
if( contacts[m] != null )
name = contacts[m].username;
/* (2) On remplit la mini fiche */
// {1} On se positionne sur la fiche en question //
var navBut = $('#p_nav-mini [data-n="'+m+'"]');
navBut.click();
// {2} Si la personne n'a pas de nom, on met que ce contact est inconnu, puis les valeurs par défaut //
$('#unknown_min_p_'+m).checked = name.length == 0;
/* (3) Si personne inconnue -> valeurs indéterminées */
if( name.length == 0 ){
// {1} Sexe indéterminé //
$('#sexeI_mini_p_'+m).checked = true;
// {2} Age indéterminé //
$('input[data-name="uid"][value="'+m+'"] ~ h5 select[data-name="age"]').value = count % 19;
// {3} Etudes indéterminées //
$('input[data-name="uid"][value="'+m+'"] ~ h5 select[data-name="studies"]').value = 0;
// {4} Type de relation inconnue //
$('#reltype9_mini_p_'+m).checked = true;
continue;
/* (4) Si la personne est connue on incrémente les valeurs */
}else{
// {1} On remplit le sexe //
var sexeVal = ['H', 'F'][ Math.floor(count % 2) ];
$('#sexe'+sexeVal+'_mini_p_'+m).checked = true;
// {2} On remplit l'age //
$('input[data-name="uid"][value="'+m+'"] ~ h5 select[data-name="age"]').value = count % 19;
// {3} On remplit les études //
$('input[data-name="uid"][value="'+m+'"] ~ h5 select[data-name="studies"]').value = 1 + (count % 6);
// {4} Type de relation //
var relVal = count % 10;
// Si AUTRE
if( relVal == 9 ){
$('#reltype10_mini_p_'+m).checked = true;
$('input[data-name="uid"][value="'+m+'"] ~ h5 input[data-name="reltypeSpecial"]').value = 'autre';
// Sinon
}else
$('#reltype'+relVal+'_mini_p_'+m).checked = true;
}
count++;
}
}
/* [2] Remplissage des fiches complètes
=========================================================*/
for( var f in fiches ){
/* (0) Si la fiche n'est pas affichée, on passe à la suivante */
if( isNaN(f) )
continue;
/* (1) On récupére le nom du contact associé */
var name = '';
if( contacts[fiches[f].contact] != null )
name = contacts[fiches[f].contact].username;
/* (2) On remplit la fiche */
// {1} On se positionne sur la fiche en question //
var navBut = $('#p_nav-fiche [data-n="'+f+'"]');
navBut.click();
// {1} On remplit le sexe //
var sexeVal = ['H', 'F', 'I'][ Math.floor(count % 3) ];
$('#sexe'+sexeVal+'_p_'+f).checked = true;
// {2} On remplit l'age //
$('article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 select[data-name="age"]').value = count % 19;
// {3} On remplit la profession //
var jobVal = ['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'];
jobVal = jobVal[ count % jobVal.length ];
$('article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 select[data-name="job"]').value = jobVal;
// {4} On remplit les études //
var stuVal = (count % 12).toString();
if( stuVal.length == 1 ) stuVal = '0'+stuVal;
$('article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 select[data-name="studies"]').value = stuVal;
// {5} Type de relation //
var relVal = count % 9;
// Si AUTRE
if( relVal == 8 ){
$('#reltype10_p_'+f).checked = true;
$('article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 input[data-name="reltypeSpecial"]').value = 'autre';
// Sinon
}else
$('#reltype'+relVal+'_p_'+f).checked = true;
// {6} La ville, le CP et le quartier //
$('article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 input[data-name="city"]').value = (10 + count).toString();
$('article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 input[data-name="cp"]').value = (10000 + count).toString();
$('article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 input[data-name="quartier"]').value = count;
// {7} Temps entre les domiciles //
var locVal = ['A', 'B', 'C', 'D'][ Math.floor(count % 4) ];
$('#loc'+locVal+'_p_'+f).checked = true;
// {8} Temps de connaissance //
var duration = $$('article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 input[data-name="duration"]');
duration[0].value = count.toString();
duration[1].value = 1+count.toString();
// {9} Contexte de rencontre //
var ctxVal = count % 14;
$('article.fiche-relation #contexte'+ctxVal+'_p_'+f).checked = true;
var ctxSpe = $$('article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 input[data-name="contextSpecial"]');
// Si special1
if( ctxVal == 11 )
ctxSpe[0].value = 'internet';
// Si special2
if( ctxVal == 12 )
ctxSpe[1].value = 'association';
// Si special3
if( ctxVal == 13 )
ctxSpe[2].value = 'autre';
count++;
}
}
/*=========================================================*/
/*============== Routine de test FACEBOOK =================*/
/*=========================================================*/
function testRoutineFacebook(doMini){
/* [0] Récupération des données
=========================================================*/
var contacts = lsi.export('f_contacts');
var mini = lsi.export('f_mini-fiches');
var fiches = lsi.export('f_fiches');
var count = 0;
/* [1] Remplissage des mini-fiches
=========================================================*/
if( doMini != null && doMini ){
for( var m in mini ){
/* (0) Si la fiche n'est pas affichée, on passe à la suivante */
if( isNaN(m) )
continue;
/* (1) On récupére le nom du contact associé */
var name = '';
if( contacts[m] != null )
name = contacts[m].username;
/* (2) On remplit la mini fiche */
// {1} On se positionne sur la fiche en question //
var navBut = $('#f_nav-mini [data-n="'+m+'"]');
navBut.click();
// {2} Si la personne n'a pas de nom, on met que ce contact est inconnu, puis les valeurs par défaut //
$('#unknown_min_f_'+m).checked = name.length == 0;
/* (3) Si personne inconnue -> valeurs indéterminées */
if( name.length == 0 ){
// {1} Sexe indéterminé //
$('#sexeI_mini_f_'+m).checked = true;
// {2} Age indéterminé //
$('input[data-name="uid"][value="'+m+'"] ~ h5 select[data-name="age"]').value = count % 19;
// {3} Etudes indéterminées //
$('input[data-name="uid"][value="'+m+'"] ~ h5 select[data-name="studies"]').value = 0;
// {4} Type de relation inconnue //
$('#reltype9_mini_f_'+m).checked = true;
continue;
/* (4) Si la personne est connue on incrémente les valeurs */
}else{
// {1} On remplit le sexe //
var sexeVal = ['H', 'F'][ Math.floor(count % 2) ];
$('#sexe'+sexeVal+'_mini_f_'+m).checked = true;
// {2} On remplit l'age //
$('input[data-name="uid"][value="'+m+'"] ~ h5 select[data-name="age"]').value = count % 19;
// {3} On remplit les études //
$('input[data-name="uid"][value="'+m+'"] ~ h5 select[data-name="studies"]').value = 1 + (count % 6);
// {4} Type de relation //
var relVal = count % 10;
// Si AUTRE
if( relVal == 9 ){
$('#reltype10_mini_f_'+m).checked = true;
$('input[data-name="uid"][value="'+m+'"] ~ h5 input[data-name="reltypeSpecial"]').value = 'autre';
// Sinon
}else
$('#reltype'+relVal+'_mini_f_'+m).checked = true;
}
count++;
}
}
/* [2] Remplissage des fiches complètes
=========================================================*/
for( var f in fiches ){
/* (0) Si la fiche n'est pas affichée, on passe à la suivante */
if( isNaN(f) )
continue;
/* (1) On récupére le nom du contact associé */
var name = '';
if( contacts[fiches[f].contact] != null )
name = contacts[fiches[f].contact].username;
/* (2) On remplit la fiche */
// {1} On se positionne sur la fiche en question //
var navBut = $('#f_nav-fiche [data-n="'+f+'"]');
navBut.click();
// {1} On remplit le sexe //
var sexeVal = ['H', 'F', 'I'][ Math.floor(count % 3) ];
$('#sexe'+sexeVal+'_f_'+f).checked = true;
// {2} On remplit l'age //
$('section[data-sublink="facebook"] article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 select[data-name="age"]').value = count % 19;
// {3} On remplit la profession //
var jobVal = ['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'];
jobVal = jobVal[ count % jobVal.length ];
$('section[data-sublink="facebook"] article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 select[data-name="job"]').value = jobVal;
// {4} On remplit les études //
var stuVal = (count % 12).toString();
if( stuVal.length == 1 ) stuVal = '0'+stuVal;
$('section[data-sublink="facebook"] article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 select[data-name="studies"]').value = stuVal;
// {5} Type de relation //
var relVal = count % 9;
// Si AUTRE
if( relVal == 8 ){
$('#reltype10_f_'+f).checked = true;
$('section[data-sublink="facebook"] article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 input[data-name="reltypeSpecial"]').value = 'autre';
// Sinon
}else
$('#reltype'+relVal+'_f_'+f).checked = true;
// {6} La ville, le CP et le quartier //
$('section[data-sublink="facebook"] article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 input[data-name="city"]').value = (10 + count).toString();
$('section[data-sublink="facebook"] article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 input[data-name="cp"]').value = (10000 + count).toString();
$('section[data-sublink="facebook"] article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 input[data-name="quartier"]').value = count;
// {7} Temps entre les domiciles //
var locVal = ['A', 'B', 'C', 'D'][ Math.floor(count % 4) ];
$('#loc'+locVal+'_f_'+f).checked = true;
// {8} Temps de connaissance //
var duration = $$('section[data-sublink="facebook"] article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 input[data-name="duration"]');
duration[0].value = count.toString();
duration[1].value = 1+count.toString();
// {9} Contexte de rencontre //
var ctxVal = count % 14;
$('section[data-sublink="facebook"] article.fiche-relation #contexte'+ctxVal+'_f_'+f).checked = true;
var ctxSpe = $$('section[data-sublink="facebook"] article.fiche-relation > input[data-name="uid"][value="'+f+'"] ~ h5 input[data-name="contextSpecial"]');
// Si special1
if( ctxVal == 11 )
ctxSpe[0].value = 'internet';
// Si special2
if( ctxVal == 12 )
ctxSpe[1].value = 'association';
// Si special3
if( ctxVal == 13 )
ctxSpe[2].value = 'autre';
count++;
}
}