Merged feature/input_phone into dev
This commit is contained in:
commit
6c764edddb
30
automate.php
30
automate.php
|
@ -44,11 +44,11 @@
|
||||||
echo $num.' <> '.$name.'<br>';
|
echo $num.' <> '.$name.'<br>';
|
||||||
}
|
}
|
||||||
|
|
||||||
parseCallLog();
|
// parseCallLog();
|
||||||
|
|
||||||
|
|
||||||
|
/* [1] Test du client de l'API generique
|
||||||
/* () Test du client de l'API generique */
|
=========================================================*/
|
||||||
// $api = new client();
|
// $api = new client();
|
||||||
|
|
||||||
// $response = $api->send('generate-network-chart-data', array(
|
// $response = $api->send('generate-network-chart-data', array(
|
||||||
|
@ -57,10 +57,32 @@
|
||||||
|
|
||||||
// var_dump($response);
|
// var_dump($response);
|
||||||
|
|
||||||
// var_dump( Database::delNumeric( Database::getPDO()->query("SHOW COLUMNS FROM users")->fetchAll() ) );
|
|
||||||
|
|
||||||
|
/* [2] Gestion du getter dynamique des Repos
|
||||||
|
=========================================================*/
|
||||||
// var_dump( \manager\repo\user::getById(1) );
|
// var_dump( \manager\repo\user::getById(1) );
|
||||||
// // var_dump( \manager\repo\user::getByLogin('xdrm') );
|
// // var_dump( \manager\repo\user::getByLogin('xdrm') );
|
||||||
// // var_dump( \manager\repo\subject::getById(1) );
|
// // var_dump( \manager\repo\subject::getById(1) );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [3] Test de la vérification du format de fichier pour l'upload
|
||||||
|
=========================================================*/
|
||||||
|
// ?>
|
||||||
|
<!-- <form action='' method='POST' enctype='multipart/form-data'>
|
||||||
|
<input type='file' name='file'>
|
||||||
|
<input type='submit' value='Upload'>
|
||||||
|
</form> -->
|
||||||
|
<?php //
|
||||||
|
// var_dump($_FILES);
|
||||||
|
//
|
||||||
|
// if( isset($_FILES) ){
|
||||||
|
//
|
||||||
|
// $request = new ModuleRequest('upload/local_data', array() );
|
||||||
|
// $response = $request->dispatch();
|
||||||
|
// var_dump( ManagerError::explicit($response->error) );
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -29,6 +29,13 @@
|
||||||
"description": "Méthode utile à phpunit pour le test des permissions.",
|
"description": "Méthode utile à phpunit pour le test des permissions.",
|
||||||
"permissions": ["a", "b"],
|
"permissions": ["a", "b"],
|
||||||
"parameters": {}
|
"parameters": {}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
"markdown": {
|
||||||
|
"description": "Retourne une description en markdown des différents modules de l'API",
|
||||||
|
"permissions": [],
|
||||||
|
"parameters": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -92,12 +99,12 @@
|
||||||
"description": "Recupere le contenu d'un fichier XML de journal d'appel s'il a été importé au préalable.",
|
"description": "Recupere le contenu d'un fichier XML de journal d'appel s'il a été importé au préalable.",
|
||||||
"permissions": [],
|
"permissions": [],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"phone_number": { "description": "Numéro de téléphone de l'interrogé.", "type": "phone_number" }
|
"phone_number": { "description": "Numéro de téléphone de l'interrogé.", "type": "number" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"charts": {
|
"chart": {
|
||||||
|
|
||||||
"network_data": {
|
"network_data": {
|
||||||
"description": "Renvoie un jeu de donnees fictif pour un graphique de type #network.",
|
"description": "Renvoie un jeu de donnees fictif pour un graphique de type #network.",
|
||||||
|
@ -178,13 +185,39 @@
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"input": {
|
||||||
|
|
||||||
|
"phone": {
|
||||||
|
"description": "Enregistre les données d'une enquête téléphonique.",
|
||||||
|
"permissions": ["admin"],
|
||||||
|
"parameters": {
|
||||||
|
"subject": { "description": "Données sur le sujet de l'enquête.", "type": "array" },
|
||||||
|
"contacts": { "description": "Données des contacts de l'enquête.", "type": "array<array>" },
|
||||||
|
"mini": { "description": "Mini fiches relations sur les contacts de l'enquête.", "type": "array<array>" },
|
||||||
|
"fiches": { "description": "Fiches relation sur les plus proches contacts de l'enquête.", "type": "array<array>" }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
"upload": {
|
"upload": {
|
||||||
|
|
||||||
"call_log": {
|
"call_log": {
|
||||||
"description": "Upload d'un journal d'appel au format .xml.",
|
"description": "Upload d'un journal d'appel au format .xml.",
|
||||||
"permissions": ["admin"],
|
"permissions": ["admin"],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"file": { "description": "Fichier du journal d'appel", "type": "FILE" }
|
"phone_number": { "description": "Numéro de téléphone de l'interrogé.", "type": "number" },
|
||||||
|
"file": { "description": "Fichier du journal d'appel.", "type": "FILE" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
"local_data": {
|
||||||
|
"description": "Upload d'une sauvegarde de formulaire local au format .json.",
|
||||||
|
"permissions": ["admin"],
|
||||||
|
"parameters": {
|
||||||
|
"file": { "description": "Fichier du de sauvegarde de formulaire local.", "type": "FILE" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
"root": "/src/upload",
|
"root": "/src/upload",
|
||||||
"directories": [
|
"directories": [
|
||||||
"call_log",
|
"call_log",
|
||||||
|
"local_data",
|
||||||
"spss",
|
"spss",
|
||||||
"pspp"
|
"pspp"
|
||||||
]
|
]
|
||||||
|
|
|
@ -82,6 +82,7 @@
|
||||||
-ms-user-select: none; /* IE/Edge */
|
-ms-user-select: none; /* IE/Edge */
|
||||||
user-select: none; /* non-prefixed */
|
user-select: none; /* non-prefixed */
|
||||||
|
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
// Receptacle
|
// Receptacle
|
||||||
&:before{
|
&:before{
|
||||||
|
@ -104,6 +105,11 @@
|
||||||
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Animation de hover pour le texte
|
||||||
|
&:hover{
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Quand actif
|
// Quand actif
|
||||||
|
@ -117,6 +123,10 @@
|
||||||
// Specifique a checkbox
|
// Specifique a checkbox
|
||||||
& input[type="checkbox"] + label[for]:before{
|
& input[type="checkbox"] + label[for]:before{
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
|
@include transition( border .1s ease-in-out );
|
||||||
|
}
|
||||||
|
& input[type="checkbox"] + label[for]:hover:before{
|
||||||
|
border-color: darken($theme-fg-primary, 15);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -6,9 +6,9 @@
|
||||||
"../constants.scss"
|
"../constants.scss"
|
||||||
],
|
],
|
||||||
"sourcesContent": [
|
"sourcesContent": [
|
||||||
"@import 'constants.scss';\n\n#WRAPPER > #CONTAINER{\n\n\t/* [1] Section (contenu)\n\t=========================================================*/\n\t& > section{\n\t\tdisplay: none;\n\n\t\tmargin: 3em;\n\n\t\t// Gestion de l'activation des sous-parties\n\t\t&.active{ display: block; }\n\n\t\t// Gestion d'une section contenant des graphiques\n\t\t&.charts{\n\t\t\tdisplay: flex;\n\n\t\t\tflex-direction: row;\n\t\t\tflex-wrap: wrap;\n\t\t\tjustify-content: space-around;\n\t\t}\n\n\t\tposition: relative;\n\t\tflex-grow: 1;\n\n\t\tpadding: 1em;\n\n\t\tborder-radius: 3px;\n\n\t\tbackground-color: #fff;\n\n\t\tcolor: #000;\n\t\tfont-size: 1em;\n\n\t\tborder: 1px solid #ddd;\n\n\n\n\t\t/* [2] Titres\n\t\t=========================================================*/\n\t\t& h6{\n\t\t\tcolor: lighten($theme-fg, 20);\n\t\t\tfont-size: 1.2em;\n\t\t\ttext-transform: uppercase;\n\t\t\tfont-weight: 300;\n\t\t\tletter-spacing: .2em;\n\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\n\t\t\t&:before{content:'- ';}\n\t\t\t&:after{content:' -';}\n\n\t\t\t// quand centré\n\t\t\t&.center{\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t}\n\n\n\n\n\n\t\t/* [3][4] Boutons radio + Checkboxes\n\t\t=========================================================*/\n\t\t& input[type=\"radio\"],\n\t\t& input[type=\"checkbox\"]{\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t// Label\n\t\t& input[type=\"radio\"] + label[for],\n\t\t& input[type=\"checkbox\"] + label[for]{\n\t\t\tpadding-left: .8em;\n\n\t\t\t// Pas de selection\n\t\t\t-webkit-touch-callout: none; /* iOS Safari */\n\t\t\t-webkit-user-select: none; /* Chrome/Safari/Opera */\n\t\t\t-khtml-user-select: none; /* Konqueror */\n\t\t\t-moz-user-select: none; /* Firefox */\n\t\t\t-ms-user-select: none; /* IE/Edge */\n\t\t\tuser-select: none; /* non-prefixed */\n\n\n\t\t\t// Receptacle\n\t\t\t&:before{\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tposition: relative;\n\t\t\t\t\ttop: .1em;\n\t\t\t\t\tleft: -.8em;\n\t\t\t\t\twidth: calc( 1em - 2*.15em );\n\t\t\t\t\theight: calc( 1em - 2*.15em );\n\n\t\t\t\tborder-radius: 50% / 50%;\n\t\t\t\tborder: .15em solid $theme-fg-primary;\n\n\t\t\t\tbackground: #fff center center no-repeat;\n\t\t\t\tbackground-image: none;\n\t\t\t\tbackground-size: 70% auto;\n\n\t\t\t\t@include transition( background .2s ease-in-out );\n\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\t\t}\n\n\t\t// Quand actif\n\t\t& input[type=\"radio\"]:checked + label[for]:before,\n\t\t& input[type=\"checkbox\"]:checked + label[for]:before{\n\t\t\tbackground-color: $theme-fg-primary;\n\t\t\tbackground-image: url('/f/svg/checked/st/container');\n\t\t}\n\n\n\t\t// Specifique a checkbox\n\t\t& input[type=\"checkbox\"] + label[for]:before{\n\t\t\tborder-radius: 3px;\n\t\t}\n\n\n\n\n\n\t\t/* [5] Boutons de submit\n\t\t=========================================================*/\n\t\t& input[type=\"submit\"],\n\t\t& input[type=\"button\"]{\n\t\t\tmargin: .5em 0;\n\t\t\tpadding: .3em .5em;\n\n\t\t\tborder-radius: 3px;\n\t\t\tborder: 1px solid $theme-fg;\n\n\t\t\tcolor: $theme-fg;\n\n\t\t\tbackground-color: #fff;\n\n\t\t\t@include transition( background .1s ease-in-out, color .1s ease-in-out );\n\n\t\t\t/* (1) Animation de @hover */\n\t\t\t&:hover{\n\t\t\t\tbackground-color: $theme-fg;\n\t\t\t\tcolor: #fff;\n\t\t\t}\n\n\n\t\t\t/* (2) Bouton primaire */\n\t\t\t&.primary{\n\t\t\t\tborder-color: $theme-fg-primary;\n\t\t\t\tcolor: $theme-fg-primary;\n\t\t\t\tbackground-color: #fff;\n\n\n\t\t\t\t/* (3) Animation de @hover pour bouton primaire */\n\t\t\t\t&:hover{\n\t\t\t\t\tbackground-color: $theme-fg-primary;\n\t\t\t\t\tcolor: #fff;\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t}\n\n\t\t/* [6] Images inline\n\t\t=========================================================*/\n\t\t& img{\n\t\t\tmargin: 1em;\n\t\t\theight: 3em;\n\t\t}\n\n\t\t/* [7] Contour flags\n\t\t=========================================================*/\n\t\t& .flag{\n\t\t\tmargin: 0 .8em;\n\t\t\tpadding: .2em .5em;\n\n\t\t\tborder-radius: 5px;\n\t\t\tborder: 1px solid #b5b5b5;\n\n\t\t\tcolor: #555;\n\t\t\tfont-family: 'Inconsolata';\n\t\t}\n\n\n\t}\n\n}\n",
|
"@import 'constants.scss';\n\n#WRAPPER > #CONTAINER{\n\n\t/* [1] Section (contenu)\n\t=========================================================*/\n\t& > section{\n\t\tdisplay: none;\n\n\t\tmargin: 3em;\n\n\t\t// Gestion de l'activation des sous-parties\n\t\t&.active{ display: block; }\n\n\t\t// Gestion d'une section contenant des graphiques\n\t\t&.charts{\n\t\t\tdisplay: flex;\n\n\t\t\tflex-direction: row;\n\t\t\tflex-wrap: wrap;\n\t\t\tjustify-content: space-around;\n\t\t}\n\n\t\tposition: relative;\n\t\tflex-grow: 1;\n\n\t\tpadding: 1em;\n\n\t\tborder-radius: 3px;\n\n\t\tbackground-color: #fff;\n\n\t\tcolor: #000;\n\t\tfont-size: 1em;\n\n\t\tborder: 1px solid #ddd;\n\n\n\n\t\t/* [2] Titres\n\t\t=========================================================*/\n\t\t& h6{\n\t\t\tcolor: lighten($theme-fg, 20);\n\t\t\tfont-size: 1.2em;\n\t\t\ttext-transform: uppercase;\n\t\t\tfont-weight: 300;\n\t\t\tletter-spacing: .2em;\n\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\n\t\t\t&:before{content:'- ';}\n\t\t\t&:after{content:' -';}\n\n\t\t\t// quand centré\n\t\t\t&.center{\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t}\n\n\n\n\n\n\t\t/* [3][4] Boutons radio + Checkboxes\n\t\t=========================================================*/\n\t\t& input[type=\"radio\"],\n\t\t& input[type=\"checkbox\"]{\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t// Label\n\t\t& input[type=\"radio\"] + label[for],\n\t\t& input[type=\"checkbox\"] + label[for]{\n\t\t\tpadding-left: .8em;\n\n\t\t\t// Pas de selection\n\t\t\t-webkit-touch-callout: none; /* iOS Safari */\n\t\t\t-webkit-user-select: none; /* Chrome/Safari/Opera */\n\t\t\t-khtml-user-select: none; /* Konqueror */\n\t\t\t-moz-user-select: none; /* Firefox */\n\t\t\t-ms-user-select: none; /* IE/Edge */\n\t\t\tuser-select: none; /* non-prefixed */\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Receptacle\n\t\t\t&:before{\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tposition: relative;\n\t\t\t\t\ttop: .1em;\n\t\t\t\t\tleft: -.8em;\n\t\t\t\t\twidth: calc( 1em - 2*.15em );\n\t\t\t\t\theight: calc( 1em - 2*.15em );\n\n\t\t\t\tborder-radius: 50% / 50%;\n\t\t\t\tborder: .15em solid $theme-fg-primary;\n\n\t\t\t\tbackground: #fff center center no-repeat;\n\t\t\t\tbackground-image: none;\n\t\t\t\tbackground-size: 70% auto;\n\n\t\t\t\t@include transition( background .2s ease-in-out );\n\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\n\t\t\t// Animation de hover pour le texte\n\t\t\t&:hover{\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\t\t}\n\n\t\t// Quand actif\n\t\t& input[type=\"radio\"]:checked + label[for]:before,\n\t\t& input[type=\"checkbox\"]:checked + label[for]:before{\n\t\t\tbackground-color: $theme-fg-primary;\n\t\t\tbackground-image: url('/f/svg/checked/st/container');\n\t\t}\n\n\n\t\t// Specifique a checkbox\n\t\t& input[type=\"checkbox\"] + label[for]:before{\n\t\t\tborder-radius: 3px;\n\t\t\t@include transition( border .1s ease-in-out );\n\t\t}\n\t\t& input[type=\"checkbox\"] + label[for]:hover:before{\n\t\t\tborder-color: darken($theme-fg-primary, 15);\n\t\t}\n\n\n\n\n\n\t\t/* [5] Boutons de submit\n\t\t=========================================================*/\n\t\t& input[type=\"submit\"],\n\t\t& input[type=\"button\"]{\n\t\t\tmargin: .5em 0;\n\t\t\tpadding: .3em .5em;\n\n\t\t\tborder-radius: 3px;\n\t\t\tborder: 1px solid $theme-fg;\n\n\t\t\tcolor: $theme-fg;\n\n\t\t\tbackground-color: #fff;\n\n\t\t\t@include transition( background .1s ease-in-out, color .1s ease-in-out );\n\n\t\t\t/* (1) Animation de @hover */\n\t\t\t&:hover{\n\t\t\t\tbackground-color: $theme-fg;\n\t\t\t\tcolor: #fff;\n\t\t\t}\n\n\n\t\t\t/* (2) Bouton primaire */\n\t\t\t&.primary{\n\t\t\t\tborder-color: $theme-fg-primary;\n\t\t\t\tcolor: $theme-fg-primary;\n\t\t\t\tbackground-color: #fff;\n\n\n\t\t\t\t/* (3) Animation de @hover pour bouton primaire */\n\t\t\t\t&:hover{\n\t\t\t\t\tbackground-color: $theme-fg-primary;\n\t\t\t\t\tcolor: #fff;\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t}\n\n\t\t/* [6] Images inline\n\t\t=========================================================*/\n\t\t& img{\n\t\t\tmargin: 1em;\n\t\t\theight: 3em;\n\t\t}\n\n\t\t/* [7] Contour flags\n\t\t=========================================================*/\n\t\t& .flag{\n\t\t\tmargin: 0 .8em;\n\t\t\tpadding: .2em .5em;\n\n\t\t\tborder-radius: 5px;\n\t\t\tborder: 1px solid #b5b5b5;\n\n\t\t\tcolor: #555;\n\t\t\tfont-family: 'Inconsolata';\n\t\t}\n\n\n\t}\n\n}\n",
|
||||||
"/* [1] COULEURS\n=========================================================*/\n/* (1) COULEURS DU THEME $DEFAULT */\n$theme-bg: #e8e8e8;\n$theme-bg-primary: #ffffff;\n$theme-fg: #515151;\n$theme-fg-primary: #399ced;\n\n/* (2) COULEURS DE THEME $DARK */\n$dark-bg: #313541;\n$dark-bg-primary: #29282e;\n$dark-fg: #939393;\n$dark-fg-primary: #ffffff;\n\n$header-dark: #333333;\n\n/* (3) Couleurs du theme pour la timeline */\n$timeline-color: #399ced;\n\n/* [2] DIMENSIONS\n=========================================================*/\n/* (1) Layout de base */\n$menu-side-width: 15em;\n$header-height: 4em;\n\n\n\n/* [3] Mixins\n=========================================================*/\n@mixin transform($value...) {\n transform: $value;\n\t-moz-transform: $value;\n\t-o-transform: $value;\n\t-ms-transform: $value;\n\t-webkit-transform: $value;\n}\n\n\n@mixin transition($value...) {\n -webkit-transition: $value;\n transition: $value;\n}\n"
|
"/* [1] COULEURS\n=========================================================*/\n/* (1) COULEURS DU THEME $DEFAULT */\n$theme-bg: #e8e8e8;\n$theme-bg-primary: #ffffff;\n$theme-fg: #515151;\n$theme-fg-primary: #399ced;\n\n/* (2) COULEURS DE THEME $DARK */\n$dark-bg: #313541;\n$dark-bg-primary: #29282e;\n$dark-fg: #939393;\n$dark-fg-primary: #ffffff;\n\n$header-dark: #333333;\n\n/* (3) Couleurs du theme pour la timeline */\n$timeline-color: #738394;\n$timeline-0: #399ced;\n$timeline-1: #e64e3e;\n$timeline-2: #10baa3;\n$timeline-3: #b14be7;\n$timeline-4: #053b5d;\n\n\n/* [2] DIMENSIONS\n=========================================================*/\n/* (1) Layout de base */\n$menu-side-width: 15em;\n$header-height: 4em;\n\n\n\n/* [3] Mixins\n=========================================================*/\n@mixin transform($value...) {\n transform: $value;\n\t-moz-transform: $value;\n\t-o-transform: $value;\n\t-ms-transform: $value;\n\t-webkit-transform: $value;\n}\n\n\n@mixin transition($value...) {\n -webkit-transition: $value;\n transition: $value;\n}\n\n/* [4] Functions\n=========================================================*/\n// Transforme une couleur hex en string sans le #\n@function color-str($color){\n @return str-slice(#{$color}, 2, str-length(#{$color}));\n}\n"
|
||||||
],
|
],
|
||||||
"mappings": "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",
|
"mappings": "ACAA;2DAC2D;AAC3D,oCAAoC;AAMpC,iCAAiC;AAQjC,4CAA4C;AAS5C;2DAC2D;AAC3D,wBAAwB;AAMxB;2DAC2D;AAe3D;2DAC2D;ADhD3D,QAAQ,GAAG,UAAU,CAAA;EAEpB;4DAC2D;CAiM3D;;AApMD,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAAA;EACV,OAAO,EAAE,IAAK;EAEd,MAAM,EAAE,GAAI;EAcZ,QAAQ,EAAE,QAAS;EACnB,SAAS,EAAE,CAAE;EAEb,OAAO,EAAE,GAAI;EAEb,aAAa,EAAE,GAAI;EAEnB,gBAAgB,EAAE,IAAK;EAEvB,KAAK,EAAE,IAAK;EACZ,SAAS,EAAE,GAAI;EAEf,MAAM,EAAE,cAAe;EAIvB;6DAC2D;EAwB3D;6DAC2D;EAsE3D;6DAC2D;EAuC3D;6DAC2D;EAM3D;6DAC2D;CAa3D;;AAlMF,QAAQ,GAAG,UAAU,GAIhB,OAAO,AAMT,OAAO,CAAA;EAAE,OAAO,EAAE,KAAM;CAAI;;AAV/B,QAAQ,GAAG,UAAU,GAIhB,OAAO,AAST,OAAO,CAAA;EACP,OAAO,EAAE,IAAK;EAEd,cAAc,EAAE,GAAI;EACpB,SAAS,EAAE,IAAK;EAChB,eAAe,EAAE,YAAa;CAC9B;;AAnBH,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAmCR,EAAE,CAAA;EACH,KAAK,EAAE,OAAO;EACd,SAAS,EAAE,KAAM;EACjB,cAAc,EAAE,SAAU;EAC1B,WAAW,EAAE,GAAI;EACjB,cAAc,EAAE,IAAK;EAErB,MAAM,EAAE,CAAE;EACV,OAAO,EAAE,CAAE;CASX;;AAxDH,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAmCR,EAAE,AAUF,OAAO,CAAA;EAAC,OAAO,EAAC,IAAK;CAAG;;AAjD5B,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAmCR,EAAE,AAWF,MAAM,CAAA;EAAC,OAAO,EAAC,IAAK;CAAG;;AAlD3B,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAmCR,EAAE,AAcF,OAAO,CAAA;EACP,UAAU,EAAE,MAAO;CACnB;;AAvDJ,QAAQ,GAAG,UAAU,GAIhB,OAAO,CA4DR,KAAK,CAAA,AAAA,IAAC,CAAK,OAAO,AAAZ;AAhEV,QAAQ,GAAG,UAAU,GAIhB,OAAO,CA6DR,KAAK,CAAA,AAAA,IAAC,CAAK,UAAU,AAAf,EAAgB;EACvB,OAAO,EAAE,IAAK;CACd;;AAnEH,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAkER,KAAK,CAAA,AAAA,IAAC,CAAK,OAAO,AAAZ,IAAgB,KAAK,CAAA,AAAA,GAAC,AAAA;AAtEhC,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAmER,KAAK,CAAA,AAAA,IAAC,CAAK,UAAU,AAAf,IAAmB,KAAK,CAAA,AAAA,GAAC,AAAA,EAAI;EACpC,YAAY,EAAE,IAAK;EAGnB,qBAAqB,EAAE,IAAK;EAAE,yBAAyB;EACvD,mBAAmB,EAAI,IAAK;EAAE,yBAAyB;EACvD,kBAAkB,EAAK,IAAK;EAAE,yBAAyB;EACvD,gBAAgB,EAAO,IAAK;EAAE,yBAAyB;EACvD,eAAe,EAAQ,IAAK;EAAE,yBAAyB;EACvD,WAAW,EAAY,IAAK;EAAE,yBAAyB;EAEvD,MAAM,EAAE,OAAQ;CA4BhB;;AA9GH,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAkER,KAAK,CAAA,AAAA,IAAC,CAAK,OAAO,AAAZ,IAAgB,KAAK,CAAA,AAAA,GAAC,AAAA,CAe5B,OAAO;AArFX,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAmER,KAAK,CAAA,AAAA,IAAC,CAAK,UAAU,AAAf,IAAmB,KAAK,CAAA,AAAA,GAAC,AAAA,CAc/B,OAAO,CAAA;EACP,OAAO,EAAE,EAAG;EACZ,OAAO,EAAE,YAAa;EACtB,QAAQ,EAAE,QAAS;EAClB,GAAG,EAAE,IAAK;EACV,IAAI,EAAE,KAAM;EACZ,KAAK,EAAE,oBAAI;EACX,MAAM,EAAE,oBAAI;EAEb,aAAa,EAAE,SAAU;EACzB,MAAM,EAAE,MAAK,CAAC,KAAK,CC3FJ,OAAO;ED6FtB,UAAU,EAAE,4BAA6B;EACzC,gBAAgB,EAAE,IAAK;EACvB,eAAe,EAAE,QAAS;ECxD1B,kBAAkB,ED0DG,UAAU,CAAC,IAAG,CAAC,WAAW;ECzD/C,UAAU,EDyDW,UAAU,CAAC,IAAG,CAAC,WAAW;EAE/C,MAAM,EAAE,OAAQ;CAChB;;AAxGJ,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAkER,KAAK,CAAA,AAAA,IAAC,CAAK,OAAO,AAAZ,IAAgB,KAAK,CAAA,AAAA,GAAC,AAAA,CAqC5B,MAAM;AA3GV,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAmER,KAAK,CAAA,AAAA,IAAC,CAAK,UAAU,AAAf,IAAmB,KAAK,CAAA,AAAA,GAAC,AAAA,CAoC/B,MAAM,CAAA;EACN,eAAe,EAAE,SAAU;CAC3B;;AA7GJ,QAAQ,GAAG,UAAU,GAIhB,OAAO,CA6GR,KAAK,CAAA,AAAA,IAAC,CAAK,OAAO,AAAZ,CAAa,QAAQ,GAAG,KAAK,CAAA,AAAA,GAAC,AAAA,CAAI,OAAO;AAjHnD,QAAQ,GAAG,UAAU,GAIhB,OAAO,CA8GR,KAAK,CAAA,AAAA,IAAC,CAAK,UAAU,AAAf,CAAgB,QAAQ,GAAG,KAAK,CAAA,AAAA,GAAC,AAAA,CAAI,OAAO,CAAA;EACnD,gBAAgB,EC/GA,OAAO;EDgHvB,gBAAgB,EAAE,kCAAG;CACrB;;AArHH,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAqHR,KAAK,CAAA,AAAA,IAAC,CAAK,UAAU,AAAf,IAAmB,KAAK,CAAA,AAAA,GAAC,AAAA,CAAI,OAAO,CAAA;EAC3C,aAAa,EAAE,GAAI;EC/ElB,kBAAkB,EDgFE,MAAM,CAAC,IAAG,CAAC,WAAW;EC/E1C,UAAU,ED+EU,MAAM,CAAC,IAAG,CAAC,WAAW;CAC3C;;AA5HH,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAyHR,KAAK,CAAA,AAAA,IAAC,CAAK,UAAU,AAAf,IAAmB,KAAK,CAAA,AAAA,GAAC,AAAA,CAAI,MAAM,AAAA,OAAO,CAAA;EACjD,YAAY,EAAE,OAAM;CACpB;;AA/HH,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAmIR,KAAK,CAAA,AAAA,IAAC,CAAK,QAAQ,AAAb;AAvIV,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAoIR,KAAK,CAAA,AAAA,IAAC,CAAK,QAAQ,AAAb,EAAc;EACrB,MAAM,EAAE,MAAO;EACf,OAAO,EAAE,SAAU;EAEnB,aAAa,EAAE,GAAI;EACnB,MAAM,EAAE,GAAG,CAAC,KAAK,CC1ID,OAAO;ED4IvB,KAAK,EC5IW,OAAO;ED8IvB,gBAAgB,EAAE,IAAK;ECtGtB,kBAAkB,EDwGE,UAAU,CAAC,IAAG,CAAC,WAAW,EAAE,KAAK,CAAC,IAAG,CAAC,WAAW;ECvGrE,UAAU,EDuGU,UAAU,CAAC,IAAG,CAAC,WAAW,EAAE,KAAK,CAAC,IAAG,CAAC,WAAW;EAEtE,6BAA6B;EAO7B,yBAAyB;CAezB;;AA3KH,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAmIR,KAAK,CAAA,AAAA,IAAC,CAAK,QAAQ,AAAb,CAeN,MAAM;AAtJV,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAoIR,KAAK,CAAA,AAAA,IAAC,CAAK,QAAQ,AAAb,CAcN,MAAM,CAAA;EACN,gBAAgB,ECpJD,OAAO;EDqJtB,KAAK,EAAE,IAAK;CACZ;;AAzJJ,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAmIR,KAAK,CAAA,AAAA,IAAC,CAAK,QAAQ,AAAb,CAsBN,QAAQ;AA7JZ,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAoIR,KAAK,CAAA,AAAA,IAAC,CAAK,QAAQ,AAAb,CAqBN,QAAQ,CAAA;EACR,YAAY,EC1JG,OAAO;ED2JtB,KAAK,EC3JU,OAAO;ED4JtB,gBAAgB,EAAE,IAAK;EAGvB,kDAAkD;CAKlD;;AAxKJ,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAmIR,KAAK,CAAA,AAAA,IAAC,CAAK,QAAQ,AAAb,CAsBN,QAAQ,AAOP,MAAM;AApKX,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAoIR,KAAK,CAAA,AAAA,IAAC,CAAK,QAAQ,AAAb,CAqBN,QAAQ,AAOP,MAAM,CAAA;EACN,gBAAgB,ECjKF,OAAO;EDkKrB,KAAK,EAAE,IAAK;CACZ;;AAvKL,QAAQ,GAAG,UAAU,GAIhB,OAAO,CA2KR,GAAG,CAAA;EACJ,MAAM,EAAE,GAAI;EACZ,MAAM,EAAE,GAAI;CACZ;;AAlLH,QAAQ,GAAG,UAAU,GAIhB,OAAO,CAkLR,KAAK,CAAA;EACN,MAAM,EAAE,MAAO;EACf,OAAO,EAAE,SAAU;EAEnB,aAAa,EAAE,GAAI;EACnB,MAAM,EAAE,iBAAkB;EAE1B,KAAK,EAAE,IAAK;EACZ,WAAW,EAAE,aAAc;CAC3B",
|
||||||
"names": []
|
"names": []
|
||||||
}
|
}
|
File diff suppressed because one or more lines are too long
|
@ -6,9 +6,9 @@
|
||||||
"../constants.scss"
|
"../constants.scss"
|
||||||
],
|
],
|
||||||
"sourcesContent": [
|
"sourcesContent": [
|
||||||
"@import 'constants.scss';\n\n#WRAPPER > #CONTAINER{\n\n\t/* [1] Section (contenu)\n\t=========================================================*/\n\t& > section{\n\t\tdisplay: none;\n\n\t\tmargin: 3em;\n\n\t\t// Gestion de l'activation des sous-parties\n\t\t&.active{ display: block; }\n\n\t\t// Gestion d'une section contenant des graphiques\n\t\t&.charts{\n\t\t\tdisplay: flex;\n\n\t\t\tflex-direction: row;\n\t\t\tflex-wrap: wrap;\n\t\t\tjustify-content: space-around;\n\t\t}\n\n\t\tposition: relative;\n\t\tflex-grow: 1;\n\n\t\tpadding: 1em;\n\n\t\tborder-radius: 3px;\n\n\t\tbackground-color: #fff;\n\n\t\tcolor: #000;\n\t\tfont-size: 1em;\n\n\t\tborder: 1px solid #ddd;\n\n\n\n\t\t/* [2] Titres\n\t\t=========================================================*/\n\t\t& h6{\n\t\t\tcolor: lighten($theme-fg, 20);\n\t\t\tfont-size: 1.2em;\n\t\t\ttext-transform: uppercase;\n\t\t\tfont-weight: 300;\n\t\t\tletter-spacing: .2em;\n\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\n\t\t\t&:before{content:'- ';}\n\t\t\t&:after{content:' -';}\n\n\t\t\t// quand centré\n\t\t\t&.center{\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t}\n\n\n\n\n\n\t\t/* [3][4] Boutons radio + Checkboxes\n\t\t=========================================================*/\n\t\t& input[type=\"radio\"],\n\t\t& input[type=\"checkbox\"]{\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t// Label\n\t\t& input[type=\"radio\"] + label[for],\n\t\t& input[type=\"checkbox\"] + label[for]{\n\t\t\tpadding-left: .8em;\n\n\t\t\t// Pas de selection\n\t\t\t-webkit-touch-callout: none; /* iOS Safari */\n\t\t\t-webkit-user-select: none; /* Chrome/Safari/Opera */\n\t\t\t-khtml-user-select: none; /* Konqueror */\n\t\t\t-moz-user-select: none; /* Firefox */\n\t\t\t-ms-user-select: none; /* IE/Edge */\n\t\t\tuser-select: none; /* non-prefixed */\n\n\n\t\t\t// Receptacle\n\t\t\t&:before{\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tposition: relative;\n\t\t\t\t\ttop: .1em;\n\t\t\t\t\tleft: -.8em;\n\t\t\t\t\twidth: calc( 1em - 2*.15em );\n\t\t\t\t\theight: calc( 1em - 2*.15em );\n\n\t\t\t\tborder-radius: 50% / 50%;\n\t\t\t\tborder: .15em solid $theme-fg-primary;\n\n\t\t\t\tbackground: #fff center center no-repeat;\n\t\t\t\tbackground-image: none;\n\t\t\t\tbackground-size: 70% auto;\n\n\t\t\t\t@include transition( background .2s ease-in-out );\n\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\t\t}\n\n\t\t// Quand actif\n\t\t& input[type=\"radio\"]:checked + label[for]:before,\n\t\t& input[type=\"checkbox\"]:checked + label[for]:before{\n\t\t\tbackground-color: $theme-fg-primary;\n\t\t\tbackground-image: url('/f/svg/checked/st/container');\n\t\t}\n\n\n\t\t// Specifique a checkbox\n\t\t& input[type=\"checkbox\"] + label[for]:before{\n\t\t\tborder-radius: 3px;\n\t\t}\n\n\n\n\n\n\t\t/* [5] Boutons de submit\n\t\t=========================================================*/\n\t\t& input[type=\"submit\"],\n\t\t& input[type=\"button\"]{\n\t\t\tmargin: .5em 0;\n\t\t\tpadding: .3em .5em;\n\n\t\t\tborder-radius: 3px;\n\t\t\tborder: 1px solid $theme-fg;\n\n\t\t\tcolor: $theme-fg;\n\n\t\t\tbackground-color: #fff;\n\n\t\t\t@include transition( background .1s ease-in-out, color .1s ease-in-out );\n\n\t\t\t/* (1) Animation de @hover */\n\t\t\t&:hover{\n\t\t\t\tbackground-color: $theme-fg;\n\t\t\t\tcolor: #fff;\n\t\t\t}\n\n\n\t\t\t/* (2) Bouton primaire */\n\t\t\t&.primary{\n\t\t\t\tborder-color: $theme-fg-primary;\n\t\t\t\tcolor: $theme-fg-primary;\n\t\t\t\tbackground-color: #fff;\n\n\n\t\t\t\t/* (3) Animation de @hover pour bouton primaire */\n\t\t\t\t&:hover{\n\t\t\t\t\tbackground-color: $theme-fg-primary;\n\t\t\t\t\tcolor: #fff;\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t}\n\n\t\t/* [6] Images inline\n\t\t=========================================================*/\n\t\t& img{\n\t\t\tmargin: 1em;\n\t\t\theight: 3em;\n\t\t}\n\n\t\t/* [7] Contour flags\n\t\t=========================================================*/\n\t\t& .flag{\n\t\t\tmargin: 0 .8em;\n\t\t\tpadding: .2em .5em;\n\n\t\t\tborder-radius: 5px;\n\t\t\tborder: 1px solid #b5b5b5;\n\n\t\t\tcolor: #555;\n\t\t\tfont-family: 'Inconsolata';\n\t\t}\n\n\n\t}\n\n}\n",
|
"@import 'constants.scss';\n\n#WRAPPER > #CONTAINER{\n\n\t/* [1] Section (contenu)\n\t=========================================================*/\n\t& > section{\n\t\tdisplay: none;\n\n\t\tmargin: 3em;\n\n\t\t// Gestion de l'activation des sous-parties\n\t\t&.active{ display: block; }\n\n\t\t// Gestion d'une section contenant des graphiques\n\t\t&.charts{\n\t\t\tdisplay: flex;\n\n\t\t\tflex-direction: row;\n\t\t\tflex-wrap: wrap;\n\t\t\tjustify-content: space-around;\n\t\t}\n\n\t\tposition: relative;\n\t\tflex-grow: 1;\n\n\t\tpadding: 1em;\n\n\t\tborder-radius: 3px;\n\n\t\tbackground-color: #fff;\n\n\t\tcolor: #000;\n\t\tfont-size: 1em;\n\n\t\tborder: 1px solid #ddd;\n\n\n\n\t\t/* [2] Titres\n\t\t=========================================================*/\n\t\t& h6{\n\t\t\tcolor: lighten($theme-fg, 20);\n\t\t\tfont-size: 1.2em;\n\t\t\ttext-transform: uppercase;\n\t\t\tfont-weight: 300;\n\t\t\tletter-spacing: .2em;\n\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\n\t\t\t&:before{content:'- ';}\n\t\t\t&:after{content:' -';}\n\n\t\t\t// quand centré\n\t\t\t&.center{\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t}\n\n\n\n\n\n\t\t/* [3][4] Boutons radio + Checkboxes\n\t\t=========================================================*/\n\t\t& input[type=\"radio\"],\n\t\t& input[type=\"checkbox\"]{\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t// Label\n\t\t& input[type=\"radio\"] + label[for],\n\t\t& input[type=\"checkbox\"] + label[for]{\n\t\t\tpadding-left: .8em;\n\n\t\t\t// Pas de selection\n\t\t\t-webkit-touch-callout: none; /* iOS Safari */\n\t\t\t-webkit-user-select: none; /* Chrome/Safari/Opera */\n\t\t\t-khtml-user-select: none; /* Konqueror */\n\t\t\t-moz-user-select: none; /* Firefox */\n\t\t\t-ms-user-select: none; /* IE/Edge */\n\t\t\tuser-select: none; /* non-prefixed */\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Receptacle\n\t\t\t&:before{\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tposition: relative;\n\t\t\t\t\ttop: .1em;\n\t\t\t\t\tleft: -.8em;\n\t\t\t\t\twidth: calc( 1em - 2*.15em );\n\t\t\t\t\theight: calc( 1em - 2*.15em );\n\n\t\t\t\tborder-radius: 50% / 50%;\n\t\t\t\tborder: .15em solid $theme-fg-primary;\n\n\t\t\t\tbackground: #fff center center no-repeat;\n\t\t\t\tbackground-image: none;\n\t\t\t\tbackground-size: 70% auto;\n\n\t\t\t\t@include transition( background .2s ease-in-out );\n\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\n\t\t\t// Animation de hover pour le texte\n\t\t\t&:hover{\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\t\t}\n\n\t\t// Quand actif\n\t\t& input[type=\"radio\"]:checked + label[for]:before,\n\t\t& input[type=\"checkbox\"]:checked + label[for]:before{\n\t\t\tbackground-color: $theme-fg-primary;\n\t\t\tbackground-image: url('/f/svg/checked/st/container');\n\t\t}\n\n\n\t\t// Specifique a checkbox\n\t\t& input[type=\"checkbox\"] + label[for]:before{\n\t\t\tborder-radius: 3px;\n\t\t\t@include transition( border .1s ease-in-out );\n\t\t}\n\t\t& input[type=\"checkbox\"] + label[for]:hover:before{\n\t\t\tborder-color: darken($theme-fg-primary, 15);\n\t\t}\n\n\n\n\n\n\t\t/* [5] Boutons de submit\n\t\t=========================================================*/\n\t\t& input[type=\"submit\"],\n\t\t& input[type=\"button\"]{\n\t\t\tmargin: .5em 0;\n\t\t\tpadding: .3em .5em;\n\n\t\t\tborder-radius: 3px;\n\t\t\tborder: 1px solid $theme-fg;\n\n\t\t\tcolor: $theme-fg;\n\n\t\t\tbackground-color: #fff;\n\n\t\t\t@include transition( background .1s ease-in-out, color .1s ease-in-out );\n\n\t\t\t/* (1) Animation de @hover */\n\t\t\t&:hover{\n\t\t\t\tbackground-color: $theme-fg;\n\t\t\t\tcolor: #fff;\n\t\t\t}\n\n\n\t\t\t/* (2) Bouton primaire */\n\t\t\t&.primary{\n\t\t\t\tborder-color: $theme-fg-primary;\n\t\t\t\tcolor: $theme-fg-primary;\n\t\t\t\tbackground-color: #fff;\n\n\n\t\t\t\t/* (3) Animation de @hover pour bouton primaire */\n\t\t\t\t&:hover{\n\t\t\t\t\tbackground-color: $theme-fg-primary;\n\t\t\t\t\tcolor: #fff;\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t}\n\n\t\t/* [6] Images inline\n\t\t=========================================================*/\n\t\t& img{\n\t\t\tmargin: 1em;\n\t\t\theight: 3em;\n\t\t}\n\n\t\t/* [7] Contour flags\n\t\t=========================================================*/\n\t\t& .flag{\n\t\t\tmargin: 0 .8em;\n\t\t\tpadding: .2em .5em;\n\n\t\t\tborder-radius: 5px;\n\t\t\tborder: 1px solid #b5b5b5;\n\n\t\t\tcolor: #555;\n\t\t\tfont-family: 'Inconsolata';\n\t\t}\n\n\n\t}\n\n}\n",
|
||||||
"/* [1] COULEURS\n=========================================================*/\n/* (1) COULEURS DU THEME $DEFAULT */\n$theme-bg: #e8e8e8;\n$theme-bg-primary: #ffffff;\n$theme-fg: #515151;\n$theme-fg-primary: #399ced;\n\n/* (2) COULEURS DE THEME $DARK */\n$dark-bg: #313541;\n$dark-bg-primary: #29282e;\n$dark-fg: #939393;\n$dark-fg-primary: #ffffff;\n\n$header-dark: #333333;\n\n/* (3) Couleurs du theme pour la timeline */\n$timeline-color: #399ced;\n\n/* [2] DIMENSIONS\n=========================================================*/\n/* (1) Layout de base */\n$menu-side-width: 15em;\n$header-height: 4em;\n\n\n\n/* [3] Mixins\n=========================================================*/\n@mixin transform($value...) {\n transform: $value;\n\t-moz-transform: $value;\n\t-o-transform: $value;\n\t-ms-transform: $value;\n\t-webkit-transform: $value;\n}\n\n\n@mixin transition($value...) {\n -webkit-transition: $value;\n transition: $value;\n}\n"
|
"/* [1] COULEURS\n=========================================================*/\n/* (1) COULEURS DU THEME $DEFAULT */\n$theme-bg: #e8e8e8;\n$theme-bg-primary: #ffffff;\n$theme-fg: #515151;\n$theme-fg-primary: #399ced;\n\n/* (2) COULEURS DE THEME $DARK */\n$dark-bg: #313541;\n$dark-bg-primary: #29282e;\n$dark-fg: #939393;\n$dark-fg-primary: #ffffff;\n\n$header-dark: #333333;\n\n/* (3) Couleurs du theme pour la timeline */\n$timeline-color: #738394;\n$timeline-0: #399ced;\n$timeline-1: #e64e3e;\n$timeline-2: #10baa3;\n$timeline-3: #b14be7;\n$timeline-4: #053b5d;\n\n\n/* [2] DIMENSIONS\n=========================================================*/\n/* (1) Layout de base */\n$menu-side-width: 15em;\n$header-height: 4em;\n\n\n\n/* [3] Mixins\n=========================================================*/\n@mixin transform($value...) {\n transform: $value;\n\t-moz-transform: $value;\n\t-o-transform: $value;\n\t-ms-transform: $value;\n\t-webkit-transform: $value;\n}\n\n\n@mixin transition($value...) {\n -webkit-transition: $value;\n transition: $value;\n}\n\n/* [4] Functions\n=========================================================*/\n// Transforme une couleur hex en string sans le #\n@function color-str($color){\n @return str-slice(#{$color}, 2, str-length(#{$color}));\n}\n"
|
||||||
],
|
],
|
||||||
"mappings": "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",
|
"mappings": "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",
|
||||||
"names": []
|
"names": []
|
||||||
}
|
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -7,3 +7,34 @@
|
||||||
/* [2] Formulaire de type 'timeline'
|
/* [2] Formulaire de type 'timeline'
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
@import 'timeline-form';
|
@import 'timeline-form';
|
||||||
|
|
||||||
|
#WRAPPER > #CONTAINER table,
|
||||||
|
#WRAPPER > #CONTAINER > section > table{
|
||||||
|
|
||||||
|
& tr,
|
||||||
|
& > tr{
|
||||||
|
|
||||||
|
& > td{
|
||||||
|
padding: .8em;
|
||||||
|
|
||||||
|
|
||||||
|
color: #888;
|
||||||
|
font-weight: normal;
|
||||||
|
text-align: center;
|
||||||
|
white-space: nowrap;
|
||||||
|
|
||||||
|
& > input[type="checkbox"]+label[for]:before{
|
||||||
|
left: -.4em;
|
||||||
|
width: calc( 1.05em - 2*.15em );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
& > td.hidden:before{
|
||||||
|
content: '+';
|
||||||
|
color: #ddd;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -124,7 +124,7 @@ body{
|
||||||
width: 35em;
|
width: 35em;
|
||||||
height: 10em;
|
height: 10em;
|
||||||
|
|
||||||
background: url('/f/svg/icon/st') center center no-repeat;
|
background: url('/f/svg/iconv2/st') center center no-repeat;
|
||||||
background-size: auto 100%;
|
background-size: auto 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -6,9 +6,9 @@
|
||||||
"../constants.scss"
|
"../constants.scss"
|
||||||
],
|
],
|
||||||
"sourcesContent": [
|
"sourcesContent": [
|
||||||
"@import 'constants';\n\nbody{\n\n\tfont-family: 'Open Sans';\n\tfont-size: 15px;\n}\n\n\n\n#WRAPPER{\n\tdisplay: block;\n\tposition: fixed;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\tbackground-color: $theme-bg;\n\n\toverflow-x: hidden;\n\toverflow-y: auto;\n\n\tz-index: 1;\n\n\n\t/* [1] Header de la page\n\t==========================================*/\n\t& > #HEADER{\n\t\tdisplay: block;\n\t\tposition: fixed;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\twidth: 100%;\n\t\t\theight: calc( #{$header-height} - 1px );\n\n\t\tborder-bottom: 1px solid darken($header-dark, 10);\n\n\t\tbackground-color: $header-dark;\n\n\t\tz-index: 100;\n\n\t}\n\n\n\t/* [2] Side-Menu de la page\n\t==========================================*/\n\t// Gestion du menu\n\t& > #MENU-SIDE{\n\t\tdisplay: block;\n\t\tposition: fixed;\n\t\t\ttop: $header-height;\n\t\t\tleft: 0;\n\t\t\twidth: $menu-side-width;\n\t\t\theight: calc( 100% - #{$header-height} );\n\n\t\tbox-shadow: 2px 1px 3px #ddd;\n\n\t\tbackground-color: #fff;\n\n\t\t@include transition( all .3s );\n\n\t\tz-index: 10;\n\t}\n\n\n\t/* [3] Container de la page\n\t==========================================*/\n\t& > #CONTAINER{\n\t\tdisplay: flex;\n\t\tposition: absolute;\n\t\t\ttop: $header-height;\n\t\t\tleft: $menu-side-width;\n\t\t\twidth: calc( 100% - #{$menu-side-width} );\n\t\t\tmin-height: calc( 100% - #{$header-height} );\n\t\t// margin: 1em;\n\n\t\t// Flex properties\n\t\tflex-direction: row;\n\t\tjustify-content: space-between;\n\t\tflex-wrap: wrap;\n\n\t\toverflow-x: none;\n\t\toverflow-y: auto;\n\t}\n}\n\n\n\n\n/* [4] Page de login\n=========================================================*/\n#LOGIN{\n\tdisplay: flex;\n\tposition: fixed;\n\t\ttop: 0;\n\t\tleft: -100%;\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t// Quand la page de login est visible\n\t&.active{\n\t\tleft: 0;\n\t}\n\n\t// flex properties\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\tjustify-content: space-around;\n\talign-items: center;\n\n\n\tbackground-color: $dark-bg;\n\n\t@include transition( left .3s ease-in-out );\n\n\tz-index: 101;\n\n\n\n\n\t/* (1) Logo et nom du site */\n\t& > #login-icon{\n\t\twidth: 35em;\n\t\theight: 10em;\n\n\t\tbackground: url('/f/svg/icon/st') center center no-repeat;\n\t\tbackground-size: auto 100%;\n\t}\n\n\n\t/* (2) Formulaire de connexion */\n\t& > #login-form{\n\t\tdisplay: block;\n\n\n\t\t/* (2.1) Champs de texte (login/password) */\n\t\t& > input[type='text'],\n\t\t& > input[type='password'],\n\t\t& > input[type='submit']{\n\t\t\tdisplay: flex;\n\t\t\t\twidth: 20em;\n\n\t\t\tmargin: 2em 0;\n\t\t\tpadding: 1em 2em;\n\n\t\t\t// flex properties\n\t\t\tflex-direction: column;\n\t\t\tjustify-content: space-around;\n\t\t\tflex-wrap: nowrap;\n\t\t\talign-items: middle;\n\n\n\t\t\tborder-radius: 5px;\n\t\t\tborder: 1px solid lighten($theme-fg, 10);\n\n\t\t\tbackground-color: $dark-bg;\n\n\t\t\tcolor: $dark-fg-primary;\n\t\t\tfont-weight: bold;\n\t\t\tletter-spacing: .07em;\n\n\t\t\t@include transition( border .2s ease-in-out );\n\n\t\t\tcursor: default;\n\n\t\t\t// Animation de @hover/@focus\n\t\t\t&:hover,\n\t\t\t&:focus{\n\t\t\t\tborder-color: $theme-fg-primary;\n\t\t\t}\n\n\t\t}\n\n\n\t\t/* (2.2) Bouton de connexion */\n\t\t& > input[type='submit']{\n\t\t\twidth: 100%;\n\t\t\tmargin: 2em 0;\n\n\t\t\tborder: 0;\n\n\t\t\tbackground-color: $theme-fg-primary;\n\n\t\t\tcolor: $dark-fg-primary;\n\t\t\tfont-weight: bold;\n\t\t\ttext-align: left;\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Animation de @hover\n\t\t\t&:hover{\n\t\t\t\tbackground-color: darken($theme-fg-primary, 10);\n\t\t\t\tbox-shadow: 0 0 1em darken($dark-bg, 10);\n\t\t\t}\n\n\t\t}\n\n\n\n\n\n\t\t/* (3) Mot de passe oublie */\n\t\t& > #lost-password{\n\t\t\tcolor: $dark-fg;\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Animation de @hover\n\t\t\t&:hover{\n\t\t\t\tcolor: $theme-fg-primary;\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/* (4) Gestion de la fermeture */\n\t& > #login-close{\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\t\ttop: 2em;\n\t\t\tright: 2em;\n\t\t\tmin-width: 2em;\n\t\t\theight: 2em;\n\n\t\tbackground: url('/f/svg/back/st/container/ffffff') right center no-repeat;\n\t\tbackground-size: 1em;\n\n\t\tcolor: #fff;\n\t\tpadding-right: 2em;\n\t\tline-height: 2em;\n\t\tfont-weight: bold;\n\n\t\tcursor: pointer;\n\t}\n}\n",
|
"@import 'constants';\n\nbody{\n\n\tfont-family: 'Open Sans';\n\tfont-size: 15px;\n}\n\n\n\n#WRAPPER{\n\tdisplay: block;\n\tposition: fixed;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\tbackground-color: $theme-bg;\n\n\toverflow-x: hidden;\n\toverflow-y: auto;\n\n\tz-index: 1;\n\n\n\t/* [1] Header de la page\n\t==========================================*/\n\t& > #HEADER{\n\t\tdisplay: block;\n\t\tposition: fixed;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\twidth: 100%;\n\t\t\theight: calc( #{$header-height} - 1px );\n\n\t\tborder-bottom: 1px solid darken($header-dark, 10);\n\n\t\tbackground-color: $header-dark;\n\n\t\tz-index: 100;\n\n\t}\n\n\n\t/* [2] Side-Menu de la page\n\t==========================================*/\n\t// Gestion du menu\n\t& > #MENU-SIDE{\n\t\tdisplay: block;\n\t\tposition: fixed;\n\t\t\ttop: $header-height;\n\t\t\tleft: 0;\n\t\t\twidth: $menu-side-width;\n\t\t\theight: calc( 100% - #{$header-height} );\n\n\t\tbox-shadow: 2px 1px 3px #ddd;\n\n\t\tbackground-color: #fff;\n\n\t\t@include transition( all .3s );\n\n\t\tz-index: 10;\n\t}\n\n\n\t/* [3] Container de la page\n\t==========================================*/\n\t& > #CONTAINER{\n\t\tdisplay: flex;\n\t\tposition: absolute;\n\t\t\ttop: $header-height;\n\t\t\tleft: $menu-side-width;\n\t\t\twidth: calc( 100% - #{$menu-side-width} );\n\t\t\tmin-height: calc( 100% - #{$header-height} );\n\t\t// margin: 1em;\n\n\t\t// Flex properties\n\t\tflex-direction: row;\n\t\tjustify-content: space-between;\n\t\tflex-wrap: wrap;\n\n\t\toverflow-x: none;\n\t\toverflow-y: auto;\n\t}\n}\n\n\n\n\n/* [4] Page de login\n=========================================================*/\n#LOGIN{\n\tdisplay: flex;\n\tposition: fixed;\n\t\ttop: 0;\n\t\tleft: -100%;\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t// Quand la page de login est visible\n\t&.active{\n\t\tleft: 0;\n\t}\n\n\t// flex properties\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\tjustify-content: space-around;\n\talign-items: center;\n\n\n\tbackground-color: $dark-bg;\n\n\t@include transition( left .3s ease-in-out );\n\n\tz-index: 101;\n\n\n\n\n\t/* (1) Logo et nom du site */\n\t& > #login-icon{\n\t\twidth: 35em;\n\t\theight: 10em;\n\n\t\tbackground: url('/f/svg/iconv2/st') center center no-repeat;\n\t\tbackground-size: auto 100%;\n\t}\n\n\n\t/* (2) Formulaire de connexion */\n\t& > #login-form{\n\t\tdisplay: block;\n\n\n\t\t/* (2.1) Champs de texte (login/password) */\n\t\t& > input[type='text'],\n\t\t& > input[type='password'],\n\t\t& > input[type='submit']{\n\t\t\tdisplay: flex;\n\t\t\t\twidth: 20em;\n\n\t\t\tmargin: 2em 0;\n\t\t\tpadding: 1em 2em;\n\n\t\t\t// flex properties\n\t\t\tflex-direction: column;\n\t\t\tjustify-content: space-around;\n\t\t\tflex-wrap: nowrap;\n\t\t\talign-items: middle;\n\n\n\t\t\tborder-radius: 5px;\n\t\t\tborder: 1px solid lighten($theme-fg, 10);\n\n\t\t\tbackground-color: $dark-bg;\n\n\t\t\tcolor: $dark-fg-primary;\n\t\t\tfont-weight: bold;\n\t\t\tletter-spacing: .07em;\n\n\t\t\t@include transition( border .2s ease-in-out );\n\n\t\t\tcursor: default;\n\n\t\t\t// Animation de @hover/@focus\n\t\t\t&:hover,\n\t\t\t&:focus{\n\t\t\t\tborder-color: $theme-fg-primary;\n\t\t\t}\n\n\t\t}\n\n\n\t\t/* (2.2) Bouton de connexion */\n\t\t& > input[type='submit']{\n\t\t\twidth: 100%;\n\t\t\tmargin: 2em 0;\n\n\t\t\tborder: 0;\n\n\t\t\tbackground-color: $theme-fg-primary;\n\n\t\t\tcolor: $dark-fg-primary;\n\t\t\tfont-weight: bold;\n\t\t\ttext-align: left;\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Animation de @hover\n\t\t\t&:hover{\n\t\t\t\tbackground-color: darken($theme-fg-primary, 10);\n\t\t\t\tbox-shadow: 0 0 1em darken($dark-bg, 10);\n\t\t\t}\n\n\t\t}\n\n\n\n\n\n\t\t/* (3) Mot de passe oublie */\n\t\t& > #lost-password{\n\t\t\tcolor: $dark-fg;\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Animation de @hover\n\t\t\t&:hover{\n\t\t\t\tcolor: $theme-fg-primary;\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/* (4) Gestion de la fermeture */\n\t& > #login-close{\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\t\ttop: 2em;\n\t\t\tright: 2em;\n\t\t\tmin-width: 2em;\n\t\t\theight: 2em;\n\n\t\tbackground: url('/f/svg/back/st/container/ffffff') right center no-repeat;\n\t\tbackground-size: 1em;\n\n\t\tcolor: #fff;\n\t\tpadding-right: 2em;\n\t\tline-height: 2em;\n\t\tfont-weight: bold;\n\n\t\tcursor: pointer;\n\t}\n}\n",
|
||||||
"/* [1] COULEURS\n=========================================================*/\n/* (1) COULEURS DU THEME $DEFAULT */\n$theme-bg: #e8e8e8;\n$theme-bg-primary: #ffffff;\n$theme-fg: #515151;\n$theme-fg-primary: #399ced;\n\n/* (2) COULEURS DE THEME $DARK */\n$dark-bg: #313541;\n$dark-bg-primary: #29282e;\n$dark-fg: #939393;\n$dark-fg-primary: #ffffff;\n\n$header-dark: #333333;\n\n/* (3) Couleurs du theme pour la timeline */\n$timeline-color: #738394;\n$timeline-0: #399ced;\n$timeline-1: #e64e3e;\n$timeline-2: #10baa3;\n$timeline-3: #b14be7;\n$timeline-4: #053b5d;\n\n\n/* [2] DIMENSIONS\n=========================================================*/\n/* (1) Layout de base */\n$menu-side-width: 15em;\n$header-height: 4em;\n\n\n\n/* [3] Mixins\n=========================================================*/\n@mixin transform($value...) {\n transform: $value;\n\t-moz-transform: $value;\n\t-o-transform: $value;\n\t-ms-transform: $value;\n\t-webkit-transform: $value;\n}\n\n\n@mixin transition($value...) {\n -webkit-transition: $value;\n transition: $value;\n}\n\n/* [4] Functions\n=========================================================*/\n// Transforme une couleur hex en string sans le #\n@function color-str($color){\n @return str-slice(#{$color}, 2, str-length(#{$color}));\n}\n"
|
"/* [1] COULEURS\n=========================================================*/\n/* (1) COULEURS DU THEME $DEFAULT */\n$theme-bg: #e8e8e8;\n$theme-bg-primary: #ffffff;\n$theme-fg: #515151;\n$theme-fg-primary: #399ced;\n\n/* (2) COULEURS DE THEME $DARK */\n$dark-bg: #313541;\n$dark-bg-primary: #29282e;\n$dark-fg: #939393;\n$dark-fg-primary: #ffffff;\n\n$header-dark: #333333;\n\n/* (3) Couleurs du theme pour la timeline */\n$timeline-color: #738394;\n$timeline-0: #399ced;\n$timeline-1: #e64e3e;\n$timeline-2: #10baa3;\n$timeline-3: #b14be7;\n$timeline-4: #053b5d;\n\n\n/* [2] DIMENSIONS\n=========================================================*/\n/* (1) Layout de base */\n$menu-side-width: 15em;\n$header-height: 4em;\n\n\n\n/* [3] Mixins\n=========================================================*/\n@mixin transform($value...) {\n transform: $value;\n\t-moz-transform: $value;\n\t-o-transform: $value;\n\t-ms-transform: $value;\n\t-webkit-transform: $value;\n}\n\n\n@mixin transition($value...) {\n -webkit-transition: $value;\n transition: $value;\n}\n\n/* [4] Functions\n=========================================================*/\n// Transforme une couleur hex en string sans le #\n@function color-str($color){\n @return str-slice(#{$color}, 2, str-length(#{$color}));\n}\n"
|
||||||
],
|
],
|
||||||
"mappings": "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",
|
"mappings": "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",
|
||||||
"names": []
|
"names": []
|
||||||
}
|
}
|
File diff suppressed because one or more lines are too long
|
@ -6,9 +6,9 @@
|
||||||
"../constants.scss"
|
"../constants.scss"
|
||||||
],
|
],
|
||||||
"sourcesContent": [
|
"sourcesContent": [
|
||||||
"@import 'constants';\n\nbody{\n\n\tfont-family: 'Open Sans';\n\tfont-size: 15px;\n}\n\n\n\n#WRAPPER{\n\tdisplay: block;\n\tposition: fixed;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\tbackground-color: $theme-bg;\n\n\toverflow-x: hidden;\n\toverflow-y: auto;\n\n\tz-index: 1;\n\n\n\t/* [1] Header de la page\n\t==========================================*/\n\t& > #HEADER{\n\t\tdisplay: block;\n\t\tposition: fixed;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\twidth: 100%;\n\t\t\theight: calc( #{$header-height} - 1px );\n\n\t\tborder-bottom: 1px solid darken($header-dark, 10);\n\n\t\tbackground-color: $header-dark;\n\n\t\tz-index: 100;\n\n\t}\n\n\n\t/* [2] Side-Menu de la page\n\t==========================================*/\n\t// Gestion du menu\n\t& > #MENU-SIDE{\n\t\tdisplay: block;\n\t\tposition: fixed;\n\t\t\ttop: $header-height;\n\t\t\tleft: 0;\n\t\t\twidth: $menu-side-width;\n\t\t\theight: calc( 100% - #{$header-height} );\n\n\t\tbox-shadow: 2px 1px 3px #ddd;\n\n\t\tbackground-color: #fff;\n\n\t\t@include transition( all .3s );\n\n\t\tz-index: 10;\n\t}\n\n\n\t/* [3] Container de la page\n\t==========================================*/\n\t& > #CONTAINER{\n\t\tdisplay: flex;\n\t\tposition: absolute;\n\t\t\ttop: $header-height;\n\t\t\tleft: $menu-side-width;\n\t\t\twidth: calc( 100% - #{$menu-side-width} );\n\t\t\tmin-height: calc( 100% - #{$header-height} );\n\t\t// margin: 1em;\n\n\t\t// Flex properties\n\t\tflex-direction: row;\n\t\tjustify-content: space-between;\n\t\tflex-wrap: wrap;\n\n\t\toverflow-x: none;\n\t\toverflow-y: auto;\n\t}\n}\n\n\n\n\n/* [4] Page de login\n=========================================================*/\n#LOGIN{\n\tdisplay: flex;\n\tposition: fixed;\n\t\ttop: 0;\n\t\tleft: -100%;\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t// Quand la page de login est visible\n\t&.active{\n\t\tleft: 0;\n\t}\n\n\t// flex properties\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\tjustify-content: space-around;\n\talign-items: center;\n\n\n\tbackground-color: $dark-bg;\n\n\t@include transition( left .3s ease-in-out );\n\n\tz-index: 101;\n\n\n\n\n\t/* (1) Logo et nom du site */\n\t& > #login-icon{\n\t\twidth: 35em;\n\t\theight: 10em;\n\n\t\tbackground: url('/f/svg/icon/st') center center no-repeat;\n\t\tbackground-size: auto 100%;\n\t}\n\n\n\t/* (2) Formulaire de connexion */\n\t& > #login-form{\n\t\tdisplay: block;\n\n\n\t\t/* (2.1) Champs de texte (login/password) */\n\t\t& > input[type='text'],\n\t\t& > input[type='password'],\n\t\t& > input[type='submit']{\n\t\t\tdisplay: flex;\n\t\t\t\twidth: 20em;\n\n\t\t\tmargin: 2em 0;\n\t\t\tpadding: 1em 2em;\n\n\t\t\t// flex properties\n\t\t\tflex-direction: column;\n\t\t\tjustify-content: space-around;\n\t\t\tflex-wrap: nowrap;\n\t\t\talign-items: middle;\n\n\n\t\t\tborder-radius: 5px;\n\t\t\tborder: 1px solid lighten($theme-fg, 10);\n\n\t\t\tbackground-color: $dark-bg;\n\n\t\t\tcolor: $dark-fg-primary;\n\t\t\tfont-weight: bold;\n\t\t\tletter-spacing: .07em;\n\n\t\t\t@include transition( border .2s ease-in-out );\n\n\t\t\tcursor: default;\n\n\t\t\t// Animation de @hover/@focus\n\t\t\t&:hover,\n\t\t\t&:focus{\n\t\t\t\tborder-color: $theme-fg-primary;\n\t\t\t}\n\n\t\t}\n\n\n\t\t/* (2.2) Bouton de connexion */\n\t\t& > input[type='submit']{\n\t\t\twidth: 100%;\n\t\t\tmargin: 2em 0;\n\n\t\t\tborder: 0;\n\n\t\t\tbackground-color: $theme-fg-primary;\n\n\t\t\tcolor: $dark-fg-primary;\n\t\t\tfont-weight: bold;\n\t\t\ttext-align: left;\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Animation de @hover\n\t\t\t&:hover{\n\t\t\t\tbackground-color: darken($theme-fg-primary, 10);\n\t\t\t\tbox-shadow: 0 0 1em darken($dark-bg, 10);\n\t\t\t}\n\n\t\t}\n\n\n\n\n\n\t\t/* (3) Mot de passe oublie */\n\t\t& > #lost-password{\n\t\t\tcolor: $dark-fg;\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Animation de @hover\n\t\t\t&:hover{\n\t\t\t\tcolor: $theme-fg-primary;\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/* (4) Gestion de la fermeture */\n\t& > #login-close{\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\t\ttop: 2em;\n\t\t\tright: 2em;\n\t\t\tmin-width: 2em;\n\t\t\theight: 2em;\n\n\t\tbackground: url('/f/svg/back/st/container/ffffff') right center no-repeat;\n\t\tbackground-size: 1em;\n\n\t\tcolor: #fff;\n\t\tpadding-right: 2em;\n\t\tline-height: 2em;\n\t\tfont-weight: bold;\n\n\t\tcursor: pointer;\n\t}\n}\n",
|
"@import 'constants';\n\nbody{\n\n\tfont-family: 'Open Sans';\n\tfont-size: 15px;\n}\n\n\n\n#WRAPPER{\n\tdisplay: block;\n\tposition: fixed;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\tbackground-color: $theme-bg;\n\n\toverflow-x: hidden;\n\toverflow-y: auto;\n\n\tz-index: 1;\n\n\n\t/* [1] Header de la page\n\t==========================================*/\n\t& > #HEADER{\n\t\tdisplay: block;\n\t\tposition: fixed;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\twidth: 100%;\n\t\t\theight: calc( #{$header-height} - 1px );\n\n\t\tborder-bottom: 1px solid darken($header-dark, 10);\n\n\t\tbackground-color: $header-dark;\n\n\t\tz-index: 100;\n\n\t}\n\n\n\t/* [2] Side-Menu de la page\n\t==========================================*/\n\t// Gestion du menu\n\t& > #MENU-SIDE{\n\t\tdisplay: block;\n\t\tposition: fixed;\n\t\t\ttop: $header-height;\n\t\t\tleft: 0;\n\t\t\twidth: $menu-side-width;\n\t\t\theight: calc( 100% - #{$header-height} );\n\n\t\tbox-shadow: 2px 1px 3px #ddd;\n\n\t\tbackground-color: #fff;\n\n\t\t@include transition( all .3s );\n\n\t\tz-index: 10;\n\t}\n\n\n\t/* [3] Container de la page\n\t==========================================*/\n\t& > #CONTAINER{\n\t\tdisplay: flex;\n\t\tposition: absolute;\n\t\t\ttop: $header-height;\n\t\t\tleft: $menu-side-width;\n\t\t\twidth: calc( 100% - #{$menu-side-width} );\n\t\t\tmin-height: calc( 100% - #{$header-height} );\n\t\t// margin: 1em;\n\n\t\t// Flex properties\n\t\tflex-direction: row;\n\t\tjustify-content: space-between;\n\t\tflex-wrap: wrap;\n\n\t\toverflow-x: none;\n\t\toverflow-y: auto;\n\t}\n}\n\n\n\n\n/* [4] Page de login\n=========================================================*/\n#LOGIN{\n\tdisplay: flex;\n\tposition: fixed;\n\t\ttop: 0;\n\t\tleft: -100%;\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t// Quand la page de login est visible\n\t&.active{\n\t\tleft: 0;\n\t}\n\n\t// flex properties\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\tjustify-content: space-around;\n\talign-items: center;\n\n\n\tbackground-color: $dark-bg;\n\n\t@include transition( left .3s ease-in-out );\n\n\tz-index: 101;\n\n\n\n\n\t/* (1) Logo et nom du site */\n\t& > #login-icon{\n\t\twidth: 35em;\n\t\theight: 10em;\n\n\t\tbackground: url('/f/svg/iconv2/st') center center no-repeat;\n\t\tbackground-size: auto 100%;\n\t}\n\n\n\t/* (2) Formulaire de connexion */\n\t& > #login-form{\n\t\tdisplay: block;\n\n\n\t\t/* (2.1) Champs de texte (login/password) */\n\t\t& > input[type='text'],\n\t\t& > input[type='password'],\n\t\t& > input[type='submit']{\n\t\t\tdisplay: flex;\n\t\t\t\twidth: 20em;\n\n\t\t\tmargin: 2em 0;\n\t\t\tpadding: 1em 2em;\n\n\t\t\t// flex properties\n\t\t\tflex-direction: column;\n\t\t\tjustify-content: space-around;\n\t\t\tflex-wrap: nowrap;\n\t\t\talign-items: middle;\n\n\n\t\t\tborder-radius: 5px;\n\t\t\tborder: 1px solid lighten($theme-fg, 10);\n\n\t\t\tbackground-color: $dark-bg;\n\n\t\t\tcolor: $dark-fg-primary;\n\t\t\tfont-weight: bold;\n\t\t\tletter-spacing: .07em;\n\n\t\t\t@include transition( border .2s ease-in-out );\n\n\t\t\tcursor: default;\n\n\t\t\t// Animation de @hover/@focus\n\t\t\t&:hover,\n\t\t\t&:focus{\n\t\t\t\tborder-color: $theme-fg-primary;\n\t\t\t}\n\n\t\t}\n\n\n\t\t/* (2.2) Bouton de connexion */\n\t\t& > input[type='submit']{\n\t\t\twidth: 100%;\n\t\t\tmargin: 2em 0;\n\n\t\t\tborder: 0;\n\n\t\t\tbackground-color: $theme-fg-primary;\n\n\t\t\tcolor: $dark-fg-primary;\n\t\t\tfont-weight: bold;\n\t\t\ttext-align: left;\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Animation de @hover\n\t\t\t&:hover{\n\t\t\t\tbackground-color: darken($theme-fg-primary, 10);\n\t\t\t\tbox-shadow: 0 0 1em darken($dark-bg, 10);\n\t\t\t}\n\n\t\t}\n\n\n\n\n\n\t\t/* (3) Mot de passe oublie */\n\t\t& > #lost-password{\n\t\t\tcolor: $dark-fg;\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Animation de @hover\n\t\t\t&:hover{\n\t\t\t\tcolor: $theme-fg-primary;\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/* (4) Gestion de la fermeture */\n\t& > #login-close{\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\t\ttop: 2em;\n\t\t\tright: 2em;\n\t\t\tmin-width: 2em;\n\t\t\theight: 2em;\n\n\t\tbackground: url('/f/svg/back/st/container/ffffff') right center no-repeat;\n\t\tbackground-size: 1em;\n\n\t\tcolor: #fff;\n\t\tpadding-right: 2em;\n\t\tline-height: 2em;\n\t\tfont-weight: bold;\n\n\t\tcursor: pointer;\n\t}\n}\n",
|
||||||
"/* [1] COULEURS\n=========================================================*/\n/* (1) COULEURS DU THEME $DEFAULT */\n$theme-bg: #e8e8e8;\n$theme-bg-primary: #ffffff;\n$theme-fg: #515151;\n$theme-fg-primary: #399ced;\n\n/* (2) COULEURS DE THEME $DARK */\n$dark-bg: #313541;\n$dark-bg-primary: #29282e;\n$dark-fg: #939393;\n$dark-fg-primary: #ffffff;\n\n$header-dark: #333333;\n\n/* (3) Couleurs du theme pour la timeline */\n$timeline-color: #738394;\n$timeline-0: #399ced;\n$timeline-1: #e64e3e;\n$timeline-2: #10baa3;\n$timeline-3: #b14be7;\n$timeline-4: #053b5d;\n\n\n/* [2] DIMENSIONS\n=========================================================*/\n/* (1) Layout de base */\n$menu-side-width: 15em;\n$header-height: 4em;\n\n\n\n/* [3] Mixins\n=========================================================*/\n@mixin transform($value...) {\n transform: $value;\n\t-moz-transform: $value;\n\t-o-transform: $value;\n\t-ms-transform: $value;\n\t-webkit-transform: $value;\n}\n\n\n@mixin transition($value...) {\n -webkit-transition: $value;\n transition: $value;\n}\n\n/* [4] Functions\n=========================================================*/\n// Transforme une couleur hex en string sans le #\n@function color-str($color){\n @return str-slice(#{$color}, 2, str-length(#{$color}));\n}\n"
|
"/* [1] COULEURS\n=========================================================*/\n/* (1) COULEURS DU THEME $DEFAULT */\n$theme-bg: #e8e8e8;\n$theme-bg-primary: #ffffff;\n$theme-fg: #515151;\n$theme-fg-primary: #399ced;\n\n/* (2) COULEURS DE THEME $DARK */\n$dark-bg: #313541;\n$dark-bg-primary: #29282e;\n$dark-fg: #939393;\n$dark-fg-primary: #ffffff;\n\n$header-dark: #333333;\n\n/* (3) Couleurs du theme pour la timeline */\n$timeline-color: #738394;\n$timeline-0: #399ced;\n$timeline-1: #e64e3e;\n$timeline-2: #10baa3;\n$timeline-3: #b14be7;\n$timeline-4: #053b5d;\n\n\n/* [2] DIMENSIONS\n=========================================================*/\n/* (1) Layout de base */\n$menu-side-width: 15em;\n$header-height: 4em;\n\n\n\n/* [3] Mixins\n=========================================================*/\n@mixin transform($value...) {\n transform: $value;\n\t-moz-transform: $value;\n\t-o-transform: $value;\n\t-ms-transform: $value;\n\t-webkit-transform: $value;\n}\n\n\n@mixin transition($value...) {\n -webkit-transition: $value;\n transition: $value;\n}\n\n/* [4] Functions\n=========================================================*/\n// Transforme une couleur hex en string sans le #\n@function color-str($color){\n @return str-slice(#{$color}, 2, str-length(#{$color}));\n}\n"
|
||||||
],
|
],
|
||||||
"mappings": "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",
|
"mappings": "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",
|
||||||
"names": []
|
"names": []
|
||||||
}
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
@import 'constants';
|
|
||||||
|
|
||||||
|
@import 'constants';
|
||||||
/* [1] Formulaire de type timeline
|
/* [1] Formulaire de type timeline
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
#WRAPPER > #CONTAINER section[data-timeline]{
|
#WRAPPER > #CONTAINER section[data-timeline]{
|
||||||
|
@ -39,9 +39,6 @@
|
||||||
|
|
||||||
// background-color: $timeline-color;
|
// background-color: $timeline-color;
|
||||||
|
|
||||||
/* TODO: Transformer les background en ::before pour que ca soit juste un cercle avec bg et border*/
|
|
||||||
/* FIXME: Corriger le liseré pour les autres navigateurs que FF*/
|
|
||||||
|
|
||||||
/* Gestion du before (compteur css) //*/
|
/* Gestion du before (compteur css) //*/
|
||||||
&[data-n]:before{
|
&[data-n]:before{
|
||||||
content: attr(data-n);
|
content: attr(data-n);
|
||||||
|
@ -427,7 +424,7 @@
|
||||||
border: 1px solid darken(#d8e0e9, 10);
|
border: 1px solid darken(#d8e0e9, 10);
|
||||||
|
|
||||||
// Pas de rebord droite sauf si dernier
|
// Pas de rebord droite sauf si dernier
|
||||||
&:not(:last-child){
|
&:not(:last-child):not(.lc){
|
||||||
border-right: 0;
|
border-right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -438,8 +435,13 @@
|
||||||
@include transition( .2s ease-in-out );
|
@include transition( .2s ease-in-out );
|
||||||
|
|
||||||
|
|
||||||
&:first-child{ border-top-left-radius: 5px; border-bottom-left-radius: 5px; }
|
// Arrondi pour premier
|
||||||
&:last-child{ border-top-right-radius: 5px; border-bottom-right-radius: 5px; }
|
&:first-child,
|
||||||
|
&.fc{ border-top-left-radius: 5px; border-bottom-left-radius: 5px; }
|
||||||
|
|
||||||
|
// Arrondi pour dernier
|
||||||
|
&:last-child,
|
||||||
|
&.lc{ border-top-right-radius: 5px; border-bottom-right-radius: 5px; }
|
||||||
|
|
||||||
// Animation quand la page est validée
|
// Animation quand la page est validée
|
||||||
&.done{
|
&.done{
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,5 @@
|
||||||
function sociogramClass(a){this.container=a;this.log("sociogram created")}
|
function sociogramClass(a){this.container=a;this.log("sociogram created")}
|
||||||
sociogramClass.prototype={container:this.container,sigma:null,request:{path:"charts/network_data"},response:null,nodes:[],edges:[],rad:500,nodeDistance:100,overloadGraph:function(){},load:function(){},nodeAt:function(a,b){},arrange:function(a,b,d){},extractNodesFromResponse:function(){},extractEdgesFromResponse:function(){},renderNodes:function(){},renderEdges:function(){},overload:{nodeNeighbors:function(a){},nodeDirectNeighbors:function(a){}},bindings:{clickNode:function(a,b){},clickStage:function(a,
|
sociogramClass.prototype={container:this.container,sigma:null,request:{path:"chart/network_data"},response:null,nodes:[],edges:[],rad:500,nodeDistance:100,overloadGraph:function(){},load:function(){},nodeAt:function(a,b){},arrange:function(a,b,d){},extractNodesFromResponse:function(){},extractEdgesFromResponse:function(){},renderNodes:function(){},renderEdges:function(){},overload:{nodeNeighbors:function(a){},nodeDirectNeighbors:function(a){}},bindings:{clickNode:function(a,b){},clickStage:function(a,
|
||||||
b){}},log:function(a){console.log("--[SOCIOGRAM]--");console.warn(a);console.log("--[/SOCIOGRAM]--")}};sociogramClass.prototype.overloadGraph=function(){sigma.classes.graph.addMethod("nodeNeighbors",this.overload.nodeNeighbors);sigma.classes.graph.addMethod("nodeDirectNeighbors",this.overload.nodeDirectNeighbors);this.log("graph overloaded")};
|
b){}},log:function(a){console.log("--[SOCIOGRAM]--");console.warn(a);console.log("--[/SOCIOGRAM]--")}};sociogramClass.prototype.overloadGraph=function(){sigma.classes.graph.addMethod("nodeNeighbors",this.overload.nodeNeighbors);sigma.classes.graph.addMethod("nodeDirectNeighbors",this.overload.nodeDirectNeighbors);this.log("graph overloaded")};
|
||||||
sociogramClass.prototype.load=function(){this.sigma=new sigma({renderer:{container:this.container,type:"canvas"}});var a=this;api.send(this.request,function(b){a.log(b);0==b.ModuleError&&(a.response=b,a.sigma.settings({defaultNodeColor:"#348ed8",defaultLabelSize:14,defaultLabelBGColor:"#ddd",defaultHoverLabelBGColor:"#002147",defaultLabelHoverColor:"#fff",labelThreshold:10,defaultEdgeType:"line"}),a.extractNodesFromResponse(),a.extractEdgesFromResponse(),a.addNodes(),a.addEdges(),a.sigma.bind("clickNode",
|
sociogramClass.prototype.load=function(){this.sigma=new sigma({renderer:{container:this.container,type:"canvas"}});var a=this;api.send(this.request,function(b){a.log(b);0==b.ModuleError&&(a.response=b,a.sigma.settings({defaultNodeColor:"#348ed8",defaultLabelSize:14,defaultLabelBGColor:"#ddd",defaultHoverLabelBGColor:"#002147",defaultLabelHoverColor:"#fff",labelThreshold:10,defaultEdgeType:"line"}),a.extractNodesFromResponse(),a.extractEdgesFromResponse(),a.addNodes(),a.addEdges(),a.sigma.bind("clickNode",
|
||||||
function(b){a.bindings.clickNode(a,b)}),a.sigma.bind("clickStage",function(b){a.bindings.clickStage(a,b)}),a.sigma.graph.nodes().forEach(function(b){a.arrange(b.id,null,!0)}),a.sigma.camera.ratio=1.2,a.sigma.refresh())})};sociogramClass.prototype.nodeAt=function(a,b){var d=this.sigma.graph.nodes(),c=null,e;for(e in d){var f=Math.sqrt(Math.pow(a-d[e].x,2)+Math.pow(b-d[e].y,2));if(null==c||f<c)c=f}return c};
|
function(b){a.bindings.clickNode(a,b)}),a.sigma.bind("clickStage",function(b){a.bindings.clickStage(a,b)}),a.sigma.graph.nodes().forEach(function(b){a.arrange(b.id,null,!0)}),a.sigma.camera.ratio=1.2,a.sigma.refresh())})};sociogramClass.prototype.nodeAt=function(a,b){var d=this.sigma.graph.nodes(),c=null,e;for(e in d){var f=Math.sqrt(Math.pow(a-d[e].x,2)+Math.pow(b-d[e].y,2));if(null==c||f<c)c=f}return c};
|
||||||
|
|
|
@ -27,7 +27,7 @@ function sociogramClass(container){
|
||||||
sociogramClass.prototype = {
|
sociogramClass.prototype = {
|
||||||
container: this.container,
|
container: this.container,
|
||||||
sigma: null,
|
sigma: null,
|
||||||
request: { path: 'charts/network_data' },
|
request: { path: 'chart/network_data' },
|
||||||
response: null,
|
response: null,
|
||||||
nodes: [],
|
nodes: [],
|
||||||
edges: [],
|
edges: [],
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -3,7 +3,15 @@
|
||||||
/* (1) Constructeur de formulaire de contact */
|
/* (1) Constructeur de formulaire de contact */
|
||||||
var contactBuilder = new HTMLBuilder();
|
var contactBuilder = new HTMLBuilder();
|
||||||
contactBuilder.setLayout(
|
contactBuilder.setLayout(
|
||||||
"<h4 data-icon='p' class='new-contact color2'> \n"+
|
"<h4 data-icon='o' class='new-contact color2'> \n"+
|
||||||
|
|
||||||
|
"\t<input type='hidden' data-name='uid' value='@uid'>\n"+
|
||||||
|
"\t<input type='hidden' data-name='call' value='@call'>\n"+
|
||||||
|
"\t<input type='hidden' data-name='sms' value='@sms'>\n"+
|
||||||
|
|
||||||
|
"\t<input type='hidden' data-name='countcall' value='@countcall'>\n"+
|
||||||
|
"\t<input type='hidden' data-name='countsms' value='@countsms'>\n"+
|
||||||
|
|
||||||
"\t<input type='text' data-name='number' placeholder='Numéro de téléphone' value='@number' > \n"+
|
"\t<input type='text' data-name='number' placeholder='Numéro de téléphone' value='@number' > \n"+
|
||||||
"\t<input type='text' data-name='username' placeholder='Pseudo' value='@username' > \n"+
|
"\t<input type='text' data-name='username' placeholder='Pseudo' value='@username' > \n"+
|
||||||
"\t<span class='switch-left'></span> \n"+
|
"\t<span class='switch-left'></span> \n"+
|
||||||
|
@ -43,7 +51,14 @@ miniFicheBuilder.setLayout(
|
||||||
"\t<input type='hidden' data-name='username' value='@username'>\n"+
|
"\t<input type='hidden' data-name='username' value='@username'>\n"+
|
||||||
|
|
||||||
"\t<span data-space></span>\n"+
|
"\t<span data-space></span>\n"+
|
||||||
"\t<h4 data-icon='o' class='color2'>@firstname @lastname (@username)</h4>\n"+
|
"\t<h4 data-icon='a' class='color2'>@firstname @lastname @username</h4>\n"+
|
||||||
|
|
||||||
|
"\t<h5 class='nobold color0'>"+
|
||||||
|
"\t\t@countcall appels"+
|
||||||
|
"\t</h5>"+
|
||||||
|
"\t<h5 class='nobold color0'>"+
|
||||||
|
"\t\t@countsms sms"+
|
||||||
|
"\t</h5>"+
|
||||||
|
|
||||||
"\t<h5 class='nobold color0'>\n"+
|
"\t<h5 class='nobold color0'>\n"+
|
||||||
"\t\t<input type='radio' name='sexe_min_@uid' data-name='sexe' id='sexeH_min_@uid'><label for='sexeH_min_@uid'>Homme</label>\n"+
|
"\t\t<input type='radio' name='sexe_min_@uid' data-name='sexe' id='sexeH_min_@uid'><label for='sexeH_min_@uid'>Homme</label>\n"+
|
||||||
|
@ -52,59 +67,83 @@ miniFicheBuilder.setLayout(
|
||||||
|
|
||||||
|
|
||||||
"\t<h5 class='nobold color0'>\n"+
|
"\t<h5 class='nobold color0'>\n"+
|
||||||
"\t\t<input type='number' min='5' max='120' data-name='age' placeholder='Age' value='@age'>\n"+
|
"\t\t<span class='select-container'><select data-name='age'>\n"+
|
||||||
|
"\t\t\t<option value='.' disabled selected>Age:</option>\n"+
|
||||||
|
"\t\t\t<option value='1' >5 à 10 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='2' >10 à 15 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='3' >15 à 20 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='4' >20 à 25 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='5' >25 à 30 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='6' >30 à 35 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='7' >35 à 40 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='8' >40 à 45 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='9' >45 à 50 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='10'>50 à 55 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='11'>55 à 60 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='12'>60 à 65 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='13'>65 à 70 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='14'>70 à 75 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='15'>75 à 80 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='16'>80 à 85 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='17'>85 à 90 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='18'>90 à 95 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='19'>95 à 100 ans</option>\n"+
|
||||||
|
"\t\t</select></span>\n"+
|
||||||
"\t</h5>\n"+
|
"\t</h5>\n"+
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
"\t<h5 class='nobold color0'>\n"+
|
"\t<h5 class='nobold color0'>\n"+
|
||||||
"\t\t<span class='select-container'><select data-name='job'>\n"+
|
"\t\t<span class='select-container'><select data-name='studies'>\n"+
|
||||||
"\t\t\t<option value='.' disabled>Dernière profession exercée:</option>\n"+
|
"\t\t\t<option value='.' disabled selected>Niveau d'études maximal:</option>\n"+
|
||||||
"\t\t\t<option value='0'>Inconnue</option>\n"+
|
"\t\t\t<option value='0'>Inconnue</option>\n"+
|
||||||
"\t\t\t<option value='1-' disabled>Agriculateur exploitants</option>\n"+
|
"\t\t\t<option value='01'>Pas de scolarité</option>\n"+
|
||||||
"\t\t\t\t<option value='10'>- Agriculteurs exploitants (Agriculteurs, maraîchers, viticulteurs…)</option>\n"+
|
"\t\t\t<option value='02'>Aucun diplôme mais scolarité jusqu'en école primaire ou au collège</option>\n"+
|
||||||
"\t\t\t<option value='2-' disabled>Artisans, commerçants et chefs d'entreprises</option>\n"+
|
"\t\t\t<option value='03'>Aucun diplôme mais scolarité au-delà du collège</option>\n"+
|
||||||
"\t\t\t\t<option value='21'>- Artisans (Maçons, électriciens, couturiers, boulangers, garagistes, coiffeurs…)</option>\n"+
|
"\t\t\t<option value='04'>Certificat d'études primaires (CEP)</option>\n"+
|
||||||
"\t\t\t\t<option value='22'>- Commerçants et assimilés (Commerçants en détail ou en gros, buralistes, cafetiers, agents immobiliers…)</option>\n"+
|
"\t\t\t<option value='05'>BEPC, brevet élémentaire, brevet des collèges</option>\n"+
|
||||||
"\t\t\t\t<option value='23'>- Chefs d'entreprise de 10 salariés ou plus</option>\n"+
|
"\t\t\t<option value='06'>Certificat d'aptitudes professionnelles (CAP), brevet de compagnon, y compris CAPA</option>\n"+
|
||||||
"\t\t\t<option value='3-' disabled>Cadres et professions intellectuelles supérieures</option>\n"+
|
"\t\t\t<option value='07'>Brevet d'études professionnelles (BEP), y compris BEPA et diplômes agricoles (BAA, BPA)</option>\n"+
|
||||||
"\t\t\t\t<option value='31'>- Professions libérales et assimilés (Médecins, avocats, notaires, architectes libéraux…)</option>\n"+
|
"\t\t\t\t<option value='07' class='pad'>Diplômes sociaux (aide-soignante, auxiliaire de puériculture, travailleuse familiale)</option>\n"+
|
||||||
"\t\t\t\t<option value='32'>- Cadres de la fonction publique, professions intellectuelles et artistiques (Personnels administratifs</option>\n"+
|
"\t\t\t<option value='08'>Baccalauréat général, brevet supérieur</option>\n"+
|
||||||
"\t\t\t\t\t<option class='pad' value='32'>de catégorie A, professeurs de l’enseignement secondaire ou supérieur, médecins hospitaliers, artistes…)</option>\n"+
|
"\t\t\t\t<option class='pad' value='08'>BAC ( L, ES, S ou A, B , C, D, D’, E )</option>\n"+
|
||||||
"\t\t\t\t<option value='36'>- Cadres d'entreprise (Cadres administratifs, cadres commerciaux, ingénieurs…)</option>\n"+
|
"\t\t\t<option value='09'>Bac technologique ou professionnel, brevet professionnel ou de technicien</option>\n"+
|
||||||
"\t\t\t<option value='4-' disabled>Professions Intermédiaires</option>\n"+
|
"\t\t\t\t<option class='pad' value='09'>BAC (STI, STL, SMS, STT ou F, G, H)</option>\n"+
|
||||||
"\t\t\t\t<option value='41'>- Professions intermédiaires de l'enseignement, de la santé, de la fonction publique et assimilés </option>\n"+
|
"\t\t\t\t<option class='pad' value='09'>BEC, BEI, BEH, capacité en droit</option>\n"+
|
||||||
"\t\t\t\t\t<option class='pad' value='41'>(Personnels administratifs de catégorie B, instituteurs, infirmiers, travailleurs sociaux…)</option>\n"+
|
"\t\t\t\t<option class='pad' value='09'>Brevet de technicien agricole (BTA)</option>\n"+
|
||||||
"\t\t\t\t<option value='46'>- Professions intermédiaires administratives et commerciales des entreprises (Comptables, chargés de clientèles…)</option>\n"+
|
|
||||||
"\t\t\t\t<option value='47'>- Techniciens (Techniciens d’études, techniciens de contrôle, dessinateurs en bâtiment, géomètres…)</option>\n"+
|
"\t\t\t<option value='10'>Diplôme universitaire de 1er cycle</option>\n"+
|
||||||
"\t\t\t\t<option value='48'>- Contremaîtres, agents de maîtrise (Conducteurs de travaux, chefs d’équipe…)</option>\n"+
|
"\t\t\t\t<option class='pad' value='10'>BTS, DUT, DEUG</option>\n"+
|
||||||
"\t\t\t<option value='5-' disabled>Employés</option>\n"+
|
"\t\t\t\t<option class='pad' value='10'>Diplôme des professions sociales ou de santé, d'infirmier(ère)</option>\n"+
|
||||||
"\t\t\t\t<option value='51'>- Employés de la fonction publique (Personnels de catégorie C, agents administratifs, agents de service…)</option>\n"+
|
"\t\t\t\t<option class='pad' value='10'>Diplôme universitaire propédeutique, DUEL, DUES, DEUG, PCEM</option>\n"+
|
||||||
"\t\t\t\t<option value='54'>- Employés administratifs d'entreprise (Secrétaires, agents d’accueil…)</option>\n"+
|
"\t\t\t<option value='11'>Diplôme universitaire de 2ème ou 3ème cycle</option>\n"+
|
||||||
"\t\t\t\t<option value='55'>- Employés de commerce (Vendeurs, caissiers…)</option>\n"+
|
"\t\t\t\t<option class='pad' value='11'>MASTER, DOCTORAT (y compris médecine, pharmacie, dentaire),</option>\n"+
|
||||||
"\t\t\t\t<option value='56'>- Personnels des services directs aux particuliers (Serveurs, coiffeurs, assistantes maternelles…)</option>\n"+
|
"\t\t\t\t<option class='pad' value='11'>Maîtrise, DEA, DESS,</option>\n"+
|
||||||
"\t\t\t<option value='6-' disabled>Ouvriers</option>\n"+
|
"\t\t\t\t<option class='pad' value='11'>CAPES, CAPET, agrégation</option>\n"+
|
||||||
"\t\t\t\t<option value='61'>- Ouvriers qualifiés de type industriel ou artisanal (Mécaniciens, chauffeurs, cuisiniers…)</option>\n"+
|
"\t\t\t\t<option class='pad' value='11'>Diplôme d'ingénieur, d'une grande école, etc.</option>\n"+
|
||||||
"\t\t\t\t<option value='66'>- Ouvriers non qualifiés de type industriel ou artisanal (Ouvrier de production, manœuvres…)</option>\n"+
|
|
||||||
"\t\t\t\t<option value='69'>- Ouvriers agricoles (Bergers, ouvriers de la viticulture, bûcherons, ouvrier forestiers…)</option>\n"+
|
|
||||||
"\t\t\t<option value='7-' disabled>Retraités</option>\n"+
|
|
||||||
"\t\t\t\t<option value='71'>- Anciens agriculteurs exploitants</option>\n"+
|
|
||||||
"\t\t\t\t<option value='72'>- Anciens artisans, commerçants, chefs d'entreprise</option>\n"+
|
|
||||||
"\t\t\t\t<option value='73'>- Anciens cadres</option>\n"+
|
|
||||||
"\t\t\t\t<option value='74'>- Anciennes professions intermédiaires</option>\n"+
|
|
||||||
"\t\t\t\t<option value='75'>- Anciens employés</option>\n"+
|
|
||||||
"\t\t\t\t<option value='76'>- Anciens ouvriers</option>\n"+
|
|
||||||
"\t\t\t<option value='8-' disabled>Sans activité professionnelle</option>\n"+
|
|
||||||
"\t\t\t\t<option value='81'>- Chômeurs n'ayant jamais travaillé</option>\n"+
|
|
||||||
"\t\t\t\t<option value='82'>- Inactifs divers (autres que retraités)</option>\n"+
|
|
||||||
"\t\t</select></span>\n"+
|
"\t\t</select></span>\n"+
|
||||||
"\t</h5>\n"+
|
"\t</h5>\n"+
|
||||||
|
|
||||||
|
"\t<h4 data-icon='a'>Type de relation</h4>\n"+
|
||||||
|
"\t<h5 class='nobold color0'>\n"+
|
||||||
|
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype0_mini_@uid'><label for='reltype0_mini_@uid'>Père, mère ou équivalent</label><br>\n"+
|
||||||
|
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype1_mini_@uid'><label for='reltype1_mini_@uid'>Frère ou soeur</label><br>\n"+
|
||||||
|
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype2_mini_@uid'><label for='reltype2_mini_@uid'>Autre membre de la famille</label><br>\n"+
|
||||||
|
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype3_mini_@uid'><label for='reltype3_mini_@uid'>Relation amoureuse</label><br>\n"+
|
||||||
|
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype4_mini_@uid'><label for='reltype4_mini_@uid'>Collègue</label><br>\n"+
|
||||||
|
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype5_mini_@uid'><label for='reltype5_mini_@uid'>Voisin</label><br>\n"+
|
||||||
|
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype6_mini_@uid'><label for='reltype6_mini_@uid'>Ami</label><br>\n"+
|
||||||
|
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype7_mini_@uid'><label for='reltype7_mini_@uid'>Copain</label><br>\n"+
|
||||||
|
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype8_mini_@uid'><label for='reltype8_mini_@uid'>Autre : <input type='text' data-name='reltypeSpecial' placeholder='coéquipier de tennis, ..' value='@reltypespecial'></label><br>\n"+
|
||||||
|
"\t</h5>\n"+
|
||||||
|
|
||||||
|
|
||||||
"\t<h5 class='nobold color0'>\n"+
|
"\t<h5 class='nobold color0'>\n"+
|
||||||
"\t\tOù habite t-elle/il ?<br>\n"+
|
"\t\tOù habite t-elle/il ?<br>\n"+
|
||||||
"\t\t   <input type='radio' name='loc_min_@uid' data-name='loc' id='locA_min_@uid'><label for='locA_min_@uid'>- de 10km</label><br>\n"+
|
"\t\t <input type='radio' name='loc_min_@uid' data-name='loc' id='locA_min_@uid'><label for='locA_min_@uid'>de 5 minutes</label><br>\n"+
|
||||||
"\t\t   <input type='radio' name='loc_min_@uid' data-name='loc' id='locB_min_@uid'><label for='locB_min_@uid'>de 10km à 30km</label><br>\n"+
|
"\t\t <input type='radio' name='loc_min_@uid' data-name='loc' id='locB_min_@uid'><label for='locB_min_@uid'>de 5 à 15 minutes</label><br>\n"+
|
||||||
"\t\t   <input type='radio' name='loc_min_@uid' data-name='loc' id='locC_min_@uid'><label for='locC_min_@uid'>de 30km à 100km</label><br>\n"+
|
"\t\t <input type='radio' name='loc_min_@uid' data-name='loc' id='locC_min_@uid'><label for='locC_min_@uid'>de 15 à 60 minutes</label><br>\n"+
|
||||||
"\t\t   <input type='radio' name='loc_min_@uid' data-name='loc' id='locD_min_@uid'><label for='locD_min_@uid'>+ de 100km</label>\n"+
|
"\t\t <input type='radio' name='loc_min_@uid' data-name='loc' id='locD_min_@uid'><label for='locD_min_@uid'>+ d'une heure</label><br>\n"+
|
||||||
"\t</h5>\n"+
|
"\t</h5>\n"+
|
||||||
"</article>");
|
"</article>");
|
||||||
|
|
||||||
|
@ -157,12 +196,20 @@ var ficheBuilder = new HTMLBuilder();
|
||||||
ficheBuilder.setLayout(
|
ficheBuilder.setLayout(
|
||||||
"<article class='fiche-relation'>\n"+
|
"<article class='fiche-relation'>\n"+
|
||||||
|
|
||||||
|
"\t<input type='hidden' data-name='contact' value='@contact'>\n"+
|
||||||
"\t<input type='hidden' data-name='uid' value='@uid'>\n"+
|
"\t<input type='hidden' data-name='uid' value='@uid'>\n"+
|
||||||
"\t<input type='hidden' data-name='firstname' value='@firstname'>\n"+
|
"\t<input type='hidden' data-name='firstname' value='@firstname'>\n"+
|
||||||
"\t<input type='hidden' data-name='lastname' value='@lastname'>\n"+
|
"\t<input type='hidden' data-name='lastname' value='@lastname'>\n"+
|
||||||
"\t<input type='hidden' data-name='username' value='@username'>\n"+
|
"\t<input type='hidden' data-name='username' value='@username'>\n"+
|
||||||
|
|
||||||
"\t<h4 data-icon='o' class='color2'>@firstname @lastname (@username)</h4>\n"+
|
"\t<h4 data-icon='a' class='color2'>@firstname @lastname @username</h4>\n"+
|
||||||
|
|
||||||
|
"\t<h5 class='nobold color0'>"+
|
||||||
|
"\t\t@countcall appels"+
|
||||||
|
"\t</h5>"+
|
||||||
|
"\t<h5 class='nobold color0'>"+
|
||||||
|
"\t\t@countsms sms"+
|
||||||
|
"\t</h5>"+
|
||||||
|
|
||||||
"\t<h5 class='nobold color0'>\n"+
|
"\t<h5 class='nobold color0'>\n"+
|
||||||
"\t\t<input type='radio' name='sexe_@uid' data-name='sexe' id='sexeH_@uid'><label for='sexeH_@uid'>Homme</label>\n"+
|
"\t\t<input type='radio' name='sexe_@uid' data-name='sexe' id='sexeH_@uid'><label for='sexeH_@uid'>Homme</label>\n"+
|
||||||
|
@ -171,7 +218,28 @@ ficheBuilder.setLayout(
|
||||||
|
|
||||||
|
|
||||||
"\t<h5 class='nobold color0'>\n"+
|
"\t<h5 class='nobold color0'>\n"+
|
||||||
"\t\t<input type='number' min='5' max='120' data-name='age' placeholder='Age' value='@age'>\n"+
|
"\t\t<span class='select-container'><select data-name='age'>\n"+
|
||||||
|
"\t\t\t<option value='.' disabled selected>Age:</option>\n"+
|
||||||
|
"\t\t\t<option value='1' >5 à 10 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='2' >10 à 15 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='3' >15 à 20 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='4' >20 à 25 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='5' >25 à 30 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='6' >30 à 35 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='7' >35 à 40 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='8' >40 à 45 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='9' >45 à 50 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='10'>50 à 55 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='11'>55 à 60 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='12'>60 à 65 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='13'>65 à 70 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='14'>70 à 75 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='15'>75 à 80 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='16'>80 à 85 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='17'>85 à 90 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='18'>90 à 95 ans</option>\n"+
|
||||||
|
"\t\t\t<option value='19'>95 à 100 ans</option>\n"+
|
||||||
|
"\t\t</select></span>\n"+
|
||||||
"\t</h5>\n"+
|
"\t</h5>\n"+
|
||||||
|
|
||||||
"\t<h5 class='nobold color0'>\n"+
|
"\t<h5 class='nobold color0'>\n"+
|
||||||
|
@ -179,41 +247,41 @@ ficheBuilder.setLayout(
|
||||||
"\t\t\t<option value='.' disabled selected>Dernière profession exercée:</option>\n"+
|
"\t\t\t<option value='.' disabled selected>Dernière profession exercée:</option>\n"+
|
||||||
"\t\t\t<option value='0'>Inconnue</option>\n"+
|
"\t\t\t<option value='0'>Inconnue</option>\n"+
|
||||||
"\t\t\t<option value='1-' disabled>Agriculateur exploitants</option>\n"+
|
"\t\t\t<option value='1-' disabled>Agriculateur exploitants</option>\n"+
|
||||||
"\t\t\t\t<option value='10'>- Agriculteurs exploitants (Agriculteurs, maraîchers, viticulteurs…)</option>\n"+
|
"\t\t\t\t<option value='10'>Agriculteurs exploitants (Agriculteurs, maraîchers, viticulteurs…)</option>\n"+
|
||||||
"\t\t\t<option value='2-' disabled>Artisans, commerçants et chefs d'entreprises</option>\n"+
|
"\t\t\t<option value='2-' disabled>Artisans, commerçants et chefs d'entreprises</option>\n"+
|
||||||
"\t\t\t\t<option value='21'>- Artisans (Maçons, électriciens, couturiers, boulangers, garagistes, coiffeurs…)</option>\n"+
|
"\t\t\t\t<option value='21'>Artisans (Maçons, électriciens, couturiers, boulangers, garagistes, coiffeurs…)</option>\n"+
|
||||||
"\t\t\t\t<option value='22'>- Commerçants et assimilés (Commerçants en détail ou en gros, buralistes, cafetiers, agents immobiliers…)</option>\n"+
|
"\t\t\t\t<option value='22'>Commerçants et assimilés (Commerçants en détail ou en gros, buralistes, cafetiers, agents immobiliers…)</option>\n"+
|
||||||
"\t\t\t\t<option value='23'>- Chefs d'entreprise de 10 salariés ou plus</option>\n"+
|
"\t\t\t\t<option value='23'>Chefs d'entreprise de 10 salariés ou plus</option>\n"+
|
||||||
"\t\t\t<option value='3-' disabled>Cadres et professions intellectuelles supérieures</option>\n"+
|
"\t\t\t<option value='3-' disabled>Cadres et professions intellectuelles supérieures</option>\n"+
|
||||||
"\t\t\t\t<option value='31'>- Professions libérales et assimilés (Médecins, avocats, notaires, architectes libéraux…)</option>\n"+
|
"\t\t\t\t<option value='31'>Professions libérales et assimilés (Médecins, avocats, notaires, architectes libéraux…)</option>\n"+
|
||||||
"\t\t\t\t<option value='32'>- Cadres de la fonction publique, professions intellectuelles et artistiques (Personnels administratifs</option>\n"+
|
"\t\t\t\t<option value='32'>Cadres de la fonction publique, professions intellectuelles et artistiques (Personnels administratifs</option>\n"+
|
||||||
"\t\t\t\t\t<option class='pad' value='32'>de catégorie A, professeurs de l’enseignement secondaire ou supérieur, médecins hospitaliers, artistes…)</option>\n"+
|
"\t\t\t\t\t<option class='pad' value='32'>de catégorie A, professeurs de l’enseignement secondaire ou supérieur, médecins hospitaliers, artistes…)</option>\n"+
|
||||||
"\t\t\t\t<option value='36'>- Cadres d'entreprise (Cadres administratifs, cadres commerciaux, ingénieurs…)</option>\n"+
|
"\t\t\t\t<option value='36'>Cadres d'entreprise (Cadres administratifs, cadres commerciaux, ingénieurs…)</option>\n"+
|
||||||
"\t\t\t<option value='4-' disabled>Professions Intermédiaires</option>\n"+
|
"\t\t\t<option value='4-' disabled>Professions Intermédiaires</option>\n"+
|
||||||
"\t\t\t\t<option value='41'>- Professions intermédiaires de l'enseignement, de la santé, de la fonction publique et assimilés </option>\n"+
|
"\t\t\t\t<option value='41'>Professions intermédiaires de l'enseignement, de la santé, de la fonction publique et assimilés </option>\n"+
|
||||||
"\t\t\t\t\t<option class='pad' value='41'>(Personnels administratifs de catégorie B, instituteurs, infirmiers, travailleurs sociaux…)</option>\n"+
|
"\t\t\t\t\t<option class='pad' value='41'>(Personnels administratifs de catégorie B, instituteurs, infirmiers, travailleurs sociaux…)</option>\n"+
|
||||||
"\t\t\t\t<option value='46'>- Professions intermédiaires administratives et commerciales des entreprises (Comptables, chargés de clientèles…)</option>\n"+
|
"\t\t\t\t<option value='46'>Professions intermédiaires administratives et commerciales des entreprises (Comptables, chargés de clientèles…)</option>\n"+
|
||||||
"\t\t\t\t<option value='47'>- Techniciens (Techniciens d’études, techniciens de contrôle, dessinateurs en bâtiment, géomètres…)</option>\n"+
|
"\t\t\t\t<option value='47'>Techniciens (Techniciens d’études, techniciens de contrôle, dessinateurs en bâtiment, géomètres…)</option>\n"+
|
||||||
"\t\t\t\t<option value='48'>- Contremaîtres, agents de maîtrise (Conducteurs de travaux, chefs d’équipe…)</option>\n"+
|
"\t\t\t\t<option value='48'>Contremaîtres, agents de maîtrise (Conducteurs de travaux, chefs d’équipe…)</option>\n"+
|
||||||
"\t\t\t<option value='5-' disabled>Employés</option>\n"+
|
"\t\t\t<option value='5-' disabled>Employés</option>\n"+
|
||||||
"\t\t\t\t<option value='51'>- Employés de la fonction publique (Personnels de catégorie C, agents administratifs, agents de service…)</option>\n"+
|
"\t\t\t\t<option value='51'>Employés de la fonction publique (Personnels de catégorie C, agents administratifs, agents de service…)</option>\n"+
|
||||||
"\t\t\t\t<option value='54'>- Employés administratifs d'entreprise (Secrétaires, agents d’accueil…)</option>\n"+
|
"\t\t\t\t<option value='54'>Employés administratifs d'entreprise (Secrétaires, agents d’accueil…)</option>\n"+
|
||||||
"\t\t\t\t<option value='55'>- Employés de commerce (Vendeurs, caissiers…)</option>\n"+
|
"\t\t\t\t<option value='55'>Employés de commerce (Vendeurs, caissiers…)</option>\n"+
|
||||||
"\t\t\t\t<option value='56'>- Personnels des services directs aux particuliers (Serveurs, coiffeurs, assistantes maternelles…)</option>\n"+
|
"\t\t\t\t<option value='56'>Personnels des services directs aux particuliers (Serveurs, coiffeurs, assistantes maternelles…)</option>\n"+
|
||||||
"\t\t\t<option value='6-' disabled>Ouvriers</option>\n"+
|
"\t\t\t<option value='6-' disabled>Ouvriers</option>\n"+
|
||||||
"\t\t\t\t<option value='61'>- Ouvriers qualifiés de type industriel ou artisanal (Mécaniciens, chauffeurs, cuisiniers…)</option>\n"+
|
"\t\t\t\t<option value='61'>Ouvriers qualifiés de type industriel ou artisanal (Mécaniciens, chauffeurs, cuisiniers…)</option>\n"+
|
||||||
"\t\t\t\t<option value='66'>- Ouvriers non qualifiés de type industriel ou artisanal (Ouvrier de production, manœuvres…)</option>\n"+
|
"\t\t\t\t<option value='66'>Ouvriers non qualifiés de type industriel ou artisanal (Ouvrier de production, manœuvres…)</option>\n"+
|
||||||
"\t\t\t\t<option value='69'>- Ouvriers agricoles (Bergers, ouvriers de la viticulture, bûcherons, ouvrier forestiers…)</option>\n"+
|
"\t\t\t\t<option value='69'>Ouvriers agricoles (Bergers, ouvriers de la viticulture, bûcherons, ouvrier forestiers…)</option>\n"+
|
||||||
"\t\t\t<option value='7-' disabled>Retraités</option>\n"+
|
"\t\t\t<option value='7-' disabled>Retraités</option>\n"+
|
||||||
"\t\t\t\t<option value='71'>- Anciens agriculteurs exploitants</option>\n"+
|
"\t\t\t\t<option value='71'>Anciens agriculteurs exploitants</option>\n"+
|
||||||
"\t\t\t\t<option value='72'>- Anciens artisans, commerçants, chefs d'entreprise</option>\n"+
|
"\t\t\t\t<option value='72'>Anciens artisans, commerçants, chefs d'entreprise</option>\n"+
|
||||||
"\t\t\t\t<option value='73'>- Anciens cadres</option>\n"+
|
"\t\t\t\t<option value='73'>Anciens cadres</option>\n"+
|
||||||
"\t\t\t\t<option value='74'>- Anciennes professions intermédiaires</option>\n"+
|
"\t\t\t\t<option value='74'>Anciennes professions intermédiaires</option>\n"+
|
||||||
"\t\t\t\t<option value='75'>- Anciens employés</option>\n"+
|
"\t\t\t\t<option value='75'>Anciens employés</option>\n"+
|
||||||
"\t\t\t\t<option value='76'>- Anciens ouvriers</option>\n"+
|
"\t\t\t\t<option value='76'>Anciens ouvriers</option>\n"+
|
||||||
"\t\t\t<option value='8-' disabled>Sans activité professionnelle</option>\n"+
|
"\t\t\t<option value='8-' disabled>Sans activité professionnelle</option>\n"+
|
||||||
"\t\t\t\t<option value='81'>- Chômeurs n'ayant jamais travaillé</option>\n"+
|
"\t\t\t\t<option value='81'>Chômeurs n'ayant jamais travaillé</option>\n"+
|
||||||
"\t\t\t\t<option value='82'>- Inactifs divers (autres que retraités)</option>\n"+
|
"\t\t\t\t<option value='82'>Inactifs divers (autres que retraités)</option>\n"+
|
||||||
"\t\t</select></span>\n"+
|
"\t\t</select></span>\n"+
|
||||||
"\t</h5>\n"+
|
"\t</h5>\n"+
|
||||||
|
|
||||||
|
@ -229,26 +297,26 @@ ficheBuilder.setLayout(
|
||||||
"\t\t<span class='select-container'><select data-name='studies'>\n"+
|
"\t\t<span class='select-container'><select data-name='studies'>\n"+
|
||||||
"\t\t\t<option value='.' disabled selected>Niveau d'études maximal:</option>\n"+
|
"\t\t\t<option value='.' disabled selected>Niveau d'études maximal:</option>\n"+
|
||||||
"\t\t\t<option value='0'>Inconnue</option>\n"+
|
"\t\t\t<option value='0'>Inconnue</option>\n"+
|
||||||
"\t\t\t<option value='01'>- Pas de scolarité</option>\n"+
|
"\t\t\t<option value='01'>Pas de scolarité</option>\n"+
|
||||||
"\t\t\t<option value='02'>- Aucun diplôme mais scolarité jusqu'en école primaire ou au collège</option>\n"+
|
"\t\t\t<option value='02'>Aucun diplôme mais scolarité jusqu'en école primaire ou au collège</option>\n"+
|
||||||
"\t\t\t<option value='03'>- Aucun diplôme mais scolarité au-delà du collège</option>\n"+
|
"\t\t\t<option value='03'>Aucun diplôme mais scolarité au-delà du collège</option>\n"+
|
||||||
"\t\t\t<option value='04'>- Certificat d'études primaires (CEP)</option>\n"+
|
"\t\t\t<option value='04'>Certificat d'études primaires (CEP)</option>\n"+
|
||||||
"\t\t\t<option value='05'>- BEPC, brevet élémentaire, brevet des collèges</option>\n"+
|
"\t\t\t<option value='05'>BEPC, brevet élémentaire, brevet des collèges</option>\n"+
|
||||||
"\t\t\t<option value='06'>- Certificat d'aptitudes professionnelles (CAP), brevet de compagnon, y compris CAPA</option>\n"+
|
"\t\t\t<option value='06'>Certificat d'aptitudes professionnelles (CAP), brevet de compagnon, y compris CAPA</option>\n"+
|
||||||
"\t\t\t<option value='07'>- Brevet d'études professionnelles (BEP), y compris BEPA et diplômes agricoles (BAA, BPA)</option>\n"+
|
"\t\t\t<option value='07'>Brevet d'études professionnelles (BEP), y compris BEPA et diplômes agricoles (BAA, BPA)</option>\n"+
|
||||||
"\t\t\t\t<option value='07' class='pad'>Diplômes sociaux (aide-soignante, auxiliaire de puériculture, travailleuse familiale)</option>\n"+
|
"\t\t\t\t<option value='07' class='pad'>Diplômes sociaux (aide-soignante, auxiliaire de puériculture, travailleuse familiale)</option>\n"+
|
||||||
"\t\t\t<option value='08'>- Baccalauréat général, brevet supérieur</option>\n"+
|
"\t\t\t<option value='08'>Baccalauréat général, brevet supérieur</option>\n"+
|
||||||
"\t\t\t\t<option class='pad' value='08'>BAC ( L, ES, S ou A, B , C, D, D’, E )</option>\n"+
|
"\t\t\t\t<option class='pad' value='08'>BAC ( L, ES, S ou A, B , C, D, D’, E )</option>\n"+
|
||||||
"\t\t\t<option value='09'>- Bac technologique ou professionnel, brevet professionnel ou de technicien</option>\n"+
|
"\t\t\t<option value='09'>Bac technologique ou professionnel, brevet professionnel ou de technicien</option>\n"+
|
||||||
"\t\t\t\t<option class='pad' value='09'>BAC (STI, STL, SMS, STT ou F, G, H)</option>\n"+
|
"\t\t\t\t<option class='pad' value='09'>BAC (STI, STL, SMS, STT ou F, G, H)</option>\n"+
|
||||||
"\t\t\t\t<option class='pad' value='09'>BEC, BEI, BEH, capacité en droit</option>\n"+
|
"\t\t\t\t<option class='pad' value='09'>BEC, BEI, BEH, capacité en droit</option>\n"+
|
||||||
"\t\t\t\t<option class='pad' value='09'>Brevet de technicien agricole (BTA)</option>\n"+
|
"\t\t\t\t<option class='pad' value='09'>Brevet de technicien agricole (BTA)</option>\n"+
|
||||||
|
|
||||||
"\t\t\t<option value='10'>- Diplôme universitaire de 1er cycle</option>\n"+
|
"\t\t\t<option value='10'>Diplôme universitaire de 1er cycle</option>\n"+
|
||||||
"\t\t\t\t<option class='pad' value='10'>BTS, DUT, DEUG</option>\n"+
|
"\t\t\t\t<option class='pad' value='10'>BTS, DUT, DEUG</option>\n"+
|
||||||
"\t\t\t\t<option class='pad' value='10'>Diplôme des professions sociales ou de santé, d'infirmier(ère)</option>\n"+
|
"\t\t\t\t<option class='pad' value='10'>Diplôme des professions sociales ou de santé, d'infirmier(ère)</option>\n"+
|
||||||
"\t\t\t\t<option class='pad' value='10'>Diplôme universitaire propédeutique, DUEL, DUES, DEUG, PCEM</option>\n"+
|
"\t\t\t\t<option class='pad' value='10'>Diplôme universitaire propédeutique, DUEL, DUES, DEUG, PCEM</option>\n"+
|
||||||
"\t\t\t<option value='11'>- Diplôme universitaire de 2ème ou 3ème cycle</option>\n"+
|
"\t\t\t<option value='11'>Diplôme universitaire de 2ème ou 3ème cycle</option>\n"+
|
||||||
"\t\t\t\t<option class='pad' value='11'>MASTER, DOCTORAT (y compris médecine, pharmacie, dentaire),</option>\n"+
|
"\t\t\t\t<option class='pad' value='11'>MASTER, DOCTORAT (y compris médecine, pharmacie, dentaire),</option>\n"+
|
||||||
"\t\t\t\t<option class='pad' value='11'>Maîtrise, DEA, DESS,</option>\n"+
|
"\t\t\t\t<option class='pad' value='11'>Maîtrise, DEA, DESS,</option>\n"+
|
||||||
"\t\t\t\t<option class='pad' value='11'>CAPES, CAPET, agrégation</option>\n"+
|
"\t\t\t\t<option class='pad' value='11'>CAPES, CAPET, agrégation</option>\n"+
|
||||||
|
@ -277,7 +345,8 @@ ficheBuilder.setLayout(
|
||||||
|
|
||||||
|
|
||||||
"\t<h5 class='nobold color0'>\n"+
|
"\t<h5 class='nobold color0'>\n"+
|
||||||
"\t\t <input type='radio' name='loc_@uid' data-name='loc' id='locA_@uid'><label for='locA_@uid'>- de 5 minutes</label><br>\n"+
|
"\t\tOù habite t-elle/il ?<br>\n"+
|
||||||
|
"\t\t <input type='radio' name='loc_@uid' data-name='loc' id='locA_@uid'><label for='locA_@uid'>de 5 minutes</label><br>\n"+
|
||||||
"\t\t <input type='radio' name='loc_@uid' data-name='loc' id='locB_@uid'><label for='locB_@uid'>de 5 à 15 minutes</label><br>\n"+
|
"\t\t <input type='radio' name='loc_@uid' data-name='loc' id='locB_@uid'><label for='locB_@uid'>de 5 à 15 minutes</label><br>\n"+
|
||||||
"\t\t <input type='radio' name='loc_@uid' data-name='loc' id='locC_@uid'><label for='locC_@uid'>de 15 à 60 minutes</label><br>\n"+
|
"\t\t <input type='radio' name='loc_@uid' data-name='loc' id='locC_@uid'><label for='locC_@uid'>de 15 à 60 minutes</label><br>\n"+
|
||||||
"\t\t <input type='radio' name='loc_@uid' data-name='loc' id='locD_@uid'><label for='locD_@uid'>+ d'une heure</label><br>\n"+
|
"\t\t <input type='radio' name='loc_@uid' data-name='loc' id='locD_@uid'><label for='locD_@uid'>+ d'une heure</label><br>\n"+
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
function inputPhoneContact(a){this.container=a}inputPhoneContact.prototype={container:this.container,handler:null};
|
function inputPhoneContact(a,c){this.container=a;this.nav_container=c}inputPhoneContact.prototype={container:this.container,nav_container:this.nav_container,selected:0,handler:null};
|
||||||
inputPhoneContact.prototype.fieldsToStorage=function(){console.log("CONTACTS: FIELDS TO STORAGE");for(var a=$$("article.contact-panel .new-contact"),c=0;c<a.length;c++){var d=a[c].parentNode.children.indexOf(a[c]),b=(new FormDeflater(a[c],["input"],["data-name"])).deflate(),e=0<b.number.value.length;if(e=e&&0<b.username.value.length+b.firstname.value.length+b.lastname.value.length)b={uid:d,number:b.number.value,username:b.username.value,firstname:b.firstname.value,lastname:b.lastname.value},b.hash=
|
inputPhoneContact.prototype.fieldsToStorage=function(){console.log("CONTACTS: FIELDS TO STORAGE");for(var a=$$("article.contact-panel .new-contact"),c=0;c<a.length;c++){var b=(new FormDeflater(a[c],["input"],["data-name"])).deflate(),d=0<b.number.value.length;if(d=d&&0<b.username.value.length+b.firstname.value.length+b.lastname.value.length)d={uid:parseInt(b.uid.value),number:b.number.value,username:b.username.value,firstname:b.firstname.value,lastname:b.lastname.value,call:parseInt(b.call.value),
|
||||||
crc32(JSON.stringify(b)),lsi.set("contacts","form"+d,b)}};
|
sms:parseInt(b.sms.value),countcall:parseInt(b.countcall.value),countsms:parseInt(b.countsms.value)},d.hash=crc32(JSON.stringify(d)),lsi.set("contacts",parseInt(b.uid.value),d)}};
|
||||||
inputPhoneContact.prototype.add=function(a){console.log("CONTACTS: ADD");a.number=null!=a.number?a.number:"";a.username=null!=a.username?a.username:"";a.firstname=null!=a.firstname?a.firstname:"";a.lastname=null!=a.lastname?a.lastname:"";this.container.innerHTML+=contactBuilder.build(a);a=$$("article.contact-panel .new-contact");for(var c=this,d=0;d<a.length;d++)a[d].removeEventListener("click",function(a){c.handler(a.target)},!1),a[d].addEventListener("click",function(a){c.handler(a.target)},!1)};
|
inputPhoneContact.prototype.add=function(a){console.log("CONTACTS: ADD");if(null==a||null==a.uid||isNaN(a.uid))return!1;a.number=null!=a.number?a.number:"";a.username=null!=a.username?a.username:"";a.firstname=null!=a.firstname?a.firstname:"";a.lastname=null!=a.lastname?a.lastname:"";a.call=null!=a.call?a.call:-1;a.sms=null!=a.sms?a.sms:-1;a.countcall=null!=a.countcall?a.countcall:0;a.countsms=null!=a.countsms?a.countsms:0;this.container.innerHTML+=contactBuilder.build(a);a=$$("article.contact-panel .new-contact");
|
||||||
inputPhoneContact.prototype.storageToFields=function(){console.log("CONTACTS: STORAGE TO FIELDS");var a=lsi["export"]("contacts");this.container.innerHTML="";for(var c in a)this.add(a[c]);this.add({number:"",firstname:"",lastname:"",username:""})};inputPhoneContact.prototype.attach=function(a){console.log("CONTACTS: ATTACH");lsi.createDataset("contacts");this.handler=a;this.storageToFields()};
|
for(var c=this,b=0;b<a.length;b++)a[b].removeEventListener("click",function(a){c.nav(a.target);c.handler(a.target)},!1),a[b].addEventListener("click",function(a){c.nav(a.target);c.handler(a.target)},!1)};inputPhoneContact.prototype.storageToFields=function(){console.log("CONTACTS: STORAGE TO FIELDS");var a=lsi.keys("contacts");this.container.innerHTML="";for(var c=this.selected+10,b=this.selected;b<c&&b<a.length;b++)this.add(lsi.get("contacts",a[b]));c>=a.length&&this.add({uid:a.length});this.updateNavBar()};
|
||||||
|
inputPhoneContact.prototype.nav=function(a){if(null==a||!1===a.getData("n")||isNaN(a.getData("n"))||"nav-contact"!=a.parentNode.id)return!1;for(var c=$$("#nav-contact > span.active"),b=0;b<c.length;b++)c[b].remClass("active");a.addClass("active");this.selected=parseInt(a.getData("n"))};
|
||||||
|
inputPhoneContact.prototype.updateNavBar=function(){var a=lsi.keys("contacts").length;if(this.nav_container.children.length!=a){this.nav_container.innerHTML="";for(var c=0;c<a;c+=10)this.nav_container.innerHTML+='<span data-n="'+c+'">'+(1+c/10)+"</span>"}this.nav($('#nav-contact [data-n="'+this.selected+'"]'))};
|
||||||
|
inputPhoneContact.prototype.attach=function(a){console.log("CONTACTS: ATTACH");lsi.createDataset("contacts");this.storageToFields();this.handler=a;var c=this;this.nav_container.addEventListener("click",function(a){c.nav(a.target);c.handler(a.target)},!1)};
|
||||||
|
|
|
@ -1,13 +1,16 @@
|
||||||
/* [0] Constructeur -> définit le conteneur et le bouton d'ajout
|
/* [0] Constructeur -> définit le conteneur et le bouton d'ajout
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
function inputPhoneContact(container){
|
function inputPhoneContact(container, navContainer){
|
||||||
this.container = container;
|
this.container = container;
|
||||||
|
this.nav_container = navContainer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* [1] Attributs
|
/* [1] Attributs
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
inputPhoneContact.prototype = {
|
inputPhoneContact.prototype = {
|
||||||
container: this.container, // Conteneur des formulaires de contact
|
container: this.container, // Conteneur des formulaires de contact
|
||||||
|
nav_container: this.nav_container, // Conteneur de la navigation entre les formulaires
|
||||||
|
selected: 0, // UID du permier des contacts sélectionnés (10 par 10)
|
||||||
handler: null // Fonction pour l'enregistrement et la synchronisation des données
|
handler: null // Fonction pour l'enregistrement et la synchronisation des données
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -18,16 +21,13 @@ inputPhoneContact.prototype.fieldsToStorage = function(){
|
||||||
console.log('CONTACTS: FIELDS TO STORAGE');
|
console.log('CONTACTS: FIELDS TO STORAGE');
|
||||||
|
|
||||||
// {1} Pour chaque formulaire de contact présent //
|
// {1} Pour chaque formulaire de contact présent //
|
||||||
var existingContacts = $$('article.contact-panel .new-contact');
|
var visibleContacts = $$('article.contact-panel .new-contact');
|
||||||
for( var i = 0 ; i < existingContacts.length ; i++ ){
|
for( var i = 0 ; i < visibleContacts.length ; i++ ){
|
||||||
|
|
||||||
// {2} On récupère les informations relatives à l'élément courant //
|
// {2} On initialise notre deflater pour récupérer les valeurs //
|
||||||
var indexInParent = existingContacts[i].parentNode.children.indexOf(existingContacts[i]);
|
var deflater = new FormDeflater(visibleContacts[i], ['input'], ['data-name']);
|
||||||
|
|
||||||
// {3} On initialise notre deflater pour récupérer les valeurs //
|
// {3} On enregistre ce contact si le numéro n'est pas vide et soit pseudo/prénom/nom //
|
||||||
var deflater = new FormDeflater(existingContacts[i], ['input'], ['data-name']);
|
|
||||||
|
|
||||||
// {4} On enregistre ce contact si le numéro n'est pas vide et soit pseudo/prénom/nom //
|
|
||||||
var deflated = deflater.deflate();
|
var deflated = deflater.deflate();
|
||||||
|
|
||||||
// Le numéro n'est pas vide
|
// Le numéro n'est pas vide
|
||||||
|
@ -38,25 +38,29 @@ inputPhoneContact.prototype.fieldsToStorage = function(){
|
||||||
// Si le formulaire n'est pas valide, on ne l'enregistre pas
|
// Si le formulaire n'est pas valide, on ne l'enregistre pas
|
||||||
if( !validForm ) continue;
|
if( !validForm ) continue;
|
||||||
|
|
||||||
// {5} On récupère et met en forme les valeurs du deflater //
|
// {4} On récupère et met en forme les valeurs du deflater //
|
||||||
var obj = {
|
var obj = {
|
||||||
uid: indexInParent,
|
uid: parseInt(deflated.uid.value),
|
||||||
number: deflated.number.value,
|
number: deflated.number.value,
|
||||||
username: deflated.username.value,
|
username: deflated.username.value,
|
||||||
firstname: deflated.firstname.value,
|
firstname: deflated.firstname.value,
|
||||||
lastname: deflated.lastname.value
|
lastname: deflated.lastname.value,
|
||||||
|
|
||||||
|
call: parseInt(deflated.call.value),
|
||||||
|
sms: parseInt(deflated.sms.value),
|
||||||
|
|
||||||
|
countcall: parseInt(deflated.countcall.value),
|
||||||
|
countsms: parseInt(deflated.countsms.value)
|
||||||
};
|
};
|
||||||
|
|
||||||
/* (6) On calcule et ajoute le hash des données */
|
/* (5) On calcule et ajoute le hash des données */
|
||||||
obj.hash = crc32( JSON.stringify(obj) );
|
obj.hash = crc32( JSON.stringify(obj) );
|
||||||
|
|
||||||
// {7} On enregistre les données dans le 'localStorage' //
|
// {6} On enregistre les données dans le 'localStorage' //
|
||||||
lsi.set('contacts', 'form'+indexInParent, obj);
|
lsi.set('contacts', parseInt(deflated.uid.value), obj);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// {7} On met à jour le rendu des contacts//
|
|
||||||
// this.storageToFields();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -77,11 +81,19 @@ inputPhoneContact.prototype.fieldsToStorage = function(){
|
||||||
inputPhoneContact.prototype.add = function(objectData){
|
inputPhoneContact.prototype.add = function(objectData){
|
||||||
console.log('CONTACTS: ADD');
|
console.log('CONTACTS: ADD');
|
||||||
|
|
||||||
|
// Si pas d'uid, on quitte
|
||||||
|
if( objectData == null || objectData.uid == null || isNaN(objectData.uid) )
|
||||||
|
return false
|
||||||
|
|
||||||
// {0} On formatte l'object //
|
// {0} On formatte l'object //
|
||||||
objectData.number = (objectData.number != null) ? objectData.number : '';
|
objectData.number = (objectData.number != null) ? objectData.number : '';
|
||||||
objectData.username = (objectData.username != null) ? objectData.username : '';
|
objectData.username = (objectData.username != null) ? objectData.username : '';
|
||||||
objectData.firstname = (objectData.firstname != null) ? objectData.firstname : '';
|
objectData.firstname = (objectData.firstname != null) ? objectData.firstname : '';
|
||||||
objectData.lastname = (objectData.lastname != null) ? objectData.lastname : '';
|
objectData.lastname = (objectData.lastname != null) ? objectData.lastname : '';
|
||||||
|
objectData.call = (objectData.call != null) ? objectData.call : -1;
|
||||||
|
objectData.sms = (objectData.sms != null) ? objectData.sms : -1;
|
||||||
|
objectData.countcall = (objectData.countcall != null) ? objectData.countcall : 0;
|
||||||
|
objectData.countsms = (objectData.countsms != null) ? objectData.countsms : 0;
|
||||||
|
|
||||||
|
|
||||||
// {1} On ajoute le HTML //
|
// {1} On ajoute le HTML //
|
||||||
|
@ -93,8 +105,8 @@ inputPhoneContact.prototype.add = function(objectData){
|
||||||
// On met à jour les listener (remove, puis add)
|
// On met à jour les listener (remove, puis add)
|
||||||
var ptr = this;
|
var ptr = this;
|
||||||
for( var i = 0 ; i < contactForms.length ; i++ ){
|
for( var i = 0 ; i < contactForms.length ; i++ ){
|
||||||
contactForms[i].removeEventListener('click', function(e){ ptr.handler(e.target); }, false);
|
contactForms[i].removeEventListener('click', function(e){ ptr.nav(e.target); ptr.handler(e.target); }, false);
|
||||||
contactForms[i].addEventListener('click', function(e){ ptr.handler(e.target); }, false);
|
contactForms[i].addEventListener('click', function(e){ ptr.nav(e.target); ptr.handler(e.target); }, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -114,23 +126,88 @@ inputPhoneContact.prototype.storageToFields = function(){
|
||||||
console.log('CONTACTS: STORAGE TO FIELDS');
|
console.log('CONTACTS: STORAGE TO FIELDS');
|
||||||
|
|
||||||
// {1} Pour chaque contact du 'localStorage' //
|
// {1} Pour chaque contact du 'localStorage' //
|
||||||
var contactsData = lsi.export('contacts');
|
var contactKeys = lsi.keys('contacts');
|
||||||
|
|
||||||
// On réinitialise le HTML
|
// On réinitialise le HTML
|
||||||
this.container.innerHTML = '';
|
this.container.innerHTML = '';
|
||||||
|
|
||||||
// {2} On ajoute chaque contact à la liste //
|
// {2} On ajoute chaque contact (parmi les séléctionnés) à la liste //
|
||||||
for( var key in contactsData )
|
var min = this.selected; // On affiche du contact sélectionné
|
||||||
this.add(contactsData[key]);
|
var max = this.selected+10; // On s'arrête à 10 contacs
|
||||||
|
|
||||||
|
for( var i = min ; i < max && i < contactKeys.length ; i++ )
|
||||||
|
this.add( lsi.get('contacts', contactKeys[i]) );
|
||||||
|
|
||||||
|
|
||||||
// On ajoute un champ de plus à remplir
|
// On ajoute un champ de plus à remplir si c'est la dernière page
|
||||||
this.add({number:'', firstname:'', lastname:'', username:''});
|
if( max >= contactKeys.length )
|
||||||
|
this.add({uid: contactKeys.length});
|
||||||
|
|
||||||
|
/* (3) On met à jour la barre de navigation */
|
||||||
|
this.updateNavBar();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [6] Gestion de la navigation entre les formulaires (10 par 10)
|
||||||
|
=========================================================*/
|
||||||
|
inputPhoneContact.prototype.nav = function(element){
|
||||||
|
/* (1) On vérifie que l'élément contient un nombre et existe */
|
||||||
|
if( element == null )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if( element.getData('n') === false || isNaN(element.getData('n')) || element.parentNode.id != 'nav-contact' )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
/* (2) On désactive tous les éléments actifs */
|
||||||
|
var activeElements = $$('#nav-contact > span.active');
|
||||||
|
for( var i = 0 ; i < activeElements.length ; i++ )
|
||||||
|
activeElements[i].remClass('active');
|
||||||
|
|
||||||
|
/* (3) On active l'élément courant */
|
||||||
|
element.addClass('active');
|
||||||
|
this.selected = parseInt(element.getData('n'));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [7] Mise à jour de la navigation
|
||||||
|
=========================================================*/
|
||||||
|
inputPhoneContact.prototype.updateNavBar = function(){
|
||||||
|
var contactKeys = lsi.keys('contacts');
|
||||||
|
var len = contactKeys.length;
|
||||||
|
|
||||||
|
|
||||||
|
/* (1) On vérifie si la barre de navigation est à jour */
|
||||||
|
var navBarUpToDate = this.nav_container.children.length == len;
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) On vide et remplit la barre de nav, si elle n'est pas à jour */
|
||||||
|
if( !navBarUpToDate ){
|
||||||
|
this.nav_container.innerHTML = '';
|
||||||
|
|
||||||
|
for( var i = 0 ; i < len ; i+=10 )
|
||||||
|
this.nav_container.innerHTML += '<span data-n="'+i+'">'+ (1+i/10) +'</span>';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* (4) On séléctionne par défaut la dernière MINI fiche sélectionnée */
|
||||||
|
this.nav( $('#nav-contact [data-n="'+( this.selected )+'"]') );
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* [5] Point d'amorçage de la gestion des contacts
|
/* [5] Point d'amorçage de la gestion des contacts
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
inputPhoneContact.prototype.attach = function(handler){
|
inputPhoneContact.prototype.attach = function(handler){
|
||||||
|
@ -139,9 +216,20 @@ inputPhoneContact.prototype.attach = function(handler){
|
||||||
/* (1) On initialise le jeu de données */
|
/* (1) On initialise le jeu de données */
|
||||||
lsi.createDataset('contacts');
|
lsi.createDataset('contacts');
|
||||||
|
|
||||||
/* (2) On enregistre le handler */
|
/* (2) On charge les contacts depuis la mémoire ('localStorage') */
|
||||||
|
this.storageToFields();
|
||||||
|
|
||||||
|
/* (3) On enregistre le handler */
|
||||||
this.handler = handler;
|
this.handler = handler;
|
||||||
|
|
||||||
/* (3) On charge les contacts depuis la mémoire ('localStorage') */
|
/* (4) On attache l'évènement sur le conteneur de navigation */
|
||||||
this.storageToFields();
|
var ptr = this;
|
||||||
|
this.nav_container.addEventListener('click', function(e){
|
||||||
|
// 1. On gère la navigation
|
||||||
|
ptr.nav(e.target);
|
||||||
|
|
||||||
|
// 2. On gere le chargement dynamique
|
||||||
|
ptr.handler(e.target);
|
||||||
|
}, false);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,22 +1,23 @@
|
||||||
function inputPhoneFiche(a,b){this.container=a;this.nav_container=b}
|
function inputPhoneFiche(a,b){this.container=a;this.nav_container=b}
|
||||||
inputPhoneFiche.prototype={container:this.container,nav_container:this.nav_container,selected:0,handler:null,defaultData:{firstname:"",lastname:"",username:"",sexe:[{status:!0},{status:!1}],age:"",job:".",famsit:[{status:!0},{status:!1},{status:!1}],studies:".",reltype:[{status:!0},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1}],reltypeSpecial:"",city:"",loc:[{status:!0},{status:!1},{status:!1},{status:!1}],duration:["",""],context:[{status:!0},{status:!1},
|
inputPhoneFiche.prototype={container:this.container,nav_container:this.nav_container,selected:0,handler:null,defaultData:{sexe:[defTrue,defFalse],age:".",job:".",famsit:[defTrue,defFalse,defFalse],studies:".",reltype:[defTrue,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse],reltypeSpecial:"",city:"",loc:[defTrue,defFalse,defFalse,defFalse],duration:["",""],context:[defTrue,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,
|
||||||
{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1}],contextSpecial:["","",""],freq:[[{status:!0},{status:!1},{status:!1},{status:!1}],[{status:!0},{status:!1},{status:!1},{status:!1}],[{status:!0},{status:!1},{status:!1},{status:!1}],[{status:!0},{status:!1},{status:!1},{status:!1}],[{status:!0},{status:!1},{status:!1},{status:!1}]],connect:[[{status:!1},{status:!0}],[{status:!1},{status:!0}],[{status:!1},
|
defFalse],contextSpecial:["","",""],freq:[[defTrue,defFalse,defFalse,defFalse],[defTrue,defFalse,defFalse,defFalse],[defTrue,defFalse,defFalse,defFalse],[defTrue,defFalse,defFalse,defFalse],[defTrue,defFalse,defFalse,defFalse]],connect:[[defFalse,defTrue],[defFalse,defTrue],[defFalse,defTrue],[defFalse,defTrue],[defFalse,defTrue],[defFalse,defTrue]],connectSpecial:["",""],timestamp:0,valid:!1}};
|
||||||
{status:!0}],[{status:!1},{status:!0}],[{status:!1},{status:!0}],[{status:!1},{status:!0}]],connectSpecial:["",""]}};
|
inputPhoneFiche.prototype.fieldsToStorage=function(){console.log("FICHE: FIELDS TO STORAGE");for(var a=$$("article.relation-panel .fiche-relation"),b=0;b<a.length;b++){var c=(new FormDeflater(a[b],["input","select"],["data-name"])).deflate(),e=crc32(JSON.stringify(c)),d=lsi.get("fiches",c.uid.value);if(!1!==d){if(null!=d.hash&&d.hash==e)break;c={contact:parseInt(c.contact.value),uid:parseInt(c.uid.value),sexe:c.sexe,age:c.age.value,job:c.job.value,famsit:c.famsit,studies:c.studies.value,reltype:c.reltype,
|
||||||
inputPhoneFiche.prototype.fieldsToStorage=function(){console.log("FICHE: FIELDS TO STORAGE");for(var a=$$("article.relation-panel .fiche-relation"),b=0;b<a.length;b++){var c=(new FormDeflater(a[b],["input","select"],["data-name"])).deflate();console.log(c);var d=lsi.get("fiches","form"+c.uid.value);!1===d&&(d.username="inconnu",d.firstname="inconnu",d.lastname="inconnu");c={uid:c.uid.value,firstname:d.firstname,lastname:d.lastname,username:d.username,sexe:c.sexe,age:c.age.value,job:c.job.value,famsit:c.famsit,
|
reltypeSpecial:c.reltypeSpecial.value,city:c.city.value,loc:c.loc,duration:[c.duration[0].value,c.duration[1].value],context:c.context,contextSpecial:[c.contextSpecial[0].value,c.contextSpecial[1].value,c.contextSpecial[2].value],freq:[c.freq0,c.freq1,c.freq2,c.freq3,c.freq4],connect:[c.connect0,c.connect1,c.connect2,c.connect3,c.connect4,c.connect5],connectSpecial:[c.connectSpecial[0].value,c.connectSpecial[1].value],hash:e};c.valid=this.check(c);0<diff(d,c).length&&(console.warn("> FICHE UPDATE"),
|
||||||
studies:c.studies.value,reltype:c.reltype,reltypeSpecial:c.reltypeSpecial.value,city:c.city.value,loc:c.loc,duration:[c.duration[0].value,c.duration[1].value],context:c.context,contextSpecial:[c.contextSpecial[0].value,c.contextSpecial[1].value,c.contextSpecial[2].value],freq:[c.freq0,c.freq1,c.freq2,c.freq3,c.freq4],connect:[c.connect0,c.connect1,c.connect2,c.connect3,c.connect4,c.connect5],connectSpecial:[c.connectSpecial[0].value,c.connectSpecial[1].value]};c.valid=this.check(c);lsi.set("fiches",
|
c.timestamp=Date.now());lsi.set("fiches",c.uid,c)}}};
|
||||||
"form"+c.uid,c)}};
|
inputPhoneFiche.prototype.add=function(a){console.log("FICHE: ADD");if(null==a.uid||null==a.contact)return!1;a.city=null!=a.city?a.city:this.defaultData.city;a.duration[0]=null!=a.duration[0]?a.duration[0]:this.defaultData.duration[0];a.duration[1]=null!=a.duration[1]?a.duration[1]:this.defaultData.duration[1];a.reltypeSpecial=null!=a.reltypeSpecial?a.reltypeSpecial:this.defaultData.reltypeSpecial;a.contextSpecial[0]=null!=a.contextSpecial[0]?a.contextSpecial[0]:this.defaultData.contextSpecial[0];
|
||||||
inputPhoneFiche.prototype.add=function(a){console.log("FICHE: ADD");if(null==a.uid)return!1;a.firstname=null!=a.firstname?a.firstname:this.defaultData.firstname;a.lastname=null!=a.lastname?a.lastname:this.defaultData.lastname;a.username=null!=a.username?a.username:this.defaultData.username;a.age=null!=a.age?a.age:this.defaultData.age;a.city=null!=a.city?a.city:this.defaultData.city;a.duration[0]=null!=a.duration[0]?a.duration[0]:this.defaultData.duration[0];a.duration[1]=null!=a.duration[1]?a.duration[1]:
|
a.contextSpecial[1]=null!=a.contextSpecial[1]?a.contextSpecial[1]:this.defaultData.contextSpecial[1];a.contextSpecial[2]=null!=a.contextSpecial[2]?a.contextSpecial[2]:this.defaultData.contextSpecial[2];a.connectSpecial[0]=null!=a.connectSpecial[0]?a.connectSpecial[0]:this.defaultData.connectSpecial[0];a.connectSpecial[1]=null!=a.connectSpecial[1]?a.connectSpecial[1]:this.defaultData.connectSpecial[1];a.job=null!=a.job?a.job:this.defaultData.job;a.studies=null!=a.studies?a.studies:this.defaultData.studies;
|
||||||
this.defaultData.duration[1];a.reltypeSpecial=null!=a.reltypeSpecial?a.reltypeSpecial:this.defaultData.reltypeSpecial;a.contextSpecial[0]=null!=a.contextSpecial[0]?a.contextSpecial[0]:this.defaultData.contextSpecial[0];a.contextSpecial[1]=null!=a.contextSpecial[1]?a.contextSpecial[1]:this.defaultData.contextSpecial[1];a.contextSpecial[2]=null!=a.contextSpecial[2]?a.contextSpecial[2]:this.defaultData.contextSpecial[2];a.connectSpecial[0]=null!=a.connectSpecial[0]?a.connectSpecial[0]:this.defaultData.connectSpecial[0];
|
a.age=null!=a.age?a.age:this.defaultData.age;a.sexe=null!=a.sexe?a.sexe:this.defaultData.sexe;a.famsit=null!=a.famsit?a.famsit:this.defaultData.famsit;a.reltype=null!=a.reltype?a.reltype:this.defaultData.reltype;a.loc=null!=a.loc?a.loc:this.defaultData.loc;a.context=null!=a.context?a.context:this.defaultData.context;a.freq=null!=a.freq?a.freq:this.defaultData.freq;a.connect=null!=a.connect?a.connect:this.defaultData.connect;var b=lsi.get("contacts",a.contact);if(!1===b)return!1;this.container.innerHTML+=
|
||||||
a.connectSpecial[1]=null!=a.connectSpecial[1]?a.connectSpecial[1]:this.defaultData.connectSpecial[1];a.job=null!=a.job?a.job:this.defaultData.job;a.studies=null!=a.studies?a.studies:this.defaultData.studies;a.sexe=null!=a.sexe?a.sexe:this.defaultData.sexe;a.famsit=null!=a.famsit?a.famsit:this.defaultData.famsit;a.reltype=null!=a.reltype?a.reltype:this.defaultData.reltype;a.loc=null!=a.loc?a.loc:this.defaultData.loc;a.context=null!=a.context?a.context:this.defaultData.context;a.freq=null!=a.freq?a.freq:
|
ficheBuilder.build({firstname:b.firstname,lastname:b.lastname,username:0==b.username.length?"":"("+b.username+")",countcall:b.countcall,countsms:b.countsms,uid:a.uid,contact:a.contact,city:a.city,duration0:a.duration[0],duration1:a.duration[1],reltypespecial:a.reltypeSpecial,contextspecial0:a.contextSpecial[0],contextspecial1:a.contextSpecial[1],contextspecial2:a.contextSpecial[2],connectspecial0:a.connectSpecial[0],connectspecial1:a.connectSpecial[1]});b=$('article.fiche-relation input[data-name="uid"][value="'+
|
||||||
this.defaultData.freq;a.connect=null!=a.connect?a.connect:this.defaultData.connect;this.container.innerHTML+=ficheBuilder.build({firstname:a.firstname,lastname:a.lastname,username:a.username,uid:a.uid,age:a.age,city:a.city,duration0:a.duration[0],duration1:a.duration[1],reltypespecial:a.reltypeSpecial,contextspecial0:a.contextSpecial[0],contextspecial1:a.contextSpecial[1],contextspecial2:a.contextSpecial[2],connectspecial0:a.connectSpecial[0],connectspecial1:a.connectSpecial[1]});var b=$('article.fiche-relation input[data-name="uid"][value="'+
|
a.uid+'"] ~ h5>span>select[data-name="job"]>option[value="'+a.job+'"]');null!=b&&b.setAttribute("selected","selected");b=$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="studies"]>option[value="'+a.studies+'"]');null!=b&&b.setAttribute("selected","selected");b=$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="age"]>option[value="'+a.age+'"]');null!=b&&b.setAttribute("selected","selected");for(var c=$$('article.fiche-relation input[data-name="uid"][value="'+
|
||||||
a.uid+'"] ~ h5>span>select[data-name="job"]>option[value="'+a.job+'"]');null!=b&&b.setAttribute("selected","selected");b=$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="studies"]>option[value="'+a.studies+'"]');null!=b&&b.setAttribute("selected","selected");for(var c=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]'),b=0;b<c.length&&b<a.sexe.length;b++)a.sexe[b].status?c[b].setAttribute("checked",
|
a.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]'),b=0;b<c.length&&b<a.sexe.length;b++)a.sexe[b].status?c[b].setAttribute("checked","checked"):c[b].removeAttribute("checked");c=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="famsit"]');for(b=0;b<c.length&&b<a.famsit.length;b++)a.famsit[b].status?c[b].setAttribute("checked","checked"):c[b].removeAttribute("checked");c=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="reltype"]');
|
||||||
"checked"):c[b].removeAttribute("checked");c=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="famsit"]');for(b=0;b<c.length&&b<a.famsit.length;b++)a.famsit[b].status?c[b].setAttribute("checked","checked"):c[b].removeAttribute("checked");c=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="reltype"]');for(b=0;b<c.length&&b<a.reltype.length;b++)a.reltype[b].status?c[b].setAttribute("checked",
|
for(b=0;b<c.length&&b<a.reltype.length;b++)a.reltype[b].status?c[b].setAttribute("checked","checked"):c[b].removeAttribute("checked");c=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="loc"]');for(b=0;b<c.length&&b<a.loc.length;b++)a.loc[b].status?c[b].setAttribute("checked","checked"):c[b].removeAttribute("checked");c=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="context"]');for(b=0;b<
|
||||||
"checked"):c[b].removeAttribute("checked");c=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="loc"]');for(b=0;b<c.length&&b<a.loc.length;b++)a.loc[b].status?c[b].setAttribute("checked","checked"):c[b].removeAttribute("checked");c=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="context"]');for(b=0;b<c.length&&b<a.context.length;b++)a.context[b].status?c[b].setAttribute("checked","checked"):
|
c.length&&b<a.context.length;b++)a.context[b].status?c[b].setAttribute("checked","checked"):c[b].removeAttribute("checked");for(c=0;c<a.freq.length;c++)for(var e=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="freq'+c+'"]'),b=0;b<e.length&&b<a.freq[c].length;b++)a.freq[c][b].status?e[b].setAttribute("checked","checked"):e[b].removeAttribute("checked");for(c=0;c<a.connect.length;c++)for(e=$$('article.fiche-relation input[data-name="uid"][value="'+
|
||||||
c[b].removeAttribute("checked");for(c=0;c<a.freq.length;c++)for(var d=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="freq'+c+'"]'),b=0;b<d.length&&b<a.freq[c].length;b++)a.freq[c][b].status?d[b].setAttribute("checked","checked"):d[b].removeAttribute("checked");for(c=0;c<a.connect.length;c++)for(d=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="connect'+c+'"]'),b=0;b<d.length&&b<a.connect[c].length;b++)a.connect[c][b].status?
|
a.uid+'"] ~ h5>input[type="radio"][data-name="connect'+c+'"]'),b=0;b<e.length&&b<a.connect[c].length;b++)a.connect[c][b].status?e[b].setAttribute("checked","checked"):e[b].removeAttribute("checked")};inputPhoneFiche.prototype.storageToFields=function(){console.log("FICHE: STORAGE TO FIELDS");var a=lsi["export"]("fiches");this.container.innerHTML="";for(var b in a)a[b].uid==this.selected&&this.add(a[b]);this.updateNavBar()};
|
||||||
d[b].setAttribute("checked","checked"):d[b].removeAttribute("checked")};inputPhoneFiche.prototype.storageToFields=function(){console.log("FICHE: STORAGE TO FIELDS");var a=lsi["export"]("fiches");this.container.innerHTML="";var b=[],c;for(c in a){var d=a[c].uid;d==this.selected&&this.add(a[c]);b.push(d)}this.updateNavBar(b)};
|
inputPhoneFiche.prototype.sync=function(){console.log("FICHE: SYNC");var a=lsi["export"]("contacts"),b=[],c;for(c in a){if(-1<a[c].call){var e=a[c].call;b.push(e);var d=lsi.get("fiches",e);null==d&&(d=this.defaultData);d.uid=e;d.contact=parseInt(c);lsi.set("fiches",e,d)}-1<a[c].sms&&(e=10+a[c].sms,b.push(e),d=lsi.get("fiches",e),null==d&&(d=this.defaultData),d.uid=e,d.contact=parseInt(c),lsi.set("fiches",e,d))}if(20>b.length)for(c in a){for(a=0;-1<b.indexOf(a)&&20>a;)a++;b.push(a);d=lsi.get("fiches",
|
||||||
inputPhoneFiche.prototype.sync=function(){console.log("FICHE: SYNC");for(var a=lsi.keys("contacts"),b=0;b<a.length&&10>b;b++){var c=lsi.get("contacts",a[b]),d=lsi.get("fiches",a[b]);null==d&&(d=this.defaultData);d.uid=c.uid;d.firstname=c.firstname;d.lastname=c.lastname;d.username=c.username;lsi.set("fiches",a[b],d)}};
|
a);null==d&&(d=this.defaultData);d.uid=a;d.contact=c;lsi.set("fiches",a,d);if(20<=b.length)break}var d=lsi["export"]("fiches"),f;for(f in d)miniData=lsi.get("mini-fiches",d[f].contact),d[f].timestamp>=miniData.timestamp?(miniData.sexe=d[f].sexe,miniData.age=d[f].age,miniData.studies=d[f].studies,miniData.loc=d[f].loc,miniData.reltype=d[f].reltype,miniData.reltypeSpecial=d[f].reltypeSpecial):(d[f].sexe=miniData.sexe,d[f].age=miniData.age,d[f].studies=miniData.studies,d[f].loc=miniData.loc,d[f].reltype=
|
||||||
inputPhoneFiche.prototype.nav=function(a){if("undefined"==typeof a||isNaN(a.innerHTML))return!1;for(var b=$$("#nav-fiche > span.active"),c=0;c<b.length;c++)b[c].remClass("active");a.addClass("active");this.selected=parseInt(a.innerHTML)-1};
|
miniData.reltype,d[f].reltypeSpecial=miniData.reltypeSpecial),lsi.set("mini-fiches",d[f].contact,miniData),lsi.set("fiches",f,d[f]);for(f in d)b=lsi.get("contacts",d[f].contact),null!=b&&-1!=b.sms&&-1!=b.call&&(b=10>parseInt(f)?10+b.sms:b.call,b=d[b],b.timestamp>=d[f].timestamp||(c=d[f],c.uid=b.uid,lsi.set("fiches",b.uid,c)))};
|
||||||
inputPhoneFiche.prototype.updateNavBar=function(a){this.nav_container.innerHTML="";for(var b=0;b<a.length;b++){var c=parseInt(a[b])+1;this.nav_container.innerHTML+="<span>"+c+"</span>"}a=lsi["export"]("fiches");for(var d in a)!0===a[d].valid?this.nav_container.children[a[d].uid].addClass("done"):this.nav_container.children[a[d].uid].remClass("done");this.nav(this.nav_container.children[this.selected])};
|
inputPhoneFiche.prototype.nav=function(a){if(null==a||!1===a.getData("n")||isNaN(a.getData("n"))||"nav-fiche"!=a.parentNode.id)return!1;for(var b=$$("#nav-fiche > span.active"),c=0;c<b.length;c++)b[c].remClass("active");a.addClass("active");this.selected=parseInt(a.getData("n"))};
|
||||||
inputPhoneFiche.prototype.check=function(a){if(isNaN(parseInt(a.age))||2>a.city.length||isNaN(parseInt(a.duration[0]))&&0<a.duration[0].length||isNaN(parseInt(a.duration[1]))&&0<a.duration[1].length||0==a.duration[0].length+a.duration[1].length||"."==a.job||"."==a.studies||!checkRadioValue(a.sexe)||!checkRadioValue(a.famsit)||!checkRadioValue(a.reltype)||!checkRadioValue(a.loc)||!checkRadioValue(a.context))return!1;for(var b=0;b<a.freq.length;b++)if(!checkRadioValue(a.freq[b]))return!1;for(b=0;b<
|
inputPhoneFiche.prototype.updateNavBar=function(){var a=lsi["export"]("fiches"),b=lsi.keys("fiches").length;if($$("#nav-fiche [data-n]").length!=b){this.nav_container.innerHTML="<span>APPELS</span>";for(var c=0;c<b;c++)9==c?this.nav_container.innerHTML+='<span data-n="'+c+'" class="lc">'+(c%10+1)+"</span> ":(10==c&&(this.nav_container.innerHTML+='<span class="fc">SMS</span>'),this.nav_container.innerHTML+='<span data-n="'+c+'">'+(c%10+1)+"</span>")}for(var e in a)b=$('#nav-fiche [data-n="'+
|
||||||
a.connect.length;b++)if(!checkRadioValue(a.connect[b]))return!1;return a.reltype[8].status&&2>a.reltypeSpecial.length||a.context[11].status&&2>a.contextSpecial[0].length||a.context[12].status&&2>a.contextSpecial[1].length||a.context[13].status&&2>a.contextSpecial[2].length?!1:!0};
|
a[e].uid+'"]'),null!=b&&(!0===a[e].valid?b.addClass("done"):b.remClass("done"));this.nav($('#nav-fiche [data-n="'+this.selected+'"]'))};
|
||||||
inputPhoneFiche.prototype.attach=function(a){console.log("FICHE: ATTACH");lsi.createDataset("fiches");this.storageToFields();this.handler=a;var b=this,b=this;this.nav_container.addEventListener("click",function(a){b.nav(a.target);b.handler()},!1)};
|
inputPhoneFiche.prototype.check=function(a){if(2>a.city.length||isNaN(parseInt(a.duration[0]))&&0<a.duration[0].length||isNaN(parseInt(a.duration[1]))&&0<a.duration[1].length||0==a.duration[0].length+a.duration[1].length||"."==a.job||"."==a.studies||"."==a.age||!checkRadioValue(a.sexe)||!checkRadioValue(a.famsit)||!checkRadioValue(a.reltype)||!checkRadioValue(a.loc)||!checkRadioValue(a.context))return!1;for(var b=0;b<a.freq.length;b++)if(!checkRadioValue(a.freq[b]))return!1;for(b=0;b<a.connect.length;b++)if(!checkRadioValue(a.connect[b]))return!1;
|
||||||
|
return a.reltype[8].status&&2>a.reltypeSpecial.length||a.context[11].status&&2>a.contextSpecial[0].length||a.context[12].status&&2>a.contextSpecial[1].length||a.context[13].status&&2>a.contextSpecial[2].length?!1:!0};inputPhoneFiche.prototype.attach=function(a){console.log("FICHE: ATTACH");lsi.createDataset("fiches");this.storageToFields();this.handler=a;var b=this,b=this;this.nav_container.addEventListener("click",function(a){b.nav(a.target);b.handler(a.target)},!1)};
|
||||||
|
|
|
@ -13,38 +13,37 @@ inputPhoneFiche.prototype = {
|
||||||
selected: 0, // UID de la FICHE sélectionnée
|
selected: 0, // UID de la FICHE sélectionnée
|
||||||
handler: null, // Fonction pour l'enregistrement et la synchronisation des données
|
handler: null, // Fonction pour l'enregistrement et la synchronisation des données
|
||||||
defaultData: { // Valeurs par défaut
|
defaultData: { // Valeurs par défaut
|
||||||
firstname: '',
|
sexe: [ defTrue, defFalse],
|
||||||
lastname: '',
|
age: '.',
|
||||||
username: '',
|
|
||||||
sexe: [ {status:true}, {status:false}],
|
|
||||||
age: '',
|
|
||||||
job: '.',
|
job: '.',
|
||||||
famsit: [ {status:true}, {status:false}, {status:false} ], // Choix 1 à 3
|
famsit: [ defTrue, defFalse, defFalse ], // Choix 1 à 3
|
||||||
studies: '.',
|
studies: '.',
|
||||||
reltype: [ {status:true}, {status:false}, {status:false}, {status:false}, {status:false},
|
reltype: [ defTrue, defFalse, defFalse, defFalse, defFalse,
|
||||||
{status:false}, {status:false}, {status:false}, {status:false}], // Choix 1 à 9
|
defFalse, defFalse, defFalse, defFalse], // Choix 1 à 9
|
||||||
reltypeSpecial: '',
|
reltypeSpecial: '',
|
||||||
city: '',
|
city: '',
|
||||||
loc: [ {status:true}, {status:false}, {status:false}, {status:false} ],
|
loc: [ defTrue, defFalse, defFalse, defFalse ],
|
||||||
duration: ['', ''],
|
duration: ['', ''],
|
||||||
context: [ {status:true}, {status:false}, {status:false}, {status:false}, {status:false},
|
context: [ defTrue, defFalse, defFalse, defFalse, defFalse,
|
||||||
{status:false}, {status:false}, {status:false}, {status:false}, {status:false},
|
defFalse, defFalse, defFalse, defFalse, defFalse,
|
||||||
{status:false}, {status:false}, {status:false}, {status:false}], // Choix 1 à 14
|
defFalse, defFalse, defFalse, defFalse], // Choix 1 à 14
|
||||||
contextSpecial: ['', '', ''],
|
contextSpecial: ['', '', ''],
|
||||||
freq: [
|
freq: [
|
||||||
[ {status:true}, {status:false}, {status:false}, {status:false} ],
|
[ defTrue, defFalse, defFalse, defFalse ],
|
||||||
[ {status:true}, {status:false}, {status:false}, {status:false} ],
|
[ defTrue, defFalse, defFalse, defFalse ],
|
||||||
[ {status:true}, {status:false}, {status:false}, {status:false} ],
|
[ defTrue, defFalse, defFalse, defFalse ],
|
||||||
[ {status:true}, {status:false}, {status:false}, {status:false} ],
|
[ defTrue, defFalse, defFalse, defFalse ],
|
||||||
[ {status:true}, {status:false}, {status:false}, {status:false} ]],
|
[ defTrue, defFalse, defFalse, defFalse ]],
|
||||||
connect: [
|
connect: [
|
||||||
[ {status:false}, {status:true} ],
|
[ defFalse, defTrue ],
|
||||||
[ {status:false}, {status:true} ],
|
[ defFalse, defTrue ],
|
||||||
[ {status:false}, {status:true} ],
|
[ defFalse, defTrue ],
|
||||||
[ {status:false}, {status:true} ],
|
[ defFalse, defTrue ],
|
||||||
[ {status:false}, {status:true} ],
|
[ defFalse, defTrue ],
|
||||||
[ {status:false}, {status:true} ]],
|
[ defFalse, defTrue ]],
|
||||||
connectSpecial: ['', '']
|
connectSpecial: ['', ''],
|
||||||
|
timestamp: 0,
|
||||||
|
valid: false
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -63,28 +62,30 @@ inputPhoneFiche.prototype.fieldsToStorage = function(){
|
||||||
|
|
||||||
// {3} On enregistre ce contact si le numéro n'est pas vide et soit pseudo/prénom/nom //
|
// {3} On enregistre ce contact si le numéro n'est pas vide et soit pseudo/prénom/nom //
|
||||||
var deflated = deflater.deflate();
|
var deflated = deflater.deflate();
|
||||||
|
// On crée le hash
|
||||||
|
var deflatedHash = crc32(JSON.stringify(deflated));
|
||||||
|
|
||||||
|
|
||||||
console.log(deflated);
|
// console.log( deflated );
|
||||||
|
|
||||||
|
|
||||||
// {4} On récupère les données du LSI si elles existent //
|
// {4} On récupère les données du LSI si elles existent //
|
||||||
var existingData = lsi.get('fiches', 'form'+deflated.uid.value);
|
var existingData = lsi.get('fiches', deflated.uid.value);
|
||||||
|
|
||||||
// Si n'existe pas, on initialise
|
// Si n'existe pas, on passe au suivant
|
||||||
if( existingData === false ){
|
if( existingData === false )
|
||||||
existingData.username = 'inconnu';
|
continue;
|
||||||
existingData.firstname = 'inconnu';
|
|
||||||
existingData.lastname = 'inconnu';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// {5} On récupère et met en forme les valeurs du deflater //
|
// {5} On récupère et met en forme les valeurs du deflater //
|
||||||
|
// Si le hash est le même, on ne fait rien
|
||||||
|
if( existingData.hash != null && existingData.hash == deflatedHash )
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
var obj = {
|
var obj = {
|
||||||
uid: deflated.uid.value,
|
contact: parseInt(deflated.contact.value),
|
||||||
firstname: existingData.firstname,
|
uid: parseInt(deflated.uid.value),
|
||||||
lastname: existingData.lastname,
|
|
||||||
username: existingData.username,
|
|
||||||
sexe: deflated.sexe, // Choix 1 à 2
|
sexe: deflated.sexe, // Choix 1 à 2
|
||||||
age: deflated.age.value,
|
age: deflated.age.value,
|
||||||
job: deflated.job.value,
|
job: deflated.job.value,
|
||||||
|
@ -122,15 +123,22 @@ inputPhoneFiche.prototype.fieldsToStorage = function(){
|
||||||
connectSpecial: [
|
connectSpecial: [
|
||||||
deflated.connectSpecial[0].value,
|
deflated.connectSpecial[0].value,
|
||||||
deflated.connectSpecial[1].value
|
deflated.connectSpecial[1].value
|
||||||
]
|
],
|
||||||
|
hash: deflatedHash
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* (6) On vérifie la validité des données et on l'enregistre dans l'objet */
|
/* (6) On vérifie la validité des données et on l'enregistre dans l'objet avec la date de modification */
|
||||||
obj.valid = this.check(obj);
|
obj.valid = this.check(obj);
|
||||||
|
|
||||||
// {6} On enregistre les données dans le 'localStorage' //
|
// On met à jour la date de modification, si on a pas qu'@uid de différent
|
||||||
lsi.set('fiches', 'form'+obj.uid, obj);
|
if( diff(existingData, obj).length > 0 ){
|
||||||
|
console.warn('> FICHE UPDATE');
|
||||||
|
obj.timestamp = Date.now();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (7) On enregistre les données dans le 'localStorage' */
|
||||||
|
lsi.set('fiches', obj.uid, obj);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -152,16 +160,12 @@ inputPhoneFiche.prototype.fieldsToStorage = function(){
|
||||||
inputPhoneFiche.prototype.add = function(objectData){
|
inputPhoneFiche.prototype.add = function(objectData){
|
||||||
console.log('FICHE: ADD');
|
console.log('FICHE: ADD');
|
||||||
|
|
||||||
// Si pas d'UID, on retourne une erreur
|
// Si pas d'UID ou d'UID de contact, on retourne une erreur
|
||||||
if( objectData.uid == null )
|
if( objectData.uid == null || objectData.contact == null )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* (0) Gestion du formattage des valeur */
|
/* (0) Gestion du formattage des valeur */
|
||||||
// {1} Champs de texte //
|
// {1} Champs de texte //
|
||||||
objectData.firstname = (objectData.firstname != null) ? objectData.firstname : this.defaultData.firstname;
|
|
||||||
objectData.lastname = (objectData.lastname != null) ? objectData.lastname : this.defaultData.lastname;
|
|
||||||
objectData.username = (objectData.username != null) ? objectData.username : this.defaultData.username;
|
|
||||||
objectData.age = (objectData.age != null) ? objectData.age : this.defaultData.age;
|
|
||||||
objectData.city = (objectData.city != null) ? objectData.city : this.defaultData.city;
|
objectData.city = (objectData.city != null) ? objectData.city : this.defaultData.city;
|
||||||
objectData.duration[0] = (objectData.duration[0] != null) ? objectData.duration[0] : this.defaultData.duration[0];
|
objectData.duration[0] = (objectData.duration[0] != null) ? objectData.duration[0] : this.defaultData.duration[0];
|
||||||
objectData.duration[1] = (objectData.duration[1] != null) ? objectData.duration[1] : this.defaultData.duration[1];
|
objectData.duration[1] = (objectData.duration[1] != null) ? objectData.duration[1] : this.defaultData.duration[1];
|
||||||
|
@ -175,6 +179,7 @@ inputPhoneFiche.prototype.add = function(objectData){
|
||||||
// {2} Champs <select> //
|
// {2} Champs <select> //
|
||||||
objectData.job = (objectData.job != null) ? objectData.job : this.defaultData.job;
|
objectData.job = (objectData.job != null) ? objectData.job : this.defaultData.job;
|
||||||
objectData.studies = (objectData.studies != null) ? objectData.studies : this.defaultData.studies;
|
objectData.studies = (objectData.studies != null) ? objectData.studies : this.defaultData.studies;
|
||||||
|
objectData.age = (objectData.age != null) ? objectData.age : this.defaultData.age;
|
||||||
|
|
||||||
// {3} Champs <radio> //
|
// {3} Champs <radio> //
|
||||||
objectData.sexe = (objectData.sexe != null) ? objectData.sexe : this.defaultData.sexe;
|
objectData.sexe = (objectData.sexe != null) ? objectData.sexe : this.defaultData.sexe;
|
||||||
|
@ -186,13 +191,23 @@ inputPhoneFiche.prototype.add = function(objectData){
|
||||||
objectData.connect = (objectData.connect != null) ? objectData.connect : this.defaultData.connect;
|
objectData.connect = (objectData.connect != null) ? objectData.connect : this.defaultData.connect;
|
||||||
|
|
||||||
|
|
||||||
// {1} Création physique //
|
// {4} On récupère username/firstname/lastname du contact associé //
|
||||||
|
var associatedContact = lsi.get('contacts', objectData.contact);
|
||||||
|
|
||||||
|
// Si on ne trouve pas le contact, on ne fais rien
|
||||||
|
if( associatedContact === false )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
|
||||||
|
// {5} Création physique //
|
||||||
this.container.innerHTML += ficheBuilder.build({
|
this.container.innerHTML += ficheBuilder.build({
|
||||||
firstname: objectData.firstname,
|
firstname: associatedContact.firstname,
|
||||||
lastname: objectData.lastname,
|
lastname: associatedContact.lastname,
|
||||||
username: objectData.username,
|
username: (associatedContact.username.length==0) ? '' : '('+associatedContact.username+')',
|
||||||
|
countcall: associatedContact.countcall,
|
||||||
|
countsms: associatedContact.countsms,
|
||||||
uid: objectData.uid,
|
uid: objectData.uid,
|
||||||
age: objectData.age,
|
contact: objectData.contact, // uid du contact associé
|
||||||
city: objectData.city,
|
city: objectData.city,
|
||||||
duration0: objectData.duration[0],
|
duration0: objectData.duration[0],
|
||||||
duration1: objectData.duration[1],
|
duration1: objectData.duration[1],
|
||||||
|
@ -205,53 +220,59 @@ inputPhoneFiche.prototype.add = function(objectData){
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
/* (2) On sélectionne la valeur dans le select (manuellement) de la PROFESSION */
|
/* {6} On sélectionne la valeur dans le select (manuellement) de la PROFESSION */
|
||||||
var selectedOption = $('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="job"]>option[value="'+objectData.job+'"]');
|
var selectedOption = $('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="job"]>option[value="'+objectData.job+'"]');
|
||||||
if( selectedOption != null )
|
if( selectedOption != null )
|
||||||
selectedOption.setAttribute('selected', 'selected');
|
selectedOption.setAttribute('selected', 'selected');
|
||||||
|
|
||||||
/* (3) On sélectionne la valeur dans le select (manuellement) des ETUDES */
|
/* {7} On sélectionne la valeur dans le select (manuellement) des ETUDES */
|
||||||
selectedOption = $('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="studies"]>option[value="'+objectData.studies+'"]');
|
selectedOption = $('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="studies"]>option[value="'+objectData.studies+'"]');
|
||||||
if( selectedOption != null )
|
if( selectedOption != null )
|
||||||
selectedOption.setAttribute('selected', 'selected');
|
selectedOption.setAttribute('selected', 'selected');
|
||||||
|
|
||||||
|
|
||||||
/* (4) On sélectionna la valeur des boutons <radio> pour le SEXE */
|
/* {8} On sélectionne la valeur dans le select (manuellement) de l'AGE */
|
||||||
|
selectedOption = $('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="age"]>option[value="'+objectData.age+'"]');
|
||||||
|
if( selectedOption != null )
|
||||||
|
selectedOption.setAttribute('selected', 'selected');
|
||||||
|
|
||||||
|
|
||||||
|
/* {9} On sélectionna la valeur des boutons <radio> pour le SEXE */
|
||||||
var sexeCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]');
|
var sexeCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]');
|
||||||
for( var i = 0 ; i < sexeCreated.length && i < objectData.sexe.length ; i++ )
|
for( var i = 0 ; i < sexeCreated.length && i < objectData.sexe.length ; i++ )
|
||||||
if( objectData.sexe[i].status ) sexeCreated[i].setAttribute('checked', 'checked');
|
if( objectData.sexe[i].status ) sexeCreated[i].setAttribute('checked', 'checked');
|
||||||
else sexeCreated[i].removeAttribute('checked');
|
else sexeCreated[i].removeAttribute('checked');
|
||||||
|
|
||||||
|
|
||||||
/* (5) On sélectionna la valeur des boutons <radio> pour la SITUATION FAMILIALE */
|
/* {10} On sélectionna la valeur des boutons <radio> pour la SITUATION FAMILIALE */
|
||||||
var famsitCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="famsit"]');
|
var famsitCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="famsit"]');
|
||||||
for( var i = 0 ; i < famsitCreated.length && i < objectData.famsit.length ; i++ )
|
for( var i = 0 ; i < famsitCreated.length && i < objectData.famsit.length ; i++ )
|
||||||
if( objectData.famsit[i].status ) famsitCreated[i].setAttribute('checked', 'checked');
|
if( objectData.famsit[i].status ) famsitCreated[i].setAttribute('checked', 'checked');
|
||||||
else famsitCreated[i].removeAttribute('checked');
|
else famsitCreated[i].removeAttribute('checked');
|
||||||
|
|
||||||
|
|
||||||
/* (6) On sélectionna la valeur des boutons <radio> pour le TYPE DE RELATION */
|
/* {11} On sélectionna la valeur des boutons <radio> pour le TYPE DE RELATION */
|
||||||
var reltypeCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="reltype"]');
|
var reltypeCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="reltype"]');
|
||||||
for( var i = 0 ; i < reltypeCreated.length && i < objectData.reltype.length ; i++ )
|
for( var i = 0 ; i < reltypeCreated.length && i < objectData.reltype.length ; i++ )
|
||||||
if( objectData.reltype[i].status ) reltypeCreated[i].setAttribute('checked', 'checked');
|
if( objectData.reltype[i].status ) reltypeCreated[i].setAttribute('checked', 'checked');
|
||||||
else reltypeCreated[i].removeAttribute('checked');
|
else reltypeCreated[i].removeAttribute('checked');
|
||||||
|
|
||||||
|
|
||||||
/* (7) On sélectionna la valeur des boutons <radio> pour la LOCATION */
|
/* {12} On sélectionna la valeur des boutons <radio> pour la LOCATION */
|
||||||
var locCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="loc"]');
|
var locCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="loc"]');
|
||||||
for( var i = 0 ; i < locCreated.length && i < objectData.loc.length ; i++ )
|
for( var i = 0 ; i < locCreated.length && i < objectData.loc.length ; i++ )
|
||||||
if( objectData.loc[i].status ) locCreated[i].setAttribute('checked', 'checked');
|
if( objectData.loc[i].status ) locCreated[i].setAttribute('checked', 'checked');
|
||||||
else locCreated[i].removeAttribute('checked');
|
else locCreated[i].removeAttribute('checked');
|
||||||
|
|
||||||
|
|
||||||
/* (8) On sélectionna la valeur des boutons <radio> pour le CONTEXTE DE RENCONTRE */
|
/* {13} On sélectionna la valeur des boutons <radio> pour le CONTEXTE DE RENCONTRE */
|
||||||
var contextCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="context"]');
|
var contextCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="context"]');
|
||||||
for( var i = 0 ; i < contextCreated.length && i < objectData.context.length ; i++ )
|
for( var i = 0 ; i < contextCreated.length && i < objectData.context.length ; i++ )
|
||||||
if( objectData.context[i].status ) contextCreated[i].setAttribute('checked', 'checked');
|
if( objectData.context[i].status ) contextCreated[i].setAttribute('checked', 'checked');
|
||||||
else contextCreated[i].removeAttribute('checked');
|
else contextCreated[i].removeAttribute('checked');
|
||||||
|
|
||||||
|
|
||||||
/* (9) On sélectionna la valeur des boutons <radio> pour les FREQUENCES */
|
/* {14} On sélectionna la valeur des boutons <radio> pour les FREQUENCES */
|
||||||
for( var f = 0 ; f < objectData.freq.length ; f++ ){
|
for( var f = 0 ; f < objectData.freq.length ; f++ ){
|
||||||
var freqCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="freq'+f+'"]');
|
var freqCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="freq'+f+'"]');
|
||||||
for( var i = 0 ; i < freqCreated.length && i < objectData.freq[f].length ; i++ )
|
for( var i = 0 ; i < freqCreated.length && i < objectData.freq[f].length ; i++ )
|
||||||
|
@ -259,7 +280,7 @@ inputPhoneFiche.prototype.add = function(objectData){
|
||||||
else freqCreated[i].removeAttribute('checked');
|
else freqCreated[i].removeAttribute('checked');
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (10) On sélectionna la valeur des boutons <radio> pour les CONNECTIONS */
|
/* {15} On sélectionna la valeur des boutons <radio> pour les CONNECTIONS */
|
||||||
for( var c = 0 ; c < objectData.connect.length ;c++ ){
|
for( var c = 0 ; c < objectData.connect.length ;c++ ){
|
||||||
var connectCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="connect'+c+'"]');
|
var connectCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="connect'+c+'"]');
|
||||||
for( var i = 0 ; i < connectCreated.length && i < objectData.connect[c].length ; i++ )
|
for( var i = 0 ; i < connectCreated.length && i < objectData.connect[c].length ; i++ )
|
||||||
|
@ -291,21 +312,13 @@ inputPhoneFiche.prototype.storageToFields = function(){
|
||||||
// On réinitialise le HTML
|
// On réinitialise le HTML
|
||||||
this.container.innerHTML = '';
|
this.container.innerHTML = '';
|
||||||
|
|
||||||
// On récupère les UIDS
|
for( var key in ficheData )
|
||||||
var UIDs = [];
|
if( ficheData[key].uid == this.selected )
|
||||||
//
|
|
||||||
for( var key in ficheData ){
|
|
||||||
var uid = ficheData[key].uid;
|
|
||||||
|
|
||||||
if( uid == this.selected )
|
|
||||||
this.add(ficheData[key]);
|
this.add(ficheData[key]);
|
||||||
|
|
||||||
UIDs.push(uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// {4} On met à jour la navigation //
|
// {4} On met à jour la navigation //
|
||||||
this.updateNavBar(UIDs);
|
this.updateNavBar();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -324,33 +337,167 @@ inputPhoneFiche.prototype.storageToFields = function(){
|
||||||
inputPhoneFiche.prototype.sync = function(){
|
inputPhoneFiche.prototype.sync = function(){
|
||||||
console.log('FICHE: SYNC');
|
console.log('FICHE: SYNC');
|
||||||
|
|
||||||
/* (1) On récupère les clés de tous les CONTACTS */
|
/* (1) Mise à jour en fonction des contacts APRÈS IMPORT
|
||||||
var contactUIDs = lsi.keys('contacts');
|
---------------------------------------------------------*/
|
||||||
|
/* (1) On récupère tous les CONTACTS */
|
||||||
|
var contacts = lsi.export('contacts');
|
||||||
|
var addedFicheUids = []; // Contiendra les uids des fiches qui seront crées
|
||||||
|
|
||||||
/* (2) Pour chaque CONTACT, on met à jour/crée la MINI fiche associée */
|
/* (2) Pour chaque CONTACT, on met à jour/crée la FICHE associée, si dans le TOP 10 des APPELS ou des SMS */
|
||||||
for( var i = 0 ; i < contactUIDs.length && i < 10; i++ ){
|
for( var uid in contacts ){
|
||||||
|
|
||||||
/* (3) On récupère les informations du CONTACT */
|
var inCallTop10 = false;
|
||||||
var contactData = lsi.get('contacts', contactUIDs[i]);
|
|
||||||
|
|
||||||
/* (4) On récupère les informations de la MINI (si elle existe) */
|
/* (3) Indice de 0 à 9 si dans le TOP 10 des APPELS */
|
||||||
var ficheData = lsi.get('fiches', contactUIDs[i]);
|
if( contacts[uid].call > -1 ){
|
||||||
|
// On calcule le rang de la fiche en fonction du classement
|
||||||
|
var ficheIndex = contacts[uid].call;
|
||||||
|
addedFicheUids.push(ficheIndex);
|
||||||
|
|
||||||
|
// On récupère les informations de la FICHE (si elle existe) */
|
||||||
|
var ficheData = lsi.get('fiches', ficheIndex);
|
||||||
|
|
||||||
/* (5) Si la FICHE n'exise pas, on la crée avec les valeurs par défaut */
|
// Si la fiche n'existe pas, on la crée avec les valeurs par défaut
|
||||||
if( ficheData == null )
|
if( ficheData == null )
|
||||||
ficheData = this.defaultData;
|
ficheData = this.defaultData;
|
||||||
|
|
||||||
|
// On met à jour la fiche ET on l'enregistre
|
||||||
/* (6) On met à jour la fiche */
|
ficheData.uid = ficheIndex;
|
||||||
ficheData.uid = contactData.uid;
|
ficheData.contact = parseInt(uid);
|
||||||
ficheData.firstname = contactData.firstname;
|
lsi.set('fiches', ficheIndex, ficheData);
|
||||||
ficheData.lastname = contactData.lastname;
|
}
|
||||||
ficheData.username = contactData.username;
|
|
||||||
|
|
||||||
|
|
||||||
/* (7) On enregistre les modification */
|
/* (4) Indice de 10 à 19 si dans le TOP 10 des SMS */
|
||||||
lsi.set('fiches', contactUIDs[i], ficheData);
|
if( contacts[uid].sms > -1 ){
|
||||||
|
// On calcule le rang de la fiche en fonction du classement
|
||||||
|
var ficheIndex = 10+contacts[uid].sms;
|
||||||
|
addedFicheUids.push(ficheIndex);
|
||||||
|
|
||||||
|
// On récupère les informations de la FICHE (si elle existe) */
|
||||||
|
var ficheData = lsi.get('fiches', ficheIndex);
|
||||||
|
|
||||||
|
// Si la fiche n'existe pas, on la crée avec les valeurs par défaut
|
||||||
|
if( ficheData == null )
|
||||||
|
ficheData = this.defaultData;
|
||||||
|
|
||||||
|
// On met à jour la fiche ET on l'enregistre
|
||||||
|
ficheData.uid = ficheIndex;
|
||||||
|
ficheData.contact = parseInt(uid);
|
||||||
|
lsi.set('fiches', ficheIndex, ficheData);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) Mise à jour en fonction des contacts APRÈS SAISIE MANUELLE
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
// Si moins de 10+10 contacts crées, on les complètes en fonction des contacts séquentiellement
|
||||||
|
if( addedFicheUids.length < 20 ){
|
||||||
|
|
||||||
|
/* (1) Pour chaque CONTACT, on met à jour/crée la FICHE associée*/
|
||||||
|
for( var uid in contacts ){
|
||||||
|
|
||||||
|
/* (2) On cherche un uid de fiche non existant dans l'intervalle 0-19 */
|
||||||
|
var ficheUid = 0;
|
||||||
|
while( addedFicheUids.indexOf(ficheUid) > -1 && ficheUid < 20 )
|
||||||
|
ficheUid++;
|
||||||
|
// On enregistre le nouvel UID dans les uid crées
|
||||||
|
addedFicheUids.push(ficheUid);
|
||||||
|
|
||||||
|
/* (3) On récupère les informations de la FICHE (si elle existe) */
|
||||||
|
var ficheData = lsi.get('fiches', ficheUid);
|
||||||
|
|
||||||
|
// Si la fiche n'existe pas, on la crée avec les valeurs par défaut
|
||||||
|
if( ficheData == null )
|
||||||
|
ficheData = this.defaultData;
|
||||||
|
|
||||||
|
/* (4) On met à jour la fiche ET on l'enregistre */
|
||||||
|
ficheData.uid = ficheUid;
|
||||||
|
ficheData.contact = uid;
|
||||||
|
lsi.set('fiches', ficheUid, ficheData);
|
||||||
|
|
||||||
|
|
||||||
|
/* (5) Si on a déja crée 10+10 fiches, on arrête */
|
||||||
|
if( addedFicheUids.length >= 20 )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* (3) Mise à jour en fonction des MINI fiches
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
/* (1) On récupère les valeurs des MINI fiches et des FICHES */
|
||||||
|
var ficheData = lsi.export('fiches');
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) Pour chaque champ, on synchronise les MINI fiches avec les FICHES associées */
|
||||||
|
for( var key in ficheData ){
|
||||||
|
miniData = lsi.get('mini-fiches', ficheData[key].contact);
|
||||||
|
|
||||||
|
var ficheModifiedLast = ficheData[key].timestamp >= miniData.timestamp;
|
||||||
|
|
||||||
|
/* (3) Si la FICHE a été modifiée en dernier, on utilise ses données */
|
||||||
|
if( ficheModifiedLast ){
|
||||||
|
miniData.sexe = ficheData[key].sexe;
|
||||||
|
miniData.age = ficheData[key].age;
|
||||||
|
miniData.studies = ficheData[key].studies;
|
||||||
|
miniData.loc = ficheData[key].loc;
|
||||||
|
miniData.reltype = ficheData[key].reltype;
|
||||||
|
miniData.reltypeSpecial = ficheData[key].reltypeSpecial;
|
||||||
|
|
||||||
|
/* (4) Sinon, on utilise les données de la MINI */
|
||||||
|
}else{
|
||||||
|
ficheData[key].sexe = miniData.sexe;
|
||||||
|
ficheData[key].age = miniData.age;
|
||||||
|
ficheData[key].studies = miniData.studies;
|
||||||
|
ficheData[key].loc = miniData.loc;
|
||||||
|
ficheData[key].reltype = miniData.reltype;
|
||||||
|
ficheData[key].reltypeSpecial = miniData.reltypeSpecial;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (5) On enregistre les modifications */
|
||||||
|
lsi.set('mini-fiches', ficheData[key].contact, miniData);
|
||||||
|
lsi.set('fiches', key, ficheData[key]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* (4) Mise à jour des fiches dupliquées entre le top 10 des APPELS et celui des SMS
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
for( var key in ficheData ){
|
||||||
|
/* (1) On récupère le contact associé */
|
||||||
|
var associatedContact = lsi.get('contacts', ficheData[key].contact);
|
||||||
|
|
||||||
|
// Si erreur, on passe au suivant
|
||||||
|
if( associatedContact == null )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* (2) Si la fiche n'est pas dans les 2 top 10 (APPELS et SMS) */
|
||||||
|
if( associatedContact.sms == -1 || associatedContact.call == -1 )
|
||||||
|
continue; // On passe au suivant
|
||||||
|
|
||||||
|
|
||||||
|
/* (3) On récupère l'autre fiche (clone) */
|
||||||
|
var inCall = parseInt(key) < 10; // Si on est dans le top 10 des APPELS, sinon dans celui des SMS
|
||||||
|
var cloneIndex = inCall ? 10+associatedContact.sms : associatedContact.call; // Contient l'index du clone dans l'autre top (APPELS ou SMS)
|
||||||
|
|
||||||
|
var clone = ficheData[cloneIndex];
|
||||||
|
|
||||||
|
|
||||||
|
/* (4) Si le clone a été modifié en dernier, on ne fait rien */
|
||||||
|
if( clone.timestamp >= ficheData[key].timestamp )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* (5) On copie les données de la FICHE dans le clone (cas ou la fiche est modifiée en dernier) */
|
||||||
|
var obj = ficheData[key];
|
||||||
|
obj.uid = clone.uid;
|
||||||
|
lsi.set('fiches', clone.uid, obj);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -366,10 +513,10 @@ inputPhoneFiche.prototype.sync = function(){
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
inputPhoneFiche.prototype.nav = function(element){
|
inputPhoneFiche.prototype.nav = function(element){
|
||||||
/* (1) On vérifie que l'élément contient un nombre et existe */
|
/* (1) On vérifie que l'élément contient un nombre et existe */
|
||||||
if( typeof element == 'undefined' )
|
if( element == null )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if( isNaN(element.innerHTML) )
|
if( element.getData('n') === false || isNaN(element.getData('n')) || element.parentNode.id != 'nav-fiche' )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* (2) On désactive tous les éléments actifs */
|
/* (2) On désactive tous les éléments actifs */
|
||||||
|
@ -379,7 +526,7 @@ inputPhoneFiche.prototype.nav = function(element){
|
||||||
|
|
||||||
/* (3) On active l'élément courant */
|
/* (3) On active l'élément courant */
|
||||||
element.addClass('active');
|
element.addClass('active');
|
||||||
this.selected = parseInt(element.innerHTML) - 1;
|
this.selected = parseInt(element.getData('n'));
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -391,32 +538,53 @@ inputPhoneFiche.prototype.nav = function(element){
|
||||||
|
|
||||||
/* [7] Mise à jour de la navigation
|
/* [7] Mise à jour de la navigation
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
inputPhoneFiche.prototype.updateNavBar = function(uid_list){
|
inputPhoneFiche.prototype.updateNavBar = function(){
|
||||||
/* (1) On vide la nav bar */
|
var ficheData = lsi.export('fiches');
|
||||||
this.nav_container.innerHTML = '';
|
var len = lsi.keys('fiches').length;
|
||||||
|
|
||||||
/* (2) On la re-remplit avec toutes les données */
|
|
||||||
for( var i = 0 ; i < uid_list.length ; i++ ){
|
|
||||||
// On rajoute 1 pour la lisibilité
|
|
||||||
var realIndex = parseInt(uid_list[i]) + 1;
|
|
||||||
|
|
||||||
this.nav_container.innerHTML += '<span>'+realIndex+'</span>';
|
/* (1) On vérifie si la barre de navigation est à jour */
|
||||||
|
var navBarUpToDate = $$('#nav-fiche [data-n]').length == len;
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) On vide et remplit la barre de nav, si elle n'est pas à jour */
|
||||||
|
if( !navBarUpToDate ){
|
||||||
|
this.nav_container.innerHTML = '<span>APPELS</span>';
|
||||||
|
|
||||||
|
for( var i = 0 ; i < len ; i++ )
|
||||||
|
// Si fin du top 10 des APPELS, on met un espace et un border-right
|
||||||
|
if( i == 9 )
|
||||||
|
this.nav_container.innerHTML += '<span data-n="'+i+'" class="lc">'+(i%10 + 1)+'</span> ';
|
||||||
|
|
||||||
|
// Si début du top 10 des SMS, on met le label 'SMS' et un border-left
|
||||||
|
else if( i == 10 ){
|
||||||
|
this.nav_container.innerHTML += '<span class="fc">SMS</span>';
|
||||||
|
this.nav_container.innerHTML += '<span data-n="'+i+'">'+(i%10 + 1)+'</span>';
|
||||||
|
|
||||||
|
// Sinon, on ajoute juste le bouton
|
||||||
|
}else
|
||||||
|
this.nav_container.innerHTML += '<span data-n="'+i+'">'+(i%10 + 1)+'</span>';
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (3) On montre les FICHES qui sont correctes */
|
/* (3) On montre les FICHES qui sont correctes */
|
||||||
var ficheData = lsi.export('fiches');
|
|
||||||
for( var key in ficheData ){
|
for( var key in ficheData ){
|
||||||
|
|
||||||
// Si la MINI fiche est valide
|
var currentElement = $('#nav-fiche [data-n="'+ficheData[key].uid+'"]');
|
||||||
if( ficheData[key].valid === true ) this.nav_container.children[ficheData[key].uid].addClass('done');
|
|
||||||
|
if( currentElement == null )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// Si on ne trouve pas le bouton
|
||||||
|
|
||||||
|
// Si la FICHE est valide
|
||||||
|
if( ficheData[key].valid === true ) currentElement.addClass('done');
|
||||||
// Si elle est invalide
|
// Si elle est invalide
|
||||||
else this.nav_container.children[ficheData[key].uid].remClass('done');
|
else currentElement.remClass('done');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (4) On séléctionne par défaut le dernier sélectionné */
|
/* (4) On séléctionne par défaut le dernier sélectionné */
|
||||||
this.nav( this.nav_container.children[this.selected] );
|
this.nav( $('#nav-fiche [data-n="'+this.selected+'"]') );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -427,29 +595,29 @@ inputPhoneFiche.prototype.updateNavBar = function(uid_list){
|
||||||
inputPhoneFiche.prototype.check = function(ficheData){
|
inputPhoneFiche.prototype.check = function(ficheData){
|
||||||
|
|
||||||
// {1} Vérification des <input> //
|
// {1} Vérification des <input> //
|
||||||
// 1. L'age est un nombre
|
// 1. La ville a au moins 2 caractères
|
||||||
if( isNaN(parseInt(ficheData.age)) )
|
|
||||||
return false;
|
|
||||||
// 2. La ville a au moins 2 caractères
|
|
||||||
if( ficheData.city.length < 2 )
|
if( ficheData.city.length < 2 )
|
||||||
return false;
|
return false;
|
||||||
// 3. La durée de la relation en mois est vide ou un nombre
|
// 2. La durée de la relation en mois est vide ou un nombre
|
||||||
if( isNaN(parseInt(ficheData.duration[0])) && ficheData.duration[0].length > 0 )
|
if( isNaN(parseInt(ficheData.duration[0])) && ficheData.duration[0].length > 0 )
|
||||||
return false;
|
return false;
|
||||||
// 4. La durée de la relation en année est vide ou un nombre
|
// 3. La durée de la relation en année est vide ou un nombre
|
||||||
if( isNaN(parseInt(ficheData.duration[1])) && ficheData.duration[1].length > 0 )
|
if( isNaN(parseInt(ficheData.duration[1])) && ficheData.duration[1].length > 0 )
|
||||||
return false;
|
return false;
|
||||||
// 5. Pour la durée de la relation, au moins un des 2 n'est pas vide
|
// 4. Pour la durée de la relation, au moins un des 2 n'est pas vide
|
||||||
if( ficheData.duration[0].length+ficheData.duration[1].length == 0 )
|
if( ficheData.duration[0].length+ficheData.duration[1].length == 0 )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// {2} Vérification des <select> //
|
// {2} Vérification des <select> //
|
||||||
// 6. Le <select> pour la profession n'est pas indéfini
|
// 5. Le <select> pour la profession n'est pas indéfini
|
||||||
if( ficheData.job == '.' )
|
if( ficheData.job == '.' )
|
||||||
return false;
|
return false;
|
||||||
// 7. Le <select> pour les études n'est pas indéfini
|
// 6. Le <select> pour les études n'est pas indéfini
|
||||||
if( ficheData.studies == '.' )
|
if( ficheData.studies == '.' )
|
||||||
return false;
|
return false;
|
||||||
|
// 7. Le <select> pour l'AGE n'est pas indéfini
|
||||||
|
if( ficheData.age == '.' )
|
||||||
|
return false;
|
||||||
|
|
||||||
// {3} Vérification des <input> radio //
|
// {3} Vérification des <input> radio //
|
||||||
// 8. Le SEXE a un et un seul choix
|
// 8. Le SEXE a un et un seul choix
|
||||||
|
@ -471,7 +639,6 @@ inputPhoneFiche.prototype.check = function(ficheData){
|
||||||
for( var i = 0 ; i < ficheData.freq.length ; i++ )
|
for( var i = 0 ; i < ficheData.freq.length ; i++ )
|
||||||
if( !checkRadioValue( ficheData.freq[i] ) )
|
if( !checkRadioValue( ficheData.freq[i] ) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// 14. Les CONNECTION ont un et un seul choix (par question de connection)
|
// 14. Les CONNECTION ont un et un seul choix (par question de connection)
|
||||||
for( var i = 0 ; i < ficheData.connect.length ; i++ )
|
for( var i = 0 ; i < ficheData.connect.length ; i++ )
|
||||||
if( !checkRadioValue( ficheData.connect[i] ) )
|
if( !checkRadioValue( ficheData.connect[i] ) )
|
||||||
|
@ -525,7 +692,7 @@ inputPhoneFiche.prototype.attach = function(handler){
|
||||||
// 1. On gère la navigation
|
// 1. On gère la navigation
|
||||||
ptr.nav(e.target);
|
ptr.nav(e.target);
|
||||||
// 2. On gere le chargement dynamique
|
// 2. On gere le chargement dynamique
|
||||||
ptr.handler();
|
ptr.handler(e.target);
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
function inputPhoneMatrice(a){this.container=a}inputPhoneMatrice.prototype={container:this.container};
|
||||||
|
inputPhoneMatrice.prototype.fieldsToStorage=function(){console.log("MATRICE: FIELDS TO STORAGE");var a=(new FormDeflater(this.container,["input"],["data-name"])).deflate();crc32(JSON.stringify(a));var d={},b;for(b in a)if(a[b]instanceof Array)for(var e in a[b])!0===a[b][e].status&&(null==d[b]&&(d[b]=[]),d[b].push(parseInt(a[b][e].value)));else!0===a[b].status&&(null==d[b]&&(d[b]=[]),d[b].push(parseInt(a[b].value)));lsi.set("matrice",0,d)};
|
||||||
|
inputPhoneMatrice.prototype.storageToFields=function(){console.log("MATRICE: STORAGE TO FIELDS");var a=lsi["export"]("fiches"),d=lsi.get("matrice",0),b=lsi["export"]("contacts"),e=[],c;for(c in a)-1==e.indexOf(a[c].contact)&&e.push(a[c].contact);a="<table class='line'>";for(c=0;c<e.length;c++){var f=b[c],a=a+"<tr>";0<c?(a+='<td style="text-align: right;">',a+=f.firstname+" "+f.lastname,a+=0<f.username.length?" ("+f.username+")":"",a+="</td>"):a+="<td></td>";for(var h=0;h<e.length;h++)if(h<e.length-
|
||||||
|
1){var g=b[h];0==c?(a+="<td>",a+='<span style="writing-mode: vertical-lr; text-align: right;">',a+=g.firstname+" "+g.lastname,a+=0<g.username.length?" ("+g.username+")":"",a+="</span>"):h<c?(a+="<td>",a+="<input type='checkbox' name='matrice_"+f.uid+"_"+g.uid+"' data-name='"+f.uid+"' value='"+g.uid+"' id='matrice_"+f.uid+"_"+g.uid+"'",null!=d[c]&&-1<d[c].indexOf(h)&&(a+=" checked"),a+=" >",a+="<label for='matrice_"+f.uid+"_"+g.uid+"'></label>"):a+="<td class='hidden'>";a+="</td>"}a+="</tr>"}this.container.innerHTML=
|
||||||
|
a+"</table>"};inputPhoneMatrice.prototype.attach=function(){console.log("MATRICE: ATTACH");lsi.createDataset("matrice");this.storageToFields();var a=this;this.container.addEventListener("click",function(d){a.fieldsToStorage();a.storageToFields()},!1)};
|
|
@ -0,0 +1,176 @@
|
||||||
|
/* [0] Constructeur -> définit le conteneur et le bouton d'ajout
|
||||||
|
=========================================================*/
|
||||||
|
function inputPhoneMatrice(container){
|
||||||
|
this.container = container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* [1] Attributs
|
||||||
|
=========================================================*/
|
||||||
|
inputPhoneMatrice.prototype = {
|
||||||
|
container: this.container // Conteneur de la matrice
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* [2] Gestion de l'enregistrement de la matrice
|
||||||
|
=========================================================*/
|
||||||
|
inputPhoneMatrice.prototype.fieldsToStorage = function(){
|
||||||
|
console.log('MATRICE: FIELDS TO STORAGE');
|
||||||
|
|
||||||
|
|
||||||
|
// {1} On initialise notre deflater pour récupérer les valeurs //
|
||||||
|
var deflater = new FormDeflater(this.container, ['input'], ['data-name']);
|
||||||
|
|
||||||
|
// {2} On extrait les données //
|
||||||
|
var deflated = deflater.deflate();
|
||||||
|
// On crée le hash
|
||||||
|
var deflatedHash = crc32(JSON.stringify(deflated));
|
||||||
|
|
||||||
|
|
||||||
|
// console.log(deflated);
|
||||||
|
|
||||||
|
/* (3) On crée l'objet et on le remplit avec les relations */
|
||||||
|
var obj = {};
|
||||||
|
|
||||||
|
for( var i in deflated )
|
||||||
|
|
||||||
|
// {1} Si c'est un tableau de sujets //
|
||||||
|
if( deflated[i] instanceof Array ){
|
||||||
|
|
||||||
|
// Pour chacune des différentes relations, on ajoute si TRUE
|
||||||
|
for( var a in deflated[i] )
|
||||||
|
if( deflated[i][a].status === true ){
|
||||||
|
if( obj[i] == null )
|
||||||
|
obj[i] = [];
|
||||||
|
|
||||||
|
obj[i].push( parseInt(deflated[i][a].value) );
|
||||||
|
}
|
||||||
|
|
||||||
|
// {2} Si il n'y a qu'un sujet //
|
||||||
|
}else if( deflated[i].status === true ){
|
||||||
|
if( obj[i] == null )
|
||||||
|
obj[i] = [];
|
||||||
|
|
||||||
|
obj[i].push( parseInt(deflated[i].value) );
|
||||||
|
}
|
||||||
|
|
||||||
|
lsi.set( 'matrice', 0, obj );
|
||||||
|
// Objet de la forme
|
||||||
|
//
|
||||||
|
// idA: [idV, idW], # A connait V et W (et réciproquement)
|
||||||
|
// idB: [idX, idY], # B connait X et Y (et réciproquement)
|
||||||
|
// ...
|
||||||
|
//
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [4] Gestion de l'affichage depuis le 'localStorage'
|
||||||
|
=========================================================*/
|
||||||
|
inputPhoneMatrice.prototype.storageToFields = function(){
|
||||||
|
console.log('MATRICE: STORAGE TO FIELDS');
|
||||||
|
|
||||||
|
/* (1) On récupère la liste des contacts à mettre dans la matrice */
|
||||||
|
// On récupère les fiches
|
||||||
|
var ficheData = lsi.export('fiches');
|
||||||
|
|
||||||
|
// On récupère les données de la matrice
|
||||||
|
var matriceData = lsi.get('matrice', 0);
|
||||||
|
|
||||||
|
// On récupère les contacts pour afficher les noms/prénoms
|
||||||
|
var contactData = lsi.export('contacts');
|
||||||
|
|
||||||
|
// Contiendra les UID des contacts à mettre dans la matrice
|
||||||
|
var contacts = [];
|
||||||
|
|
||||||
|
// Pour chaque fiche, on ajoute l'uid du contact s'il n'est pas déja ajouté
|
||||||
|
for( var f in ficheData )
|
||||||
|
if( contacts.indexOf( ficheData[f].contact ) == -1 )
|
||||||
|
contacts.push( ficheData[f].contact );
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) On construit le HTML de la matrice */
|
||||||
|
// Contiendra le HTML
|
||||||
|
var matrice_html = "<table class='line'>";
|
||||||
|
|
||||||
|
// {1} Pour chaque ligne //
|
||||||
|
for( var A = 0 ; A < contacts.length ; A++ ){
|
||||||
|
var conA = contactData[A];
|
||||||
|
|
||||||
|
|
||||||
|
matrice_html += '<tr>';
|
||||||
|
|
||||||
|
if( A > 0 ){ // Noms sur la première ligne (abscisses)
|
||||||
|
matrice_html += '<td style="text-align: right;">';
|
||||||
|
matrice_html += conA.firstname+' '+conA.lastname
|
||||||
|
matrice_html += (conA.username.length>0) ? ' ('+conA.username+')' : '';
|
||||||
|
matrice_html += '</td>';
|
||||||
|
}else // Sinon,
|
||||||
|
matrice_html += '<td></td>';
|
||||||
|
|
||||||
|
// {2} Pour chaque case //
|
||||||
|
for( var B = 0 ; B < contacts.length ; B++ ){ if( B < contacts.length-1 ){
|
||||||
|
var conB = contactData[B];
|
||||||
|
|
||||||
|
// {3} Première colonne -> Intitulé des ordonnées //
|
||||||
|
if( A == 0 ){
|
||||||
|
matrice_html += '<td>';
|
||||||
|
matrice_html += '<span style="writing-mode: vertical-lr; text-align: right;">';
|
||||||
|
matrice_html += conB.firstname+' '+conB.lastname;
|
||||||
|
matrice_html += (conB.username.length>0) ? ' ('+conB.username+')' : '';
|
||||||
|
matrice_html += '</span>';
|
||||||
|
|
||||||
|
// {4} Valeurs des relations (boutons) //
|
||||||
|
}else if( B < A ){
|
||||||
|
matrice_html += "<td>";
|
||||||
|
matrice_html += "<input type='checkbox' name='matrice_"+conA.uid+"_"+conB.uid+"' data-name='"+conA.uid+"' value='"+conB.uid+"' id='matrice_"+conA.uid+"_"+conB.uid+"'";
|
||||||
|
// Si la relation existe, on active le bouton
|
||||||
|
if( matriceData[A] != null && matriceData[A].indexOf(B) > -1 )
|
||||||
|
matrice_html += " checked";
|
||||||
|
matrice_html += " >";
|
||||||
|
matrice_html += "<label for='matrice_"+conA.uid+"_"+conB.uid+"'></label>";
|
||||||
|
|
||||||
|
// {5} Cases vides (moitié supérieure droite) //
|
||||||
|
}else
|
||||||
|
matrice_html += "<td class='hidden'>";
|
||||||
|
|
||||||
|
matrice_html += '</td>';
|
||||||
|
}}
|
||||||
|
|
||||||
|
matrice_html += '</tr>';
|
||||||
|
}
|
||||||
|
matrice_html += '</table>';
|
||||||
|
|
||||||
|
|
||||||
|
/* (3) On affiche la matrice */
|
||||||
|
this.container.innerHTML = matrice_html;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [9] Point d'amorçage de la gestion des contacts
|
||||||
|
=========================================================*/
|
||||||
|
inputPhoneMatrice.prototype.attach = function(){
|
||||||
|
console.log('MATRICE: ATTACH');
|
||||||
|
|
||||||
|
/* (1) On initialise le jeu de données */
|
||||||
|
lsi.createDataset('matrice');
|
||||||
|
|
||||||
|
/* (2) On charge les mini fiches depuis la mémoire ('localStorage') */
|
||||||
|
this.storageToFields();
|
||||||
|
|
||||||
|
/* (3) On enregistre la matrice à chaque modification */
|
||||||
|
var ptr = this;
|
||||||
|
this.container.addEventListener('click', function(e){
|
||||||
|
ptr.fieldsToStorage();
|
||||||
|
ptr.storageToFields();
|
||||||
|
}, false);
|
||||||
|
};
|
|
@ -1,10 +1,10 @@
|
||||||
function inputPhoneMini(a,b){this.container=a;this.nav_container=b}inputPhoneMini.prototype={container:this.container,nav_container:this.nav_container,selected:0,handler:null,defaultData:{firstname:"",lastname:"",username:"",sexe:[{status:!0},{status:!1}],age:"",job:".",loc:[{status:!0},{status:!1},{status:!1},{status:!1}]}};
|
function inputPhoneMini(a,b){this.container=a;this.nav_container=b}inputPhoneMini.prototype={container:this.container,nav_container:this.nav_container,selected:0,handler:null,defaultData:{sexe:[defTrue,defFalse],age:".",studies:".",loc:[defTrue,defFalse,defFalse,defFalse],reltype:[defTrue,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse],reltypeSpecial:"",timestamp:0,valid:!1}};
|
||||||
inputPhoneMini.prototype.fieldsToStorage=function(){console.log("MINI FICHE: FIELDS TO STORAGE");for(var a=$$("article.mini-relation-panel .mini-fiche-relation"),b=0;b<a.length;b++){var c=(new FormDeflater(a[b],["input","select"],["data-name"])).deflate();console.log(c);var d=lsi.get("mini-fiches","form"+c.uid.value);!1===d&&(d.username="inconnu",d.firstname="inconnu",d.lastname="inconnu");c={uid:c.uid.value,firstname:d.firstname,lastname:d.lastname,username:d.username,sexe:c.sexe,age:c.age.value,
|
inputPhoneMini.prototype.fieldsToStorage=function(){console.log("MINI FICHE: FIELDS TO STORAGE");for(var a=$$("article.mini-relation-panel .mini-fiche-relation"),b=0;b<a.length;b++){var c=(new FormDeflater(a[b],["input","select"],["data-name"])).deflate(),e=crc32(JSON.stringify(c)),d=lsi.get("mini-fiches",c.uid.value);if(!1!==d){if(null!=d.hash&&d.hash==e)break;console.warn("> MINI UPDATE");c={uid:parseInt(c.uid.value),firstname:d.firstname,lastname:d.lastname,username:d.username,sexe:c.sexe,age:c.age.value,
|
||||||
job:c.job.value,loc:c.loc};c.valid=this.check(c);lsi.set("mini-fiches","form"+c.uid,c)}};
|
studies:c.studies.value,reltype:c.reltype,reltypeSpecial:c.reltypeSpecial.value,loc:c.loc,hash:e};c.valid=this.check(c);0<diff(d,c).length&&(console.warn("> FICHE UPDATE"),c.timestamp=Date.now());lsi.set("mini-fiches",c.uid,c)}}};
|
||||||
inputPhoneMini.prototype.add=function(a){console.log("MINI FICHE: ADD");if(null==a||null==a.uid)return!1;a.firstname=null!=a.firstname?a.firstname:this.defaultData.firstname;a.lastname=null!=a.lastname?a.lastname:this.defaultData.lastname;a.username=null!=a.username?a.username:this.defaultData.username;a.age=null!=a.age?a.age:this.defaultData.age;a.sexe=null!=a.sexe?a.sexe:this.defaultData.sexe;a.job=null!=a.job?a.job:this.defaultData.job;a.loc=null!=a.loc?a.loc:this.defaultData.loc;this.container.innerHTML+=
|
inputPhoneMini.prototype.add=function(a){console.log("MINI FICHE: ADD");if(null==a||null==a.uid)return!1;a.age=null!=a.age?a.age:this.defaultData.age;a.sexe=null!=a.sexe?a.sexe:this.defaultData.sexe;a.studies=null!=a.studies?a.studies:this.defaultData.studies;a.reltype=null!=a.reltype?a.reltype:this.defaultData.reltype;a.reltypeSpecial=null!=a.reltypeSpecial?a.reltypeSpecial:this.defaultData.reltypeSpecial;a.loc=null!=a.loc?a.loc:this.defaultData.loc;var b=lsi.get("contacts",a.uid);if(!1===b)return!1;
|
||||||
miniFicheBuilder.build({firstname:a.firstname,lastname:a.lastname,username:a.username,uid:a.uid,age:a.age,job:a.job});var b=$('article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="job"]>option[value="'+a.job+'"]');null!=b&&b.setAttribute("selected","selected");for(var c=$$('article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]'),b=0;b<c.length&&b<a.sexe.length;b++)a.sexe[b].status?c[b].setAttribute("checked",
|
this.container.innerHTML+=miniFicheBuilder.build({firstname:b.firstname,lastname:b.lastname,username:0==b.username.length?"":"("+b.username+")",countcall:b.countcall,countsms:b.countsms,uid:a.uid,reltypespecial:a.reltypeSpecial});b=$('article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="studies"]>option[value="'+a.studies+'"]');null!=b&&b.setAttribute("selected","selected");b=$('article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="age"]>option[value="'+
|
||||||
"checked"):c[b].removeAttribute("checked");c=$$('article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="loc"]');for(b=0;b<c.length&&b<a.loc.length;b++)a.loc[b].status?c[b].setAttribute("checked","checked"):c[b].removeAttribute("checked")};inputPhoneMini.prototype.storageToFields=function(){console.log("MINI FICHE: STORAGE TO FIELDS");var a=lsi["export"]("mini-fiches");this.container.innerHTML="";this.add(a["form"+this.selected]);this.updateNavBar()};
|
a.age+'"]');null!=b&&b.setAttribute("selected","selected");for(var c=$$('article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]'),b=0;b<c.length&&b<a.sexe.length;b++)a.sexe[b].status?c[b].setAttribute("checked","checked"):c[b].removeAttribute("checked");c=$$('article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="reltype"]');for(b=0;b<c.length&&b<a.reltype.length;b++)a.reltype[b].status?c[b].setAttribute("checked",
|
||||||
inputPhoneMini.prototype.sync=function(){console.log("MINI FICHE: SYNC");var a=lsi["export"]("contacts"),b;for(b in a){var c=lsi.get("mini-fiches",b);null==c&&(c=this.defaultData,c.valid=!1);c.uid=a[b].uid;c.firstname=a[b].firstname;c.lastname=a[b].lastname;c.username=a[b].username;lsi.set("mini-fiches",b,c)}};
|
"checked"):c[b].removeAttribute("checked");c=$$('article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="loc"]');for(b=0;b<c.length&&b<a.loc.length;b++)a.loc[b].status?c[b].setAttribute("checked","checked"):c[b].removeAttribute("checked")};inputPhoneMini.prototype.storageToFields=function(){console.log("MINI FICHE: STORAGE TO FIELDS");var a=lsi.get("mini-fiches",this.selected);this.container.innerHTML="";this.add(a);this.updateNavBar()};
|
||||||
inputPhoneMini.prototype.nav=function(a){if("undefined"==typeof a||isNaN(a.innerHTML))return!1;for(var b=$$("#nav-mini > span.active"),c=0;c<b.length;c++)b[c].remClass("active");a.addClass("active");this.selected=parseInt(a.innerHTML)-1};
|
inputPhoneMini.prototype.sync=function(){console.log("MINI FICHE: SYNC");var a=lsi["export"]("contacts"),b;for(b in a){var c=lsi.get("mini-fiches",b);null==c&&(c=this.defaultData,c.valid=!1);c.uid=a[b].uid;lsi.set("mini-fiches",b,c)}};inputPhoneMini.prototype.nav=function(a){if(null==a||!1===a.getData("n")||isNaN(a.getData("n"))||"nav-mini"!=a.parentNode.id)return!1;for(var b=$$("#nav-mini > span.active"),c=0;c<b.length;c++)b[c].remClass("active");a.addClass("active");this.selected=parseInt(a.getData("n"))};
|
||||||
inputPhoneMini.prototype.updateNavBar=function(){var a=lsi["export"]("mini-fiches"),a=Object.keys(a).length;if(this.nav_container.children.length!=a){this.nav_container.innerHTML="";for(var b=0;b<a;b++)this.nav_container.innerHTML+="<span></span>"}var a=lsi["export"]("mini-fiches"),c;for(c in a)b=this.nav_container.children[a[c].uid],b.innerHTML=a[c].uid+1,!0===a[c].valid?b.addClass("done"):b.remClass("done");this.nav(this.nav_container.children[this.selected])};
|
inputPhoneMini.prototype.updateNavBar=function(){var a=lsi["export"]("mini-fiches"),b=Object.keys(a).length;if($$("#nav-mini [data-n]").length!=b){this.nav_container.innerHTML="";for(var c=0;c<b;c++)this.nav_container.innerHTML+='<span data-n="'+c+'">'+(c+1)+"</span>"}for(var e in a)b=$('#nav-mini [data-n="'+a[e].uid+'"]'),null!=b&&(!0===a[e].valid?b.addClass("done"):b.remClass("done"));this.nav($('#nav-mini [data-n="'+this.selected+'"]'))};
|
||||||
inputPhoneMini.prototype.check=function(a){return!isNaN(parseInt(a.age))&&checkRadioValue(a.sexe)&&"."!=a.job&&checkRadioValue(a.loc)?!0:!1};inputPhoneMini.prototype.attach=function(a){console.log("MINI FICHE: ATTACH");lsi.createDataset("mini-fiches");this.storageToFields();this.handler=a;var b=this,b=this;this.nav_container.addEventListener("click",function(a){b.nav(a.target);b.handler(a.target)},!1)};
|
inputPhoneMini.prototype.check=function(a){return!checkRadioValue(a.sexe)||"."==a.studies||"."==a.age||!checkRadioValue(a.loc)||!checkRadioValue(a.reltype)||a.reltype[8].status&&2>a.reltypeSpecial.length?!1:!0};inputPhoneMini.prototype.attach=function(a){console.log("MINI FICHE: ATTACH");lsi.createDataset("mini-fiches");this.storageToFields();this.handler=a;var b=this;this.nav_container.addEventListener("click",function(a){b.nav(a.target);b.handler(a.target)},!1)};
|
||||||
|
|
|
@ -9,17 +9,19 @@ function inputPhoneMini(container, navContainer){
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
inputPhoneMini.prototype = {
|
inputPhoneMini.prototype = {
|
||||||
container: this.container, // Conteneur des mini fiches relation
|
container: this.container, // Conteneur des mini fiches relation
|
||||||
nav_container: this.nav_container, // Conteneur de la navigation entre les fiches
|
nav_container: this.nav_container, // Conteneur de la navigation entre les MINI fiches
|
||||||
selected: 0, // UID de la MINI fiche sélectionnée
|
selected: 0, // UID de la MINI fiche sélectionnée
|
||||||
handler: null, // Fonction pour l'enregistrement et la synchronisation des données
|
handler: null, // Fonction pour l'enregistrement et la synchronisation des données
|
||||||
defaultData: { // Valeur par défaut
|
defaultData: { // Valeur par défaut
|
||||||
firstname: '',
|
sexe: [defTrue, defFalse],
|
||||||
lastname: '',
|
age: '.',
|
||||||
username: '',
|
studies: '.',
|
||||||
sexe: [{status:true}, {status:false}],
|
loc: [defTrue, defFalse, defFalse, defFalse],
|
||||||
age: '',
|
reltype: [ defTrue, defFalse, defFalse, defFalse, defFalse,
|
||||||
job: '.',
|
defFalse, defFalse, defFalse, defFalse], // Choix 1 à 9
|
||||||
loc: [{status:true}, {status:false}, {status:false}, {status:false}]
|
reltypeSpecial: '',
|
||||||
|
timestamp: 0,
|
||||||
|
valid: false
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -37,40 +39,55 @@ inputPhoneMini.prototype.fieldsToStorage = function(){
|
||||||
|
|
||||||
// {3} On enregistre ce contact si le numéro n'est pas vide et soit pseudo/prénom/nom //
|
// {3} On enregistre ce contact si le numéro n'est pas vide et soit pseudo/prénom/nom //
|
||||||
var deflated = deflater.deflate();
|
var deflated = deflater.deflate();
|
||||||
|
// On crée le hash
|
||||||
|
var deflatedHash = crc32(JSON.stringify(deflated));
|
||||||
|
|
||||||
|
|
||||||
console.log(deflated);
|
// console.log(deflated);
|
||||||
|
|
||||||
|
|
||||||
// {4} On récupère les données du LSI si elles existent //
|
// {4} On récupère les données du LSI si elles existent //
|
||||||
var existingData = lsi.get('mini-fiches', 'form'+deflated.uid.value);
|
var existingData = lsi.get('mini-fiches', deflated.uid.value);
|
||||||
|
|
||||||
// Si n'existe pas, on initialise
|
// Si n'existe pas, on passe à la suivante
|
||||||
if( existingData === false ){
|
if( existingData === false )
|
||||||
existingData.username = 'inconnu';
|
continue;
|
||||||
existingData.firstname = 'inconnu';
|
|
||||||
existingData.lastname = 'inconnu';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// {5} On récupère et met en forme les valeurs du deflater //
|
// {5} On récupère et met en forme les valeurs du deflater //
|
||||||
|
// Si le hash est le même, on ne fait rien
|
||||||
|
if( existingData.hash != null && existingData.hash == deflatedHash )
|
||||||
|
return;
|
||||||
|
|
||||||
|
console.warn('> MINI UPDATE');
|
||||||
|
|
||||||
|
|
||||||
var obj = {
|
var obj = {
|
||||||
uid: deflated.uid.value,
|
uid: parseInt(deflated.uid.value),
|
||||||
firstname: existingData.firstname,
|
firstname: existingData.firstname,
|
||||||
lastname: existingData.lastname,
|
lastname: existingData.lastname,
|
||||||
username: existingData.username,
|
username: existingData.username,
|
||||||
sexe: deflated.sexe, // [0] Homme, [1] Femme
|
sexe: deflated.sexe, // [0] Homme, [1] Femme
|
||||||
age: deflated.age.value,
|
age: deflated.age.value,
|
||||||
job: deflated.job.value,
|
studies: deflated.studies.value,
|
||||||
loc: deflated.loc // [0] Choix 1 -> [3] Choix 4
|
reltype: deflated.reltype, // [0] ...
|
||||||
|
reltypeSpecial: deflated.reltypeSpecial.value,
|
||||||
|
loc: deflated.loc, // [0] Choix 1 -> [3] Choix 4
|
||||||
|
hash: deflatedHash
|
||||||
};
|
};
|
||||||
|
|
||||||
/* (8) On vérifie la validité des données et on l'enregistre dans l'objet */
|
/* (8) On vérifie la validité des données et on l'enregistre dans l'objet avec la date de modification */
|
||||||
obj.valid = this.check(obj);
|
obj.valid = this.check(obj);
|
||||||
|
|
||||||
|
// On met à jour la date de modification, si on a pas qu'@uid de différent
|
||||||
|
if( diff(existingData, obj).length > 0 ){
|
||||||
|
console.warn('> FICHE UPDATE');
|
||||||
|
obj.timestamp = Date.now();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* (9) On enregistre les données dans le 'localStorage' */
|
/* (9) On enregistre les données dans le 'localStorage' */
|
||||||
lsi.set('mini-fiches', 'form'+obj.uid, obj);
|
lsi.set('mini-fiches', obj.uid, obj);
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -98,38 +115,57 @@ inputPhoneMini.prototype.add = function(objectData){
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* (0) Gestion du formattage des valeur */
|
/* (0) Gestion du formattage des valeur */
|
||||||
objectData.firstname = (objectData.firstname != null) ? objectData.firstname : this.defaultData.firstname;
|
|
||||||
objectData.lastname = (objectData.lastname != null) ? objectData.lastname : this.defaultData.lastname;
|
|
||||||
objectData.username = (objectData.username != null) ? objectData.username : this.defaultData.username;
|
|
||||||
objectData.age = (objectData.age != null) ? objectData.age : this.defaultData.age;
|
objectData.age = (objectData.age != null) ? objectData.age : this.defaultData.age;
|
||||||
objectData.sexe = (objectData.sexe != null) ? objectData.sexe : this.defaultData.sexe;
|
objectData.sexe = (objectData.sexe != null) ? objectData.sexe : this.defaultData.sexe;
|
||||||
objectData.job = (objectData.job != null) ? objectData.job : this.defaultData.job;
|
objectData.studies = (objectData.studies != null) ? objectData.studies : this.defaultData.studies;
|
||||||
|
objectData.reltype = (objectData.reltype != null) ? objectData.reltype : this.defaultData.reltype;
|
||||||
|
objectData.reltypeSpecial = (objectData.reltypeSpecial != null) ? objectData.reltypeSpecial : this.defaultData.reltypeSpecial;
|
||||||
objectData.loc = (objectData.loc != null) ? objectData.loc : this.defaultData.loc;
|
objectData.loc = (objectData.loc != null) ? objectData.loc : this.defaultData.loc;
|
||||||
|
|
||||||
|
|
||||||
// {1} Création physique //
|
// {1} On récupère username/firstname/lastname du contact associé //
|
||||||
|
var associatedContact = lsi.get('contacts', objectData.uid);
|
||||||
|
|
||||||
|
// Si on ne trouve pas le contact, on ne fais rien
|
||||||
|
if( associatedContact === false )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
|
||||||
|
// {2} Création physique //
|
||||||
this.container.innerHTML += miniFicheBuilder.build({
|
this.container.innerHTML += miniFicheBuilder.build({
|
||||||
firstname: objectData.firstname,
|
firstname: associatedContact.firstname,
|
||||||
lastname: objectData.lastname,
|
lastname: associatedContact.lastname,
|
||||||
username: objectData.username,
|
username: (associatedContact.username.length==0) ? '' : '('+associatedContact.username+')',
|
||||||
|
countcall: associatedContact.countcall,
|
||||||
|
countsms: associatedContact.countsms,
|
||||||
uid: objectData.uid,
|
uid: objectData.uid,
|
||||||
age: objectData.age,
|
reltypespecial: objectData.reltypeSpecial
|
||||||
job: objectData.job
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
/* (2) On sélectionne la valeur dans le select (manuellement) de la PROFESSION */
|
/* {3} On sélectionne la valeur dans le select (manuellement) de la PROFESSION */
|
||||||
var selectedOption = $('article.mini-fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="job"]>option[value="'+objectData.job+'"]');
|
var selectedOption = $('article.mini-fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="studies"]>option[value="'+objectData.studies+'"]');
|
||||||
if( selectedOption != null )
|
if( selectedOption != null )
|
||||||
selectedOption.setAttribute('selected', 'selected');
|
selectedOption.setAttribute('selected', 'selected');
|
||||||
|
|
||||||
/* (3) On sélectionna la valeur des boutons <radio> pour le SEXE */
|
/* {4} On sélectionne la valeur dans le select (manuellement) de l'AGE */
|
||||||
|
selectedOption = $('article.mini-fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="age"]>option[value="'+objectData.age+'"]');
|
||||||
|
if( selectedOption != null )
|
||||||
|
selectedOption.setAttribute('selected', 'selected');
|
||||||
|
|
||||||
|
/* {5} On sélectionna la valeur des boutons <radio> pour le SEXE */
|
||||||
var sexeCreated = $$('article.mini-fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]');
|
var sexeCreated = $$('article.mini-fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]');
|
||||||
for( var i = 0 ; i < sexeCreated.length && i < objectData.sexe.length ; i++ )
|
for( var i = 0 ; i < sexeCreated.length && i < objectData.sexe.length ; i++ )
|
||||||
if( objectData.sexe[i].status ) sexeCreated[i].setAttribute('checked', 'checked');
|
if( objectData.sexe[i].status ) sexeCreated[i].setAttribute('checked', 'checked');
|
||||||
else sexeCreated[i].removeAttribute('checked');
|
else sexeCreated[i].removeAttribute('checked');
|
||||||
|
|
||||||
/* (4) On sélectionna la valeur des boutons <radio> pour la LOCATION */
|
/* {6} On sélectionna la valeur des boutons <radio> pour le TYPE DE RELATION */
|
||||||
|
var reltypeCreated = $$('article.mini-fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="reltype"]');
|
||||||
|
for( var i = 0 ; i < reltypeCreated.length && i < objectData.reltype.length ; i++ )
|
||||||
|
if( objectData.reltype[i].status ) reltypeCreated[i].setAttribute('checked', 'checked');
|
||||||
|
else reltypeCreated[i].removeAttribute('checked');
|
||||||
|
|
||||||
|
/* {7} On sélectionna la valeur des boutons <radio> pour la LOCATION */
|
||||||
var locCreated = $$('article.mini-fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="loc"]');
|
var locCreated = $$('article.mini-fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="loc"]');
|
||||||
for( var i = 0 ; i < locCreated.length && i < objectData.loc.length ; i++ )
|
for( var i = 0 ; i < locCreated.length && i < objectData.loc.length ; i++ )
|
||||||
if( objectData.loc[i].status ) locCreated[i].setAttribute('checked', 'checked');
|
if( objectData.loc[i].status ) locCreated[i].setAttribute('checked', 'checked');
|
||||||
|
@ -152,13 +188,13 @@ inputPhoneMini.prototype.storageToFields = function(){
|
||||||
console.log('MINI FICHE: STORAGE TO FIELDS');
|
console.log('MINI FICHE: STORAGE TO FIELDS');
|
||||||
|
|
||||||
// {1} Pour chaque contact du 'localStorage' //
|
// {1} Pour chaque contact du 'localStorage' //
|
||||||
var miniData = lsi.export('mini-fiches');
|
var miniData = lsi.get('mini-fiches', this.selected);
|
||||||
|
|
||||||
// On réinitialise le HTML
|
// On réinitialise le HTML
|
||||||
this.container.innerHTML = '';
|
this.container.innerHTML = '';
|
||||||
|
|
||||||
// {2} On affiche la MINI fiche sélectionnée //
|
// {2} On affiche la MINI fiche sélectionnée //
|
||||||
this.add(miniData['form'+this.selected]);
|
this.add(miniData);
|
||||||
|
|
||||||
// {3} On met à jour la navigation //
|
// {3} On met à jour la navigation //
|
||||||
this.updateNavBar();
|
this.updateNavBar();
|
||||||
|
@ -198,9 +234,6 @@ inputPhoneMini.prototype.sync = function(){
|
||||||
|
|
||||||
/* (5) On met à jour la MINI fiche */
|
/* (5) On met à jour la MINI fiche */
|
||||||
miniData.uid = contactData[key].uid;
|
miniData.uid = contactData[key].uid;
|
||||||
miniData.firstname = contactData[key].firstname;
|
|
||||||
miniData.lastname = contactData[key].lastname;
|
|
||||||
miniData.username = contactData[key].username;
|
|
||||||
|
|
||||||
|
|
||||||
/* (6) On enregistre les modification */
|
/* (6) On enregistre les modification */
|
||||||
|
@ -220,10 +253,10 @@ inputPhoneMini.prototype.sync = function(){
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
inputPhoneMini.prototype.nav = function(element){
|
inputPhoneMini.prototype.nav = function(element){
|
||||||
/* (1) On vérifie que l'élément contient un nombre et existe */
|
/* (1) On vérifie que l'élément contient un nombre et existe */
|
||||||
if( typeof element == 'undefined' )
|
if( element == null )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if( isNaN(element.innerHTML) )
|
if( element.getData('n') === false || isNaN(element.getData('n')) || element.parentNode.id != 'nav-mini' )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* (2) On désactive tous les éléments actifs */
|
/* (2) On désactive tous les éléments actifs */
|
||||||
|
@ -233,7 +266,7 @@ inputPhoneMini.prototype.nav = function(element){
|
||||||
|
|
||||||
/* (3) On active l'élément courant */
|
/* (3) On active l'élément courant */
|
||||||
element.addClass('active');
|
element.addClass('active');
|
||||||
this.selected = parseInt(element.innerHTML) - 1;
|
this.selected = parseInt(element.getData('n'));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -248,24 +281,30 @@ inputPhoneMini.prototype.updateNavBar = function(){
|
||||||
var miniData = lsi.export('mini-fiches');
|
var miniData = lsi.export('mini-fiches');
|
||||||
var len = Object.keys(miniData).length;
|
var len = Object.keys(miniData).length;
|
||||||
|
|
||||||
/* (1) On vérifie si la barre de navigation est à jour */
|
|
||||||
var navBarUpToDate = this.nav_container.children.length == len;
|
|
||||||
|
|
||||||
/* (1) On vide et remplit la barre de nav, si elle n'est pas à jour */
|
/* (1) On vérifie si la barre de navigation est à jour */
|
||||||
|
var navBarUpToDate = $$('#nav-mini [data-n]').length == len;
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) On vide et remplit la barre de nav, si elle n'est pas à jour */
|
||||||
if( !navBarUpToDate ){
|
if( !navBarUpToDate ){
|
||||||
this.nav_container.innerHTML = '';
|
this.nav_container.innerHTML = '';
|
||||||
|
|
||||||
for( var i = 0 ; i < len ; i++ )
|
for( var i = 0 ; i < len ; i++ )
|
||||||
this.nav_container.innerHTML += '<span></span>';
|
this.nav_container.innerHTML += '<span data-n="'+i+'">'+(i+1)+'</span>';
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (3) On montre les MINI fiches qui sont correctes dans la navbar */
|
/* (3) On montre les MINI fiches qui sont correctes dans la navbar */
|
||||||
var miniData = lsi.export('mini-fiches');
|
|
||||||
for( var key in miniData ){
|
for( var key in miniData ){
|
||||||
|
|
||||||
var currentElement = this.nav_container.children[miniData[key].uid];
|
var currentElement = $('#nav-mini [data-n="'+miniData[key].uid+'"]');
|
||||||
|
|
||||||
currentElement.innerHTML = miniData[key].uid+1;
|
if( currentElement == null )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// On remplit avec le numéro de la MINI fiche
|
||||||
|
// currentElement.setAttribute('data-n', miniData[key].uid);
|
||||||
|
// currentElement.innerHTML = miniData[key].uid + 1;
|
||||||
|
|
||||||
// Si la MINI fiche est valide
|
// Si la MINI fiche est valide
|
||||||
if( miniData[key].valid === true ) currentElement.addClass('done');
|
if( miniData[key].valid === true ) currentElement.addClass('done');
|
||||||
|
@ -277,7 +316,7 @@ inputPhoneMini.prototype.updateNavBar = function(){
|
||||||
|
|
||||||
|
|
||||||
/* (4) On séléctionne par défaut la dernière MINI fiche sélectionnée */
|
/* (4) On séléctionne par défaut la dernière MINI fiche sélectionnée */
|
||||||
this.nav( this.nav_container.children[this.selected] );
|
this.nav( $('#nav-mini [data-n="'+this.selected+'"]') );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -287,18 +326,24 @@ inputPhoneMini.prototype.updateNavBar = function(){
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
inputPhoneMini.prototype.check = function(miniData){
|
inputPhoneMini.prototype.check = function(miniData){
|
||||||
|
|
||||||
// 1. L'age est un nombre
|
// 1. Le sexe est défini
|
||||||
if( isNaN(parseInt(miniData.age)) )
|
|
||||||
return false;
|
|
||||||
// 2. Le sexe est défini
|
|
||||||
if( !checkRadioValue(miniData.sexe) )
|
if( !checkRadioValue(miniData.sexe) )
|
||||||
return false;
|
return false;
|
||||||
// 3. Le métier est défini
|
// 2. Le métier est défini
|
||||||
if( miniData.job == '.' )
|
if( miniData.studies == '.' )
|
||||||
|
return false;
|
||||||
|
// 3. L'age est définie
|
||||||
|
if( miniData.age == '.' )
|
||||||
return false;
|
return false;
|
||||||
// 4. La distance de localisation est définie
|
// 4. La distance de localisation est définie
|
||||||
if( !checkRadioValue(miniData.loc) )
|
if( !checkRadioValue(miniData.loc) )
|
||||||
return false;
|
return false;
|
||||||
|
// 5. Le TYPE DE RELATION a un et un seul choix
|
||||||
|
if( !checkRadioValue(miniData.reltype) )
|
||||||
|
return false;
|
||||||
|
// 6. TYPE DE RELATION si autre est coché (indice 8), reltypeSpecial doit avoir au moins 2 caractère
|
||||||
|
if( miniData.reltype[8].status && miniData.reltypeSpecial.length < 2 )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
|
||||||
// Si aucune erreur, tout est ok
|
// Si aucune erreur, tout est ok
|
||||||
|
@ -323,9 +368,8 @@ inputPhoneMini.prototype.attach = function(handler){
|
||||||
/* (3) On attache la barre de navigation à une fonction */
|
/* (3) On attache la barre de navigation à une fonction */
|
||||||
// On enregistre le handler
|
// On enregistre le handler
|
||||||
this.handler = handler;
|
this.handler = handler;
|
||||||
var ptr = this;
|
|
||||||
|
|
||||||
/* (2) On attache l'évènement sur le bouton d'ajout de contact */
|
/* (2) On attache l'évènement sur le conteneur de navigation */
|
||||||
var ptr = this;
|
var ptr = this;
|
||||||
this.nav_container.addEventListener('click', function(e){
|
this.nav_container.addEventListener('click', function(e){
|
||||||
// 1. On gère la navigation
|
// 1. On gère la navigation
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
function inputPhoneSubject(a,b,c,d,e){this.number=a;this.username=b;this.firstname=c;this.lastname=d;this.store_button=e}inputPhoneSubject.prototype={store_button:this.store_button,number:this.number,username:this.username,firstname:this.firstname,lastname:this.lastname};
|
function inputPhoneSubject(a,b,c,d,e){this.number=a;this.username=b;this.firstname=c;this.lastname=d;this.store_button=e}inputPhoneSubject.prototype={store_button:this.store_button,number:this.number,username:this.username,firstname:this.firstname,lastname:this.lastname};
|
||||||
inputPhoneSubject.prototype.fieldsToStorage=function(){console.log("SUBJECT: FIELDS TO STORAGE");var a=0<this.number.value.length,a=a&&0<this.username.value.length+this.firstname.value.length+this.lastname.value.length;if(!a)return!1;lsi.set("subject","form",{number:this.number.value,username:this.username.value,firstname:this.firstname.value,lastname:this.lastname.value})};
|
inputPhoneSubject.prototype.fieldsToStorage=function(){console.log("SUBJECT: FIELDS TO STORAGE");var a=0<this.number.value.length,a=a&&0<this.username.value.length+this.firstname.value.length+this.lastname.value.length;if(!a)return!1;lsi.set("subject",0,{number:this.number.value,username:this.username.value,firstname:this.firstname.value,lastname:this.lastname.value})};
|
||||||
inputPhoneSubject.prototype.storageToFields=function(){console.log("SUBJECT: STORAGE TO FIELDS");var a=lsi.get("subject","form");null!=a&&(this.number.value=a.number,this.username.value=a.username,this.firstname.value=a.firstname,this.lastname.value=a.lastname)};inputPhoneSubject.prototype.attach=function(){console.log("SUBJECT: ATTACH");lsi.createDataset("subject");var a=this;this.store_button.addEventListener("click",function(b){a.fieldsToStorage()},!1);this.storageToFields()};
|
inputPhoneSubject.prototype.storageToFields=function(){console.log("SUBJECT: STORAGE TO FIELDS");var a=lsi.get("subject",0);null==a&&(a={number:"",username:"",firstname:"",lastname:""});this.number.value=a.number;this.username.value=a.username;this.firstname.value=a.firstname;this.lastname.value=a.lastname};
|
||||||
|
inputPhoneSubject.prototype.attach=function(){console.log("SUBJECT: ATTACH");lsi.createDataset("subject");var a=this;this.store_button.addEventListener("click",function(b){a.fieldsToStorage()},!1);this.storageToFields()};
|
||||||
|
|
|
@ -43,7 +43,7 @@ inputPhoneSubject.prototype.fieldsToStorage = function(){
|
||||||
};
|
};
|
||||||
|
|
||||||
// {3} On enregistre les données dans le 'localStorage' //
|
// {3} On enregistre les données dans le 'localStorage' //
|
||||||
lsi.set('subject', 'form', obj);
|
lsi.set('subject', 0, obj);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -58,9 +58,10 @@ inputPhoneSubject.prototype.storageToFields = function(){
|
||||||
console.log('SUBJECT: STORAGE TO FIELDS');
|
console.log('SUBJECT: STORAGE TO FIELDS');
|
||||||
|
|
||||||
// {1} On récupère les informations du sujet //
|
// {1} On récupère les informations du sujet //
|
||||||
var subjectData = lsi.get('subject', 'form');
|
var subjectData = lsi.get('subject', 0);
|
||||||
|
|
||||||
if( subjectData == null ) return;
|
if( subjectData == null )
|
||||||
|
subjectData = { number: '', username: '', firstname: '', lastname: '' };
|
||||||
|
|
||||||
// {2} On restore les valeurs //
|
// {2} On restore les valeurs //
|
||||||
this.number.value = subjectData.number;
|
this.number.value = subjectData.number;
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
function APIClass(b){this.target=b}
|
function APIClass(b){this.target=b}
|
||||||
APIClass.prototype={xhr:[],send:function(b,c,f){b.hasOwnProperty("path")||c({ModuleError:4});for(var a=0;a<this.xhr.length;a++)4==this.xhr[a].readyState&&(this.xhr=this.xhr.slice(0,a-1).concat(this.xhr.slice(a,this.xhr.length-1)));this.xhr.push(null);a=this.xhr.length-1;this.xhr[a]=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHttpRequest");console.log(b);var d=this;this.xhr[a].onreadystatechange=function(){if(4==d.xhr[a].readyState)if(-1<[0,200].indexOf(d.xhr[a].status))try{c(JSON.parse(d.xhr[a].responseText))}catch(b){c({ModuleError:1})}else c({ModuleError:3})};
|
APIClass.prototype={xhr:[],send:function(b,d,g){b.hasOwnProperty("path")||d({ModuleError:4});for(var a=0;a<this.xhr.length;a++)4==this.xhr[a].readyState&&(this.xhr=this.xhr.slice(0,a-1).concat(this.xhr.slice(a,this.xhr.length-1)));this.xhr.push(null);a=this.xhr.length-1;this.xhr[a]=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHttpRequest");console.log(b);var f=this;this.xhr[a].onreadystatechange=function(){if(4==f.xhr[a].readyState)if(-1<[0,200].indexOf(f.xhr[a].status))try{d(JSON.parse(f.xhr[a].responseText))}catch(b){d({ModuleError:-1,
|
||||||
var g=new FormData,e;for(e in b)g.append(e,b[e]);this.xhr[a].open("POST",this.target,!0);null!=f&&this.xhr[a].setRequestHeader("Authorization","Digest "+f);this.xhr[a].send(g)}};
|
ErrorDescription:"Erreur au niveau de api.js"})}else d({ModuleError:3})};var e=new FormData,c;for(c in b)"path"==c?e.append(c,b[c]):b[c]instanceof File?e.append(c,b[c]):e.append(c,JSON.stringify(b[c]));this.xhr[a].open("POST",this.target,!0);null!=g&&this.xhr[a].setRequestHeader("Authorization","Digest "+g);this.xhr[a].send(e)}};
|
||||||
|
|
|
@ -61,7 +61,7 @@ APIClass.prototype = {
|
||||||
/* si success de requête */
|
/* si success de requête */
|
||||||
if( [0,200].indexOf(ptrAPI.xhr[i].status) > -1 ){ // si fichier existe et reçu
|
if( [0,200].indexOf(ptrAPI.xhr[i].status) > -1 ){ // si fichier existe et reçu
|
||||||
try{ pHandler( JSON.parse(ptrAPI.xhr[i].responseText) ); } // si on peut parser, on envoie
|
try{ pHandler( JSON.parse(ptrAPI.xhr[i].responseText) ); } // si on peut parser, on envoie
|
||||||
catch(e){ pHandler({ModuleError:1}); } // sinon on envoie obj.request = 'corrupted'
|
catch(e){ pHandler({ModuleError:-1, ErrorDescription:'Erreur au niveau de api.js'}); } // sinon on envoie obj.request = 'corrupted'
|
||||||
}
|
}
|
||||||
/* sinon retourne obj.request = 'unreachable' */
|
/* sinon retourne obj.request = 'unreachable' */
|
||||||
else
|
else
|
||||||
|
@ -75,8 +75,12 @@ APIClass.prototype = {
|
||||||
|
|
||||||
// On ajoute tous les attributs en POST
|
// On ajoute tous les attributs en POST
|
||||||
for( var key in pRequest )
|
for( var key in pRequest )
|
||||||
form.append(key, pRequest[key]);
|
// On envoie le 'path' tel quel <String>
|
||||||
|
if( key == 'path' ) form.append(key, pRequest[key]);
|
||||||
|
// On envoie un fichier tel quel <File>
|
||||||
|
else if( pRequest[key] instanceof File ) form.append(key, pRequest[key]);
|
||||||
|
// On envoie le reste en JSON
|
||||||
|
else form.append(key, JSON.stringify(pRequest[key]));
|
||||||
|
|
||||||
|
|
||||||
this.xhr[i].open('POST', this.target, true);
|
this.xhr[i].open('POST', this.target, true);
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
function localStorageInterface(){}
|
function localStorageInterface(){}
|
||||||
localStorageInterface.prototype={dataset:[],dataset_keys:[],set:function(a,b,d){var c=this.dataset.indexOf(a);if(-1==c)return!1;-1==this.dataset_keys[c].indexOf(b)&&(this.dataset_keys[c].push(b),localStorage.setItem(a,JSON.stringify(this.dataset_keys[c])));localStorage.setItem(a+"_"+b,JSON.stringify(d));return!0},get:function(a,b){return-1==this.dataset.indexOf(a)?!1:JSON.parse(localStorage.getItem(a+"_"+b))},createDataset:function(a){if(null==a||"string"!=typeof a)return!1;if(-1<this.dataset.indexOf(a))return!0;
|
localStorageInterface.prototype={dataset:[],dataset_keys:[],set:function(a,b,d){b=b.toString();var c=this.dataset.indexOf(a);if(-1==c)return!1;-1==this.dataset_keys[c].indexOf(b)&&(this.dataset_keys[c].push(b),localStorage.setItem(a,JSON.stringify(this.dataset_keys[c])));localStorage.setItem(a+"_"+b,JSON.stringify(d));return!0},get:function(a,b){b=b.toString();return-1==this.dataset.indexOf(a)?!1:JSON.parse(localStorage.getItem(a+"_"+b))},del:function(a,b){b=b.toString();var d=this.dataset.indexOf(a);
|
||||||
var b=localStorage.getItem(a);null!=b?(this.dataset.push(a),this.dataset_keys.push(JSON.parse(b))):(this.dataset.push(a),this.dataset_keys.push([]),localStorage.setItem(a,JSON.stringify([])));return!0},keys:function(a){a=this.dataset.indexOf(a);return-1==a?!1:this.dataset_keys[a]},"export":function(a){var b=this.dataset.indexOf(a);if(-1==b)return!1;for(var d={},c=0;c<this.dataset_keys[b].length;c++)d[this.dataset_keys[b][c]]=this.get(a,this.dataset_keys[b][c]);return d}};var lsi=new localStorageInterface;
|
if(-1==d)return!1;var c=this.dataset_keys[d].indexOf(b);if(-1==c)return!1;localStorage.removeItem(a+"_"+b);this.dataset_keys[d].splice(c,1);localStorage.setItem(a,JSON.stringify(this.dataset_keys[d]));return!0},createDataset:function(a){if("string"!=typeof a)return!1;if(-1<this.dataset.indexOf(a))return!0;var b=localStorage.getItem(a);null!=b?(this.dataset.push(a),this.dataset_keys.push(JSON.parse(b))):(this.dataset.push(a),this.dataset_keys.push([]),localStorage.setItem(a,JSON.stringify([])));return!0},
|
||||||
|
keys:function(a){a=this.dataset.indexOf(a);return-1==a?!1:this.dataset_keys[a]},"export":function(a){var b=this.dataset.indexOf(a);if(-1==b)return!1;for(var d={},c=0;c<this.dataset_keys[b].length;c++)d[this.dataset_keys[b][c]]=this.get(a,this.dataset_keys[b][c]);return d},"import":function(a,b){-1==this.dataset.indexOf(a)?this.createDataset(a):this.clear(a);for(var d in b)this.set(a,d,b[d]);return!0},clear:function(a){var b=this.dataset.indexOf(a);if(-1==b)return!1;var d=this["export"](a),c;for(c in d)this.del(a,
|
||||||
|
c);this.dataset_keys[b]=[];localStorage.setItem(a,JSON.stringify(this.dataset_keys[b]));return!0}};var lsi=new localStorageInterface;
|
||||||
|
|
|
@ -16,9 +16,11 @@ localStorageInterface.prototype = {
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
set: function(dataset_name, key, value){
|
set: function(dataset_name, key, value){
|
||||||
var index = this.dataset.indexOf(dataset_name);
|
// On met la clé en <String>
|
||||||
|
key = key.toString();
|
||||||
|
|
||||||
/* (1) Si le 'dataset' n'existe pas */
|
/* (1) Si le 'dataset' n'existe pas */
|
||||||
|
var index = this.dataset.indexOf(dataset_name);
|
||||||
if( index == -1 ) return false; // erreur
|
if( index == -1 ) return false; // erreur
|
||||||
|
|
||||||
/* (2) On enregistre la nouvelle clé, si elle est nouvelle */
|
/* (2) On enregistre la nouvelle clé, si elle est nouvelle */
|
||||||
|
@ -42,6 +44,9 @@ localStorageInterface.prototype = {
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
get: function(dataset_name, key){
|
get: function(dataset_name, key){
|
||||||
|
// On met la clé en <String>
|
||||||
|
key = key.toString();
|
||||||
|
|
||||||
/* (1) Si le 'dataset' n'existe pas */
|
/* (1) Si le 'dataset' n'existe pas */
|
||||||
if( this.dataset.indexOf(dataset_name) == -1 ) return false; // erreur
|
if( this.dataset.indexOf(dataset_name) == -1 ) return false; // erreur
|
||||||
|
|
||||||
|
@ -49,6 +54,39 @@ localStorageInterface.prototype = {
|
||||||
return JSON.parse( localStorage.getItem(dataset_name+'_'+key) );
|
return JSON.parse( localStorage.getItem(dataset_name+'_'+key) );
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/* SUPPRIME UN ELEMENT D'UN DATASET DONNE
|
||||||
|
*
|
||||||
|
* @dataset<String> Nom du dataset en question
|
||||||
|
* @key<String> Clé de l'élément
|
||||||
|
*
|
||||||
|
* @return status<boolean> Retourne FALSE si erreur
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
del: function(dataset, key){
|
||||||
|
// On met la clé en <String>
|
||||||
|
key = key.toString();
|
||||||
|
|
||||||
|
/* (1) Si le 'dataset' n'existe pas */
|
||||||
|
var index = this.dataset.indexOf(dataset);
|
||||||
|
if( index == -1 ) return false; // erreur
|
||||||
|
|
||||||
|
/* (2) On récupère la clé dans la liste des clés */
|
||||||
|
var keyIndex = this.dataset_keys[index].indexOf(key);
|
||||||
|
if( keyIndex == -1 ) return false; // erreur si la clé n'est pas référencée
|
||||||
|
|
||||||
|
/* (3) On supprime dans le 'localStorage' */
|
||||||
|
localStorage.removeItem(dataset+'_'+key);
|
||||||
|
|
||||||
|
/* (4) On supprime la clé dans la liste des clés */
|
||||||
|
this.dataset_keys[index].splice(keyIndex, 1);
|
||||||
|
|
||||||
|
/* (5) On met à jour dans le 'localStorage' */
|
||||||
|
localStorage.setItem(dataset, JSON.stringify(this.dataset_keys[index]));
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
/* CREATION D'UN DATASET OU RECUPERATION DES DONNEES S'IL EXISTE DEJA
|
/* CREATION D'UN DATASET OU RECUPERATION DES DONNEES S'IL EXISTE DEJA
|
||||||
*
|
*
|
||||||
|
@ -59,11 +97,12 @@ localStorageInterface.prototype = {
|
||||||
*/
|
*/
|
||||||
createDataset: function(name){
|
createDataset: function(name){
|
||||||
/* (1) On vérifie que le @name est correct */
|
/* (1) On vérifie que le @name est correct */
|
||||||
if( name == null || typeof name != 'string' ) return false; // erreur
|
if( typeof name != 'string' ) return false; // erreur
|
||||||
|
|
||||||
|
|
||||||
/* (2) Si le dataset est déjà enregistré, on ne fais rien */
|
/* (2) Si le dataset est déjà enregistré, on ne fais rien */
|
||||||
if( this.dataset.indexOf(name) > -1 ) return true;
|
var datasetIndex = this.dataset.indexOf(name);
|
||||||
|
if( datasetIndex > -1 ) return true;
|
||||||
|
|
||||||
/* (3) On charge le dataset s'il existe */
|
/* (3) On charge le dataset s'il existe */
|
||||||
var storedDataset = localStorage.getItem(name);
|
var storedDataset = localStorage.getItem(name);
|
||||||
|
@ -72,7 +111,7 @@ localStorageInterface.prototype = {
|
||||||
this.dataset.push(name);
|
this.dataset.push(name);
|
||||||
this.dataset_keys.push( JSON.parse(storedDataset) );
|
this.dataset_keys.push( JSON.parse(storedDataset) );
|
||||||
|
|
||||||
/* (4) Sinon, on le crée 'dataset' */
|
/* (4) Sinon, on crée le 'dataset' */
|
||||||
}else{
|
}else{
|
||||||
|
|
||||||
this.dataset.push(name);
|
this.dataset.push(name);
|
||||||
|
@ -84,9 +123,17 @@ localStorageInterface.prototype = {
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
keys: function(dataset_name){
|
|
||||||
|
/* RENVOIE UN TABLEAU CONTENANT LES CLÉS DU DATASET
|
||||||
|
*
|
||||||
|
* @dataset<String> Le nom du dataset en question
|
||||||
|
*
|
||||||
|
* @return keys<Array> Retourne la liste des clés du dataset
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
keys: function(dataset){
|
||||||
/* (1) Si le 'dataset' n'existe pas */
|
/* (1) Si le 'dataset' n'existe pas */
|
||||||
var index = this.dataset.indexOf(dataset_name);
|
var index = this.dataset.indexOf(dataset);
|
||||||
if( index == -1 ) return false; // erreur
|
if( index == -1 ) return false; // erreur
|
||||||
|
|
||||||
/* (2) On retourne la liste des clés pour ce dataset */
|
/* (2) On retourne la liste des clés pour ce dataset */
|
||||||
|
@ -95,6 +142,13 @@ localStorageInterface.prototype = {
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/* RENVOIE UN OBJET CORRESPONDANT AUX DONNÉES D'UN DATASET
|
||||||
|
*
|
||||||
|
* @dataset<String> Nom du dataset en question
|
||||||
|
*
|
||||||
|
* @return object<Object> Object correspondant aux valeurs du dataset ({key1: value1, key2: value2})
|
||||||
|
*
|
||||||
|
*/
|
||||||
export: function(dataset){
|
export: function(dataset){
|
||||||
/* (1) Si le 'dataset' n'existe pas */
|
/* (1) Si le 'dataset' n'existe pas */
|
||||||
var index = this.dataset.indexOf(dataset);
|
var index = this.dataset.indexOf(dataset);
|
||||||
|
@ -107,6 +161,67 @@ localStorageInterface.prototype = {
|
||||||
|
|
||||||
/* (3) On retourne le résultat */
|
/* (3) On retourne le résultat */
|
||||||
return obj;
|
return obj;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/* REMPLIT UN DATASET AVEC LES DONNÉES D'UN OBJET SUR LE PRINCIPE {CLÉ: VALEUR}
|
||||||
|
*
|
||||||
|
* @dataset<String> Nom du dataset en question
|
||||||
|
* @data<Object> Objet contenant les données à mettre dan sle dataset, sur le modèle ({key1: value1, key2: value2})
|
||||||
|
*
|
||||||
|
* @return status<Boolean> Retourne TRUE si tout s'est bien passé, sinon FALSE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
import: function(dataset, data){
|
||||||
|
/* (1) On récupère l'indice du dataset s'il existe déjà */
|
||||||
|
var index = this.dataset.indexOf(dataset);
|
||||||
|
|
||||||
|
/* (2) Cas 1 : Le dataset n'existe pas -> on le crée */
|
||||||
|
if( index == -1 )
|
||||||
|
this.createDataset(dataset);
|
||||||
|
|
||||||
|
/* (3) Cas 2 : Le dataset existe -> on le vide */
|
||||||
|
else
|
||||||
|
this.clear(dataset);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) On remplit le dataset avec toutes les données de l'objet */
|
||||||
|
for( var key in data )
|
||||||
|
this.set(dataset, key, data[key]);
|
||||||
|
|
||||||
|
/* (3) On retourne le résultat */
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/* EFFACE TOUTES LES DONNÉES D'UN DATASET
|
||||||
|
*
|
||||||
|
* @dataset<String> Nom du dataset en question
|
||||||
|
*
|
||||||
|
* @return status<Boolean> Retourne TRUE si tout s'est bien passé, sinon FALSE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
clear: function(dataset){
|
||||||
|
/* (1) On récupère l'indice du dataset s'il existe déjà */
|
||||||
|
var index = this.dataset.indexOf(dataset);
|
||||||
|
|
||||||
|
// Si le dataset n'existe pas, on retourne une erreur
|
||||||
|
if( index == -1 ) return false;
|
||||||
|
|
||||||
|
/* (2) On supprime toutes les valeurs du dataset */
|
||||||
|
var content = this.export(dataset);
|
||||||
|
|
||||||
|
// On supprime toutes les valeurs
|
||||||
|
for( var key in content )
|
||||||
|
this.del(dataset, key);
|
||||||
|
|
||||||
|
/* (3) Par précaution, on supprime les clés du dataset */
|
||||||
|
this.dataset_keys[index] = [];
|
||||||
|
localStorage.setItem(dataset, JSON.stringify(this.dataset_keys[index]));
|
||||||
|
|
||||||
|
/* (4) On retourne que tout s'est bien passé */
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
function $(a){return document.querySelector(a)}function $$(a){return document.querySelectorAll(a)}Element.prototype.getData=function(a){return"undefined"==typeof this.dataset?!1:this.dataset.hasOwnProperty(a)?this.dataset[a]:!1};Element.prototype.addClass=function(a){var b=this.className.split(" ");-1<b.indexOf(a)||(b.push(a),this.className=b.join(" ").trim())};
|
function $(a){return document.querySelector(a)}function $$(a){return document.querySelectorAll(a)}Element.prototype.getData=function(a){return"undefined"==typeof this.dataset?!1:this.dataset.hasOwnProperty(a)?this.dataset[a]:!1};Element.prototype.addClass=function(a){var b=this.className.split(" ");-1<b.indexOf(a)||(b.push(a),this.className=b.join(" ").trim())};
|
||||||
Element.prototype.remClass=function(a){var b=this.className.split(" ");a=b.indexOf(a);-1!=a&&(b=b.slice(0,a).concat(b.slice(a+1)),this.className=b.join(" ").trim())};NodeList.prototype.indexOf=HTMLCollection.prototype.indexOf=function(a){for(var b=0;b<this.length;b++)if(this[b]==a)return b;return-1};Element.prototype.anim=function(a,b){var c=this;c.addClass(a);setTimeout(function(){c.remClass(a)},b)};var _includes=[],_includeTags=[];
|
Element.prototype.remClass=function(a){var b=this.className.split(" ");a=b.indexOf(a);-1!=a&&(b=b.slice(0,a).concat(b.slice(a+1)),this.className=b.join(" ").trim())};NodeList.prototype.indexOf=HTMLCollection.prototype.indexOf=function(a){for(var b=0;b<this.length;b++)if(this[b]==a)return b;return-1};Element.prototype.anim=function(a,b){var c=this;c.addClass(a);setTimeout(function(){c.remClass(a)},b)};var _includes=[],_includeTags=[];
|
||||||
function include(a,b,c){a="string"===typeof a?a:null;b="function"===typeof b?b:function(){console.log("[x] "+a+" loaded")};if(null==a)return!1;if("boolean"===typeof c&&c){b=_includes.indexOf(a);if(-1==b)return!1;document.head.removeChild(_includeTags[b]);_includes.splice(b,1);_includeTags.splice(b,1)}else{if(-1<_includes.indexOf(a))return b(),!0;c=document.createElement("script");c.type="text/javascript";c.src=a;document.head.appendChild(c);_includes.push(a);_includeTags.push(c);c.onload=b}return!0}
|
function include(a,b,c){a="string"===typeof a?a:null;b="function"===typeof b?b:function(){console.log("[x] "+a+" loaded")};if(null==a)return!1;if("boolean"===typeof c&&c){b=_includes.indexOf(a);if(-1==b)return!1;document.head.removeChild(_includeTags[b]);_includes.splice(b,1);_includeTags.splice(b,1)}else{if(-1<_includes.indexOf(a))return b(),!0;c=document.createElement("script");c.type="text/javascript";c.src=a;document.head.appendChild(c);_includes.push(a);_includeTags.push(c);c.onload=b}return!0}
|
||||||
var format_number=new formatChecker(null,"0i ii ii ii ii");
|
function diff(a,b){var c=[],d;for(d in a)null!=b[d]&&null!=a[d]&&(typeof a[d]!==typeof b[d]?c.push(d):a[d]instanceof Object&&b[d]instanceof Object?0<diff(a[d],b[d]).length&&c.push(d):a[d]!=b[d]&&c.push(d));return c}var format_number=new formatChecker(null,"0i ii ii ii ii");
|
||||||
|
|
|
@ -148,6 +148,44 @@ function include(jsResource, callback, action){ // action=true -> EXCLUSION, SIN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* RETOURNE LES CLÉS N'AYANT PAS UNE VALEUR EGALE POUR 2 OBJETS
|
||||||
|
*
|
||||||
|
* @A<Object> Premier Objet
|
||||||
|
* @B<Object> Second Objet
|
||||||
|
*
|
||||||
|
* @return diff<Array> Tableau contenant les clés des valeurs différentes (uniquement les clés communes et non NULLes)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function diff(A, B){
|
||||||
|
var dKeys = [];
|
||||||
|
|
||||||
|
for( var key in A ){
|
||||||
|
// Si A[key] ou B[key] est NULL, on ne compare pas
|
||||||
|
if( B[key] == null || A[key] == null )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
|
||||||
|
/* (1) On vérifie le type */
|
||||||
|
if( typeof A[key] !== typeof B[key] )
|
||||||
|
dKeys.push(key);
|
||||||
|
|
||||||
|
/* (2) Vérification récursive si 2 objets */
|
||||||
|
else if( A[key] instanceof Object && B[key] instanceof Object ){
|
||||||
|
// Si au moins 1 différence profonde (récursive), on ajoute la clé
|
||||||
|
if( diff(A[key], B[key]).length > 0 )
|
||||||
|
dKeys.push(key);
|
||||||
|
|
||||||
|
/* (3) Vérification superficielle (types non composés) */
|
||||||
|
}else if( A[key] != B[key] )
|
||||||
|
dKeys.push(key);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return dKeys;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* DEFINITION DES FORMATS UTILES POUR INPUT-CHECKER
|
/* DEFINITION DES FORMATS UTILES POUR INPUT-CHECKER
|
||||||
*
|
*
|
||||||
|
|
|
@ -122,7 +122,7 @@
|
||||||
for( $i = 0 ; $i < count($fetchData) ; $i++ ) // pour tout les utilisateurs
|
for( $i = 0 ; $i < count($fetchData) ; $i++ ) // pour tout les utilisateurs
|
||||||
foreach($fetchData[$i] as $col => $val){ // pour toutes les entrées
|
foreach($fetchData[$i] as $col => $val){ // pour toutes les entrées
|
||||||
|
|
||||||
if( !mb_detect_encoding($val, 'UTF-8') )
|
if( !\mb_detect_encoding($val, 'UTF-8') )
|
||||||
$fetchData[$i][$col] = utf8_encode($val);
|
$fetchData[$i][$col] = utf8_encode($val);
|
||||||
|
|
||||||
if( is_int($col) ){ // Si indice numerique
|
if( is_int($col) ){ // Si indice numerique
|
||||||
|
@ -143,7 +143,7 @@
|
||||||
// on supprime les doublons des entrées (indice numérique)
|
// on supprime les doublons des entrées (indice numérique)
|
||||||
foreach($fetchData as $i=>$val){ // pour toutes les entrées
|
foreach($fetchData as $i=>$val){ // pour toutes les entrées
|
||||||
|
|
||||||
if( !mb_detect_encoding($val, 'UTF-8') )
|
if( !\mb_detect_encoding($val, 'UTF-8') )
|
||||||
$fetchData[$i] = utf8_encode($val);
|
$fetchData[$i] = utf8_encode($val);
|
||||||
|
|
||||||
if( is_int($i) ){ // Si indice numerique
|
if( is_int($i) ){ // Si indice numerique
|
||||||
|
@ -245,13 +245,27 @@
|
||||||
case 'sha1':
|
case 'sha1':
|
||||||
return $checker && is_string($value) && preg_match('/^[\da-f]{40}$/i', $value);
|
return $checker && is_string($value) && preg_match('/^[\da-f]{40}$/i', $value);
|
||||||
break;
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
// Numéro de téléphone
|
// Numéro de téléphone
|
||||||
case 'phone_number':
|
case 'number':
|
||||||
return $checker && is_string($value) && preg_match('/^(?:0|\+33 ?|0?0?33 ?|)([1-9] ?(?:[0-9] ?){8})$/i', $value);
|
return $checker && is_string($value) && preg_match('/^(?:0|\+33 ?|0?0?33 ?|)([1-9] ?(?:[0-9] ?){8})$/i', $value);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// Tableau non vide
|
||||||
|
case 'array':
|
||||||
|
return $checker && is_array($value) && count($value) > 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Objet non vide
|
||||||
|
case 'object':
|
||||||
|
return $checker && is_object($value) && count((array) $value) > 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Chaine JSON (on vérifie via le parser)
|
||||||
|
case 'json':
|
||||||
|
return $checker && is_string($value) && json_decode($value, true) !== NULL;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -69,6 +69,12 @@
|
||||||
/* Erreur d'UPLOAD */
|
/* Erreur d'UPLOAD */
|
||||||
const UploadError = 17;
|
const UploadError = 17;
|
||||||
|
|
||||||
|
// Mauvais format de fichier
|
||||||
|
const FormatError = 18;
|
||||||
|
|
||||||
|
/* Erreur au niveau javascript */
|
||||||
|
//const JavascriptError = 19; // -> géré en js
|
||||||
|
|
||||||
|
|
||||||
/* EXPLICITE UN CODE D'ERREUR
|
/* EXPLICITE UN CODE D'ERREUR
|
||||||
*
|
*
|
||||||
|
@ -102,6 +108,7 @@
|
||||||
case self::TokenError: return "Le token de connection est absent, érroné ou expiré."; break;
|
case self::TokenError: return "Le token de connection est absent, érroné ou expiré."; break;
|
||||||
case self::PermissionError: return "Vous n'avez pas la permission d'effectuer cette action."; break;
|
case self::PermissionError: return "Vous n'avez pas la permission d'effectuer cette action."; break;
|
||||||
case self::UploadError: return "Une erreur d'upload est survenue."; break;
|
case self::UploadError: return "Une erreur d'upload est survenue."; break;
|
||||||
|
case self::FormatError: return "Le fichier n'est pas au bon format."; break;
|
||||||
|
|
||||||
// default: return "Erreur inconnue..."; break;
|
// default: return "Erreur inconnue..."; break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,10 +123,10 @@
|
||||||
|
|
||||||
/* [4] Gestion de la reponse
|
/* [4] Gestion de la reponse
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$answer = new ModuleResponse($this->error);
|
$response = new ModuleResponse($this->error);
|
||||||
$answer->appendAll($returned);
|
$response->appendAll($returned);
|
||||||
|
|
||||||
return $answer;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -192,8 +192,16 @@
|
||||||
// On retire le @path de @params
|
// On retire le @path de @params
|
||||||
unset($params['path']);
|
unset($params['path']);
|
||||||
|
|
||||||
|
/* [3] On met les paramètres JSON en JSON (si ils décodent sans erreur)
|
||||||
|
=========================================================*/
|
||||||
|
foreach($params as $name=>$value){
|
||||||
|
$json = json_decode( $value, true );
|
||||||
|
// Si aucune erreur, on affecte la valeur
|
||||||
|
if( $json != null )
|
||||||
|
$params[$name] = $json;
|
||||||
|
}
|
||||||
|
|
||||||
/* [3] On retourne une instance de <ModuleRequest>
|
/* [4] On retourne une instance de <ModuleRequest>
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
// On cree notre requete avec le token
|
// On cree notre requete avec le token
|
||||||
return new ModuleRequest($post['path'], $params, $token);
|
return new ModuleRequest($post['path'], $params, $token);
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
public static function unserialize($params){
|
public static function unserialize($params){
|
||||||
extract($params);
|
extract($params);
|
||||||
|
|
||||||
|
|
||||||
// On formatte le numéro de téléphone
|
// On formatte le numéro de téléphone
|
||||||
$phone_number = Database::formatNumber($phone_number);
|
$phone_number = Database::formatNumber($phone_number);
|
||||||
|
|
||||||
|
@ -97,15 +98,12 @@
|
||||||
array_push($phone_logs, $phone_log);
|
array_push($phone_logs, $phone_log);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* [5] On trie les contacts par nombre d'apparition
|
/* [5] On trie les contacts par nombre d'apparition d'APPEL
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
// Système de poids -> 5 sms = 1 appel
|
|
||||||
// 0 -> {number, name, calls, sms} (closest contact)
|
|
||||||
// 1 -> {number, name, calls, sms} (2nd closest contact)
|
|
||||||
$tmp = $phone_directory; // Permet de ne pas efface $phone_directory
|
$tmp = $phone_directory; // Permet de ne pas efface $phone_directory
|
||||||
$maxNumber = -1; // Contiendra le numéro du plus gros
|
$maxNumber = -1; // Contiendra le numéro du plus gros
|
||||||
$maxVal = null; // Contiendra la valeur max (sms+5*cal ls)
|
$maxVal = null; // Contiendra la valeur max (total calls)
|
||||||
$sorted_directory = array(); // Contiendra l'annuaire trié par nombre d'interraction
|
$call_sorted = array(); // Contiendra l'annuaire trié par nombre d'interraction
|
||||||
|
|
||||||
/* (1) Tant qu'on a pas tout trié */
|
/* (1) Tant qu'on a pas tout trié */
|
||||||
while( count($tmp) > 0 ){
|
while( count($tmp) > 0 ){
|
||||||
|
@ -114,22 +112,51 @@
|
||||||
|
|
||||||
/* (2) On parcours toutes les entrées puor trouver le plus proche */
|
/* (2) On parcours toutes les entrées puor trouver le plus proche */
|
||||||
foreach($tmp as $number=>$data)
|
foreach($tmp as $number=>$data)
|
||||||
if( $data['sms']+5*$data['calls'] > $maxVal || is_null($maxVal) ){
|
if( $data['calls'] > $maxVal || is_null($maxVal) ){
|
||||||
// On met à jour la valeur max
|
// On met à jour la valeur max
|
||||||
$maxVal = $data['sms']+5*$data['calls'];
|
$maxVal = $data['calls'];
|
||||||
// On met à jour l'indice
|
// On met à jour l'indice
|
||||||
$maxNumber = $number;
|
$maxNumber = $number;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (3) On supprime le plus proche qu'on a trouvé et on l'ajoute au tableau trié */
|
/* (3) On supprime le plus proche qu'on a trouvé et on l'ajoute au tableau trié */
|
||||||
array_push($sorted_directory, array(
|
array_push($call_sorted, array(
|
||||||
'number' => $maxNumber,
|
'number' => $maxNumber,
|
||||||
'name' => $tmp[$maxNumber]['name'],
|
'name' => $tmp[$maxNumber]['name'],
|
||||||
'calls' => $tmp[$maxNumber]['calls'],
|
'count' => $tmp[$maxNumber]['calls']
|
||||||
'sms' => $tmp[$maxNumber]['sms'],
|
|
||||||
'total' => $tmp[$maxNumber]['sms'] + 5*$tmp[$maxNumber]['calls']
|
|
||||||
));
|
));
|
||||||
|
|
||||||
|
unset($tmp[$maxNumber]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* [6] On trie les contacts par nombre d'apparition de SMS/MMS
|
||||||
|
=========================================================*/
|
||||||
|
$tmp = $phone_directory; // Permet de ne pas efface $phone_directory
|
||||||
|
$maxNumber = -1; // Contiendra le numéro du plus gros
|
||||||
|
$maxVal = null; // Contiendra la valeur max (total calls)
|
||||||
|
$sms_sorted = array(); // Contiendra l'annuaire trié par nombre d'interraction
|
||||||
|
|
||||||
|
/* (1) Tant qu'on a pas tout trié */
|
||||||
|
while( count($tmp) > 0 ){
|
||||||
|
$maxNumber = -1;
|
||||||
|
$maxVal = null;
|
||||||
|
|
||||||
|
/* (2) On parcours toutes les entrées puor trouver le plus proche */
|
||||||
|
foreach($tmp as $number=>$data)
|
||||||
|
if( $data['sms'] > $maxVal || is_null($maxVal) ){
|
||||||
|
// On met à jour la valeur max
|
||||||
|
$maxVal = $data['sms'];
|
||||||
|
// On met à jour l'indice
|
||||||
|
$maxNumber = $number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (3) On supprime le plus proche qu'on a trouvé et on l'ajoute au tableau trié */
|
||||||
|
array_push($sms_sorted, array(
|
||||||
|
'number' => $maxNumber,
|
||||||
|
'name' => $tmp[$maxNumber]['name'],
|
||||||
|
'count' => $tmp[$maxNumber]['sms']
|
||||||
|
));
|
||||||
|
|
||||||
unset($tmp[$maxNumber]);
|
unset($tmp[$maxNumber]);
|
||||||
}
|
}
|
||||||
|
@ -138,7 +165,9 @@
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
return array(
|
return array(
|
||||||
'ModuleError' => ManagerError::Success,
|
'ModuleError' => ManagerError::Success,
|
||||||
'directory' => $sorted_directory,
|
'directory' => $phone_directory,
|
||||||
|
'calls' => $call_sorted,
|
||||||
|
'sms' => $sms_sorted,
|
||||||
'logs' => $phone_logs
|
'logs' => $phone_logs
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class charts{
|
class chart{
|
||||||
|
|
||||||
|
|
||||||
/* RETOURNE UN JEU DE DONNEES POUR GRAPHIQUE #NETWORK
|
/* RETOURNE UN JEU DE DONNEES POUR GRAPHIQUE #NETWORK
|
|
@ -0,0 +1,68 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace manager\module;
|
||||||
|
use \manager\sessionManager;
|
||||||
|
use \manager\Database;
|
||||||
|
use \manager\ManagerError;
|
||||||
|
use \manager\ModuleRequest;
|
||||||
|
use \manager\Repo;
|
||||||
|
|
||||||
|
class input{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* TRAITE LES DONNÉES D'UN FORMULAIRE DE TYPE TÉLÉPHONIQUE
|
||||||
|
*
|
||||||
|
* @subject<Array> Tableau contenant les données du sujet
|
||||||
|
* @contacts<Array> Tableau contenant les données des contacts
|
||||||
|
* @mini<Array> Tableau contenant les données des mini fiches relation
|
||||||
|
* @fiches<Array> Tableau contenant les données des fiches relation
|
||||||
|
*
|
||||||
|
* @return subject_id<int> Retourne l'id sujet de l'enquête
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function phone($params){
|
||||||
|
extract($params);
|
||||||
|
|
||||||
|
|
||||||
|
/* [1] On crée le sujet de l'enquête
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) On rédige la requête */
|
||||||
|
$create_subject_request = new ModuleRequest('subject/create', array(
|
||||||
|
'username' => $subject['username'],
|
||||||
|
'firstname' => $subject['firstname'],
|
||||||
|
'lastname' => $subject['lastname'],
|
||||||
|
'number' => $subject['number']
|
||||||
|
));
|
||||||
|
|
||||||
|
/* (2) On exécute la requête (création) */
|
||||||
|
$create_subject_response = $create_subject_request->dispatch();
|
||||||
|
|
||||||
|
/* (3) Gestion de l'erreur, si erreur de création */
|
||||||
|
if( $create_subject_response->error != ManagerError::Success )
|
||||||
|
return array( 'ModuleError' => $create_subject_response->error );
|
||||||
|
|
||||||
|
/* (4) On récupère l'id du sujet */
|
||||||
|
$subject_id = $create_subject_response->get('id_subject');
|
||||||
|
|
||||||
|
|
||||||
|
/* [2] Pour chaque contact, on crée le sujet + les relations
|
||||||
|
=========================================================*/
|
||||||
|
// TODO : Here !!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [2] Gestion du retour
|
||||||
|
=========================================================*/
|
||||||
|
return array(
|
||||||
|
'ModuleError' => ManagerError::Success,
|
||||||
|
'subject_id' => $subject_id
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
?>
|
|
@ -2,9 +2,13 @@
|
||||||
|
|
||||||
namespace manager\module;
|
namespace manager\module;
|
||||||
use \manager\ManagerError;
|
use \manager\ManagerError;
|
||||||
|
use \manager\ResourceDispatcher;
|
||||||
|
|
||||||
class module{
|
class module{
|
||||||
|
|
||||||
|
/* PERMET DE TESTER L'API
|
||||||
|
*
|
||||||
|
*/
|
||||||
public static function method(){
|
public static function method(){
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
@ -15,6 +19,9 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* PERMET DE TESTER UNE L'ORDRE DES PARAMÈTRES
|
||||||
|
*
|
||||||
|
*/
|
||||||
public static function phpunitParams($params){
|
public static function phpunitParams($params){
|
||||||
extract($params);
|
extract($params);
|
||||||
|
|
||||||
|
@ -25,10 +32,58 @@
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* RENVOIE UNE DESCRIPTION EN MARKDOWN DES MODULES DE L'API
|
||||||
|
*
|
||||||
|
* @return markdown<String> Description des modules
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function markdown(){
|
||||||
|
/* [1] Récupération de la configuration
|
||||||
|
=========================================================*/
|
||||||
|
// On récupère le fichier et on le parse
|
||||||
|
$modules = json_decode( ResourceDispatcher::getResource('f/json/modules/conf'), true );
|
||||||
|
|
||||||
|
// Gestion de l'erreur de parsage
|
||||||
|
if( $modules == null )
|
||||||
|
return array( 'ModuleError' => ManagerError::ParsingFailed );
|
||||||
|
|
||||||
|
/* [2] Mise en forme de la liste des modules
|
||||||
|
=========================================================*/
|
||||||
|
$markdown = "## Module List<br>";
|
||||||
|
|
||||||
|
foreach($modules as $moduleName=>$moduleData)
|
||||||
|
$markdown .= "- $moduleName<br>";
|
||||||
|
|
||||||
|
/* [3] Mise en forme des méthodes des modules
|
||||||
|
=========================================================*/
|
||||||
|
$markdown .= '----<br>## Method List & Description<br>';
|
||||||
|
|
||||||
|
$count = 1;
|
||||||
|
foreach($modules as $moduleName=>$moduleData){
|
||||||
|
$markdown .= "### $count - '$moduleName' methods<br>";
|
||||||
|
|
||||||
|
foreach($moduleData as $methodName=>$methodData)
|
||||||
|
$markdown .= "`$methodName` - ".$methodData['description']."<br>";
|
||||||
|
|
||||||
|
$markdown .= '----<br>';
|
||||||
|
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [n] Gestion du retour
|
||||||
|
=========================================================*/
|
||||||
|
return array(
|
||||||
|
'ModuleError' => ManagerError::Success,
|
||||||
|
'markdown' => $markdown
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -4,33 +4,24 @@
|
||||||
use \manager\Database;
|
use \manager\Database;
|
||||||
use \manager\ResourceDispatcher;
|
use \manager\ResourceDispatcher;
|
||||||
use \manager\sessionManager;
|
use \manager\sessionManager;
|
||||||
|
use \manager\ModuleRequest;
|
||||||
use \manager\ManagerError;
|
use \manager\ManagerError;
|
||||||
use \manager\Repo;
|
use \manager\Repo;
|
||||||
|
|
||||||
class upload{
|
class upload{
|
||||||
|
|
||||||
/* EFFECTUE UN UPLOAD D'UN fichier
|
|
||||||
|
/* RENVOIE LE CHEMIN D'UN fichier
|
||||||
*
|
*
|
||||||
* @prefix<String> Préfixe (dossier parent) du fichier
|
* @prefix<String> Préfixe (dossier parent) du fichier
|
||||||
* @extension<String> Extension du fichier
|
* @extension<String> Extension du fichier
|
||||||
* @file<FILE> Pointeur vers $_FILES['']
|
|
||||||
*
|
*
|
||||||
* @return error<ManagerError> Retourne l'erreur attestant de l'état de l'upload
|
* @return response<Array> Renvoie le chemin du fichier, ainsi qu'une erreur de 'ManagerError'
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static function simpleFile($prefix, $extension, $file){
|
private static function getPath($prefix, $extension){
|
||||||
|
|
||||||
// Si on est pas connecté, on retourne une erreur -> impossible via token
|
// Si on est pas connecté, on retourne une erreur -> impossible via token
|
||||||
if( !connected() ) return ManagerError::PermissionError;
|
if( !connected() ) return array( 'error' => ManagerError::PermissionError );
|
||||||
|
|
||||||
/* [0] On formatte les entrées
|
|
||||||
=========================================================*/
|
|
||||||
$prefix = htmlspecialchars($prefix);
|
|
||||||
|
|
||||||
// Si $prefix n'est pas au bon format
|
|
||||||
if( !preg_match('/^[a-z0-9_-]+$/', $prefix) )
|
|
||||||
return ManagerError::UploadError;
|
|
||||||
|
|
||||||
|
|
||||||
/* [1] Chargement du fichier de config
|
/* [1] Chargement du fichier de config
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
|
@ -39,21 +30,21 @@
|
||||||
|
|
||||||
/* (2) Si une erreur pour le fichier de conf */
|
/* (2) Si une erreur pour le fichier de conf */
|
||||||
if( $uploadAuth === false )
|
if( $uploadAuth === false )
|
||||||
return ManagerError::UnreachableResource;
|
return array( 'error' => ManagerError::UnreachableResource );
|
||||||
|
|
||||||
/* (3) On récupère la config sous forme de tableau */
|
/* (3) On récupère la config sous forme de tableau */
|
||||||
$uploadAuth = json_decode( $uploadAuth, true );
|
$uploadAuth = json_decode( $uploadAuth, true );
|
||||||
|
|
||||||
/* (4) Si erreur de PARSAGE */
|
/* (4) Si erreur de PARSAGE */
|
||||||
if( !is_array($uploadAuth) )
|
if( !is_array($uploadAuth) )
|
||||||
return ManagerError::ParsingFailed;
|
return array( 'error' => ManagerError::ParsingFailed );
|
||||||
|
|
||||||
|
|
||||||
/* [2] Vérification du préfixe
|
/* [2] Vérification du préfixe
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
// Si le préfixe n'est pas dans la config -> erreur
|
// Si le préfixe n'est pas dans la config -> erreur
|
||||||
if( !in_array($prefix, $uploadAuth['directories']) )
|
if( !in_array($prefix, $uploadAuth['directories']) )
|
||||||
returnManagerError::UploadError;
|
return array( 'error' => ManagerError::UploadError );
|
||||||
|
|
||||||
|
|
||||||
/* [3] Construction du chemin
|
/* [3] Construction du chemin
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
|
@ -69,14 +60,62 @@
|
||||||
/* (4) On se place dans le dossier */
|
/* (4) On se place dans le dossier */
|
||||||
chdir( $path );
|
chdir( $path );
|
||||||
|
|
||||||
/* [4] Création du fichier (temporaire->permanent)
|
|
||||||
=========================================================*/
|
|
||||||
if( move_uploaded_file($file['tmp_name'], $path.$fileName) ){
|
|
||||||
// on modifie les droits du fichier
|
|
||||||
chmod($path.$fileName, 0774);
|
|
||||||
|
|
||||||
|
/* [4] Gestion du retour
|
||||||
|
=========================================================*/
|
||||||
|
return array(
|
||||||
|
'error' => ManagerError::Success,
|
||||||
|
'path' => $path.$fileName
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* EFFECTUE UN UPLOAD D'UN fichier
|
||||||
|
*
|
||||||
|
* @prefix<String> Préfixe (dossier parent) du fichier
|
||||||
|
* @extension<String> Extension du fichier
|
||||||
|
* @file<FILE> Pointeur vers $_FILES['']
|
||||||
|
* @tester<Function> Fonction qui renvoie TRUE si le format est correct (en prenant le contenu du fichier en paramètre)
|
||||||
|
*
|
||||||
|
* @return error<ManagerError> Retourne l'erreur attestant de l'état de l'upload
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static function simpleFile($prefix, $extension, $file, $tester){
|
||||||
|
/* [1] On récupère le chemin du fichier à créer et vérifie le dossier
|
||||||
|
=========================================================*/
|
||||||
|
$pathResponse = self::getPath($prefix, $extension);
|
||||||
|
|
||||||
|
// Si une erreur est intervenue, on la retourne
|
||||||
|
if( $pathResponse['error'] != ManagerError::Success )
|
||||||
|
return $pathResponse['error'];
|
||||||
|
|
||||||
|
|
||||||
|
/* [2] Vérification du format (via la fonction $tester)
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) Si $tester est une fonction, on effectue le test */
|
||||||
|
if( is_callable($tester) ){
|
||||||
|
|
||||||
|
/* (2) Sinon, on vérifie le format */
|
||||||
|
$file_content = file_get_contents($file['tmp_name']);
|
||||||
|
|
||||||
|
/* (3) On retourne 'FormatError' si erreur de format */
|
||||||
|
if( !$tester($file_content) ) return ManagerError::FormatError;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* [3] Création du fichier (temporaire->permanent)
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) On déplace le fichier avec le nom formel */
|
||||||
|
if( move_uploaded_file($file['tmp_name'], $pathResponse['path']) ){
|
||||||
|
// on modifie les droits du fichier
|
||||||
|
chmod($pathResponse['path'], 0774);
|
||||||
return ManagerError::Success;
|
return ManagerError::Success;
|
||||||
|
|
||||||
|
/* (2) Si une erreur occure -> 'UploadError' */
|
||||||
}else
|
}else
|
||||||
return ManagerError::UploadError;
|
return ManagerError::UploadError;
|
||||||
}
|
}
|
||||||
|
@ -86,6 +125,13 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* IMPORT D'UN JOURNAL D'APPEL
|
/* IMPORT D'UN JOURNAL D'APPEL
|
||||||
*
|
*
|
||||||
* @file<FILE> Pointeur vers $_FILES['']
|
* @file<FILE> Pointeur vers $_FILES['']
|
||||||
|
@ -94,8 +140,227 @@
|
||||||
public static function call_log($params){
|
public static function call_log($params){
|
||||||
extract($params);
|
extract($params);
|
||||||
|
|
||||||
|
/* [1] Gestion de l'upload du fichier et de la vérification du format
|
||||||
|
=========================================================*/
|
||||||
|
$uploadError = self::simpleFile(
|
||||||
|
'call_log', // nom du dossier d'upload
|
||||||
|
'xml', // format du fichier
|
||||||
|
$file, // Fichier lui-même
|
||||||
|
function($content){ // Vérification du format du fichier
|
||||||
|
/* (1) Vérification du format XML */
|
||||||
|
$xml = simplexml_load_string($content);
|
||||||
|
if( $xml === false ) return false; // Si erreur de parsage, on retourne une erreur
|
||||||
|
|
||||||
|
/* (2) Vérification du contenu (balises) */
|
||||||
|
// Doit avoir des Item(s)
|
||||||
|
if( !isset($xml->Item) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Vérification de tous les champs
|
||||||
|
foreach($xml->Item as $log){
|
||||||
|
$checkAttributes = isset($log['Id']);
|
||||||
|
$checkAttributes = $checkAttributes && isset($log['Number']);
|
||||||
|
$checkAttributes = $checkAttributes && isset($log['Name']);
|
||||||
|
$checkAttributes = $checkAttributes && isset($log['Date']);
|
||||||
|
$checkAttributes = $checkAttributes && isset($log['Duration']);
|
||||||
|
$checkAttributes = $checkAttributes && isset($log['Direction']);
|
||||||
|
$checkAttributes = $checkAttributes && isset($log['Type']);
|
||||||
|
|
||||||
|
// Si on a pas tout les champs, on retourne une erreur
|
||||||
|
if( !$checkAttributes )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (3) Si tout s'est bien passé, le format est bon */
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/* [2] Gestion du retour (unserialize)
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) Si erreur d'upload, on la renvoie */
|
||||||
|
if( $uploadError != ManagerError::Success )
|
||||||
|
return array( 'ModuleError' => $uploadError );
|
||||||
|
|
||||||
|
/* (2) Gestion du parsage (unserialize) du journal d'appel */
|
||||||
|
$request = new ModuleRequest('call_log/unserialize', array( 'phone_number' => $phone_number ) );
|
||||||
|
$response = $request->dispatch();
|
||||||
|
|
||||||
|
/* (3) Restitution du retour de `unserialize` */
|
||||||
|
return array_merge(
|
||||||
|
array( 'ModuleError' => $response->error ),
|
||||||
|
$response->getAll()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* IMPORT D'UNE SAUVEGARDE DE FORMULAIRE LOCAL
|
||||||
|
*
|
||||||
|
* @file<FILE> Pointeur vers $_FILES['']
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function local_data($params){
|
||||||
|
extract($params);
|
||||||
|
|
||||||
|
/* [1] Upload et vérifiaction du format du fichier
|
||||||
|
=========================================================*/
|
||||||
|
$uploadError = self::simpleFile(
|
||||||
|
'local_data', // nom du dossier d'upload
|
||||||
|
'json', // format du fichier
|
||||||
|
$file, // Fichier lui-même
|
||||||
|
function($content){ // Vérification du format du fichier
|
||||||
|
/* (1) Vérification du format JSON */
|
||||||
|
$json = json_decode($content, true);
|
||||||
|
if( $json == null )
|
||||||
|
return false; // Si erreur de parsage, on retourne une erreur
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) Vérification du contenu de premier niveau */
|
||||||
|
$checkLevel0 = isset($json['subject']) && is_array($json['subject']);
|
||||||
|
$checkLevel0 = $checkLevel0 && isset($json['contacts']) && is_array($json['contacts']);
|
||||||
|
$checkLevel0 = $checkLevel0 && isset($json['mini']) && is_array($json['mini']);
|
||||||
|
$checkLevel0 = $checkLevel0 && isset($json['fiches']) && is_array($json['fiches']);
|
||||||
|
$checkLevel0 = $checkLevel0 && isset($json['matrice']) && is_array($json['matrice']);
|
||||||
|
|
||||||
|
// Erreur si level 0 incorrect
|
||||||
|
if( !$checkLevel0 )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
|
||||||
|
/* (3) Vérification du sujet */
|
||||||
|
$checkSubject = isset($json['subject']['username']) && is_string($json['subject']['username']);
|
||||||
|
$checkSubject = $checkSubject && isset($json['subject']['firstname']) && is_string($json['subject']['firstname']);
|
||||||
|
$checkSubject = $checkSubject && isset($json['subject']['lastname']) && is_string($json['subject']['lastname']);
|
||||||
|
$checkSubject = $checkSubject && isset($json['subject']['number']) && is_string($json['subject']['number']);
|
||||||
|
|
||||||
|
// Erreur des attributs du sujet incorrects ou manquants
|
||||||
|
if( !$checkSubject )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
|
||||||
|
/* (4) Vérification des contacts */
|
||||||
|
foreach($json['contacts'] as $contact){
|
||||||
|
$checkContact = isset($contact['uid']) && is_numeric($contact['uid']);
|
||||||
|
$checkContact = $checkContact && isset($contact['username']) && is_string($contact['username']);
|
||||||
|
$checkContact = $checkContact && isset($contact['firstname']) && is_string($contact['firstname']);
|
||||||
|
$checkContact = $checkContact && isset($contact['lastname']) && is_string($contact['lastname']);
|
||||||
|
$checkContact = $checkContact && isset($contact['number']) && ( is_numeric($contact['number']) || is_string($contact['number']) );
|
||||||
|
$checkContact = $checkContact && isset($contact['sms']) && is_numeric($contact['sms']);
|
||||||
|
$checkContact = $checkContact && isset($contact['call']) && is_numeric($contact['call']);
|
||||||
|
$checkContact = $checkContact && isset($contact['countsms']) && is_numeric($contact['countsms']);
|
||||||
|
$checkContact = $checkContact && isset($contact['countcall']) && is_numeric($contact['countcall']);
|
||||||
|
|
||||||
|
// Si erreur des attributs du contact incorrects ou manquants
|
||||||
|
if( !$checkContact )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* (5) Vérification des mini-fiches */
|
||||||
|
foreach($json['mini'] as $mini){
|
||||||
|
$checkMini = isset($mini['uid']) && is_numeric($mini['uid']);
|
||||||
|
$checkMini = $checkMini && isset($mini['sexe']) && is_array($mini['sexe']);
|
||||||
|
$checkMini = $checkMini && isset($mini['age']) && is_string($mini['age']);
|
||||||
|
$checkMini = $checkMini && isset($mini['studies']) && is_string($mini['studies']);
|
||||||
|
$checkMini = $checkMini && isset($mini['loc']) && is_array($mini['loc']);
|
||||||
|
|
||||||
|
// Si erreur des attributs des mini-fiches incorrects ou manquants
|
||||||
|
if( !$checkMini )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* (6) Vérification des fiches */
|
||||||
|
foreach($json['fiches'] as $fiches){
|
||||||
|
$checkFiche = isset($fiches['uid']) && is_numeric($fiches['uid']);
|
||||||
|
$checkFiche = $checkFiche && isset($fiches['contact']) && is_numeric($fiches['contact']);
|
||||||
|
$checkFiche = $checkFiche && isset($fiches['sexe']) && is_array($fiches['sexe']);
|
||||||
|
$checkFiche = $checkFiche && isset($fiches['age']) && is_string($fiches['age']);
|
||||||
|
$checkFiche = $checkFiche && isset($fiches['job']) && is_string($fiches['job']);
|
||||||
|
$checkFiche = $checkFiche && isset($fiches['loc']) && is_array($fiches['loc']);
|
||||||
|
$checkFiche = $checkFiche && isset($fiches['studies']) && is_string($fiches['studies']);
|
||||||
|
$checkFiche = $checkFiche && isset($fiches['famsit']) && is_array($fiches['famsit']);
|
||||||
|
$checkFiche = $checkFiche && isset($fiches['reltype']) && is_array($fiches['reltype']);
|
||||||
|
$checkFiche = $checkFiche && isset($fiches['reltypeSpecial']) && is_string($fiches['reltypeSpecial']);
|
||||||
|
$checkFiche = $checkFiche && isset($fiches['city']) && is_string($fiches['city']);
|
||||||
|
$checkFiche = $checkFiche && isset($fiches['duration']) && is_array($fiches['duration']);
|
||||||
|
$checkFiche = $checkFiche && isset($fiches['context']) && is_array($fiches['context']);
|
||||||
|
$checkFiche = $checkFiche && isset($fiches['contextSpecial']) && is_array($fiches['contextSpecial']);
|
||||||
|
$checkFiche = $checkFiche && isset($fiches['freq']) && is_array($fiches['freq']);
|
||||||
|
$checkFiche = $checkFiche && isset($fiches['connect']) && is_array($fiches['connect']);
|
||||||
|
$checkFiche = $checkFiche && isset($fiches['connectSpecial']) && is_array($fiches['connectSpecial']);
|
||||||
|
|
||||||
|
// Si erreur des attributs des fiches incorrects ou manquants
|
||||||
|
if( !$checkFiche )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* (7) Vérification de la matrice */
|
||||||
|
foreach($json['matrice'] as $idA=>$Bs){
|
||||||
|
$checkMatrice = is_numeric($idA);
|
||||||
|
|
||||||
|
if( !is_array($Bs) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Pour chaque relation entre le sujet d'id @idA et le sujet d'id $B
|
||||||
|
foreach($Bs as $B)
|
||||||
|
$checkMatrice = $checkMatrice && is_numeric($B);
|
||||||
|
|
||||||
|
if( !$checkMatrice )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/* [2] Renvoi du contenu du fichier
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) Si erreur d'upload, on la renvoie */
|
||||||
|
if( $uploadError != ManagerError::Success )
|
||||||
|
return array( 'ModuleError' => $uploadError );
|
||||||
|
|
||||||
|
/* (2) On récupère le fichier */
|
||||||
|
$responsePath = self::getPath('local_data', 'json');
|
||||||
|
// Si erreur, on la renvoie
|
||||||
|
if( $responsePath['error'] != ManagerError::Success )
|
||||||
|
return array( 'ModuleError' => $responsePath['error'] );
|
||||||
|
|
||||||
|
// On lit le fichier
|
||||||
|
$json = json_decode( file_get_contents($responsePath['path']), true );
|
||||||
|
|
||||||
|
// Si erreur de parsage, on le retourne
|
||||||
|
if( $json === false )
|
||||||
|
return ManagerError::ParsingFailed;
|
||||||
|
|
||||||
|
/* (3) On renvoie le contenu du fichier */
|
||||||
return array(
|
return array(
|
||||||
'ModuleError' => self::simpleFile('call_log', 'xml', $file)
|
'ModuleError' => ManagerError::Success,
|
||||||
|
'local_data' => $json
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -97,70 +97,51 @@
|
||||||
|
|
||||||
/* [1] On écrit la requête
|
/* [1] On écrit la requête
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$request_create = 'INSERT INTO sujets(idSujet, pseudo, nom, prenom, id_facebook, telephone) ';
|
$request_create_string = 'INSERT INTO sujets(idSujet, pseudo, nom, prenom, id_facebook, telephone) ';
|
||||||
$request_create .= 'VALUES (';
|
$request_create_string .= 'VALUES (';
|
||||||
$request_create .= 'DEFAULT, '; // idPersone
|
$request_create_string .= 'DEFAULT, '; // idPersone
|
||||||
$request_create .= strlen($username) ? ':pseudo, ' : 'NULL, '; // pseudo
|
$request_create_string .= strlen($username) ? ':pseudo, ' : 'NULL, '; // pseudo
|
||||||
$request_create .= strlen($lastname) ? ':nom, ' : 'NULL, '; // nom
|
$request_create_string .= strlen($lastname) ? ':nom, ' : 'NULL, '; // nom
|
||||||
$request_create .= strlen($firstname) ? ':prenom, ' : 'NULL, '; // prenom
|
$request_create_string .= strlen($firstname) ? ':prenom, ' : 'NULL, '; // prenom
|
||||||
$request_create .= !is_null($id_facebook) ? ':id_facebook, ' : 'NULL, '; // Id facebook
|
$request_create_string .= !is_null($id_facebook) ? ':id_facebook, ' : 'NULL, '; // Id facebook
|
||||||
$request_create .= !is_null($number) ? ':number, ' : 'NULL, '; // Numéro de tél
|
$request_create_string .= !is_null($number) ? ':number, ' : 'NULL, '; // Numéro de tél
|
||||||
$request_create .= ')';
|
// On retire la dernière virgule
|
||||||
|
$request_create_string = preg_replace('/, ?$/', '', $request_create_string);
|
||||||
|
$request_create_string .= ')';
|
||||||
|
|
||||||
/* (1) Si id_facebook NULL */
|
// On crée la requête
|
||||||
if( $reference == null ){
|
$request_create = Database::getPDO()->prepare($request_create_string);
|
||||||
|
|
||||||
// TODO: Finir l'implémentation
|
|
||||||
$create = Database::getPDO()->prepare("INSERT INTO subjects(id_subject, login, password, mail, reference, permission)
|
|
||||||
VALUES(DEFAULT, :login, :password, :mail, NULL, :permission)");
|
|
||||||
$create->execute(array(
|
|
||||||
':login' => $login,
|
|
||||||
':password' => $password,
|
|
||||||
':mail' => $mail,
|
|
||||||
':permission' => $permission
|
|
||||||
));
|
|
||||||
|
|
||||||
/* (2) Si reference est defini */
|
/* [2] On exécute la requête avec les valeurs
|
||||||
}else{
|
=========================================================*/
|
||||||
|
/* (1) On ajoute les paramètres à ajouter */
|
||||||
|
$variables = array();
|
||||||
|
if( strlen($username) ) $variables[':pseudo'] = $username;
|
||||||
|
if( strlen($lastname) ) $variables[':nom'] = $lastname;
|
||||||
|
if( strlen($firstname) ) $variables[':prenom'] = $firstname;
|
||||||
|
if( !is_null($id_facebook) ) $variables[':id_facebook'] = $id_facebook;
|
||||||
|
if( !is_null($number) ) $variables[':number'] = $number;
|
||||||
|
|
||||||
$create = Database::getPDO()->prepare("INSERT INTO subjects(id_subject, login, password, mail, reference, permission)
|
/* (2) On exécute la requête avec leurs variables utiles uniquement */
|
||||||
VALUES(DEFAULT, :login, :password, :mail, :reference, :permission)");
|
$status_created = $request_create->execute($variables);
|
||||||
$create->execute(array(
|
|
||||||
':login' => $login,
|
|
||||||
':password' => $password,
|
|
||||||
':mail' => $mail,
|
|
||||||
':reference' => (int) $reference,
|
|
||||||
':permission' => $permission
|
|
||||||
));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* [3] Verification de la creation + recuperation id
|
/* [3] Verification de la creation + recuperation id
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$checkCreate = Database::getPDO()->prepare("SELECT id_subject
|
// Si erreur de création
|
||||||
FROM subjects
|
if( $status_created === false ) return false;
|
||||||
WHERE login = :login
|
|
||||||
AND password = :password
|
|
||||||
AND mail = :mail
|
|
||||||
AND ( reference = :reference OR reference is NULL )
|
|
||||||
AND permission = :permission");
|
|
||||||
$checkCreate->execute(array(
|
|
||||||
':login' => $login,
|
|
||||||
':password' => $password,
|
|
||||||
':mail' => $mail,
|
|
||||||
':reference' => (int) $reference,
|
|
||||||
':permission' => $permission
|
|
||||||
));
|
|
||||||
|
|
||||||
// On recupere l'id du sujet
|
// On recupere l'id du sujet
|
||||||
$id_subject = $checkCreate->fetch();
|
$id_subject = Database::getPDO()->lastInsertId();
|
||||||
|
|
||||||
// Si erreur, on retourne FALSE
|
// Si erreur, on retourne FALSE
|
||||||
if( $id_subject === false ) return false;
|
if( $id_subject == null ) return false;
|
||||||
|
|
||||||
/* [4] Gestion du retour
|
/* [4] Gestion du retour
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
return $id_subject['id_subject'];
|
return $id_subject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 231 KiB After Width: | Height: | Size: 241 KiB |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -13,7 +13,7 @@
|
||||||
/* [1] Gestion du cercle des relations
|
/* [1] Gestion du cercle des relations
|
||||||
=======================================*/
|
=======================================*/
|
||||||
/* (1) On recupere les donnees */
|
/* (1) On recupere les donnees */
|
||||||
$getData = new ModuleRequest('charts/network_data');
|
$getData = new ModuleRequest('chart/network_data');
|
||||||
$answer = $getData->dispatch();
|
$answer = $getData->dispatch();
|
||||||
|
|
||||||
// Si pas d'erreur
|
// Si pas d'erreur
|
||||||
|
@ -25,7 +25,7 @@ $data = $answer->get('data');
|
||||||
|
|
||||||
|
|
||||||
/* (2) On recupere le rendu */
|
/* (2) On recupere le rendu */
|
||||||
$getRender = new ModuleRequest('charts/network_render', array('dataset' => $data));
|
$getRender = new ModuleRequest('chart/network_render', array('dataset' => $data));
|
||||||
$answer = $getRender->dispatch();
|
$answer = $getRender->dispatch();
|
||||||
|
|
||||||
// Si pas d'erreur
|
// Si pas d'erreur
|
||||||
|
|
|
@ -38,7 +38,17 @@
|
||||||
|
|
||||||
<h3 data-n='0' class='color4'>Effacer les données de la dernière enquête</h3>
|
<h3 data-n='0' class='color4'>Effacer les données de la dernière enquête</h3>
|
||||||
<span data-space></span>
|
<span data-space></span>
|
||||||
<h4 class='self color2' data-icon='e'>
|
<h4 class='self color2' data-icon=''>
|
||||||
|
<a style='display:none' id='download-target'></a>
|
||||||
|
<input type='submit' class='primary' id='export-all' value="Sauvegarder l'enquête"><br>
|
||||||
|
</h4>
|
||||||
|
|
||||||
|
<h4 class='self color2' data-icon='u'>
|
||||||
|
<input type='file' id='local-upload' style='display: none;'>
|
||||||
|
<input type='submit' class='primary' id='import-all' value='Récupérer une sauvegarde'><br>
|
||||||
|
</h4>
|
||||||
|
|
||||||
|
<h4 class='self color2' data-icon='w'>
|
||||||
<input type='submit' class='primary' id='clear-all' value='Tout effacer'>
|
<input type='submit' class='primary' id='clear-all' value='Tout effacer'>
|
||||||
</h4>
|
</h4>
|
||||||
<span data-space></span>
|
<span data-space></span>
|
||||||
|
@ -64,22 +74,28 @@
|
||||||
<span data-space></span>
|
<span data-space></span>
|
||||||
<h5 data-text="Seuls les fichiers au format XML et spécifiques sont pris en compte."></h5>
|
<h5 data-text="Seuls les fichiers au format XML et spécifiques sont pris en compte."></h5>
|
||||||
<h4 data-icon='u' class='color2'>
|
<h4 data-icon='u' class='color2'>
|
||||||
<input type='file' id='call_log-import' value='test'>
|
<input type='file' id='call_log-import'>
|
||||||
<span class='file-input'>Importer un journal d'appels</span>
|
<span class='file-input'>Importer un journal d'appels</span>
|
||||||
</h4>
|
</h4>
|
||||||
<span data-space></span>
|
<span data-space></span>
|
||||||
<!-- <span data-tag='OU'></span> -->
|
<!-- <span data-tag='OU'></span> -->
|
||||||
<h3 data-n='2' class='color4'>Saisir manuellement les contacts</h3>
|
<h3 data-n='2' class='color4'>Saisir manuellement les contacts</h3>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- GESTION DE L'AJOUT DES CONTACTS -->
|
<!-- GESTION DE L'AJOUT DES CONTACTS -->
|
||||||
<span data-space></span>
|
<span data-space></span>
|
||||||
<h5 data-text="Renseigner au moins un des nominatifs pour chaque contact. (pseudo, prénom et/ou nom)"></h5>
|
<h5 data-text="Renseigner au moins un des nominatifs pour chaque contact. (pseudo, prénom et/ou nom)"></h5>
|
||||||
|
|
||||||
|
<span data-space></span>
|
||||||
|
<div class='arrow-container line' id='nav-contact'></div>
|
||||||
|
|
||||||
<article class='contact-panel'>
|
<article class='contact-panel'>
|
||||||
</article>
|
</article>
|
||||||
<span data-space></span>
|
<span data-space></span>
|
||||||
<span data-space></span>
|
|
||||||
<span data-space></span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -94,21 +110,85 @@
|
||||||
|
|
||||||
</article>
|
</article>
|
||||||
<span data-space></span>
|
<span data-space></span>
|
||||||
<span data-space></span>
|
|
||||||
<span data-space></span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- GESTION DES FICHES RELATIONS -->
|
<!-- GESTION DES FICHES RELATIONS -->
|
||||||
<h3 data-n='4' class='color4'>Remplir les fiches relations complètes des contacts les plus contactés</h3>
|
<h3 data-n='4' class='color4'>Remplir les fiches relations complètes des contacts les plus contactés</h3>
|
||||||
|
|
||||||
<!-- NAVIGATION ENTRE LES FICHES -->
|
<!-- NAVIGATION ENTRE LES FICHES -->
|
||||||
<div class='arrow-container line' id='nav-fiche'></div>
|
<div class='arrow-container line' id='nav-fiche'></div>
|
||||||
|
<article class='relation-panel'></article>
|
||||||
|
<span data-space></span>
|
||||||
|
|
||||||
<article class='relation-panel'>
|
<!-- MATRICE RELATIONNELLE DES 2 TOP 10 -->
|
||||||
|
<h3 data-n='5' class='color4'>Saisir les matrices des relations entre les contacts les plus contactés</h3>
|
||||||
|
<!-- NAVIGATION ENTRE LES FICHES -->
|
||||||
|
<article class='matrice-panel'>
|
||||||
|
<table class='line'>
|
||||||
|
<?php
|
||||||
|
$contacts = array(
|
||||||
|
array(1, 'Sujet', 'Un' ),
|
||||||
|
array(2, 'Sujet', 'Deux' ),
|
||||||
|
array(3, 'Sujet', 'Trois' ),
|
||||||
|
array(4, 'Sujet', 'Quatre' ),
|
||||||
|
array(5, 'Sujet', 'Cinq' ),
|
||||||
|
array(6, 'Sujet', 'Six' ),
|
||||||
|
array(7, 'Sujet', 'Sept' ),
|
||||||
|
array(8, 'Sujet', 'Huit' ),
|
||||||
|
array(9, 'Sujet', 'Neuf' ),
|
||||||
|
array(10, 'Sujet', 'Dix' ),
|
||||||
|
array(11, 'Sujet', 'Onze' ),
|
||||||
|
array(12, 'Sujet', 'Douze' ),
|
||||||
|
array(13, 'Sujet', 'Treize' ),
|
||||||
|
array(14, 'Sujet', 'Quatorze'),
|
||||||
|
array(15, 'Sujet', 'Quinze' ),
|
||||||
|
array(16, 'Sujet', 'Seize' ),
|
||||||
|
array(17, 'Sujet', 'Dix-sept'),
|
||||||
|
array(18, 'Sujet', 'Dix-huit'),
|
||||||
|
array(19, 'Sujet', 'Dix-neuf'),
|
||||||
|
array(20, 'Sujet', 'Vingt' )
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach($contacts as $A=>$contactA){
|
||||||
|
echo '<tr>';
|
||||||
|
|
||||||
|
if( $A > 0 )
|
||||||
|
echo '<td style="text-align: right;">'.$contactA[1].' '.$contactA[2].'</td>';
|
||||||
|
else
|
||||||
|
echo '<td></td>';
|
||||||
|
|
||||||
|
foreach($contacts as $B=>$contactB){ if( $B < count($contacts)-1 ){
|
||||||
|
if( $A == 0 )
|
||||||
|
echo '<td><span style="writing-mode: vertical-lr; text-align: right;">'.$contactB[1].' '.$contactB[2].'</span>';
|
||||||
|
else if( $B < $A )
|
||||||
|
echo "<td><input type='checkbox' name='matrice_$A"."_$B' data-name='$A' value='$B' id='matrice_$A"."_$B'><label for='matrice_$A"."_$B' title='matrice_$A"."_$B'></label>";
|
||||||
|
else
|
||||||
|
echo "<td class='hidden'>";
|
||||||
|
|
||||||
|
echo '</td>';
|
||||||
|
}}
|
||||||
|
|
||||||
|
echo '</tr>';
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
</table>
|
||||||
|
<h4 class='self color2' data-icon=''>
|
||||||
|
<input type='submit' class='primary' id='store-matrice' value='Enregistrer les relations'>
|
||||||
|
</h4>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- BOUTON D'ENVOI DU FORMULAIRE -->
|
||||||
|
<h3 data-n='6' class='color4'>Envoi des données</h3>
|
||||||
|
<article class='submit-panel'>
|
||||||
|
<h4>
|
||||||
|
<input type='submit' class='line' value='Envoyer le formulaire' id='submit-all'>
|
||||||
|
</h4>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
<span data-space></span>
|
<span data-space></span>
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,13 @@
|
||||||
var clearAllButton=$("#clear-all"),importCallLog=$('input#call_log-import[type="file"]'),subjectManager,contactManager,miniManager,ficheManager;
|
var subjectManager,contactManager,miniManager,ficheManager,matriceManager,defTrue={status:!0,value:"on"},defFalse={status:!1,value:"on"};
|
||||||
function dynamicUpdate(a){var c=a instanceof Element,b=c&&"SPAN"==a.tagName&&"switch-left"==a.className,d=c&&"SPAN"==a.tagName&&"switch-both"==a.className,e=c&&"INPUT"==a.tagName&&"submit"==a.type,c=c&&"SPAN"==a.tagName&&("nav-mini"==a.parentNode.id||"nav-fiche"==a.parentNode.id);if(!(d||b||e||c)&&!0!==a)return!1;d?(console.log("> switch firstname <-> lastname"),b=a.parentNode,a=b.children[3],b=b.children[5],d=a.value,a.value=b.value,b.value=d):b?(console.log("> switch firstname+lastname -> username"),
|
function dynamicUpdate(a){var f=a instanceof Element,b=f&&"SPAN"==a.tagName&&"switch-left"==a.className,e=f&&"SPAN"==a.tagName&&"switch-both"==a.className,c=f&&"INPUT"==a.tagName&&"submit"==a.type,d=f&&"SPAN"==a.tagName&&("nav-mini"==a.parentNode.id||"nav-fiche"==a.parentNode.id),f=f&&"SPAN"==a.tagName&&"nav-contact"==a.parentNode.id;if(!(e||b||c||d||f)&&!0!==a)return!1;if(e)console.log("> switch firstname <-> lastname"),b=a.parentNode,a=b.children[8],b=b.children[10],e=a.value,a.value=b.value,b.value=
|
||||||
b=a.parentNode,d=b.children[1],a=b.children[3],b=b.children[5],d.value=a.value+" "+b.value,a.value="",b.value=""):(console.log("> dynamic update"),miniManager.fieldsToStorage(),ficheManager.fieldsToStorage(),contactManager.fieldsToStorage(),miniManager.sync(),ficheManager.sync(),miniManager.storageToFields(),ficheManager.storageToFields(),e&&contactManager.storageToFields())}function checkRadioValue(a){for(var c=0,b=0;b<a.length;b++)!0===a[b].status&&c++;return 1!=c?!1:!0}
|
e;else if(b){console.log("> switch firstname+lastname -> username");b=a.parentNode;e=b.children[6];a=b.children[8];b=b.children[10];if(0<e.value.length||0==a.value.length&&0==b.value.length)return!1;e.value=a.value+" "+b.value;a.value="";b.value=""}else console.log("> dynamic update"),miniManager.fieldsToStorage(),ficheManager.fieldsToStorage(),contactManager.fieldsToStorage(),matriceManager.fieldsToStorage(),miniManager.sync(),ficheManager.sync(),miniManager.storageToFields(),ficheManager.storageToFields(),
|
||||||
include("/js/includes/input-phone-subject.js",function(){include("/js/includes/input-phone-contact.js",function(){include("/js/includes/input-phone-mini.js",function(){include("/js/includes/input-phone-fiche.js",function(){subjectManager=new inputPhoneSubject($('article.subject-panel [data-name="number"]'),$('article.subject-panel [data-name="username"]'),$('article.subject-panel [data-name="firstname"]'),$('article.subject-panel [data-name="lastname"]'),$('article.subject-panel [data-name="submit"]'));
|
matriceManager.storageToFields(),(c||f)&&contactManager.storageToFields()}function checkRadioValue(a){for(var f=0,b=0;b<a.length;b++)!0===a[b].status&&f++;return 1!=f?!1:!0}
|
||||||
subjectManager.attach();contactManager=new inputPhoneContact($("article.contact-panel"),$("h4.add-contact"));contactManager.attach(dynamicUpdate);miniManager=new inputPhoneMini($("article.mini-relation-panel"),$("#nav-mini"));miniManager.attach(dynamicUpdate);ficheManager=new inputPhoneFiche($("article.relation-panel"),$("#nav-fiche"));ficheManager.attach(dynamicUpdate);importCallLog.addEventListener("change",function(a){api.send({path:"upload/call_log",file:importCallLog.files[0]},function(a){console.log(a);
|
include("/js/includes/input-phone-subject.js",function(){include("/js/includes/input-phone-contact.js",function(){include("/js/includes/input-phone-mini.js",function(){include("/js/includes/input-phone-fiche.js",function(){include("/js/includes/input-phone-matrice.js",function(){subjectManager=new inputPhoneSubject($('article.subject-panel [data-name="number"]'),$('article.subject-panel [data-name="username"]'),$('article.subject-panel [data-name="firstname"]'),$('article.subject-panel [data-name="lastname"]'),
|
||||||
0==a.ModuleError&&(importCallLog.addClass("active"),a={path:"call_log/unserialize",phone_number:$("#subject_phone_number").value},api.send(a,function(a){console.log(a);if(0==a.ModuleError){for(var d=0;d<a.directory.length;d++){var c=(null===a.directory[d].name?"":a.directory[d].name).split(" ");lsi.set("contacts","form"+d,{uid:d,number:a.directory[d].number,username:1==c.length?c[0]:"",firstname:1<c.length?c[0]:"",lastname:1<c.length?c.splice(1).join(" "):""})}contactManager.storageToFields();dynamicUpdate(!0)}}))})},
|
$('article.subject-panel [data-name="submit"]'));subjectManager.attach();contactManager=new inputPhoneContact($("article.contact-panel"),$("#nav-contact"));contactManager.attach(dynamicUpdate);miniManager=new inputPhoneMini($("article.mini-relation-panel"),$("#nav-mini"));miniManager.attach(dynamicUpdate);ficheManager=new inputPhoneFiche($("article.relation-panel"),$("#nav-fiche"));ficheManager.attach(dynamicUpdate);matriceManager=new inputPhoneMatrice($("article.matrice-panel"));matriceManager.attach(dynamicUpdate);
|
||||||
!1);clearAllButton.addEventListener("click",function(a){localStorage.clear();reload()},!1)})})})});
|
$('input#call_log-import[type="file"]').addEventListener("click",function(a){a.target.value=null},!1);$('input#call_log-import[type="file"]').addEventListener("change",function(a){a={path:"upload/call_log",phone_number:$("#subject_phone_number").value,file:a.target.files[0]};api.send(a,function(a){console.log(a);if(0==a.ModuleError){for(var b=0,e=[],c=0;c<a.calls.length&&10>c;c++)e.push(a.calls[c].number);for(c=0;c<e.length;c++){var d=a.directory[e[c]].name.split(" ");lsi.set("contacts",b,{uid:b,
|
||||||
|
number:e[c],username:1==d.length?d[0]:"",firstname:1<d.length?d[0]:"",lastname:1<d.length?d.splice(1).join(" "):"",countsms:a.directory[e[c]].sms,countcall:a.directory[e[c]].calls,call:c,sms:-1});b++}for(var g=[],c=0;c<a.sms.length&&10>c;c++)g.push(a.sms[c].number);for(c=0;c<g.length;c++)if(d=e.indexOf(g[c]),-1<d){var k=lsi.get("contacts",d);k.sms=c;lsi.set("contacts",d,k)}else d=a.directory[g[c]].name.split(" "),lsi.set("contacts",b,{uid:b,number:g[c],username:1==d.length?d[0]:"",firstname:1<d.length?
|
||||||
|
d[0]:"",lastname:1<d.length?d.splice(1).join(" "):"",countsms:a.directory[g[c]].sms,countcall:a.directory[g[c]].calls,call:-1,sms:c}),b++;for(var h in a.directory)-1<e.indexOf(h)||-1<g.indexOf(h)||(d=(null===a.directory[h].name?"":a.directory[h].name).split(" "),lsi.set("contacts",b,{uid:b,number:h,username:1==d.length?d[0]:"",firstname:1<d.length?d[0]:"",lastname:1<d.length?d.splice(1).join(" "):"",countsms:a.directory[h].sms,countcall:a.directory[h].calls,call:-1,sms:-1}),b++);contactManager.storageToFields();
|
||||||
|
dynamicUpdate(!0)}})},!1);$("#clear-all").addEventListener("click",function(a){lsi.clear("subject");lsi.clear("contacts");lsi.clear("mini-fiches");lsi.clear("fiches");lsi.clear("matrice");subjectManager.storageToFields();contactManager.storageToFields();miniManager.storageToFields();ficheManager.storageToFields();matriceManager.storageToFields()},!1);$("#export-all").addEventListener("click",function(a){a={subject:lsi["export"]("subject")[0],contacts:lsi["export"]("contacts"),mini:lsi["export"]("mini-fiches"),
|
||||||
|
fiches:lsi["export"]("fiches"),matrice:lsi["export"]("matrice")[0]};var f=$("#download-target");f.download="local-data.json";f.href="data:application/octet-stream,"+encodeURIComponent(JSON.stringify(a));f.click()},!1);$("#import-all").addEventListener("click",function(a){$("#local-upload").click()},!1);$("#local-upload").addEventListener("click",function(a){a.target.value=null},!1);$("#local-upload").addEventListener("change",function(a){a={path:"upload/local_data",file:$("#local-upload").files[0]};
|
||||||
|
api.send(a,function(a){console.log(a);if(0!=a.ModuleError)return!1;console.log(a.local_data.matrice);lsi.set("subject",0,a.local_data.subject);lsi["import"]("contacts",a.local_data.contacts);lsi["import"]("mini-fiches",a.local_data.mini);lsi["import"]("fiches",a.local_data.fiches);lsi.set("matrice",0,a.local_data.matrice);subjectManager.storageToFields();contactManager.storageToFields();matriceManager.storageToFields();dynamicUpdate(!0)})},!1);$("#submit-all").addEventListener("click",function(a){console.log("> GATHERING ALL DATA");
|
||||||
|
subjectManager.fieldsToStorage();contactManager.fieldsToStorage();miniManager.fieldsToStorage();ficheManager.fieldsToStorage();a={path:"input/phone",subject:lsi["export"]("subject")[0],contacts:lsi["export"]("contacts"),mini:lsi["export"]("mini-fiches"),fiches:lsi["export"]("fiches")};api.send(a,function(a){console.log(a)},!1)},!1)})})})})});
|
||||||
|
|
371
view/js/input.js
371
view/js/input.js
|
@ -3,23 +3,24 @@
|
||||||
// contacts -> contient les données de tous les contacts
|
// contacts -> contient les données de tous les contacts
|
||||||
// mini-fiches -> contient les données de toutes les mini fiches
|
// mini-fiches -> contient les données de toutes les mini fiches
|
||||||
// fiches -> contient les données de toutes les fiches
|
// fiches -> contient les données de toutes les fiches
|
||||||
|
// matrice -> contient les relations de la matrice
|
||||||
|
|
||||||
|
|
||||||
/* [1] Initialisation des utilitaires et variables
|
/* [1] Initialisation des utilitaires et variables
|
||||||
=========================================================*/
|
=========================================================*
|
||||||
/* (1) Bouton pour effacer toutes les données */
|
/* (1) Initialisation des managers */
|
||||||
var clearAllButton = $('#clear-all');
|
|
||||||
|
|
||||||
/* (2) Input de type fichier pour l'import */
|
|
||||||
var importCallLog = $('input#call_log-import[type="file"]');
|
|
||||||
|
|
||||||
/* (3) Initialisation des managers */
|
|
||||||
var subjectManager;
|
var subjectManager;
|
||||||
var contactManager;
|
var contactManager;
|
||||||
var miniManager;
|
var miniManager;
|
||||||
var ficheManager;
|
var ficheManager;
|
||||||
|
var matriceManager;
|
||||||
|
|
||||||
/* (4) Fonctions utiles */
|
// CONSTANTES
|
||||||
|
var defTrue = {status: true, value: 'on'};
|
||||||
|
var defFalse = {status: false, value: 'on'};
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) Fonctions utiles */
|
||||||
function dynamicUpdate(target){
|
function dynamicUpdate(target){
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,9 +31,10 @@ function dynamicUpdate(target){
|
||||||
var isSwitchBoth = isElement && target.tagName == 'SPAN' && target.className == 'switch-both';
|
var isSwitchBoth = isElement && target.tagName == 'SPAN' && target.className == 'switch-both';
|
||||||
var isSaveButton = isElement && target.tagName == 'INPUT' && target.type == 'submit';
|
var isSaveButton = isElement && target.tagName == 'INPUT' && target.type == 'submit';
|
||||||
var isNavButton = isElement && target.tagName == 'SPAN' && (target.parentNode.id == 'nav-mini' || target.parentNode.id == 'nav-fiche');
|
var isNavButton = isElement && target.tagName == 'SPAN' && (target.parentNode.id == 'nav-mini' || target.parentNode.id == 'nav-fiche');
|
||||||
|
var isNavContact = isElement && target.tagName == 'SPAN' && target.parentNode.id == 'nav-contact';
|
||||||
|
|
||||||
// Si erreur, on retourne une erreur
|
// Si erreur, on retourne une erreur
|
||||||
if( !isSwitchBoth && !isSwitchLeft && !isSaveButton && !isNavButton && target !== true )
|
if( !isSwitchBoth && !isSwitchLeft && !isSaveButton && !isNavButton && !isNavContact && target !== true )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* (1) Gestion de l'échange de nom/prénom
|
/* (1) Gestion de l'échange de nom/prénom
|
||||||
|
@ -44,8 +46,8 @@ function dynamicUpdate(target){
|
||||||
var currentForm = target.parentNode;
|
var currentForm = target.parentNode;
|
||||||
|
|
||||||
/* (2) On récupère Nom et Prénom */
|
/* (2) On récupère Nom et Prénom */
|
||||||
var firstname = currentForm.children[3];
|
var firstname = currentForm.children[8];
|
||||||
var lastname = currentForm.children[5];
|
var lastname = currentForm.children[10];
|
||||||
|
|
||||||
/* (3) On échange leurs valeurs */
|
/* (3) On échange leurs valeurs */
|
||||||
var tmp = firstname.value;
|
var tmp = firstname.value;
|
||||||
|
@ -61,11 +63,16 @@ function dynamicUpdate(target){
|
||||||
var currentForm = target.parentNode;
|
var currentForm = target.parentNode;
|
||||||
|
|
||||||
/* (2) On récupère Pseudo, Nom et Prénom */
|
/* (2) On récupère Pseudo, Nom et Prénom */
|
||||||
var username = currentForm.children[1];
|
var username = currentForm.children[6];
|
||||||
var firstname = currentForm.children[3];
|
var firstname = currentForm.children[8];
|
||||||
var lastname = currentForm.children[5];
|
var lastname = currentForm.children[10];
|
||||||
|
|
||||||
/* (3) On attribue à Pseudo, la valeur de Prénom+Nom */
|
/* (3) Vérification de la validité */
|
||||||
|
// Si pseudo pas vide, ou nom et prenom vide -> on ne fais rien
|
||||||
|
if( username.value.length > 0 || firstname.value.length == 0 && lastname.value.length == 0 )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
/* (4) On attribue à Pseudo, la valeur de Prénom+Nom */
|
||||||
username.value = firstname.value +' '+ lastname.value;
|
username.value = firstname.value +' '+ lastname.value;
|
||||||
firstname.value = '';
|
firstname.value = '';
|
||||||
lastname.value = '';
|
lastname.value = '';
|
||||||
|
@ -85,23 +92,30 @@ function dynamicUpdate(target){
|
||||||
/* (3) On enregistre les CONTACTS */
|
/* (3) On enregistre les CONTACTS */
|
||||||
contactManager.fieldsToStorage();
|
contactManager.fieldsToStorage();
|
||||||
|
|
||||||
/* (4) On synchronise les MINI avec les CONTACTS */
|
/* (4) On enregistre la MATRICE */
|
||||||
|
matriceManager.fieldsToStorage();
|
||||||
|
|
||||||
|
/* (5) On synchronise les MINI avec les CONTACTS */
|
||||||
miniManager.sync();
|
miniManager.sync();
|
||||||
|
|
||||||
/* (5) On synchronise les FICHE avec les CONTACTS */
|
/* (6) 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
|
||||||
ficheManager.sync();
|
ficheManager.sync();
|
||||||
|
|
||||||
/* (6) On affiche le tout */
|
|
||||||
|
/* (7) On affiche le tout */
|
||||||
miniManager.storageToFields();
|
miniManager.storageToFields();
|
||||||
ficheManager.storageToFields();
|
ficheManager.storageToFields();
|
||||||
|
matriceManager.storageToFields();
|
||||||
|
|
||||||
/* (7) On met à jour les contacts si on les a modifié */
|
/* (8) On met à jour les contacts si on les a modifié on si on navigue dans les contacts */
|
||||||
if( isSaveButton )
|
if( isSaveButton || isNavContact )
|
||||||
contactManager.storageToFields();
|
contactManager.storageToFields();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vérifie qu'une seule valeur vaut TRUE et les autres false
|
// Vérifie qu'une seule valeur vaut TRUE et les autres false (objet deflated de type <radio> )
|
||||||
function checkRadioValue(selectData){
|
function checkRadioValue(selectData){
|
||||||
var nbTrue = 0;
|
var nbTrue = 0;
|
||||||
for( var i = 0 ; i < selectData.length ; i++ )
|
for( var i = 0 ; i < selectData.length ; i++ )
|
||||||
|
@ -138,6 +152,7 @@ include('/js/includes/input-phone-subject.js', function(){
|
||||||
include('/js/includes/input-phone-contact.js', function(){
|
include('/js/includes/input-phone-contact.js', function(){
|
||||||
include('/js/includes/input-phone-mini.js', function(){
|
include('/js/includes/input-phone-mini.js', function(){
|
||||||
include('/js/includes/input-phone-fiche.js', function(){
|
include('/js/includes/input-phone-fiche.js', function(){
|
||||||
|
include('/js/includes/input-phone-matrice.js', function(){
|
||||||
|
|
||||||
|
|
||||||
/* (1) Gestion du formulaire du sujet
|
/* (1) Gestion du formulaire du sujet
|
||||||
|
@ -163,7 +178,7 @@ include('/js/includes/input-phone-fiche.js', function(){
|
||||||
/* (1) On crée une instance du gestionnaire des CONTACTS */
|
/* (1) On crée une instance du gestionnaire des CONTACTS */
|
||||||
contactManager = new inputPhoneContact(
|
contactManager = new inputPhoneContact(
|
||||||
$('article.contact-panel'),
|
$('article.contact-panel'),
|
||||||
$('h4.add-contact')
|
$('#nav-contact')
|
||||||
);
|
);
|
||||||
|
|
||||||
/* (2) On le démarre */
|
/* (2) On le démarre */
|
||||||
|
@ -195,119 +210,283 @@ include('/js/includes/input-phone-fiche.js', function(){
|
||||||
ficheManager.attach(dynamicUpdate);
|
ficheManager.attach(dynamicUpdate);
|
||||||
|
|
||||||
|
|
||||||
|
/* (5) Gestion de la matrice de relations
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* (5) Gestion de l'import du fichier
|
|
||||||
---------------------------------------------------------*/
|
---------------------------------------------------------*/
|
||||||
importCallLog.addEventListener('change', function(e){
|
/* (1) On crée une instance du gestionnaire de la matrice */
|
||||||
|
matriceManager = new inputPhoneMatrice(
|
||||||
|
$('article.matrice-panel')
|
||||||
|
);
|
||||||
|
|
||||||
|
/* (2) On le démarre */
|
||||||
|
matriceManager.attach(dynamicUpdate);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* (6) Gestion de l'import du fichier
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
// On vide l'input de type 'file' quand on clique
|
||||||
|
$('input#call_log-import[type="file"]').addEventListener('click', function(e){
|
||||||
|
e.target.value = null;
|
||||||
|
}, false);
|
||||||
|
|
||||||
|
// Gestion de l'upload
|
||||||
|
$('input#call_log-import[type="file"]').addEventListener('change', function(e){
|
||||||
/* (1) On rédige la requête */
|
/* (1) On rédige la requête */
|
||||||
var uploadRequest = {
|
var request = {
|
||||||
path: 'upload/call_log',
|
path: 'upload/call_log',
|
||||||
file: importCallLog.files[0]
|
phone_number: $('#subject_phone_number').value,
|
||||||
|
file: e.target.files[0]
|
||||||
};
|
};
|
||||||
|
|
||||||
/* (2) On effectue l'upload (import) */
|
/* (2) On effectue l'upload (import) */
|
||||||
api.send(uploadRequest, function(uploadResponse){
|
api.send(request, function(response){
|
||||||
console.log(uploadResponse);
|
console.log(response);
|
||||||
|
|
||||||
// Si tout est bon, on met l'input en bleu
|
|
||||||
if( uploadResponse.ModuleError == 0 ){
|
|
||||||
importCallLog.addClass('active');
|
|
||||||
|
|
||||||
/* (3) On rédige la requête pour récupérer les données du fichier */
|
|
||||||
var callLogRequest = {
|
|
||||||
path: 'call_log/unserialize',
|
|
||||||
phone_number: $('#subject_phone_number').value
|
|
||||||
};
|
|
||||||
|
|
||||||
/* (4) On effectue la récupération d'informations */
|
|
||||||
api.send(callLogRequest, function(dataResponse){
|
|
||||||
console.log(dataResponse);
|
|
||||||
|
|
||||||
// Si erreur, on quitte
|
// Si erreur, on quitte
|
||||||
if( dataResponse.ModuleError != 0 )
|
if( response.ModuleError != 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* (5) Pour chaque contact de l'annuaire, on ajoute un contact */
|
var uid = 0; // Contiendra l'uid des contacts
|
||||||
for( var i = 0 ; i < dataResponse.directory.length ; i++ ){
|
|
||||||
|
/* (3) On récupère les contacts les plus APPELLÉS */
|
||||||
|
var most_called = [];
|
||||||
|
for( var i = 0 ; i < response.calls.length && i < 10 ; i++ )
|
||||||
|
most_called.push( response.calls[i].number );
|
||||||
|
|
||||||
|
/* (4) On crée les 10 contacts les plus APPELÉS */
|
||||||
|
for( var i = 0 ; i < most_called.length ; i++ ){
|
||||||
|
var splittedName = response.directory[most_called[i]].name.split(' ');
|
||||||
|
|
||||||
|
lsi.set('contacts', uid, {
|
||||||
|
uid: uid,
|
||||||
|
number: most_called[i],
|
||||||
|
username: splittedName.length == 1 ? splittedName[0] : '', // Si un seul mot -> pseudo
|
||||||
|
firstname: splittedName.length > 1 ? splittedName[0] : '', // Si plusieurs mots -> le 1er est le prénom
|
||||||
|
lastname: splittedName.length > 1 ? splittedName.splice(1).join(' ') : '', // et les autres sont le nom
|
||||||
|
countsms: response.directory[most_called[i]].sms, // Nombre de sms
|
||||||
|
countcall: response.directory[most_called[i]].calls, // Nombre d'appels
|
||||||
|
call: i, // classement dans le top 10 des APPELS
|
||||||
|
sms: -1 // classement dans le top 10 des SMS
|
||||||
|
});
|
||||||
|
|
||||||
|
uid++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* (5) On récupère les contacts les plus SMSÉS */
|
||||||
|
var most_sms = [];
|
||||||
|
for( var i = 0 ; i < response.sms.length && i < 10 ; i++ )
|
||||||
|
most_sms.push( response.sms[i].number );
|
||||||
|
|
||||||
|
/* (6) On crée les 10 contacts les plus SMSÉS */
|
||||||
|
for( var i = 0 ; i < most_sms.length ; i++ ){
|
||||||
|
// 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 = most_called.indexOf(most_sms[i]);
|
||||||
|
if( callIndex > -1 ){
|
||||||
|
var created = lsi.get('contacts', callIndex);
|
||||||
|
created.sms = i;
|
||||||
|
lsi.set('contacts', callIndex, created);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var splittedName = response.directory[most_sms[i]].name.split(' ');
|
||||||
|
|
||||||
|
lsi.set('contacts', uid, {
|
||||||
|
uid: uid,
|
||||||
|
number: most_sms[i],
|
||||||
|
username: splittedName.length == 1 ? splittedName[0] : '', // Si un seul mot -> pseudo
|
||||||
|
firstname: splittedName.length > 1 ? splittedName[0] : '', // Si plusieurs mots -> le 1er est le prénom
|
||||||
|
lastname: splittedName.length > 1 ? splittedName.splice(1).join(' ') : '', // et les autres sont le nom
|
||||||
|
countsms: response.directory[most_sms[i]].sms, // Nombre de sms
|
||||||
|
countcall: response.directory[most_sms[i]].calls, // Nombre d'appels
|
||||||
|
call: -1, // classement dans le top 10 des APPELS
|
||||||
|
sms: i // classement dans le top 10 des SMS
|
||||||
|
});
|
||||||
|
|
||||||
|
uid++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* (7) Pour chaque contact qui n'est pas dans le top 10, on l'ajoute */
|
||||||
|
for( var number in response.directory ){
|
||||||
|
|
||||||
|
// Si dans top 10 des APPELS, on ne l'ajoute pas
|
||||||
|
if( most_called.indexOf(number) > -1 )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// Si dans top 10 des SMS, on ne l'ajoute pas
|
||||||
|
if( most_sms.indexOf(number) > -1 )
|
||||||
|
continue;
|
||||||
|
|
||||||
// On découpe le nom par espaces
|
// On découpe le nom par espaces
|
||||||
var name = dataResponse.directory[i].name===null ? '' : dataResponse.directory[i].name;
|
var name = response.directory[number].name===null ? '' : response.directory[number].name;
|
||||||
var splitted = name.split(' ');
|
var splittedName = name.split(' ');
|
||||||
|
|
||||||
lsi.set('contacts', 'form'+i, {
|
|
||||||
uid: i,
|
|
||||||
number: dataResponse.directory[i].number,
|
lsi.set('contacts', uid, {
|
||||||
username: splitted.length == 1 ? splitted[0] : '', // Si un seul mot -> pseudo
|
uid: uid,
|
||||||
firstname: splitted.length > 1 ? splitted[0] : '', // Si plusieurs mots -> le 1er est le prénom
|
number: number,
|
||||||
lastname: splitted.length > 1 ? splitted.splice(1).join(' ') : '' // et les autres sont le nom
|
username: splittedName.length == 1 ? splittedName[0] : '', // Si un seul mot -> pseudo
|
||||||
|
firstname: splittedName.length > 1 ? splittedName[0] : '', // Si plusieurs mots -> le 1er est le prénom
|
||||||
|
lastname: splittedName.length > 1 ? splittedName.splice(1).join(' ') : '', // et les autres sont le nom
|
||||||
|
countsms: response.directory[number].sms, // Nombre de sms
|
||||||
|
countcall: response.directory[number].calls, // Nombre d'appels
|
||||||
|
call: -1,
|
||||||
|
sms: -1
|
||||||
});
|
});
|
||||||
|
|
||||||
|
uid++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (6) On met à jour l'affichage */
|
|
||||||
|
/* (8) On met à jour l'affichage */
|
||||||
contactManager.storageToFields();
|
contactManager.storageToFields();
|
||||||
dynamicUpdate(true);
|
dynamicUpdate(true);
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
|
|
||||||
/* (6) Gestion de l'effacement des données locales
|
|
||||||
|
/* (7) Gestion de l'effacement des données locales
|
||||||
---------------------------------------------------------*/
|
---------------------------------------------------------*/
|
||||||
clearAllButton.addEventListener('click', function(e){
|
$('#clear-all').addEventListener('click', function(e){
|
||||||
localStorage.clear();
|
/* (1) On vide tous les dataset de données */
|
||||||
reload();
|
lsi.clear('subject');
|
||||||
|
lsi.clear('contacts');
|
||||||
|
lsi.clear('mini-fiches');
|
||||||
|
lsi.clear('fiches');
|
||||||
|
lsi.clear('matrice');
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) On met à jour l'affichage */
|
||||||
|
subjectManager.storageToFields();
|
||||||
|
contactManager.storageToFields();
|
||||||
|
miniManager.storageToFields();
|
||||||
|
ficheManager.storageToFields();
|
||||||
|
matriceManager.storageToFields();
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}) }) }) });
|
/* (8) Gestion de l'export des données locales
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
$('#export-all').addEventListener('click', function(e){
|
||||||
|
/* (1) On construit les données */
|
||||||
|
var data = {
|
||||||
|
subject: lsi.export('subject')[0],
|
||||||
|
contacts: lsi.export('contacts'),
|
||||||
|
mini: lsi.export('mini-fiches'),
|
||||||
|
fiches: lsi.export('fiches'),
|
||||||
|
matrice: lsi.export('matrice')[0]
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) On lance le téléchargement */
|
||||||
|
var downloadTarget = $('#download-target'); // On récupère le lien (<a>) caché qui fera le téléchargement
|
||||||
|
downloadTarget.download = 'local-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);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ETAPE 1 : INITIALISATION (ON RESTAURE LES DONNEES)
|
/* (9) Gestion de l'import des données locales
|
||||||
// 1. contact.storageToFields();
|
---------------------------------------------------------*/
|
||||||
// 2. contact.add();
|
// Le bouton lance l'<input> file
|
||||||
// 3. mini.storageToFields();
|
$('#import-all').addEventListener('click', function(e){
|
||||||
// 4. fiche.storageToFields();
|
$('#local-upload').click();
|
||||||
|
}, false);
|
||||||
|
|
||||||
// ETAPE 2 : ENREGISTREMENT + MISE À JOUR
|
|
||||||
// 1. mini.fieldsToStorage();
|
// On vide l'input de type 'file' quand on clique
|
||||||
// 2. fiche.fieldsToStorage();
|
$('#local-upload').addEventListener('click', function(e){
|
||||||
// 3. contact.fieldsToStorage();
|
e.target.value = null;
|
||||||
// 4. mini.sync();
|
}, false);
|
||||||
// 5. fiche.sync();
|
|
||||||
|
// Gestion de l'upload d'une sauvegarde de formulaire local
|
||||||
|
$('#local-upload').addEventListener('change', function(e){
|
||||||
|
/* (1) Rédaction de la requête d'upload */
|
||||||
|
var request = {
|
||||||
|
path: 'upload/local_data',
|
||||||
|
file: $('#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 )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
console.log(response.local_data.matrice);
|
||||||
|
|
||||||
|
/* (3) On enregistre les données dans le 'localStorage' */
|
||||||
|
lsi.set('subject', 0, response.local_data.subject);
|
||||||
|
lsi.import('contacts', response.local_data.contacts);
|
||||||
|
lsi.import('mini-fiches', response.local_data.mini);
|
||||||
|
lsi.import('fiches', response.local_data.fiches);
|
||||||
|
lsi.set('matrice', 0, response.local_data.matrice);
|
||||||
|
|
||||||
|
/* (3) On met à jour l'affichage */
|
||||||
|
subjectManager.storageToFields();
|
||||||
|
contactManager.storageToFields();
|
||||||
|
matriceManager.storageToFields();
|
||||||
|
dynamicUpdate(true);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}, false);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* (10) Gestion de la validation et de l'envoi des données
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
$('#submit-all').addEventListener('click', function(e){
|
||||||
|
console.log('> GATHERING ALL DATA');
|
||||||
|
|
||||||
|
/* (1) On met dans la mémoire tout les champs non enregistrés */
|
||||||
|
subjectManager.fieldsToStorage();
|
||||||
|
contactManager.fieldsToStorage();
|
||||||
|
miniManager.fieldsToStorage();
|
||||||
|
ficheManager.fieldsToStorage();
|
||||||
|
|
||||||
|
/* (2) On prépare la requête avec toutes les données */
|
||||||
|
var request = {
|
||||||
|
path: 'input/phone',
|
||||||
|
|
||||||
|
subject: lsi.export('subject')[0],
|
||||||
|
contacts: lsi.export('contacts'),
|
||||||
|
mini: lsi.export('mini-fiches'),
|
||||||
|
fiches: lsi.export('fiches')
|
||||||
|
};
|
||||||
|
|
||||||
|
/* (3) On envoie la requête et traite la réponse */
|
||||||
|
api.send(request, function(response){
|
||||||
|
console.log(response);
|
||||||
|
}, false);
|
||||||
|
|
||||||
|
|
||||||
|
}, false);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}); }); }); }); });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// var number = $('input.number[type="text"]');
|
|
||||||
// ic.append(number, format_number, '06 06 06 06 06');
|
|
||||||
// // format_number -> format pour les numéros de téléphones
|
|
||||||
//
|
|
||||||
// number.addEventListener('keyup', function(e){
|
|
||||||
// ic.correct(number, false);
|
|
||||||
// }, false);
|
|
||||||
|
|
Loading…
Reference in New Issue