Merged feature/input_phone into dev
This commit is contained in:
commit
0ab0ec7d02
|
@ -1,4 +1,8 @@
|
|||
RewriteEngine on
|
||||
# Gestion des pages d'erreur personnalisées
|
||||
ErrorDocument 403 view/error.php
|
||||
|
||||
|
||||
# Redirection vers index.php (Router)
|
||||
RewriteEngine on
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
|
||||
|
|
11
automate.php
11
automate.php
|
@ -61,24 +61,25 @@
|
|||
/* [2] Gestion du getter dynamique des Repos
|
||||
=========================================================*/
|
||||
// var_dump( \manager\repo\user::getById(1) );
|
||||
// // var_dump( \manager\repo\user::getByLogin('xdrm') );
|
||||
// // var_dump( \manager\repo\subject::getById(1) );
|
||||
// var_dump( \manager\repo\user::getByLogin('xdrm') );
|
||||
// var_dump( \manager\repo\subject::getById(69) );
|
||||
// var_dump( \manager\repo\relation::getById(638, 640, 30) );
|
||||
|
||||
|
||||
|
||||
/* [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 //
|
||||
<?php
|
||||
// var_dump($_FILES);
|
||||
//
|
||||
// if( isset($_FILES) ){
|
||||
//
|
||||
// $request = new ModuleRequest('upload/local_data', array() );
|
||||
// $request = new ModuleRequest('upload/call_log', array('phone_number'=>'01 02 03 04 05') );
|
||||
// $response = $request->dispatch();
|
||||
// var_dump( ManagerError::explicit($response->error) );
|
||||
//
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Order deny,allow
|
||||
Deny from all
|
|
@ -16,24 +16,12 @@
|
|||
"attributes": { "data-link": "input" },
|
||||
|
||||
"children": [
|
||||
{ "permissions": ["admin"], "text": "Questionnaire",
|
||||
{ "permissions": ["admin"], "text": "Chercher le sujet",
|
||||
"attributes": { "data-sublink": "survey" } },
|
||||
{ "permissions": ["admin"], "text": "Facebook",
|
||||
"attributes": { "data-sublink": "facebook" } },
|
||||
{ "permissions": ["admin"], "text": "Téléphone",
|
||||
"attributes": { "data-sublink": "phone" } },
|
||||
{ "permissions": ["admin"], "text": "Messenger",
|
||||
"attributes": { "data-sublink": "messenger" } }
|
||||
]
|
||||
},
|
||||
|
||||
|
||||
{ "icon": "f/svg/analytics/st/menu-side", "text": "Statistiques",
|
||||
"attributes": { "data-link": "analytics" },
|
||||
|
||||
"children": [
|
||||
{ "permissions": [], "text": "Extraction de données",
|
||||
"attributes": { "data-sublink": "export" } }
|
||||
{ "permissions": ["admin"], "text": "Données cellulaire",
|
||||
"attributes": { "data-sublink": "phone" } },
|
||||
{ "permissions": ["admin"], "text": "Données facebook",
|
||||
"attributes": { "data-sublink": "facebook" } }
|
||||
]
|
||||
},
|
||||
|
||||
|
@ -42,10 +30,24 @@
|
|||
"attributes": { "data-link": "charts", "class": "sep" },
|
||||
|
||||
"children": [
|
||||
{ "permissions": [], "text": "Téléphone",
|
||||
{ "permissions": [], "text": "Données cellulaires",
|
||||
"attributes": { "data-sublink": "phone" } },
|
||||
{ "permissions": [], "text": "Toutes les données",
|
||||
"attributes": { "data-sublink": "all" } }
|
||||
{ "permissions": [], "text": "Réseau",
|
||||
"attributes": { "data-sublink": "network" } }
|
||||
]
|
||||
},
|
||||
|
||||
|
||||
{ "icon": "f/svg/analytics/st/menu-side", "text": "Données",
|
||||
"attributes": { "data-link": "data" },
|
||||
|
||||
"children": [
|
||||
{ "permissions": [], "text": "Export des données",
|
||||
"attributes": { "data-sublink": "export" } },
|
||||
{ "permissions": [], "text": "Export des graphiques",
|
||||
"attributes": { "data-sublink": "charts" } },
|
||||
{ "permissions": [], "text": "Statistiques",
|
||||
"attributes": { "data-sublink": "analytics" } }
|
||||
]
|
||||
},
|
||||
|
||||
|
|
|
@ -181,6 +181,15 @@
|
|||
"id_source": { "description": "UID de l'utilisateur doublon", "type": "id" },
|
||||
"id_target": { "description": "UID de l'utilisateur déjà existant", "type": "id" }
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
"remove": {
|
||||
"description": "Suppression d'un sujet d'id donné.",
|
||||
"permissions": ["admin"],
|
||||
"parameters": {
|
||||
"id_subject": { "description": "UID du sujet à supprimer.", "type": "id" }
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
|
@ -191,10 +200,11 @@
|
|||
"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>" }
|
||||
"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>" },
|
||||
"matrice": { "description": "Matrice contenant les relations entre les plus proches contacts", "type": "array<array>" }
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,23 @@
|
|||
"getById",
|
||||
"getAll",
|
||||
"create",
|
||||
"merge"
|
||||
"merge",
|
||||
"remove",
|
||||
"link"
|
||||
],
|
||||
|
||||
"relation": [
|
||||
"getAll",
|
||||
"getById",
|
||||
"create",
|
||||
"remove"
|
||||
],
|
||||
|
||||
"category": [
|
||||
"getAll",
|
||||
"getById",
|
||||
"getByIntitule",
|
||||
"getOrCreate"
|
||||
],
|
||||
|
||||
"Personnes": [
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
|
||||
"local" : {
|
||||
"host" : "http://socioview",
|
||||
"root" : "/"
|
||||
},
|
||||
|
||||
"remote" : {
|
||||
"host" : "https://socioview.xdrm.io",
|
||||
"root" : "/"
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -7,8 +7,8 @@
|
|||
],
|
||||
"sourcesContent": [
|
||||
"@import 'constants';\n\n\n#WRAPPER > #HEADER{\n\n\t/* [1] Barre de recherche\n\t=========================================================*/\n\t& > #searchbar{\n\t\tdisplay: inline-block;\n\t\tposition: absolute;\n\t\t\ttop: .8em;\n\t\t\tleft: 1em;\n\t\t\twidth: 20em;\n\t\t\theight: 2em;\n\n\t\tpadding: .2em 1em;\n\n\t\tborder: 0;\n\t\tborder-radius: 3px;\n\n\t\tbackground-color: $theme-bg;\n\n\t}\n\n\t/* [2] Informations utilisateur\n\t=========================================================*/\n\t/* (0) Conteneur */\n\t& > #user-data{\n\t\tdisplay: inline-block;\n\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tright: 0;\n\t\t\theight: calc( 100% - 2*1em );\n\n\n\t\t/* (1) Username de l'utilisateur */\n\t\t& > #user-name{\n\t \tdisplay: block;\n\t \tposition: absolute;\n\t \t\ttop: 0;\n\t \t\tright: calc( #{$header-height}*2 - 1em );\n\t \t\theight: $header-height;\n\n\t \tpadding: 0 1em;\n\n\t\t\tcolor: #fff;\n\t\t\tline-height: $header-height;\n\t\t\twhite-space: nowrap;\n\t\t\tfont-weight: bold;\n\n\t\t\tcursor: pointer;\n\n\t\t}\n\n\n\t\t/* (2) Image du profil */\n\t\t& > #user-picture{\n\t\t\tdisplay: block;\n\t\t\tposition: absolute;\n\t\t\t\ttop: 1em;\n\t\t\t\tright: $header-height;\n\t\t\t\twidth: calc( #{$header-height} - 2*1em );\n\t\t\t\theight: calc( #{$header-height} - 2*1em );\n\n\n\t\t\tborder-radius: 50% / 50%;\n\n\t\t\tbackground: $theme-bg url('/f/svg/nopic/st/header') center center no-repeat;\n\t\t\tbackground-size: auto 80%;\n\n\t\t\t// Si on est connecte\n\t\t\t&.active{ background-image: url('/f/svg/sample/dy/profile'); background-size: auto 100%; }\n\n\t\t\tcursor: default;\n\n\t\t\talign-self: center;\n\t\t}\n\n\n\n\t\t/* (3) Icone d'activation */\n\t\t&:before{\n\t\t\tcontent: '';\n\t\t\tdisplay: block;\n\t\t\tposition: absolute;\n\t\t\t\ttop: 0;\n\t\t\t\tright: 0;\n\t\t\t\twidth: $header-height;\n\t\t\t\theight: $header-height;\n\n\t\t\tbackground: url('/f/svg/expand/st/header/ffffff') center center no-repeat;\n\t\t\tbackground-size: 1em 1em;\n\n\t\t\tcursor: pointer;\n\n\t\t}\n\n\n\t}\n\n\n\n\t/* [3] Menu deroulant pour l'administration du profil\n\t=========================================================*/\n\t& > .user-panel{\n \tdisplay: block;\n \tposition: absolute;\n \ttop: calc( #{$header-height} - 1em );\n \tright: 0;\n\n margin: .5em;\n\n\t\tborder-radius: 5px;\n\t\tborder: 1px solid darken($theme-bg, 10);\n\n background-color: #fff;\n\n @include transition( left .3s ease-in-out );\n\n\n /* (1) Pour chaque element du menu */\n & > span{\n \tdisplay: block;\n \tposition: relative;\n\n\t\t\t// On ajoute une ligne en dessous sauf pour le dernier\n\t\t\t&:not(:last-child){\n\t\t\t\tborder-bottom: 1px solid #ddd;\n\t\t\t}\n\n\t\t\tcolor: #000;\n\t\t\tpadding: .5em 1em;\n\t\t\tpadding-left: 2em;\n\n\t\t\tcursor: pointer;\n\n\t\t\t// @hover\n\t\t\t&:hover{\n\t\t\t\tbackground-color: #eee;\n\t\t\t}\n }\n\n\n\n\n }\n\n /* (3) Gestion de l'activation ou non de l'user panel */\n\t& > #toggle-user-panel{ display: none; }\n\t& > #toggle-user-panel + .user-panel{ left: 100%; }\n\t& > #toggle-user-panel:checked + .user-panel{ left: auto; }\n\t& > #toggle-user-panel:checked + .user-panel:before{ left: 7em; }\n\n\n\n\n\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\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": []
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -7,8 +7,8 @@
|
|||
],
|
||||
"sourcesContent": [
|
||||
"@import 'constants';\n\n\n#WRAPPER > #HEADER{\n\n\t/* [1] Barre de recherche\n\t=========================================================*/\n\t& > #searchbar{\n\t\tdisplay: inline-block;\n\t\tposition: absolute;\n\t\t\ttop: .8em;\n\t\t\tleft: 1em;\n\t\t\twidth: 20em;\n\t\t\theight: 2em;\n\n\t\tpadding: .2em 1em;\n\n\t\tborder: 0;\n\t\tborder-radius: 3px;\n\n\t\tbackground-color: $theme-bg;\n\n\t}\n\n\t/* [2] Informations utilisateur\n\t=========================================================*/\n\t/* (0) Conteneur */\n\t& > #user-data{\n\t\tdisplay: inline-block;\n\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tright: 0;\n\t\t\theight: calc( 100% - 2*1em );\n\n\n\t\t/* (1) Username de l'utilisateur */\n\t\t& > #user-name{\n\t \tdisplay: block;\n\t \tposition: absolute;\n\t \t\ttop: 0;\n\t \t\tright: calc( #{$header-height}*2 - 1em );\n\t \t\theight: $header-height;\n\n\t \tpadding: 0 1em;\n\n\t\t\tcolor: #fff;\n\t\t\tline-height: $header-height;\n\t\t\twhite-space: nowrap;\n\t\t\tfont-weight: bold;\n\n\t\t\tcursor: pointer;\n\n\t\t}\n\n\n\t\t/* (2) Image du profil */\n\t\t& > #user-picture{\n\t\t\tdisplay: block;\n\t\t\tposition: absolute;\n\t\t\t\ttop: 1em;\n\t\t\t\tright: $header-height;\n\t\t\t\twidth: calc( #{$header-height} - 2*1em );\n\t\t\t\theight: calc( #{$header-height} - 2*1em );\n\n\n\t\t\tborder-radius: 50% / 50%;\n\n\t\t\tbackground: $theme-bg url('/f/svg/nopic/st/header') center center no-repeat;\n\t\t\tbackground-size: auto 80%;\n\n\t\t\t// Si on est connecte\n\t\t\t&.active{ background-image: url('/f/svg/sample/dy/profile'); background-size: auto 100%; }\n\n\t\t\tcursor: default;\n\n\t\t\talign-self: center;\n\t\t}\n\n\n\n\t\t/* (3) Icone d'activation */\n\t\t&:before{\n\t\t\tcontent: '';\n\t\t\tdisplay: block;\n\t\t\tposition: absolute;\n\t\t\t\ttop: 0;\n\t\t\t\tright: 0;\n\t\t\t\twidth: $header-height;\n\t\t\t\theight: $header-height;\n\n\t\t\tbackground: url('/f/svg/expand/st/header/ffffff') center center no-repeat;\n\t\t\tbackground-size: 1em 1em;\n\n\t\t\tcursor: pointer;\n\n\t\t}\n\n\n\t}\n\n\n\n\t/* [3] Menu deroulant pour l'administration du profil\n\t=========================================================*/\n\t& > .user-panel{\n \tdisplay: block;\n \tposition: absolute;\n \ttop: calc( #{$header-height} - 1em );\n \tright: 0;\n\n margin: .5em;\n\n\t\tborder-radius: 5px;\n\t\tborder: 1px solid darken($theme-bg, 10);\n\n background-color: #fff;\n\n @include transition( left .3s ease-in-out );\n\n\n /* (1) Pour chaque element du menu */\n & > span{\n \tdisplay: block;\n \tposition: relative;\n\n\t\t\t// On ajoute une ligne en dessous sauf pour le dernier\n\t\t\t&:not(:last-child){\n\t\t\t\tborder-bottom: 1px solid #ddd;\n\t\t\t}\n\n\t\t\tcolor: #000;\n\t\t\tpadding: .5em 1em;\n\t\t\tpadding-left: 2em;\n\n\t\t\tcursor: pointer;\n\n\t\t\t// @hover\n\t\t\t&:hover{\n\t\t\t\tbackground-color: #eee;\n\t\t\t}\n }\n\n\n\n\n }\n\n /* (3) Gestion de l'activation ou non de l'user panel */\n\t& > #toggle-user-panel{ display: none; }\n\t& > #toggle-user-panel + .user-panel{ left: 100%; }\n\t& > #toggle-user-panel:checked + .user-panel{ left: auto; }\n\t& > #toggle-user-panel:checked + .user-panel:before{ left: 7em; }\n\n\n\n\n\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\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": []
|
||||
}
|
|
@ -157,7 +157,7 @@ body{
|
|||
background-color: $dark-bg;
|
||||
|
||||
color: $dark-fg-primary;
|
||||
font-weight: bold;
|
||||
// font-weight: bold;
|
||||
letter-spacing: .07em;
|
||||
|
||||
@include transition( border .2s ease-in-out );
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -6,9 +6,9 @@
|
|||
"../constants.scss"
|
||||
],
|
||||
"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/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",
|
||||
"@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\t// font-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"
|
||||
],
|
||||
"mappings": "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",
|
||||
"mappings": "ACAA;2DAC2D;AAC3D,oCAAoC;AAMpC,iCAAiC;AAQjC,4CAA4C;AAS5C;2DAC2D;AAC3D,wBAAwB;AAMxB;2DAC2D;AAe3D;2DAC2D;ADhD3D,IAAI,CAAA;EAEH,WAAW,EAAE,WAAY;EACzB,SAAS,EAAE,IAAK;CAChB;;AAID,QAAQ,CAAA;EACP,OAAO,EAAE,KAAM;EACf,QAAQ,EAAE,KAAM;EACf,GAAG,EAAE,CAAE;EACP,IAAI,EAAE,CAAE;EACR,KAAK,EAAE,IAAK;EACZ,MAAM,EAAE,IAAK;EAEd,gBAAgB,ECfE,OAAO;EDiBzB,UAAU,EAAE,MAAO;EACnB,UAAU,EAAE,IAAK;EAEjB,OAAO,EAAE,CAAE;EAGX;6CAC4C;EAkB5C;6CAC4C;EAoB5C;6CAC4C;CAkB5C;;AA3ED,QAAQ,GAkBH,OAAO,CAAA;EACV,OAAO,EAAE,KAAM;EACf,QAAQ,EAAE,KAAM;EACf,GAAG,EAAE,CAAE;EACP,IAAI,EAAE,CAAE;EACR,KAAK,EAAE,IAAK;EACZ,MAAM,EAAE,gBAAI;EAEb,aAAa,EAAE,GAAG,CAAC,KAAK,CAAC,OAAM;EAE/B,gBAAgB,ECxBA,OAAO;ED0BvB,OAAO,EAAE,GAAI;CAEb;;AAhCF,QAAQ,GAsCH,UAAU,CAAA;EACb,OAAO,EAAE,KAAM;EACf,QAAQ,EAAE,KAAM;EACf,GAAG,ECtBY,GAAG;EDuBlB,IAAI,EAAE,CAAE;EACR,KAAK,ECzBU,IAAI;ED0BnB,MAAM,EAAE,iBAAI;EAEb,UAAU,EAAE,gBAAiB;EAE7B,gBAAgB,EAAE,IAAK;ECbrB,kBAAkB,EDeC,GAAG,CAAC,IAAG;ECd1B,UAAU,EDcS,GAAG,CAAC,IAAG;EAE5B,OAAO,EAAE,EAAG;CACZ;;AArDF,QAAQ,GA0DH,UAAU,CAAA;EACb,OAAO,EAAE,IAAK;EACd,QAAQ,EAAE,QAAS;EAClB,GAAG,EC1CY,GAAG;ED2ClB,IAAI,EC5CW,IAAI;ED6CnB,KAAK,EAAE,kBAAI;EACX,UAAU,EAAE,iBAAI;EAIjB,cAAc,EAAE,GAAI;EACpB,eAAe,EAAE,aAAc;EAC/B,SAAS,EAAE,IAAK;EAEhB,UAAU,EAAE,IAAK;EACjB,UAAU,EAAE,IAAK;CACjB;;AAMF;2DAC2D;AAC3D,MAAM,CAAA;EACL,OAAO,EAAE,IAAK;EACd,QAAQ,EAAE,KAAM;EACf,GAAG,EAAE,CAAE;EACP,IAAI,EAAE,KAAM;EACZ,KAAK,EAAE,IAAK;EACZ,MAAM,EAAE,IAAK;EAQd,cAAc,EAAE,GAAI;EACpB,SAAS,EAAE,MAAO;EAClB,eAAe,EAAE,YAAa;EAC9B,WAAW,EAAE,MAAO;EAGpB,gBAAgB,ECvGC,OAAO;EAoCrB,kBAAkB,EDqEA,IAAI,CAAC,IAAG,CAAC,WAAW;ECpEtC,UAAU,EDoEQ,IAAI,CAAC,IAAG,CAAC,WAAW;EAEzC,OAAO,EAAE,GAAI;EAKb,6BAA6B;EAU7B,iCAAiC;EAsFjC,iCAAiC;CAmBjC;;AAhJD,MAAM,AASJ,OAAO,CAAA;EACP,IAAI,EAAE,CAAE;CACR;;AAXF,MAAM,GA8BD,WAAW,CAAA;EACd,KAAK,EAAE,IAAK;EACZ,MAAM,EAAE,IAAK;EAEb,UAAU,EAAE,uBAAG,CAAqB,MAAM,CAAC,MAAM,CAAC,SAAS;EAC3D,eAAe,EAAE,SAAU;CAC3B;;AApCF,MAAM,GAwCD,WAAW,CAAA;EACd,OAAO,EAAE,KAAM;EAGf,4CAA4C;EAuC5C,+BAA+B;EA2B/B,6BAA6B;CAa7B;;AA3HF,MAAM,GAwCD,WAAW,GAKV,KAAK,CAAA,AAAA,IAAC,CAAK,MAAM,AAAX;AA7CZ,MAAM,GAwCD,WAAW,GAMV,KAAK,CAAA,AAAA,IAAC,CAAK,UAAU,AAAf;AA9CZ,MAAM,GAwCD,WAAW,GAOV,KAAK,CAAA,AAAA,IAAC,CAAK,QAAQ,AAAb,EAAc;EACvB,OAAO,EAAE,IAAK;EACb,KAAK,EAAE,IAAK;EAEb,MAAM,EAAE,KAAM;EACd,OAAO,EAAE,OAAQ;EAGjB,cAAc,EAAE,MAAO;EACvB,eAAe,EAAE,YAAa;EAC9B,SAAS,EAAE,MAAO;EAClB,WAAW,EAAE,MAAO;EAGpB,aAAa,EAAE,GAAI;EACnB,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO;EAEzB,gBAAgB,ECnJD,OAAO;EDqJtB,KAAK,EClJU,OAAO;EDoJtB,cAAc,EAAE,KAAM;ECnHrB,kBAAkB,EDqHE,MAAM,CAAC,IAAG,CAAC,WAAW;ECpH1C,UAAU,EDoHU,MAAM,CAAC,IAAG,CAAC,WAAW;EAE3C,MAAM,EAAE,OAAQ;CAQhB;;AAhFH,MAAM,GAwCD,WAAW,GAKV,KAAK,CAAA,AAAA,IAAC,CAAK,MAAM,AAAX,CA8BR,MAAM,EA3EV,MAAM,GAwCD,WAAW,GAKV,KAAK,CAAA,AAAA,IAAC,CAAK,MAAM,AAAX,CA+BR,MAAM;AA5EV,MAAM,GAwCD,WAAW,GAMV,KAAK,CAAA,AAAA,IAAC,CAAK,UAAU,AAAf,CA6BR,MAAM;AA3EV,MAAM,GAwCD,WAAW,GAMV,KAAK,CAAA,AAAA,IAAC,CAAK,UAAU,AAAf,CA8BR,MAAM;AA5EV,MAAM,GAwCD,WAAW,GAOV,KAAK,CAAA,AAAA,IAAC,CAAK,QAAQ,AAAb,CA4BR,MAAM;AA3EV,MAAM,GAwCD,WAAW,GAOV,KAAK,CAAA,AAAA,IAAC,CAAK,QAAQ,AAAb,CA6BR,MAAM,CAAA;EACN,YAAY,ECnKG,OAAO;CDoKtB;;AA9EJ,MAAM,GAwCD,WAAW,GA4CV,KAAK,CAAA,AAAA,IAAC,CAAK,QAAQ,AAAb,EAAc;EACvB,KAAK,EAAE,IAAK;EACZ,MAAM,EAAE,KAAM;EAEd,MAAM,EAAE,CAAE;EAEV,gBAAgB,EChLA,OAAO;EDkLvB,KAAK,EC5KU,OAAO;ED6KtB,WAAW,EAAE,IAAK;EAClB,UAAU,EAAE,IAAK;EAEjB,MAAM,EAAE,OAAQ;CAQhB;;AAxGH,MAAM,GAwCD,WAAW,GA4CV,KAAK,CAAA,AAAA,IAAC,CAAK,QAAQ,AAAb,CAeR,MAAM,CAAA;EACN,gBAAgB,EAAE,OAAM;EACxB,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAM;CAC1B;;AAtGJ,MAAM,GAwCD,WAAW,GAuEV,cAAc,CAAA;EACjB,KAAK,ECjMU,OAAO;EDmMtB,MAAM,EAAE,OAAQ;CAOhB;;AAzHH,MAAM,GAwCD,WAAW,GAuEV,cAAc,AAMhB,MAAM,CAAA;EACN,KAAK,EC5MU,OAAO;ED6MtB,eAAe,EAAE,SAAU;CAC3B;;AAxHJ,MAAM,GA8HD,YAAY,CAAA;EACf,OAAO,EAAE,KAAM;EACf,QAAQ,EAAE,QAAS;EAClB,GAAG,EAAE,GAAI;EACT,KAAK,EAAE,GAAI;EACX,SAAS,EAAE,GAAI;EACf,MAAM,EAAE,GAAI;EAEb,UAAU,EAAE,sCAAG,CAAoC,KAAK,CAAC,MAAM,CAAC,SAAS;EACzE,eAAe,EAAE,GAAI;EAErB,KAAK,EAAE,IAAK;EACZ,aAAa,EAAE,GAAI;EACnB,WAAW,EAAE,GAAI;EACjB,WAAW,EAAE,IAAK;EAElB,MAAM,EAAE,OAAQ;CAChB",
|
||||
"names": []
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -6,9 +6,9 @@
|
|||
"../constants.scss"
|
||||
],
|
||||
"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/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",
|
||||
"@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\t// font-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"
|
||||
],
|
||||
"mappings": "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",
|
||||
"mappings": "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",
|
||||
"names": []
|
||||
}
|
|
@ -0,0 +1,104 @@
|
|||
body > #notification-container{
|
||||
|
||||
display: flex;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
|
||||
flex-direction: column;
|
||||
flex-wrap: nowrap;
|
||||
|
||||
z-index: 200;
|
||||
pointer-events: none;
|
||||
|
||||
|
||||
.notification-element{
|
||||
display: block;
|
||||
position: relative;
|
||||
margin: .2em auto;
|
||||
padding: 0 1em;
|
||||
|
||||
border-radius: 3px;
|
||||
border: 1px solid #ddd;
|
||||
border-bottom: 1px solid darken(#ddd, 10);
|
||||
box-shadow: inset 0 0 1em #eee;
|
||||
|
||||
background-color: #fff;
|
||||
|
||||
pointer-events: all;
|
||||
cursor: default;
|
||||
|
||||
// ECARTEMENT DU BOTTOM POUR LE DERNIER
|
||||
&:last-child{
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
|
||||
// ANIMATION DE fadeIn + fadeOut
|
||||
transition: opacity .5s ease-in-out;
|
||||
opacity: 0;
|
||||
|
||||
&.notification-visible{
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
|
||||
// ANIMATION DE @HOVER
|
||||
&:hover{
|
||||
box-shadow: inset 0 0 1em #eee, 0 0 1em #555;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// TITRE ET BOULE DE COULEUR
|
||||
strong:first-child{
|
||||
|
||||
text-transform: uppercase;
|
||||
padding-left: 1.5em;
|
||||
|
||||
&:before{
|
||||
content: '';
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
top: 1.2em;
|
||||
left: 1em;
|
||||
width: .9em;
|
||||
height: .9em;
|
||||
|
||||
border-radius: 50% / 50%;
|
||||
box-shadow: inset -1px 1px 2px rgba(50, 50, 50, .5);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// DIFFERENTS THEMES
|
||||
// WARNING
|
||||
&[data-warning]{
|
||||
border-color: #dd6a45;
|
||||
border-bottom-color: darken(#dd6a45, 10);
|
||||
strong:first-child{ &:before{ background-color: #dd6a45; } }
|
||||
}
|
||||
// INFO
|
||||
&[data-info]{
|
||||
border-color: #2195da;
|
||||
border-bottom-color: darken(#2195da, 10);
|
||||
strong:first-child{ &:before{ background-color: #2195da; } }
|
||||
}
|
||||
// SUCCESS
|
||||
&[data-success]{
|
||||
border-color: #5fca4a;
|
||||
border-bottom-color: darken(#5fca4a, 10);
|
||||
strong:first-child{ &:before{ background-color: #5fca4a; } }
|
||||
}
|
||||
// ERROR
|
||||
&[data-error]{
|
||||
border-color: #d94747;
|
||||
border-bottom-color: darken(#d94747, 10);
|
||||
strong:first-child{ &:before{ background-color: #d94747; } }
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"version": 3,
|
||||
"file": "expanded.css",
|
||||
"sources": [
|
||||
"../notif.scss"
|
||||
],
|
||||
"sourcesContent": [
|
||||
"body > #notification-container{\n\n display: flex;\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n\n flex-direction: column;\n flex-wrap: nowrap;\n\n z-index: 200;\n pointer-events: none;\n\n\n .notification-element{\n display: block;\n position: relative;\n margin: .2em auto;\n padding: 0 1em;\n\n border-radius: 3px;\n border: 1px solid #ddd;\n border-bottom: 1px solid darken(#ddd, 10);\n box-shadow: inset 0 0 1em #eee;\n\n background-color: #fff;\n\n pointer-events: all;\n cursor: default;\n\n // ECARTEMENT DU BOTTOM POUR LE DERNIER\n &:last-child{\n margin-bottom: 1em;\n }\n\n\n // ANIMATION DE fadeIn + fadeOut\n transition: opacity .5s ease-in-out;\n opacity: 0;\n\n &.notification-visible{\n opacity: 1;\n }\n\n\n // ANIMATION DE @HOVER\n &:hover{\n box-shadow: inset 0 0 1em #eee, 0 0 1em #555;\n }\n\n\n\n // TITRE ET BOULE DE COULEUR\n strong:first-child{\n\n text-transform: uppercase;\n padding-left: 1.5em;\n\n &:before{\n content: '';\n display: inline-block;\n position: absolute;\n top: 1.2em;\n left: 1em;\n width: .9em;\n height: .9em;\n\n border-radius: 50% / 50%;\n box-shadow: inset -1px 1px 2px rgba(50, 50, 50, .5);\n }\n\n }\n\n // DIFFERENTS THEMES\n // WARNING\n &[data-warning]{\n border-color: #dd6a45;\n border-bottom-color: darken(#dd6a45, 10);\n strong:first-child{ &:before{ background-color: #dd6a45; } }\n }\n // INFO\n &[data-info]{\n border-color: #2195da;\n border-bottom-color: darken(#2195da, 10);\n strong:first-child{ &:before{ background-color: #2195da; } }\n }\n // SUCCESS\n &[data-success]{\n border-color: #5fca4a;\n border-bottom-color: darken(#5fca4a, 10);\n strong:first-child{ &:before{ background-color: #5fca4a; } }\n }\n // ERROR\n &[data-error]{\n border-color: #d94747;\n border-bottom-color: darken(#d94747, 10);\n strong:first-child{ &:before{ background-color: #d94747; } }\n }\n\n\n }\n\n}\n"
|
||||
],
|
||||
"mappings": "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",
|
||||
"names": []
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"version": 3,
|
||||
"file": "min.css",
|
||||
"sources": [
|
||||
"../notif.scss"
|
||||
],
|
||||
"sourcesContent": [
|
||||
"body > #notification-container{\n\n display: flex;\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n\n flex-direction: column;\n flex-wrap: nowrap;\n\n z-index: 200;\n pointer-events: none;\n\n\n .notification-element{\n display: block;\n position: relative;\n margin: .2em auto;\n padding: 0 1em;\n\n border-radius: 3px;\n border: 1px solid #ddd;\n border-bottom: 1px solid darken(#ddd, 10);\n box-shadow: inset 0 0 1em #eee;\n\n background-color: #fff;\n\n pointer-events: all;\n cursor: default;\n\n // ECARTEMENT DU BOTTOM POUR LE DERNIER\n &:last-child{\n margin-bottom: 1em;\n }\n\n\n // ANIMATION DE fadeIn + fadeOut\n transition: opacity .5s ease-in-out;\n opacity: 0;\n\n &.notification-visible{\n opacity: 1;\n }\n\n\n // ANIMATION DE @HOVER\n &:hover{\n box-shadow: inset 0 0 1em #eee, 0 0 1em #555;\n }\n\n\n\n // TITRE ET BOULE DE COULEUR\n strong:first-child{\n\n text-transform: uppercase;\n padding-left: 1.5em;\n\n &:before{\n content: '';\n display: inline-block;\n position: absolute;\n top: 1.2em;\n left: 1em;\n width: .9em;\n height: .9em;\n\n border-radius: 50% / 50%;\n box-shadow: inset -1px 1px 2px rgba(50, 50, 50, .5);\n }\n\n }\n\n // DIFFERENTS THEMES\n // WARNING\n &[data-warning]{\n border-color: #dd6a45;\n border-bottom-color: darken(#dd6a45, 10);\n strong:first-child{ &:before{ background-color: #dd6a45; } }\n }\n // INFO\n &[data-info]{\n border-color: #2195da;\n border-bottom-color: darken(#2195da, 10);\n strong:first-child{ &:before{ background-color: #2195da; } }\n }\n // SUCCESS\n &[data-success]{\n border-color: #5fca4a;\n border-bottom-color: darken(#5fca4a, 10);\n strong:first-child{ &:before{ background-color: #5fca4a; } }\n }\n // ERROR\n &[data-error]{\n border-color: #d94747;\n border-bottom-color: darken(#d94747, 10);\n strong:first-child{ &:before{ background-color: #d94747; } }\n }\n\n\n }\n\n}\n"
|
||||
],
|
||||
"mappings": "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",
|
||||
"names": []
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
# -*- Encoding: utf-8 -*- #
|
||||
|
||||
|
||||
# [0.0] Import
|
||||
#=======================================================#
|
||||
import os; # ls, etc
|
||||
import re; # regex
|
||||
|
||||
|
||||
|
||||
# [0.1] Dépendances
|
||||
#=======================================================#
|
||||
def filter(files, filter):
|
||||
filtered = [];
|
||||
for file in files:
|
||||
if( re.search('\.'+filter+'$', file) != None ):
|
||||
filtered.append(file);
|
||||
return filtered;
|
||||
|
||||
|
||||
|
||||
# [1] On récupère la racine souhaitée
|
||||
#=======================================================#
|
||||
new_root = raw_input('New root: ');
|
||||
print "Validate '%s'" % new_root,
|
||||
root_validate = raw_input('[y/n] ? ');
|
||||
|
||||
# (1) Non validation de la route -> on quitte #
|
||||
if( root_validate != 'y' ):
|
||||
print 'Exiting.\n';
|
||||
exit();
|
||||
|
||||
|
||||
|
||||
|
||||
# [2] On récupère tous les fichiers
|
||||
#=======================================================#
|
||||
all_files = [];
|
||||
for (dir, _, files) in os.walk('.'):
|
||||
for f in files:
|
||||
path = os.path.join(dir, f)
|
||||
if os.path.exists(path):
|
||||
all_files.append(path);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# [3] On remplace dans tous les fichiers
|
||||
#=======================================================#
|
||||
# (1) Pour chaque fichier #
|
||||
for filename in filter(all_files,'php')+filter(all_files,'js')+filter(all_files,'scss')+filter(all_files, 'css'):
|
||||
print '%s ... ' % filename,;
|
||||
|
||||
content = [];
|
||||
|
||||
# (2) On lit le fichier et récupère toutes les lignes #
|
||||
with open(filename, 'r') as f:
|
||||
content = f.readlines();
|
||||
|
||||
# (3) Pour chaque ligne, on remplace #
|
||||
for (i, line) in enumerate(content):
|
||||
newline = re.sub(
|
||||
'(?P<bef>["\'])([^\']+/?)(?P<aft>f/[^\'.]+["\'])',
|
||||
'\g<bef>/'+ new_root +'/\g<aft>',
|
||||
line
|
||||
);
|
||||
content[i] = newline;
|
||||
|
||||
# (4) On écrit ce qu'on a modifié #
|
||||
with open(filename, 'w') as f:
|
||||
for line in content:
|
||||
f.write(line);
|
||||
|
||||
|
||||
print ' done';
|
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
"call_log": [
|
||||
{ "contact":"1", "date":"2014-05-28T14:43:25", "duration":"0", "direction":"INCOMING", "type":"SMS" },
|
||||
{ "contact":"2", "date":"2014-05-28T14:43:25", "duration":"0", "direction":"INCOMING", "type":"SMS" },
|
||||
{ "contact":"3", "date":"2014-05-28T14:43:25", "duration":"0", "direction":"INCOMING", "type":"SMS" },
|
||||
{ "contact":"4", "date":"2014-05-28T14:43:25", "duration":"0", "direction":"INCOMING", "type":"SMS" },
|
||||
{ "contact":"5", "date":"2014-05-28T14:43:25", "duration":"0", "direction":"INCOMING", "type":"SMS" },
|
||||
{ "contact":"6", "date":"2014-05-28T14:43:25", "duration":"0", "direction":"INCOMING", "type":"SMS" },
|
||||
{ "contact":"7", "date":"2014-05-28T14:43:25", "duration":"0", "direction":"INCOMING", "type":"SMS" },
|
||||
{ "contact":"8", "date":"2014-05-28T14:43:25", "duration":"0", "direction":"INCOMING", "type":"SMS" },
|
||||
{ "contact":"9", "date":"2014-05-28T14:43:25", "duration":"0", "direction":"INCOMING", "type":"SMS" },
|
||||
{ "contact":"10", "date":"2014-05-28T14:43:25", "duration":"0", "direction":"INCOMING", "type":"SMS" },
|
||||
{ "contact":"11", "date":"2014-05-28T14:43:25", "duration":"0", "direction":"INCOMING", "type":"SMS" },
|
||||
{ "contact":"12", "date":"2014-02-28T15:00:10", "duration":"125", "direction":"OUTGOING", "type":"PHONE" },
|
||||
{ "contact":"13", "date":"2014-02-15T23:06:46", "duration":"0", "direction":"INGOING", "type":"PHONE" },
|
||||
{ "contact":"14", "date":"2014-02-15T23:06:18", "duration":"0", "direction":"INGOING", "type":"PHONE" },
|
||||
{ "contact":"15", "date":"2014-02-15T21:08:34", "duration":"349", "direction":"OUTGOING", "type":"PHONE" },
|
||||
{ "contact":"16", "date":"2014-02-15T20:51:38", "duration":"0", "direction":"OUTGOING", "type":"PHONE" },
|
||||
{ "contact":"17", "date":"2014-02-15T19:06:33", "duration":"657", "direction":"OUTGOING", "type":"PHONE" },
|
||||
{ "contact":"18", "date":"2014-02-15T19:06:33", "duration":"657", "direction":"OUTGOING", "type":"PHONE" },
|
||||
{ "contact":"19", "date":"2014-02-15T19:06:33", "duration":"657", "direction":"OUTGOING", "type":"PHONE" },
|
||||
{ "contact":"20", "date":"2014-02-15T19:06:33", "duration":"657", "direction":"OUTGOING", "type":"PHONE" },
|
||||
{ "contact":"21", "date":"2014-02-15T17:24:18", "duration":"276", "direction":"OUTGOING", "type":"PHONE" },
|
||||
{ "contact":"22", "date":"2014-02-15T16:34:29", "duration":"36", "direction":"OUTGOING", "type":"PHONE" }
|
||||
],
|
||||
|
||||
"contacts": [
|
||||
{ "contact":"1", "number":"0502030405", "name":"", "sexe":"0", "age":"5", "studies":"1", "reltype":"inconnu", "dist":"5" },
|
||||
{ "contact":"2", "number":"0502030561", "name":"", "sexe":"0", "age":"10", "studies":"2", "reltype":"inconnu", "dist":"5+" },
|
||||
{ "contact":"3", "number":"0502030717", "name":"", "sexe":"0", "age":"15", "studies":"3", "reltype":"inconnu", "dist":"5+" },
|
||||
{ "contact":"4", "number":"0502030873", "name":"", "sexe":"0", "age":"20", "studies":"4", "reltype":"inconnu", "dist":"5+" },
|
||||
{ "contact":"5", "number":"0502031029", "name":"", "sexe":"0", "age":"25", "studies":"5", "reltype":"inconnu", "dist":"5" },
|
||||
{ "contact":"6", "number":"0502031185", "name":"", "sexe":"0", "age":"30", "studies":"6", "reltype":"inconnu", "dist":"15" },
|
||||
{ "contact":"7", "number":"0502031341", "name":"", "sexe":"0", "age":"35", "studies":"7", "reltype":"inconnu", "dist":"15" },
|
||||
{ "contact":"8", "number":"0502031497", "name":"", "sexe":"0", "age":"40", "studies":"8", "reltype":"inconnu", "dist":"15" },
|
||||
{ "contact":"9", "number":"0502031653", "name":"", "sexe":"0", "age":"45", "studies":"9", "reltype":"inconnu", "dist":"5" },
|
||||
{ "contact":"10", "number":"0502031809", "name":"", "sexe":"0", "age":"50", "studies":"10", "reltype":"inconnu", "dist":"5" },
|
||||
{ "contact":"11", "number":"0502031965", "name":"", "sexe":"0", "age":"55", "studies":"11", "reltype":"inconnu", "dist":"15+" },
|
||||
{ "contact":"12", "number":"0502032121", "name":"", "sexe":"0", "age":"60", "studies":"12", "reltype":"inconnu", "dist":"15+" },
|
||||
{ "contact":"13", "number":"0502032277", "name":"", "sexe":"0", "age":"65", "studies":"13", "reltype":"inconnu", "dist":"15+" },
|
||||
{ "contact":"14", "number":"0502032433", "name":"", "sexe":"0", "age":"70", "studies":"14", "reltype":"inconnu", "dist":"60+" },
|
||||
{ "contact":"15", "number":"0502032589", "name":"", "sexe":"0", "age":"75", "studies":"15", "reltype":"inconnu", "dist":"60+" },
|
||||
{ "contact":"16", "number":"0502032745", "name":"", "sexe":"0", "age":"80", "studies":"16", "reltype":"inconnu", "dist":"60+" },
|
||||
{ "contact":"17", "number":"0502032901", "name":"", "sexe":"0", "age":"85", "studies":"17", "reltype":"inconnu", "dist":"60+" },
|
||||
{ "contact":"18", "number":"0502033057", "name":"", "sexe":"0", "age":"90", "studies":"18", "reltype":"inconnu", "dist":"60+" },
|
||||
{ "contact":"19", "number":"0502033213", "name":"", "sexe":"0", "age":"95", "studies":"19", "reltype":"inconnu", "dist":"5" },
|
||||
{ "contact":"20", "number":"0502033369", "name":"", "sexe":"0", "age":"100", "studies":"20", "reltype":"inconnu", "dist":"5" },
|
||||
{ "contact":"21", "number":"0502033525", "name":"", "sexe":"0", "age":"105", "studies":"21", "reltype":"inconnu", "dist":"5" },
|
||||
{ "contact":"22", "number":"0502033681", "name":"", "sexe":"0", "age":"110", "studies":"22", "reltype":"inconnu", "dist":"5" }
|
||||
|
||||
]
|
||||
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
1022
doc/sample.xml
1022
doc/sample.xml
File diff suppressed because it is too large
Load Diff
|
@ -1,4 +1,6 @@
|
|||
var DOM={WRAPPER:$("body > #WRAPPER"),HEADER:$("body > #WRAPPER > #HEADER"),MENUSIDE:$("body > #WRAPPER > #MENU-SIDE"),CONTAINER:$("body > #WRAPPER > #CONTAINER")},pageManager;api=new APIClass("/api/");
|
||||
var DOM={WRAPPER:$("body > #WRAPPER"),HEADER:$("body > #WRAPPER > #HEADER"),MENUSIDE:$("body > #WRAPPER > #MENU-SIDE"),CONTAINER:$("body > #WRAPPER > #CONTAINER")},pageManager;api=new APIClass("/api/");Notification=new NotificationClass($("#notification-container"));Notification.defaultTimeout=4E3;
|
||||
Notification.errorCodes={"-1":"Erreur de r\u00e9seau, veuillez recharger la page et r\u00e9essayer",0:"Erreur interne",1:"Erreur interne",2:"Erreur interne",3:"Le fichier est introuvable",4:"Erreur interne",5:"Erreur interne",6:"Erreur interne",7:"Erreur interne",8:"Erreur interne",9:"Certaines donn\u00e9es sont manquantes",10:"Erreur interne",11:"Erreur interne",12:"Erreur interne",13:"Erreur interne",14:"Erreur interne",15:"Erreur interne",16:"Vous n'avez pas la permission d'effectuer cette action",
|
||||
17:"Le t\u00e9l\u00e9chargement a \u00e9chou\u00e9",18:"Le fichier est invalide (format incorrect)"};lsi.setStorage(sessionStorage);
|
||||
function navSubMenu(a){var c=$("#MENU-SIDE > span[data-link="+pageManager.page+'] + div.sub > span[data-sublink="'+pageManager.vars[0]+'"]'),b=null,b=a instanceof Element?a:null,b="string"==typeof a?$("#MENU-SIDE > span[data-link="+pageManager.page+'] + div.sub > span[data-sublink="'+a+'"]'):b,b=null==b?$("#MENU-SIDE > span[data-link="+pageManager.page+"] + div.sub > span[data-sublink]"):b;if(null==b)return!1;null!=c&&c.remClass("active");c=$$("#CONTAINER > section[data-sublink].active");for(a=0;a<
|
||||
c.length;a++)c[a].remClass("active");if(null!=b)for(b.addClass("active"),c=$$('#CONTAINER > section[data-sublink="'+b.getData("sublink")+'"]'),a=0;a<c.length;a++)c[a].addClass("active");if(!b.getData("sublink"))return!1;a=pageManager.vars[0]!=b.getData("sublink");pageManager.vars[0]=b.getData("sublink");a&&pageManager.updateURL()}
|
||||
function navMenu(a){var c=$('#WRAPPER > #MENU-SIDE > span[data-link="'+pageManager.page+'"]'),b=null,b=a instanceof Element?a:null,b="string"==typeof a?$('#WRAPPER > #MENU-SIDE > span[data-link="'+a+'"]'):b,b=null==b?$('#WRAPPER > #MENU-SIDE > span[data-link="'+pageManager.pagelist[0]+'"]'):b;if(null==b)return!1;null!=c&&c.remClass("active");null!=b&&b.addClass("active");b.getData("link")&&(DOM.HEADER.addClass("loading"),pageManager.setPage(b.getData("link")),pageManager.activeXHR.addEventListener("loadend",
|
||||
|
|
|
@ -12,6 +12,38 @@ var pageManager;
|
|||
// On cree une instance de l'api
|
||||
api = new APIClass('/api/');
|
||||
|
||||
// On crée une instance du gestionnaire des notifications
|
||||
Notification = new NotificationClass( $('#notification-container') );
|
||||
// Temps d'une notification : ~4s
|
||||
Notification.defaultTimeout = 4000;
|
||||
|
||||
// Définition des codes d'erreurs
|
||||
Notification.errorCodes = {
|
||||
'-1': 'Erreur de réseau, veuillez recharger la page et réessayer',
|
||||
0: 'Erreur interne',
|
||||
1: 'Erreur interne',
|
||||
2: 'Erreur interne',
|
||||
3: 'Le fichier est introuvable',
|
||||
4: 'Erreur interne',
|
||||
5: 'Erreur interne',
|
||||
6: 'Erreur interne',
|
||||
7: 'Erreur interne',
|
||||
8: 'Erreur interne',
|
||||
9: 'Certaines données sont manquantes',
|
||||
10: 'Erreur interne',
|
||||
11: 'Erreur interne',
|
||||
12: 'Erreur interne',
|
||||
13: 'Erreur interne',
|
||||
14: 'Erreur interne',
|
||||
15: 'Erreur interne',
|
||||
16: 'Vous n\'avez pas la permission d\'effectuer cette action',
|
||||
17: 'Le téléchargement a échoué',
|
||||
18: 'Le fichier est invalide (format incorrect)'
|
||||
};
|
||||
|
||||
// On définit qu'on veut utiliser le 'sessionStorage'
|
||||
lsi.setStorage(sessionStorage);
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -46,12 +46,9 @@ miniFicheBuilder.setLayout(
|
|||
"<article class='mini-fiche-relation'>\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='lastname' value='@lastname'>\n"+
|
||||
"\t<input type='hidden' data-name='username' value='@username'>\n"+
|
||||
|
||||
"\t<span data-space></span>\n"+
|
||||
"\t<h4 data-icon='a' class='color2'>@firstname @lastname @username</h4>\n"+
|
||||
"\t<h4 data-icon='a' class='color2'>@name</h4>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>"+
|
||||
"\t\t@countcall appels"+
|
||||
|
@ -61,8 +58,8 @@ miniFicheBuilder.setLayout(
|
|||
"\t</h5>"+
|
||||
|
||||
"\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='sexeF_min_@uid'><label for='sexeF_min_@uid'>Femme</label>\n"+
|
||||
"\t\t<input type='radio' name='sexe_min_@uid' data-name='sexe' id='sexeH_min_@uid' value='H'><label for='sexeH_min_@uid'>Homme</label>\n"+
|
||||
"\t\t   <input type='radio' name='sexe_min_@uid' data-name='sexe' id='sexeF_min_@uid' value='F'><label for='sexeF_min_@uid'>Femme</label>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
|
||||
|
@ -126,24 +123,26 @@ miniFicheBuilder.setLayout(
|
|||
|
||||
"\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\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype0_mini_@uid' value='0'><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' value='1'><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' value='2'><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' value='3'><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' value='4'><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' value='5'><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' value='6'><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' value='7'><label for='reltype7_mini_@uid'>Ami proche</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype8_mini_@uid' value='8'><label for='reltype8_mini_@uid'>Relation de service (médecin, ...)</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype9_mini_@uid' value='9'><label for='reltype9_mini_@uid'>Inconnu</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype10_mini_@uid' value='10'><label for='reltype10_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\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 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 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 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'>+ d'une heure</label><br>\n"+
|
||||
"\t\t <input type='radio' name='loc_min_@uid' data-name='loc' id='locA_min_@uid' value='0'><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' value='1'><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' value='2'><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' value='3'><label for='locD_min_@uid'>+ d'une heure</label><br>\n"+
|
||||
"\t</h5>\n"+
|
||||
"</article>");
|
||||
|
||||
|
@ -198,11 +197,8 @@ ficheBuilder.setLayout(
|
|||
|
||||
"\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='firstname' value='@firstname'>\n"+
|
||||
"\t<input type='hidden' data-name='lastname' value='@lastname'>\n"+
|
||||
"\t<input type='hidden' data-name='username' value='@username'>\n"+
|
||||
|
||||
"\t<h4 data-icon='a' class='color2'>@firstname @lastname @username</h4>\n"+
|
||||
"\t<h4 data-icon='a' class='color2'>@name</h4>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>"+
|
||||
"\t\t@countcall appels"+
|
||||
|
@ -212,8 +208,8 @@ ficheBuilder.setLayout(
|
|||
"\t</h5>"+
|
||||
|
||||
"\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='sexeF_@uid'><label for='sexeF_@uid'>Femme</label>\n"+
|
||||
"\t\t<input type='radio' name='sexe_@uid' data-name='sexe' id='sexeH_@uid' value='H'><label for='sexeH_@uid'>Homme</label>\n"+
|
||||
"\t\t <input type='radio' name='sexe_@uid' data-name='sexe' id='sexeF_@uid' value='F'><label for='sexeF_@uid'>Femme</label>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
|
||||
|
@ -288,9 +284,9 @@ ficheBuilder.setLayout(
|
|||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\tSituation familiale:<br>\n"+
|
||||
"\t\t<h5 class='nobold color0'>\n"+
|
||||
"\t\t <input type='radio' name='famsit_@uid' data-name='famsit' id='famsitA_@uid'><label for='famsitA_@uid'>Seul</label><br>\n"+
|
||||
"\t\t <input type='radio' name='famsit_@uid' data-name='famsit' id='famsitB_@uid'><label for='famsitB_@uid'>En couple sans enfants</label><br>\n"+
|
||||
"\t\t <input type='radio' name='famsit_@uid' data-name='famsit' id='famsitC_@uid'><label for='famsitC_@uid'>En couple avec enfants</label>\n"+
|
||||
"\t\t <input type='radio' name='famsit_@uid' data-name='famsit' id='famsitA_@uid' value='0'><label for='famsitA_@uid'>Seul</label><br>\n"+
|
||||
"\t\t <input type='radio' name='famsit_@uid' data-name='famsit' id='famsitB_@uid' value='1'><label for='famsitB_@uid'>En couple sans enfants</label><br>\n"+
|
||||
"\t\t <input type='radio' name='famsit_@uid' data-name='famsit' id='famsitC_@uid' value='2'><label for='famsitC_@uid'>En couple avec enfants</label>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
|
@ -326,30 +322,31 @@ ficheBuilder.setLayout(
|
|||
|
||||
"\t<h4 data-icon='a'>Type de relation</h4>\n"+
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\t <input type='radio' name='reltype_@uid' data-name='reltype' id='reltype0_@uid'><label for='reltype0_@uid'>Père, mère ou équivalent</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_@uid' data-name='reltype' id='reltype1_@uid'><label for='reltype1_@uid'>Frère ou soeur</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_@uid' data-name='reltype' id='reltype2_@uid'><label for='reltype2_@uid'>Autre membre de la famille</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_@uid' data-name='reltype' id='reltype3_@uid'><label for='reltype3_@uid'>Relation amoureuse</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_@uid' data-name='reltype' id='reltype4_@uid'><label for='reltype4_@uid'>Collègue</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_@uid' data-name='reltype' id='reltype5_@uid'><label for='reltype5_@uid'>Voisin</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_@uid' data-name='reltype' id='reltype6_@uid'><label for='reltype6_@uid'>Ami</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_@uid' data-name='reltype' id='reltype7_@uid'><label for='reltype7_@uid'>Copain</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_@uid' data-name='reltype' id='reltype8_@uid'><label for='reltype8_@uid'>Autre : <input type='text' data-name='reltypeSpecial' placeholder='coéquipier de tennis, ..' value='@reltypespecial'></label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_@uid' data-name='reltype' id='reltype0_@uid' value='0'><label for='reltype0_@uid'>Père, mère ou équivalent</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_@uid' data-name='reltype' id='reltype1_@uid' value='1'><label for='reltype1_@uid'>Frère ou soeur</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_@uid' data-name='reltype' id='reltype2_@uid' value='2'><label for='reltype2_@uid'>Autre membre de la famille</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_@uid' data-name='reltype' id='reltype3_@uid' value='3'><label for='reltype3_@uid'>Relation amoureuse</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_@uid' data-name='reltype' id='reltype4_@uid' value='4'><label for='reltype4_@uid'>Collègue</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_@uid' data-name='reltype' id='reltype5_@uid' value='5'><label for='reltype5_@uid'>Voisin</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_@uid' data-name='reltype' id='reltype6_@uid' value='6'><label for='reltype6_@uid'>Ami</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_@uid' data-name='reltype' id='reltype7_@uid' value='7'><label for='reltype7_@uid'>Copain</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_@uid' data-name='reltype' id='reltype8_@uid' value='8'><label for='reltype8_@uid'>Autre : <input type='text' data-name='reltypeSpecial' placeholder='coéquipier de tennis, ..' value='@reltypespecial'></label><br>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
"\t<h4 data-icon='m'>Où habite t-elle/il ?</h4>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\t<input type='text' data-name='city' placeholder='Ville' value='@city'>\n"+
|
||||
"\t\t<input type='text' data-name='cp' placeholder='Code postal' value='@cp'>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
|
||||
"\t<h5 class='nobold color0'>\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='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='locA_@uid' value='0'><label for='locA_@uid'>de 5 minutes</label><br>\n"+
|
||||
"\t\t <input type='radio' name='loc_@uid' data-name='loc' id='locB_@uid' value='1'><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' value='2'><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' value='3'><label for='locD_@uid'>+ d'une heure</label><br>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
|
@ -361,102 +358,102 @@ ficheBuilder.setLayout(
|
|||
|
||||
"\t<h4 data-icon='d'>Contexte de rencontre</h4>\n"+
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte0_@uid'> <label for='contexte0_@uid'>De la même famille</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte1_@uid'> <label for='contexte1_@uid'>Grandi ensemble</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte2_@uid'> <label for='contexte2_@uid'>Par mon mari/ma femme/relation amoureuse</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte3_@uid'> <label for='contexte3_@uid'>Par mes parents</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte4_@uid'> <label for='contexte4_@uid'>Par mes enfants</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte5_@uid'> <label for='contexte5_@uid'>Par un ami</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte6_@uid'> <label for='contexte6_@uid'>Comme voisin</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte7_@uid'> <label for='contexte7_@uid'>Par d’autres membres de la famille</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte8_@uid'> <label for='contexte8_@uid'>Etudes</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte9_@uid'> <label for='contexte9_@uid'>Etudes supérieures</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte0_@uid' value='0'><label for='contexte0_@uid'>De la même famille</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte1_@uid' value='1'><label for='contexte1_@uid'>Grandi ensemble</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte2_@uid' value='2'><label for='contexte2_@uid'>Par mon mari/ma femme/relation amoureuse</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte3_@uid' value='3'><label for='contexte3_@uid'>Par mes parents</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte4_@uid' value='4'><label for='contexte4_@uid'>Par mes enfants</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte5_@uid' value='5'><label for='contexte5_@uid'>Par un ami</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte6_@uid' value='6'><label for='contexte6_@uid'>Comme voisin</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte7_@uid' value='7'><label for='contexte7_@uid'>Par d’autres membres de la famille</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte8_@uid' value='8'><label for='contexte8_@uid'>Etudes</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte9_@uid' value='9'><label for='contexte9_@uid'>Etudes supérieures</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte10_@uid' value='10'><label for='contexte10_@uid'>Au travail</label><br>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte10_@uid'><label for='contexte10_@uid'>Au travail</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte11_@uid'><label for='contexte11_@uid'>Internet (quel contexte ? préciser <input type='text' data-name='contextSpecial' placeholder='facebook, youtube, twitter, ..' value='@contextspecial0'>)</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte12_@uid'><label for='contexte12_@uid'>Par une association (quel type : <input type='text' data-name='contextSpecial' placeholder='aide à la personne, sport, ..' value='@contextspecial1'>)</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte13_@uid'><label for='contexte13_@uid'>Autre : <input type='text' data-name='contextSpecial' placeholder='vacances, ..' value='@contextspecial2'></label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte11_@uid' value='11'><label for='contexte11_@uid'>Internet (quel contexte ? préciser <input type='text' data-name='contextSpecial' placeholder='facebook, youtube, twitter, ..' value='@contextspecial0'>)</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte12_@uid' value='12'><label for='contexte12_@uid'>Par une association (quel type : <input type='text' data-name='contextSpecial' placeholder='aide à la personne, sport, ..' value='@contextspecial1'>)</label><br>\n"+
|
||||
"\t\t <input type='radio' name='contexte_@uid' data-name='context' id='contexte13_@uid' value='13'><label for='contexte13_@uid'>Autre : <input type='text' data-name='contextSpecial' placeholder='vacances, ..' value='@contextspecial2'></label><br>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
"\t<h4 data-icon='b'>Avec quelle fréquence discutez-vous avec cette personne ?</h4>\n"+
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\tFace à face<br>\n"+
|
||||
"\t\t <input type='radio' name='freq0_@uid' data-name='freq0' id='freq01_@uid'><label for='freq01_@uid'>plusieurs fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq0_@uid' data-name='freq0' id='freq02_@uid'><label for='freq02_@uid'>1 fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq0_@uid' data-name='freq0' id='freq03_@uid'><label for='freq03_@uid'>1 fois par mois</label>\n"+
|
||||
"\t\t <input type='radio' name='freq0_@uid' data-name='freq0' id='freq04_@uid'><label for='freq04_@uid'>1 fois par an ou moins</label>\n"+
|
||||
"\t\t <input type='radio' name='freq0_@uid' data-name='freq' id='freq01_@uid' value='0'><label for='freq01_@uid'>plusieurs fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq0_@uid' data-name='freq' id='freq02_@uid' value='1'><label for='freq02_@uid'>1 fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq0_@uid' data-name='freq' id='freq03_@uid' value='2'><label for='freq03_@uid'>1 fois par mois</label>\n"+
|
||||
"\t\t <input type='radio' name='freq0_@uid' data-name='freq' id='freq04_@uid' value='3'><label for='freq04_@uid'>1 fois par an ou moins</label>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\tTéléphone ou skype et équivalent<br>\n"+
|
||||
"\t\t <input type='radio' name='freq1_@uid' data-name='freq1' id='freq11_@uid'><label for='freq11_@uid'>plusieurs fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq1_@uid' data-name='freq1' id='freq12_@uid'><label for='freq12_@uid'>1 fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq1_@uid' data-name='freq1' id='freq13_@uid'><label for='freq13_@uid'>1 fois par mois</label>\n"+
|
||||
"\t\t <input type='radio' name='freq1_@uid' data-name='freq1' id='freq14_@uid'><label for='freq14_@uid'>1 fois par an ou moins</label>\n"+
|
||||
"\t\t <input type='radio' name='freq1_@uid' data-name='freq' id='freq11_@uid' value='4'><label for='freq11_@uid'>plusieurs fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq1_@uid' data-name='freq' id='freq12_@uid' value='5'><label for='freq12_@uid'>1 fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq1_@uid' data-name='freq' id='freq13_@uid' value='6'><label for='freq13_@uid'>1 fois par mois</label>\n"+
|
||||
"\t\t <input type='radio' name='freq1_@uid' data-name='freq' id='freq14_@uid' value='7'><label for='freq14_@uid'>1 fois par an ou moins</label>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\tSMS, et équivalents<br>\n"+
|
||||
"\t\t <input type='radio' name='freq2_@uid' data-name='freq2' id='freq21_@uid'><label for='freq21_@uid'>plusieurs fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq2_@uid' data-name='freq2' id='freq22_@uid'><label for='freq22_@uid'>1 fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq2_@uid' data-name='freq2' id='freq23_@uid'><label for='freq23_@uid'>1 fois par mois</label>\n"+
|
||||
"\t\t <input type='radio' name='freq2_@uid' data-name='freq2' id='freq24_@uid'><label for='freq24_@uid'>1 fois par an ou moins</label>\n"+
|
||||
"\t\t <input type='radio' name='freq2_@uid' data-name='freq' id='freq21_@uid' value='8'><label for='freq21_@uid'>plusieurs fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq2_@uid' data-name='freq' id='freq22_@uid' value='9'><label for='freq22_@uid'>1 fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq2_@uid' data-name='freq' id='freq23_@uid' value='10'><label for='freq23_@uid'>1 fois par mois</label>\n"+
|
||||
"\t\t <input type='radio' name='freq2_@uid' data-name='freq' id='freq24_@uid' value='11'><label for='freq24_@uid'>1 fois par an ou moins</label>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\tCourrier électronique<br>\n"+
|
||||
"\t\t <input type='radio' name='freq3_@uid' data-name='freq3' id='freq31_@uid'><label for='freq31_@uid'>plusieurs fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq3_@uid' data-name='freq3' id='freq32_@uid'><label for='freq32_@uid'>1 fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq3_@uid' data-name='freq3' id='freq33_@uid'><label for='freq33_@uid'>1 fois par mois</label>\n"+
|
||||
"\t\t <input type='radio' name='freq3_@uid' data-name='freq3' id='freq34_@uid'><label for='freq34_@uid'>1 fois par an ou moins</label>\n"+
|
||||
"\t\t <input type='radio' name='freq3_@uid' data-name='freq' id='freq31_@uid' value='12'><label for='freq31_@uid'>plusieurs fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq3_@uid' data-name='freq' id='freq32_@uid' value='13'><label for='freq32_@uid'>1 fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq3_@uid' data-name='freq' id='freq33_@uid' value='14'><label for='freq33_@uid'>1 fois par mois</label>\n"+
|
||||
"\t\t <input type='radio' name='freq3_@uid' data-name='freq' id='freq34_@uid' value='15'><label for='freq34_@uid'>1 fois par an ou moins</label>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\tFacebook ou autre réseau social<br>\n"+
|
||||
"\t\t <input type='radio' name='freq4_@uid' data-name='freq4' id='freq41_@uid'><label for='freq41_@uid'>plusieurs fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq4_@uid' data-name='freq4' id='freq42_@uid'><label for='freq42_@uid'>1 fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq4_@uid' data-name='freq4' id='freq43_@uid'><label for='freq43_@uid'>1 fois par mois</label>\n"+
|
||||
"\t\t <input type='radio' name='freq4_@uid' data-name='freq4' id='freq44_@uid'><label for='freq44_@uid'>1 fois par an ou moins</label>\n"+
|
||||
"\t\t <input type='radio' name='freq4_@uid' data-name='freq' id='freq41_@uid' value='16'><label for='freq41_@uid'>plusieurs fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq4_@uid' data-name='freq' id='freq42_@uid' value='17'><label for='freq42_@uid'>1 fois par semaine</label>\n"+
|
||||
"\t\t <input type='radio' name='freq4_@uid' data-name='freq' id='freq43_@uid' value='18'><label for='freq43_@uid'>1 fois par mois</label>\n"+
|
||||
"\t\t <input type='radio' name='freq4_@uid' data-name='freq' id='freq44_@uid' value='19'><label for='freq44_@uid'>1 fois par an ou moins</label>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
|
||||
"\t<h4 data-icon='r'>Comment êtes-vous « connecté » à cette personne ?</h4>\n"+
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\tSes coordonnées sont dans votre carnet d’adresse<br>\n"+
|
||||
"\t\t <input type='radio' name='connect1_@uid' data-name='connect0' id='connect11_@uid'><label for='connect11_@uid'>Oui</label>\n"+
|
||||
"\t\t <input type='radio' name='connect1_@uid' data-name='connect0' id='connect12_@uid'><label for='connect12_@uid'>Non</label>\n"+
|
||||
"\t\t <input type='radio' name='connect1_@uid' data-name='connect' id='connect11_@uid' value='0'><label for='connect11_@uid'>Oui</label>\n"+
|
||||
"\t\t <input type='radio' name='connect1_@uid' data-name='connect' id='connect12_@uid' value='1'><label for='connect12_@uid'>Non</label>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\tSon numéro de mobile est enregistré sur votre mobile (ou vous-mêmes êtes sur le sien)<br>\n"+
|
||||
"\t\t <input type='radio' name='connect2_@uid' data-name='connect1' id='connect21_@uid'><label for='connect21_@uid'>Oui</label>\n"+
|
||||
"\t\t <input type='radio' name='connect2_@uid' data-name='connect1' id='connect22_@uid'><label for='connect22_@uid'>Non</label>\n"+
|
||||
"\t\t <input type='radio' name='connect2_@uid' data-name='connect' id='connect21_@uid' value='2'><label for='connect21_@uid'>Oui</label>\n"+
|
||||
"\t\t <input type='radio' name='connect2_@uid' data-name='connect' id='connect22_@uid' value='3'><label for='connect22_@uid'>Non</label>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\tElle figure parmi vos amis facebook<br>\n"+
|
||||
"\t\t <input type='radio' name='connect3_@uid' data-name='connect2' id='connect31_@uid'><label for='connect31_@uid'>Oui</label>\n"+
|
||||
"\t\t <input type='radio' name='connect3_@uid' data-name='connect2' id='connect32_@uid'><label for='connect32_@uid'>Non</label>\n"+
|
||||
"\t\t <input type='radio' name='connect3_@uid' data-name='connect' id='connect31_@uid' value='4'><label for='connect31_@uid'>Oui</label>\n"+
|
||||
"\t\t <input type='radio' name='connect3_@uid' data-name='connect' id='connect32_@uid' value='5'><label for='connect32_@uid'>Non</label>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\tElle figure parmi vos amis facebook et vous interagissez avec elle sur ce dispositif régulièrement<br>\n"+
|
||||
"\t\t <input type='radio' name='connect4_@uid' data-name='connect3' id='connect41_@uid'><label for='connect41_@uid'>Oui</label>\n"+
|
||||
"\t\t <input type='radio' name='connect4_@uid' data-name='connect3' id='connect42_@uid'><label for='connect42_@uid'>Non</label>\n"+
|
||||
"\t\t <input type='radio' name='connect4_@uid' data-name='connect' id='connect41_@uid' value='6'><label for='connect41_@uid'>Oui</label>\n"+
|
||||
"\t\t <input type='radio' name='connect4_@uid' data-name='connect' id='connect42_@uid' value='7'><label for='connect42_@uid'>Non</label>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\tVous le suivez sur Twitter<br>\n"+
|
||||
"\t\t <input type='radio' name='connect5_@uid' data-name='connect4' id='connect51_@uid'><label for='connect51_@uid'>Oui</label>\n"+
|
||||
"\t\t <input type='radio' name='connect5_@uid' data-name='connect4' id='connect52_@uid'><label for='connect52_@uid'>Non</label>\n"+
|
||||
"\t\t <input type='radio' name='connect5_@uid' data-name='connect' id='connect51_@uid' value='8'><label for='connect51_@uid'>Oui</label>\n"+
|
||||
"\t\t <input type='radio' name='connect5_@uid' data-name='connect' id='connect52_@uid' value='9'><label for='connect52_@uid'>Non</label>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\tVous communiquez avec cette personne sur Twitter<br>\n"+
|
||||
"\t\t <input type='radio' name='connect6_@uid' data-name='connect5' id='connect61_@uid'><label for='connect61_@uid'>Oui</label>\n"+
|
||||
"\t\t <input type='radio' name='connect6_@uid' data-name='connect5' id='connect62_@uid'><label for='connect62_@uid'>Non</label>\n"+
|
||||
"\t\t <input type='radio' name='connect6_@uid' data-name='connect' id='connect61_@uid' value='10'><label for='connect61_@uid'>Oui</label>\n"+
|
||||
"\t\t <input type='radio' name='connect6_@uid' data-name='connect' id='connect62_@uid' value='11'><label for='connect62_@uid'>Non</label>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
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 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),
|
||||
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)}};
|
||||
function inputPhoneContact(a,b){this.container=a;this.nav_container=b}inputPhoneContact.prototype={container:this.container,nav_container:this.nav_container,selected:0,handler:null};inputPhoneContact.prototype.check=function(a){var b=0<a.number.length;return b=b&&0<a.username.length+a.firstname.length+a.lastname.length};
|
||||
inputPhoneContact.prototype.fieldsToStorage=function(){console.log("CONTACTS: FIELDS TO STORAGE");for(var a=$$("article.contact-panel .new-contact"),b=0;b<a.length;b++){var c=(new FormDeflater(a[b],["input"],["data-name"])).deflate();if(this.check(c)){var d={uid:parseInt(c.uid),number:c.number,username:c.username,firstname:c.firstname,lastname:c.lastname,call:parseInt(c.call),sms:parseInt(c.sms),countcall:parseInt(c.countcall),countsms:parseInt(c.countsms)};d.hash=crc32(JSON.stringify(d));lsi.set("contacts",
|
||||
parseInt(c.uid),d)}}};
|
||||
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");
|
||||
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)};
|
||||
for(var b=this,c=0;c<a.length;c++)a[c].removeEventListener("click",function(a){b.nav(a.target);b.handler(a.target)},!1),a[c].addEventListener("click",function(a){b.nav(a.target);b.handler(a.target)},!1)};inputPhoneContact.prototype.storageToFields=function(){console.log("CONTACTS: STORAGE TO FIELDS");var a=lsi.keys("contacts");this.container.innerHTML="";for(var b=this.selected+10,c=this.selected;c<b&&c<a.length;c++)this.add(lsi.get("contacts",a[c]));b>=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 b=$$("#nav-contact > span.active"),c=0;c<b.length;c++)b[c].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 b=0;b<a;b+=10)this.nav_container.innerHTML+='<span data-n="'+b+'">'+(1+b/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 b=this;this.nav_container.addEventListener("click",function(a){b.nav(a.target);b.handler(a.target)},!1)};
|
||||
|
|
|
@ -15,7 +15,21 @@ inputPhoneContact.prototype = {
|
|||
};
|
||||
|
||||
|
||||
/* [2] Gestion de l'enregistrement des formulaires de contact
|
||||
|
||||
/* [2] Vérification des données d'un contact
|
||||
=========================================================*/
|
||||
inputPhoneContact.prototype.check = function(deflated){
|
||||
/* (1) Le numéro n'est pas vide */
|
||||
var validForm = deflated.number.length > 0;
|
||||
/* (2) ET le pseudo et/ou le prénom et/ou le nom n'est pas vide */
|
||||
validForm = validForm && deflated.username.length+deflated.firstname.length+deflated.lastname.length > 0;
|
||||
|
||||
/* (3) On retourne la validité du formulaire */
|
||||
return validForm
|
||||
}
|
||||
|
||||
|
||||
/* [3] Gestion de l'enregistrement des formulaires de contact
|
||||
=========================================================*/
|
||||
inputPhoneContact.prototype.fieldsToStorage = function(){
|
||||
console.log('CONTACTS: FIELDS TO STORAGE');
|
||||
|
@ -30,34 +44,29 @@ inputPhoneContact.prototype.fieldsToStorage = function(){
|
|||
// {3} On enregistre ce contact si le numéro n'est pas vide et soit pseudo/prénom/nom //
|
||||
var deflated = deflater.deflate();
|
||||
|
||||
// Le numéro n'est pas vide
|
||||
var validForm = deflated.number.value.length > 0;
|
||||
// ET le pseudo et/ou le prénom et/ou le nom n'est pas vide
|
||||
validForm = validForm && deflated.username.value.length+deflated.firstname.value.length+deflated.lastname.value.length > 0;
|
||||
|
||||
// Si le formulaire n'est pas valide, on ne l'enregistre pas
|
||||
if( !validForm ) continue;
|
||||
if( !this.check(deflated) ) continue;
|
||||
|
||||
// {4} On récupère et met en forme les valeurs du deflater //
|
||||
var obj = {
|
||||
uid: parseInt(deflated.uid.value),
|
||||
number: deflated.number.value,
|
||||
username: deflated.username.value,
|
||||
firstname: deflated.firstname.value,
|
||||
lastname: deflated.lastname.value,
|
||||
uid: parseInt(deflated.uid),
|
||||
number: deflated.number,
|
||||
username: deflated.username,
|
||||
firstname: deflated.firstname,
|
||||
lastname: deflated.lastname,
|
||||
|
||||
call: parseInt(deflated.call.value),
|
||||
sms: parseInt(deflated.sms.value),
|
||||
call: parseInt(deflated.call),
|
||||
sms: parseInt(deflated.sms),
|
||||
|
||||
countcall: parseInt(deflated.countcall.value),
|
||||
countsms: parseInt(deflated.countsms.value)
|
||||
countcall: parseInt(deflated.countcall),
|
||||
countsms: parseInt(deflated.countsms)
|
||||
};
|
||||
|
||||
/* (5) On calcule et ajoute le hash des données */
|
||||
obj.hash = crc32( JSON.stringify(obj) );
|
||||
|
||||
// {6} On enregistre les données dans le 'localStorage' //
|
||||
lsi.set('contacts', parseInt(deflated.uid.value), obj);
|
||||
lsi.set('contacts', parseInt(deflated.uid), obj);
|
||||
|
||||
}
|
||||
|
||||
|
@ -71,7 +80,7 @@ inputPhoneContact.prototype.fieldsToStorage = function(){
|
|||
|
||||
|
||||
|
||||
/* [3] Gestion de l'ajout physique d'un nouveau contact
|
||||
/* [4] Gestion de l'ajout physique d'un nouveau contact
|
||||
=========================================================*/
|
||||
/*
|
||||
*
|
||||
|
@ -120,7 +129,7 @@ inputPhoneContact.prototype.add = function(objectData){
|
|||
|
||||
|
||||
|
||||
/* [4] Gestion de l'affichage depuis le 'localStorage'
|
||||
/* [5] Gestion de l'affichage depuis le 'localStorage'
|
||||
=========================================================*/
|
||||
inputPhoneContact.prototype.storageToFields = function(){
|
||||
console.log('CONTACTS: STORAGE TO FIELDS');
|
||||
|
@ -208,7 +217,7 @@ inputPhoneContact.prototype.updateNavBar = function(){
|
|||
|
||||
|
||||
|
||||
/* [5] Point d'amorçage de la gestion des contacts
|
||||
/* [8] Point d'amorçage de la gestion des contacts
|
||||
=========================================================*/
|
||||
inputPhoneContact.prototype.attach = function(handler){
|
||||
console.log('CONTACTS: ATTACH');
|
||||
|
|
|
@ -1,23 +1,19 @@
|
|||
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:{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,
|
||||
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}};
|
||||
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,
|
||||
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"),
|
||||
c.timestamp=Date.now());lsi.set("fiches",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];
|
||||
a.contextSpecial[1]=null!=a.contextSpecial[1]?a.contextSpecial[1]:this.defaultData.contextSpecial[1];a.contextSpecial[2]=null!=a.contextSpecial[2]?a.contextSpecial[2]:this.defaultData.contextSpecial[2];a.connectSpecial[0]=null!=a.connectSpecial[0]?a.connectSpecial[0]:this.defaultData.connectSpecial[0];a.connectSpecial[1]=null!=a.connectSpecial[1]?a.connectSpecial[1]:this.defaultData.connectSpecial[1];a.job=null!=a.job?a.job:this.defaultData.job;a.studies=null!=a.studies?a.studies:this.defaultData.studies;
|
||||
a.age=null!=a.age?a.age:this.defaultData.age;a.sexe=null!=a.sexe?a.sexe:this.defaultData.sexe;a.famsit=null!=a.famsit?a.famsit:this.defaultData.famsit;a.reltype=null!=a.reltype?a.reltype:this.defaultData.reltype;a.loc=null!=a.loc?a.loc:this.defaultData.loc;a.context=null!=a.context?a.context:this.defaultData.context;a.freq=null!=a.freq?a.freq:this.defaultData.freq;a.connect=null!=a.connect?a.connect:this.defaultData.connect;var b=lsi.get("contacts",a.contact);if(!1===b)return!1;this.container.innerHTML+=
|
||||
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="'+
|
||||
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:{sexe:"H",age:".",job:".",famsit:"0",studies:".",reltype:"0",reltypeSpecial:"",city:"",cp:"",loc:"0",duration:["",""],context:"0",contextSpecial:["","",""],freq:["0","4","8","12","16"],connect:"1 3 5 7 9 11".split(" "),connectSpecial:["",""],timestamp:0,valid:!1}};
|
||||
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);if(!1!==d){if(null!=d.hash&&d.hash==e)break;c={contact:parseInt(c.contact),uid:parseInt(c.uid),sexe:c.sexe,age:c.age,job:c.job,famsit:c.famsit,studies:c.studies,reltype:c.reltype,reltypeSpecial:c.reltypeSpecial,
|
||||
city:c.city,cp:c.cp,loc:c.loc,duration:c.duration,context:c.context,contextSpecial:c.contextSpecial,freq:c.freq,connect:c.connect,connectSpecial:c.connectSpecial,hash:e};c.valid=this.check(c);0<diff(d,c,["hash","valid","timestamp"]).length&&(console.log(diff(d,c,["hash","valid","timestamp"])),console.warn("> FICHE UPDATE"),c.timestamp=Date.now());lsi.set("fiches",c.uid,c)}}};
|
||||
inputPhoneFiche.prototype.add=function(a){console.log("FICHE: ADD");if(null==a.uid||isNaN(a.uid)||null==a.contact||isNaN(a.contact))return!1;a.city=null!=a.city?a.city:this.defaultData.city;a.cp=null!=a.cp?a.cp:this.defaultData.cp;a.duration[0]=null!=a.duration[0]?a.duration[0]:this.defaultData.duration[0];a.duration[1]=null!=a.duration[1]?a.duration[1]:this.defaultData.duration[1];a.reltypeSpecial=null!=a.reltypeSpecial?a.reltypeSpecial:this.defaultData.reltypeSpecial;a.contextSpecial[0]=null!=a.contextSpecial[0]?
|
||||
a.contextSpecial[0]:this.defaultData.contextSpecial[0];a.contextSpecial[1]=null!=a.contextSpecial[1]?a.contextSpecial[1]:this.defaultData.contextSpecial[1];a.contextSpecial[2]=null!=a.contextSpecial[2]?a.contextSpecial[2]:this.defaultData.contextSpecial[2];a.connectSpecial[0]=null!=a.connectSpecial[0]?a.connectSpecial[0]:this.defaultData.connectSpecial[0];a.connectSpecial[1]=null!=a.connectSpecial[1]?a.connectSpecial[1]:this.defaultData.connectSpecial[1];a.job=null!=a.job?a.job:this.defaultData.job;
|
||||
a.studies=null!=a.studies?a.studies:this.defaultData.studies;a.age=null!=a.age?a.age:this.defaultData.age;a.sexe=null!=a.sexe?a.sexe:this.defaultData.sexe;a.famsit=null!=a.famsit?a.famsit:this.defaultData.famsit;a.reltype=null!=a.reltype?a.reltype:this.defaultData.reltype;a.loc=null!=a.loc?a.loc:this.defaultData.loc;a.context=null!=a.context?a.context:this.defaultData.context;a.freq=null!=a.freq?a.freq:this.defaultData.freq;a.connect=null!=a.connect?a.connect:this.defaultData.connect;var b=lsi.get("contacts",
|
||||
a.contact);if(!1===b)return!1;this.container.innerHTML+=ficheBuilder.build({name:readableName(b.username,b.firstname,b.lastname),countcall:b.countcall,countsms:b.countsms,uid:a.uid,contact:a.contact,city:a.city,cp:a.cp,duration0:a.duration[0],duration1:a.duration[1],reltypespecial:a.reltypeSpecial,contextspecial0:a.contextSpecial[0],contextspecial1:a.contextSpecial[1],contextspecial2:a.contextSpecial[2],connectspecial0:a.connectSpecial[0],connectspecial1:a.connectSpecial[1]});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>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"]');
|
||||
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<
|
||||
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="'+
|
||||
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()};
|
||||
a.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]'),b=0;b<c.length;b++)c[b].value==a.sexe?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++)c[b].value==a.famsit?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++)c[b].value==a.reltype?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++)c[b].value==a.loc?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++)c[b].value==a.context?
|
||||
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="freq"]');for(b=0;b<c.length;b++)-1<a.freq.indexOf(c[b].value)?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="connect"]');for(b=0;b<c.length;b++)-1<a.connect.indexOf(c[b].value)?c[b].setAttribute("checked",
|
||||
"checked"):c[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()};
|
||||
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",
|
||||
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=
|
||||
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)))};
|
||||
a);null==d&&(d=this.defaultData);d.uid=a;d.contact=parseInt(c);lsi.set("fiches",a,d);if(20<=b.length)break}for(var 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.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.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[e].uid+'"]'),null!=b&&(!0===a[e].valid?b.addClass("done"):b.remClass("done"));this.nav($('#nav-fiche [data-n="'+this.selected+'"]'))};
|
||||
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)};
|
||||
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="";for(var c=0;c<b;c++)0==c&&(this.nav_container.innerHTML+="<span>APPELS</span>"),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[e].uid+'"]'),null!=b&&(!0===a[e].valid?b.addClass("done"):b.remClass("done"));this.nav($('#nav-fiche [data-n="'+this.selected+'"]'))};
|
||||
inputPhoneFiche.prototype.check=function(a){if(2>a.city.length||isNaN(a.cp)||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||""==a.sexe||""==a.famsit||""==a.reltype||""==a.loc||""==a.context)return!1;for(var b=0;b<a.freq.length;b++)if(""==a.freq[b])return!1;for(b=0;b<a.connect.length;b++)if(""==a.connect[b])return!1;return"8"==a.reltype&&2>a.reltypeSpecial.length||
|
||||
"11"==a.context&&2>a.contextSpecial[0].length||"12"==a.context&&2>a.contextSpecial[1].length||"13"==a.context&&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,37 +13,24 @@ inputPhoneFiche.prototype = {
|
|||
selected: 0, // UID de la FICHE sélectionnée
|
||||
handler: null, // Fonction pour l'enregistrement et la synchronisation des données
|
||||
defaultData: { // Valeurs par défaut
|
||||
sexe: [ defTrue, defFalse],
|
||||
sexe: 'H',
|
||||
age: '.',
|
||||
job: '.',
|
||||
famsit: [ defTrue, defFalse, defFalse ], // Choix 1 à 3
|
||||
famsit: '0', // Choix 1 à 3
|
||||
studies: '.',
|
||||
reltype: [ defTrue, defFalse, defFalse, defFalse, defFalse,
|
||||
defFalse, defFalse, defFalse, defFalse], // Choix 1 à 9
|
||||
reltype: '0', // Choix 1 à 9
|
||||
reltypeSpecial: '',
|
||||
city: '',
|
||||
loc: [ defTrue, defFalse, defFalse, defFalse ],
|
||||
cp: '',
|
||||
loc: '0',
|
||||
duration: ['', ''],
|
||||
context: [ defTrue, defFalse, defFalse, defFalse, defFalse,
|
||||
defFalse, defFalse, defFalse, defFalse, defFalse,
|
||||
defFalse, defFalse, defFalse, defFalse], // Choix 1 à 14
|
||||
context: '0', // Choix 1 à 14
|
||||
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 ]],
|
||||
freq: ['0', '4', '8', '12', '16'], // 1er choix des 4 pour chaque question
|
||||
connect: ['1', '3', '5', '7', '9', '11'], // Le deuxième choix (Oui/Non) donc 'Non' par défaut pour chaque question
|
||||
connectSpecial: ['', ''],
|
||||
timestamp: 0,
|
||||
valid: false
|
||||
timestamp: 0,
|
||||
valid: false
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -70,7 +57,7 @@ inputPhoneFiche.prototype.fieldsToStorage = function(){
|
|||
|
||||
|
||||
// {4} On récupère les données du LSI si elles existent //
|
||||
var existingData = lsi.get('fiches', deflated.uid.value);
|
||||
var existingData = lsi.get('fiches', deflated.uid);
|
||||
|
||||
// Si n'existe pas, on passe au suivant
|
||||
if( existingData === false )
|
||||
|
@ -84,47 +71,25 @@ inputPhoneFiche.prototype.fieldsToStorage = function(){
|
|||
|
||||
|
||||
var obj = {
|
||||
contact: parseInt(deflated.contact.value),
|
||||
uid: parseInt(deflated.uid.value),
|
||||
sexe: deflated.sexe, // Choix 1 à 2
|
||||
age: deflated.age.value,
|
||||
job: deflated.job.value,
|
||||
famsit: deflated.famsit, // Choix 1 à 3
|
||||
studies: deflated.studies.value,
|
||||
reltype: deflated.reltype, // Choix 1 à 9
|
||||
reltypeSpecial: deflated.reltypeSpecial.value,
|
||||
city: deflated.city.value,
|
||||
loc: deflated.loc, // Choix 1 à 3
|
||||
duration: [
|
||||
deflated.duration[0].value, // Durée de la relation en mois
|
||||
deflated.duration[1].value // Durée de la relation en années
|
||||
],
|
||||
context: deflated.context, // Choix 1 à 14
|
||||
contextSpecial: [
|
||||
deflated.contextSpecial[0].value, // Valeur du contexte si context[11]
|
||||
deflated.contextSpecial[1].value, // Valeur du contexte si context[12]
|
||||
deflated.contextSpecial[2].value // Valeur du contexte si context[13]
|
||||
],
|
||||
freq: [
|
||||
deflated.freq0, // Choix 1 à 4
|
||||
deflated.freq1, // Choix 1 à 4
|
||||
deflated.freq2, // Choix 1 à 4
|
||||
deflated.freq3, // Choix 1 à 4
|
||||
deflated.freq4 // Choix 1 à 4
|
||||
],
|
||||
connect: [
|
||||
deflated.connect0, // Choix 1 à 2
|
||||
deflated.connect1, // Choix 1 à 2
|
||||
deflated.connect2, // Choix 1 à 2
|
||||
deflated.connect3, // Choix 1 à 2
|
||||
deflated.connect4, // Choix 1 à 2
|
||||
deflated.connect5 // Choix 1 à 2
|
||||
],
|
||||
connectSpecial: [
|
||||
deflated.connectSpecial[0].value,
|
||||
deflated.connectSpecial[1].value
|
||||
],
|
||||
hash: deflatedHash
|
||||
contact: parseInt(deflated.contact),
|
||||
uid: parseInt(deflated.uid),
|
||||
sexe: deflated.sexe,
|
||||
age: deflated.age,
|
||||
job: deflated.job,
|
||||
famsit: deflated.famsit,
|
||||
studies: deflated.studies,
|
||||
reltype: deflated.reltype,
|
||||
reltypeSpecial: deflated.reltypeSpecial,
|
||||
city: deflated.city,
|
||||
cp: deflated.cp,
|
||||
loc: deflated.loc,
|
||||
duration: deflated.duration,
|
||||
context: deflated.context,
|
||||
contextSpecial: deflated.contextSpecial,
|
||||
freq: deflated.freq,
|
||||
connect: deflated.connect,
|
||||
connectSpecial: deflated.connectSpecial,
|
||||
hash: deflatedHash
|
||||
};
|
||||
|
||||
|
||||
|
@ -132,7 +97,8 @@ inputPhoneFiche.prototype.fieldsToStorage = function(){
|
|||
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 ){
|
||||
if( diff(existingData, obj, ['hash', 'valid', 'timestamp']).length > 0 ){
|
||||
console.log( diff(existingData, obj, ['hash', 'valid', 'timestamp']) );
|
||||
console.warn('> FICHE UPDATE');
|
||||
obj.timestamp = Date.now();
|
||||
}
|
||||
|
@ -161,12 +127,13 @@ inputPhoneFiche.prototype.add = function(objectData){
|
|||
console.log('FICHE: ADD');
|
||||
|
||||
// Si pas d'UID ou d'UID de contact, on retourne une erreur
|
||||
if( objectData.uid == null || objectData.contact == null )
|
||||
if( objectData.uid == null || isNaN(objectData.uid) || objectData.contact == null || isNaN(objectData.contact) )
|
||||
return false;
|
||||
|
||||
/* (0) Gestion du formattage des valeur */
|
||||
// {1} Champs de texte //
|
||||
objectData.city = (objectData.city != null) ? objectData.city : this.defaultData.city;
|
||||
objectData.cp = (objectData.cp != null) ? objectData.cp : this.defaultData.cp;
|
||||
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.reltypeSpecial = (objectData.reltypeSpecial != null) ? objectData.reltypeSpecial : this.defaultData.reltypeSpecial;
|
||||
|
@ -201,14 +168,13 @@ inputPhoneFiche.prototype.add = function(objectData){
|
|||
|
||||
// {5} Création physique //
|
||||
this.container.innerHTML += ficheBuilder.build({
|
||||
firstname: associatedContact.firstname,
|
||||
lastname: associatedContact.lastname,
|
||||
username: (associatedContact.username.length==0) ? '' : '('+associatedContact.username+')',
|
||||
name: readableName(associatedContact.username, associatedContact.firstname, associatedContact.lastname),
|
||||
countcall: associatedContact.countcall,
|
||||
countsms: associatedContact.countsms,
|
||||
uid: objectData.uid,
|
||||
contact: objectData.contact, // uid du contact associé
|
||||
city: objectData.city,
|
||||
cp: objectData.cp,
|
||||
duration0: objectData.duration[0],
|
||||
duration1: objectData.duration[1],
|
||||
reltypespecial: objectData.reltypeSpecial,
|
||||
|
@ -239,54 +205,50 @@ inputPhoneFiche.prototype.add = function(objectData){
|
|||
|
||||
/* {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"]');
|
||||
for( var i = 0 ; i < sexeCreated.length && i < objectData.sexe.length ; i++ )
|
||||
if( objectData.sexe[i].status ) sexeCreated[i].setAttribute('checked', 'checked');
|
||||
else sexeCreated[i].removeAttribute('checked');
|
||||
for( var i = 0 ; i < sexeCreated.length ; i++ )
|
||||
if( sexeCreated[i].value == objectData.sexe ) sexeCreated[i].setAttribute('checked', 'checked');
|
||||
else sexeCreated[i].removeAttribute('checked');
|
||||
|
||||
|
||||
/* {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"]');
|
||||
for( var i = 0 ; i < famsitCreated.length && i < objectData.famsit.length ; i++ )
|
||||
if( objectData.famsit[i].status ) famsitCreated[i].setAttribute('checked', 'checked');
|
||||
else famsitCreated[i].removeAttribute('checked');
|
||||
for( var i = 0 ; i < famsitCreated.length ; i++ )
|
||||
if( famsitCreated[i].value == objectData.famsit ) famsitCreated[i].setAttribute('checked', 'checked');
|
||||
else famsitCreated[i].removeAttribute('checked');
|
||||
|
||||
|
||||
/* {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"]');
|
||||
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');
|
||||
for( var i = 0 ; i < reltypeCreated.length ; i++ )
|
||||
if( reltypeCreated[i].value == objectData.reltype ) reltypeCreated[i].setAttribute('checked', 'checked');
|
||||
else reltypeCreated[i].removeAttribute('checked');
|
||||
|
||||
|
||||
/* {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"]');
|
||||
for( var i = 0 ; i < locCreated.length && i < objectData.loc.length ; i++ )
|
||||
if( objectData.loc[i].status ) locCreated[i].setAttribute('checked', 'checked');
|
||||
else locCreated[i].removeAttribute('checked');
|
||||
for( var i = 0 ; i < locCreated.length ; i++ )
|
||||
if( locCreated[i].value == objectData.loc ) locCreated[i].setAttribute('checked', 'checked');
|
||||
else locCreated[i].removeAttribute('checked');
|
||||
|
||||
|
||||
/* {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"]');
|
||||
for( var i = 0 ; i < contextCreated.length && i < objectData.context.length ; i++ )
|
||||
if( objectData.context[i].status ) contextCreated[i].setAttribute('checked', 'checked');
|
||||
else contextCreated[i].removeAttribute('checked');
|
||||
for( var i = 0 ; i < contextCreated.length ; i++ )
|
||||
if( contextCreated[i].value == objectData.context ) contextCreated[i].setAttribute('checked', 'checked');
|
||||
else contextCreated[i].removeAttribute('checked');
|
||||
|
||||
|
||||
/* {14} On sélectionna la valeur des boutons <radio> pour les FREQUENCES */
|
||||
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+'"]');
|
||||
for( var i = 0 ; i < freqCreated.length && i < objectData.freq[f].length ; i++ )
|
||||
if( objectData.freq[f][i].status ) freqCreated[i].setAttribute('checked', 'checked');
|
||||
else freqCreated[i].removeAttribute('checked');
|
||||
}
|
||||
var freqCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="freq"]');
|
||||
for( var i = 0 ; i < freqCreated.length ; i++ )
|
||||
if( objectData.freq.indexOf(freqCreated[i].value) > -1 ) freqCreated[i].setAttribute('checked', 'checked');
|
||||
else freqCreated[i].removeAttribute('checked');
|
||||
|
||||
/* {15} On sélectionna la valeur des boutons <radio> pour les CONNECTIONS */
|
||||
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+'"]');
|
||||
for( var i = 0 ; i < connectCreated.length && i < objectData.connect[c].length ; i++ )
|
||||
if( objectData.connect[c][i].status ) connectCreated[i].setAttribute('checked', 'checked');
|
||||
else connectCreated[i].removeAttribute('checked');
|
||||
}
|
||||
var connectCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="connect"]');
|
||||
for( var i = 0 ; i < connectCreated.length ; i++ )
|
||||
if( objectData.connect.indexOf(connectCreated[i].value) > -1 ) connectCreated[i].setAttribute('checked', 'checked');
|
||||
else connectCreated[i].removeAttribute('checked');
|
||||
|
||||
|
||||
|
||||
|
@ -419,7 +381,7 @@ inputPhoneFiche.prototype.sync = function(){
|
|||
|
||||
/* (4) On met à jour la fiche ET on l'enregistre */
|
||||
ficheData.uid = ficheUid;
|
||||
ficheData.contact = uid;
|
||||
ficheData.contact = parseInt(uid);
|
||||
lsi.set('fiches', ficheUid, ficheData);
|
||||
|
||||
|
||||
|
@ -430,45 +392,7 @@ inputPhoneFiche.prototype.sync = function(){
|
|||
|
||||
}
|
||||
|
||||
|
||||
/* (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
|
||||
/* (3) 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é */
|
||||
|
@ -549,9 +473,13 @@ inputPhoneFiche.prototype.updateNavBar = function(){
|
|||
|
||||
/* (2) On vide et remplit la barre de nav, si elle n'est pas à jour */
|
||||
if( !navBarUpToDate ){
|
||||
this.nav_container.innerHTML = '<span>APPELS</span>';
|
||||
this.nav_container.innerHTML = '';
|
||||
|
||||
for( var i = 0 ; i < len ; i++ ){
|
||||
// Si 1ère valeur du top 10 des APPELS, on ajoute le bandeau "APPELS"
|
||||
if( i == 0 )
|
||||
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> ';
|
||||
|
@ -564,6 +492,7 @@ inputPhoneFiche.prototype.updateNavBar = function(){
|
|||
// 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 */
|
||||
|
@ -598,71 +527,74 @@ inputPhoneFiche.prototype.check = function(ficheData){
|
|||
// 1. La ville a au moins 2 caractères
|
||||
if( ficheData.city.length < 2 )
|
||||
return false;
|
||||
// 2. La durée de la relation en mois est vide ou un nombre
|
||||
// 2. Le code postal est un nombre
|
||||
if( isNaN(ficheData.cp) )
|
||||
return false;
|
||||
// 3. La durée de la relation en mois est vide ou un nombre
|
||||
if( isNaN(parseInt(ficheData.duration[0])) && ficheData.duration[0].length > 0 )
|
||||
return false;
|
||||
// 3. La durée de la relation en année est vide ou un nombre
|
||||
// 4. 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 )
|
||||
return false;
|
||||
// 4. Pour la durée de la relation, au moins un des 2 n'est pas vide
|
||||
// 5. 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 )
|
||||
return false;
|
||||
|
||||
// {2} Vérification des <select> //
|
||||
// 5. Le <select> pour la profession n'est pas indéfini
|
||||
// 6. Le <select> pour la profession n'est pas indéfini
|
||||
if( ficheData.job == '.' )
|
||||
return false;
|
||||
// 6. Le <select> pour les études n'est pas indéfini
|
||||
// 7. Le <select> pour les études n'est pas indéfini
|
||||
if( ficheData.studies == '.' )
|
||||
return false;
|
||||
// 7. Le <select> pour l'AGE n'est pas indéfini
|
||||
// 8. Le <select> pour l'AGE n'est pas indéfini
|
||||
if( ficheData.age == '.' )
|
||||
return false;
|
||||
|
||||
// {3} Vérification des <input> radio //
|
||||
// 8. Le SEXE a un et un seul choix
|
||||
if( !checkRadioValue(ficheData.sexe) )
|
||||
// 9. Le SEXE a un et un seul choix
|
||||
if( ficheData.sexe == '' )
|
||||
return false;
|
||||
// 9. La SITUATION FAMILIALE a un et un seul choix
|
||||
if( !checkRadioValue(ficheData.famsit) )
|
||||
// 10. La SITUATION FAMILIALE a un et un seul choix
|
||||
if( ficheData.famsit == '' )
|
||||
return false;
|
||||
// 10. Le TYPE DE RELATION a un et un seul choix
|
||||
if( !checkRadioValue(ficheData.reltype) )
|
||||
// 11. Le TYPE DE RELATION a un et un seul choix
|
||||
if( ficheData.reltype == '' )
|
||||
return false;
|
||||
// 11. La DISTANCE DE DOMICILE (location) a un et un seul choix
|
||||
if( !checkRadioValue(ficheData.loc) )
|
||||
// 12. La DISTANCE DE DOMICILE (location) a un et un seul choix
|
||||
if( ficheData.loc == '' )
|
||||
return false;
|
||||
// 12. Le CONTEXTE DE RENCONTRE a un et un seul choix
|
||||
if( !checkRadioValue(ficheData.context) )
|
||||
// 13. Le CONTEXTE DE RENCONTRE a un et un seul choix
|
||||
if( ficheData.context == '' )
|
||||
return false;
|
||||
// 13. Les FRÉQUENCES ont un et un seul choix (par question de fréquence)
|
||||
// 14. Les FRÉQUENCES ont un et un seul choix (par question de fréquence)
|
||||
for( var i = 0 ; i < ficheData.freq.length ; i++ )
|
||||
if( !checkRadioValue( ficheData.freq[i] ) )
|
||||
if( ficheData.freq[i] == '' )
|
||||
return false;
|
||||
// 14. Les CONNECTION ont un et un seul choix (par question de connection)
|
||||
// 15. Les CONNECTION ont un et un seul choix (par question de connection)
|
||||
for( var i = 0 ; i < ficheData.connect.length ; i++ )
|
||||
if( !checkRadioValue( ficheData.connect[i] ) )
|
||||
if( ficheData.connect[i] == '' )
|
||||
return false;
|
||||
|
||||
// {4} <input> dépendant d'un choix d'un <input> radio //
|
||||
// 15. TYPE DE RELATION si autre est coché (indice 8), reltypeSpecial doit avoir au moins 2 caractère
|
||||
if( ficheData.reltype[8].status && ficheData.reltypeSpecial.length < 2 )
|
||||
// 16. TYPE DE RELATION si autre est coché (indice 8), reltypeSpecial doit avoir au moins 2 caractère
|
||||
if( ficheData.reltype == '8' && ficheData.reltypeSpecial.length < 2 )
|
||||
return false;
|
||||
// 16. CONTEXTE DE RELATION si est coché indice 11, contactSpecial[0] doit avoir au moins 2 caractères
|
||||
if( ficheData.context[11].status && ficheData.contextSpecial[0].length < 2 )
|
||||
// 17. CONTEXTE DE RELATION si est coché indice 11, contactSpecial[0] doit avoir au moins 2 caractères
|
||||
if( ficheData.context == '11' && ficheData.contextSpecial[0].length < 2 )
|
||||
return false;
|
||||
|
||||
// 17. CONTEXTE DE RELATION si est coché indice 12, contextSpecial[1] doit avoir au moins 2 caractères
|
||||
if( ficheData.context[12].status && ficheData.contextSpecial[1].length < 2 )
|
||||
// 18. CONTEXTE DE RELATION si est coché indice 12, contextSpecial[1] doit avoir au moins 2 caractères
|
||||
if( ficheData.context == '12' && ficheData.contextSpecial[1].length < 2 )
|
||||
return false;
|
||||
|
||||
// 18. CONTEXTE DE RELATION si est coché indice 13, contextSpecial[2] doit avoir au moins 2 caractères
|
||||
if( ficheData.context[13].status && ficheData.contextSpecial[2].length < 2 )
|
||||
// 19. CONTEXTE DE RELATION si est coché indice 13, contextSpecial[2] doit avoir au moins 2 caractères
|
||||
if( ficheData.context == '13' && ficheData.contextSpecial[2].length < 2 )
|
||||
return false;
|
||||
|
||||
|
||||
|
||||
// 19. Si tout s'est bien passé, on retourne TRUE
|
||||
// 20. Si tout s'est bien passé, on retourne TRUE
|
||||
return true;
|
||||
};
|
||||
|
||||
|
|
|
@ -1,5 +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)};
|
||||
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])null==d[b]&&(d[b]=[]),d[b].push(parseInt(a[b][e]));else null!==a[b]&&(null==d[b]&&(d[b]=[]),d[b].push(parseInt(a[b])));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+=readableName(f.username,f.firstname,f.lastname),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+=readableName(g.username,g.firstname,g.lastname),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)};
|
||||
|
|
|
@ -37,20 +37,19 @@ inputPhoneMatrice.prototype.fieldsToStorage = function(){
|
|||
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] = [];
|
||||
for( var a in deflated[i] ){
|
||||
if( obj[i] == null )
|
||||
obj[i] = [];
|
||||
|
||||
obj[i].push( parseInt(deflated[i][a].value) );
|
||||
}
|
||||
obj[i].push( parseInt(deflated[i][a]) );
|
||||
}
|
||||
|
||||
// {2} Si il n'y a qu'un sujet //
|
||||
}else if( deflated[i].status === true ){
|
||||
}else if( deflated[i] !== null ){
|
||||
if( obj[i] == null )
|
||||
obj[i] = [];
|
||||
|
||||
obj[i].push( parseInt(deflated[i].value) );
|
||||
obj[i].push( parseInt(deflated[i]) );
|
||||
}
|
||||
|
||||
lsi.set( 'matrice', 0, obj );
|
||||
|
@ -109,8 +108,7 @@ inputPhoneMatrice.prototype.storageToFields = function(){
|
|||
|
||||
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 += readableName(conA.username, conA.firstname, conA.lastname);
|
||||
matrice_html += '</td>';
|
||||
}else // Sinon,
|
||||
matrice_html += '<td></td>';
|
||||
|
@ -123,8 +121,7 @@ inputPhoneMatrice.prototype.storageToFields = function(){
|
|||
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 += readableName(conB.username, conB.firstname, conB.lastname),
|
||||
matrice_html += '</span>';
|
||||
|
||||
// {4} Valeurs des relations (boutons) //
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
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(),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,
|
||||
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)}}};
|
||||
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:"H",age:".",studies:".",loc:"0",reltype:"0",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(),e=crc32(JSON.stringify(c)),d=lsi.get("mini-fiches",c.uid);if(!1!==d){if(null!=d.hash&&d.hash==e)break;console.warn("> MINI UPDATE");c={uid:parseInt(c.uid),sexe:c.sexe,age:c.age,studies:c.studies,reltype:c.reltype,reltypeSpecial:c.reltypeSpecial,
|
||||
loc:c.loc,hash:e};c.valid=this.check(c);0<diff(d,c,["hash","valid","timestamp"]).length&&(console.log(diff(d,c,["hash","valid","timestamp"])),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.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;
|
||||
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="'+
|
||||
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",
|
||||
"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.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"),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!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)};
|
||||
this.container.innerHTML+=miniFicheBuilder.build({name:readableName(b.username,b.firstname,b.lastname),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="'+
|
||||
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++)c[b].value==a.sexe?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++)c[b].value==a.reltype?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="loc"]');for(b=0;b<c.length;b++)c[b].value==a.loc?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);if(null==a)return this.updateNavBar(),!1;this.container.innerHTML="";this.add(a);this.updateNavBar()};
|
||||
inputPhoneMini.prototype.sync=function(){console.log("MINI FICHE: SYNC");var a=lsi["export"]("contacts"),b=lsi["export"]("fiches"),c=[],e;for(e in b)-1==c.indexOf(b[e].contact)&&c.push(b[e].contact);for(var d in a)-1<c.indexOf(parseInt(d))?lsi.del("mini-fiches",d):(b=0==a[d].username.length+a[d].firstname.length+a[d].lastname.length?d.toString()+"-":d,e=lsi.get("mini-fiches",b),null==e&&(e=this.defaultData,e.valid=!1,isNaN(b)&&(e.reltype="9")),e.uid=parseInt(d),lsi.set("mini-fiches",b,e))};
|
||||
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");this.nav_container.innerHTML="";var b=0,c;for(c in a)isNaN(c)||(this.nav_container.innerHTML+='<span data-n="'+c+'">'+ ++b+"</span>");for(c in a)isNaN(c)||(b=$('#nav-mini [data-n="'+a[c].uid+'"]'),null!=b&&(!0===a[c].valid?b.addClass("done"):b.remClass("done")));this.nav($('#nav-mini [data-n="'+this.selected+'"]'))};
|
||||
inputPhoneMini.prototype.check=function(a){return""==a.sexe||"."==a.studies||"."==a.age||""==a.loc||""==a.reltype||"8"==a.reltype&&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)};
|
||||
|
|
|
@ -13,15 +13,14 @@ inputPhoneMini.prototype = {
|
|||
selected: 0, // UID de la MINI fiche sélectionnée
|
||||
handler: null, // Fonction pour l'enregistrement et la synchronisation des données
|
||||
defaultData: { // Valeur par défaut
|
||||
sexe: [defTrue, defFalse],
|
||||
age: '.',
|
||||
studies: '.',
|
||||
loc: [defTrue, defFalse, defFalse, defFalse],
|
||||
reltype: [ defTrue, defFalse, defFalse, defFalse, defFalse,
|
||||
defFalse, defFalse, defFalse, defFalse], // Choix 1 à 9
|
||||
sexe: 'H',
|
||||
age: '.',
|
||||
studies: '.',
|
||||
loc: '0',
|
||||
reltype: '0',
|
||||
reltypeSpecial: '',
|
||||
timestamp: 0,
|
||||
valid: false
|
||||
timestamp: 0,
|
||||
valid: false
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -31,7 +30,7 @@ inputPhoneMini.prototype = {
|
|||
inputPhoneMini.prototype.fieldsToStorage = function(){
|
||||
console.log('MINI FICHE: FIELDS TO STORAGE');
|
||||
|
||||
// {1} Pour chaque formulaire de contact présent //
|
||||
// {1} Pour chaque formulaire de MINI fiche à l'écran //
|
||||
var existingMiniFiches = $$('article.mini-relation-panel .mini-fiche-relation');
|
||||
for( var i = 0 ; i < existingMiniFiches.length ; i++ ){
|
||||
// {2} On initialise notre deflater pour récupérer les valeurs //
|
||||
|
@ -47,7 +46,7 @@ inputPhoneMini.prototype.fieldsToStorage = function(){
|
|||
|
||||
|
||||
// {4} On récupère les données du LSI si elles existent //
|
||||
var existingData = lsi.get('mini-fiches', deflated.uid.value);
|
||||
var existingData = lsi.get('mini-fiches', deflated.uid);
|
||||
|
||||
// Si n'existe pas, on passe à la suivante
|
||||
if( existingData === false )
|
||||
|
@ -63,15 +62,12 @@ inputPhoneMini.prototype.fieldsToStorage = function(){
|
|||
|
||||
|
||||
var obj = {
|
||||
uid: parseInt(deflated.uid.value),
|
||||
firstname: existingData.firstname,
|
||||
lastname: existingData.lastname,
|
||||
username: existingData.username,
|
||||
uid: parseInt(deflated.uid),
|
||||
sexe: deflated.sexe, // [0] Homme, [1] Femme
|
||||
age: deflated.age.value,
|
||||
studies: deflated.studies.value,
|
||||
age: deflated.age,
|
||||
studies: deflated.studies,
|
||||
reltype: deflated.reltype, // [0] ...
|
||||
reltypeSpecial: deflated.reltypeSpecial.value,
|
||||
reltypeSpecial: deflated.reltypeSpecial,
|
||||
loc: deflated.loc, // [0] Choix 1 -> [3] Choix 4
|
||||
hash: deflatedHash
|
||||
};
|
||||
|
@ -80,7 +76,8 @@ inputPhoneMini.prototype.fieldsToStorage = function(){
|
|||
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 ){
|
||||
if( diff(existingData, obj, ['hash', 'valid', 'timestamp']).length > 0 ){
|
||||
console.log( diff(existingData, obj, ['hash', 'valid', 'timestamp']) );
|
||||
console.warn('> FICHE UPDATE');
|
||||
obj.timestamp = Date.now();
|
||||
}
|
||||
|
@ -133,9 +130,7 @@ inputPhoneMini.prototype.add = function(objectData){
|
|||
|
||||
// {2} Création physique //
|
||||
this.container.innerHTML += miniFicheBuilder.build({
|
||||
firstname: associatedContact.firstname,
|
||||
lastname: associatedContact.lastname,
|
||||
username: (associatedContact.username.length==0) ? '' : '('+associatedContact.username+')',
|
||||
name: readableName(associatedContact.username, associatedContact.firstname, associatedContact.lastname),
|
||||
countcall: associatedContact.countcall,
|
||||
countsms: associatedContact.countsms,
|
||||
uid: objectData.uid,
|
||||
|
@ -155,21 +150,21 @@ inputPhoneMini.prototype.add = function(objectData){
|
|||
|
||||
/* {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"]');
|
||||
for( var i = 0 ; i < sexeCreated.length && i < objectData.sexe.length ; i++ )
|
||||
if( objectData.sexe[i].status ) sexeCreated[i].setAttribute('checked', 'checked');
|
||||
else sexeCreated[i].removeAttribute('checked');
|
||||
for( var i = 0 ; i < sexeCreated.length ; i++ )
|
||||
if( sexeCreated[i].value == objectData.sexe ) sexeCreated[i].setAttribute('checked', 'checked');
|
||||
else sexeCreated[i].removeAttribute('checked');
|
||||
|
||||
/* {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');
|
||||
for( var i = 0 ; i < reltypeCreated.length ; i++ )
|
||||
if( reltypeCreated[i].value == objectData.reltype ) 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"]');
|
||||
for( var i = 0 ; i < locCreated.length && i < objectData.loc.length ; i++ )
|
||||
if( objectData.loc[i].status ) locCreated[i].setAttribute('checked', 'checked');
|
||||
else locCreated[i].removeAttribute('checked');
|
||||
for( var i = 0 ; i < locCreated.length ; i++ )
|
||||
if( locCreated[i].value == objectData.loc ) locCreated[i].setAttribute('checked', 'checked');
|
||||
else locCreated[i].removeAttribute('checked');
|
||||
|
||||
};
|
||||
|
||||
|
@ -190,6 +185,12 @@ inputPhoneMini.prototype.storageToFields = function(){
|
|||
// {1} Pour chaque contact du 'localStorage' //
|
||||
var miniData = lsi.get('mini-fiches', this.selected);
|
||||
|
||||
// Si on a rien trouvé, on ne fait rien
|
||||
if( miniData == null ){
|
||||
this.updateNavBar();
|
||||
return false;
|
||||
}
|
||||
|
||||
// On réinitialise le HTML
|
||||
this.container.innerHTML = '';
|
||||
|
||||
|
@ -219,25 +220,51 @@ inputPhoneMini.prototype.sync = function(){
|
|||
/* (1) On récupère les clés de tous les CONTACTS */
|
||||
var contactData = lsi.export('contacts');
|
||||
|
||||
/* (2) Pour chaque CONTACT, on met à jour/crée la MINI fiche associée */
|
||||
|
||||
/* (2) On enregistre les contacts qui sont déja dans les FICHES */
|
||||
var fiches = lsi.export('fiches');
|
||||
var ignoredContacts = [];
|
||||
for( var id in fiches )
|
||||
if( ignoredContacts.indexOf( fiches[id].contact ) == -1 )
|
||||
ignoredContacts.push( fiches[id].contact );
|
||||
|
||||
|
||||
/* (3) Pour chaque CONTACT, on met à jour/crée la MINI fiche associée */
|
||||
for( var key in contactData ){
|
||||
|
||||
/* (3) On récupère les informations de la MINI (si elle existe) */
|
||||
var miniData = lsi.get('mini-fiches', key);
|
||||
/* (4) Si le contact est déja dans une fiche, on le retire */
|
||||
if( ignoredContacts.indexOf(parseInt(key)) > -1 ){
|
||||
// On supprime au cas ou
|
||||
lsi.del('mini-fiches', key);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* (5) Si le contact n'a aucun nominatif, on met inconnu par défaut, mais on ne l'affiche pas */
|
||||
var noName = contactData[key].username.length+contactData[key].firstname.length+contactData[key].lastname.length == 0;
|
||||
|
||||
// On rajoute un '.' après pour dire qu'on affichera pas
|
||||
var uid = noName ? key.toString()+'-' : key;
|
||||
|
||||
/* (5) On récupère les informations de la MINI (si elle existe) */
|
||||
var miniData = lsi.get('mini-fiches', uid);
|
||||
|
||||
|
||||
/* (4) Si la MINI fiche n'exise pas, on la crée avec les valeurs par défaut */
|
||||
/* (6) Si la MINI fiche n'exise pas, on la crée avec les valeurs par défaut */
|
||||
if( miniData == null ){
|
||||
miniData = this.defaultData;
|
||||
miniData.valid = false;
|
||||
|
||||
// Si aucun nom, on met 'inconnu' par défaut pour la fiche de relation
|
||||
if( isNaN(uid) )
|
||||
miniData.reltype = '9';
|
||||
}
|
||||
|
||||
/* (5) On met à jour la MINI fiche */
|
||||
miniData.uid = contactData[key].uid;
|
||||
/* (7) On met à jour la MINI fiche */
|
||||
miniData.uid = parseInt(key);
|
||||
|
||||
|
||||
/* (6) On enregistre les modification */
|
||||
lsi.set('mini-fiches', key, miniData);
|
||||
/* (8) On enregistre les modification */
|
||||
lsi.set('mini-fiches', uid, miniData);
|
||||
|
||||
}
|
||||
|
||||
|
@ -279,24 +306,24 @@ inputPhoneMini.prototype.nav = function(element){
|
|||
=========================================================*/
|
||||
inputPhoneMini.prototype.updateNavBar = function(){
|
||||
var miniData = lsi.export('mini-fiches');
|
||||
var len = Object.keys(miniData).length;
|
||||
|
||||
|
||||
/* (1) On vérifie si la barre de navigation est à jour */
|
||||
var navBarUpToDate = $$('#nav-mini [data-n]').length == len;
|
||||
/* (1) On vide et remplit la barre de nav, si elle n'est pas à jour */
|
||||
this.nav_container.innerHTML = '';
|
||||
var i = 0;
|
||||
|
||||
for( var key in miniData )
|
||||
if( !isNaN(key) ) // On affiche que les clés numériques
|
||||
this.nav_container.innerHTML += '<span data-n="'+key+'">'+(++i)+'</span>';
|
||||
|
||||
|
||||
/* (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++ )
|
||||
this.nav_container.innerHTML += '<span data-n="'+i+'">'+(i+1)+'</span>';
|
||||
}
|
||||
|
||||
/* (3) On montre les MINI fiches qui sont correctes dans la navbar */
|
||||
/* (2) On montre les MINI fiches qui sont correctes dans la navbar */
|
||||
for( var key in miniData ){
|
||||
|
||||
// Si la clé n'est pas numérique, on ne gère pas
|
||||
if( isNaN(key) )
|
||||
continue;
|
||||
|
||||
var currentElement = $('#nav-mini [data-n="'+miniData[key].uid+'"]');
|
||||
|
||||
if( currentElement == null )
|
||||
|
@ -315,7 +342,7 @@ inputPhoneMini.prototype.updateNavBar = function(){
|
|||
|
||||
|
||||
|
||||
/* (4) On séléctionne par défaut la dernière MINI fiche sélectionnée */
|
||||
/* (3) On séléctionne par défaut la dernière MINI fiche sélectionnée */
|
||||
this.nav( $('#nav-mini [data-n="'+this.selected+'"]') );
|
||||
};
|
||||
|
||||
|
@ -327,7 +354,7 @@ inputPhoneMini.prototype.updateNavBar = function(){
|
|||
inputPhoneMini.prototype.check = function(miniData){
|
||||
|
||||
// 1. Le sexe est défini
|
||||
if( !checkRadioValue(miniData.sexe) )
|
||||
if( miniData.sexe == '' )
|
||||
return false;
|
||||
// 2. Le métier est défini
|
||||
if( miniData.studies == '.' )
|
||||
|
@ -336,13 +363,13 @@ inputPhoneMini.prototype.check = function(miniData){
|
|||
if( miniData.age == '.' )
|
||||
return false;
|
||||
// 4. La distance de localisation est définie
|
||||
if( !checkRadioValue(miniData.loc) )
|
||||
if( miniData.loc == '' )
|
||||
return false;
|
||||
// 5. Le TYPE DE RELATION a un et un seul choix
|
||||
if( !checkRadioValue(miniData.reltype) )
|
||||
if( 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 )
|
||||
if( miniData.reltype == '8' && miniData.reltypeSpecial.length < 2 )
|
||||
return false;
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +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};
|
||||
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})};
|
||||
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.check=function(){var a=0<this.number.value.length;return a=a&&0<this.username.value.length+this.firstname.value.length+this.lastname.value.length};
|
||||
inputPhoneSubject.prototype.fieldsToStorage=function(){console.log("SUBJECT: FIELDS TO STORAGE");if(!this.check())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",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()};
|
||||
inputPhoneSubject.prototype.attach=function(){function a(a){b.fieldsToStorage()&&b.storageToFields()}console.log("SUBJECT: ATTACH");lsi.createDataset("subject");var b=this;this.store_button.addEventListener("click",a,!1);this.number.addEventListener("blur",a,!1);this.username.addEventListener("blur",a,!1);this.firstname.addEventListener("blur",a,!1);this.lastname.addEventListener("blur",a,!1);this.storageToFields()};
|
||||
|
|
|
@ -20,19 +20,26 @@ inputPhoneSubject.prototype = {
|
|||
};
|
||||
|
||||
|
||||
/* [2] Gestion de l'enregistrement des formulaires de contact
|
||||
/* [2] Vérification d'un formulaire
|
||||
=========================================================*/
|
||||
inputPhoneSubject.prototype.check = function(){
|
||||
/* (1) Le numéro n'est pas vide */
|
||||
var validForm = this.number.value.length > 0;
|
||||
|
||||
/* (2) ET le pseudo et/ou le prénom et/ou le nom n'est pas vide */
|
||||
validForm = validForm && this.username.value.length+this.firstname.value.length+this.lastname.value.length > 0;
|
||||
|
||||
// On renvoie la validité du formulaire
|
||||
return validForm;
|
||||
};
|
||||
|
||||
/* [3] Gestion de l'enregistrement des formulaires de contact
|
||||
=========================================================*/
|
||||
inputPhoneSubject.prototype.fieldsToStorage = function(){
|
||||
console.log('SUBJECT: FIELDS TO STORAGE');
|
||||
|
||||
// {1} Vérification des champs //
|
||||
// Le numéro n'est pas vide
|
||||
var validForm = this.number.value.length > 0;
|
||||
// ET le pseudo et/ou le prénom et/ou le nom n'est pas vide
|
||||
validForm = validForm && this.username.value.length+this.firstname.value.length+this.lastname.value.length > 0;
|
||||
|
||||
// Si le formulaire n'est pas valide, on ne l'enregistre pas
|
||||
if( !validForm ) return false;
|
||||
// {1} Si le formulaire n'est pas valide, on ne l'enregistre pas //
|
||||
if( !this.check() ) return false;
|
||||
|
||||
// {2} On récupère et met en forme les valeurs du deflater //
|
||||
var obj = {
|
||||
|
@ -52,7 +59,7 @@ inputPhoneSubject.prototype.fieldsToStorage = function(){
|
|||
|
||||
|
||||
|
||||
/* [3] Gestion de l'affichage depuis le 'localStorage'
|
||||
/* [4] Gestion de l'affichage depuis le 'localStorage'
|
||||
=========================================================*/
|
||||
inputPhoneSubject.prototype.storageToFields = function(){
|
||||
console.log('SUBJECT: STORAGE TO FIELDS');
|
||||
|
@ -72,7 +79,7 @@ inputPhoneSubject.prototype.storageToFields = function(){
|
|||
|
||||
|
||||
|
||||
/* [4] Point d'amorçage de la gestion des contacts
|
||||
/* [5] Point d'amorçage de la gestion des contacts
|
||||
=========================================================*/
|
||||
inputPhoneSubject.prototype.attach = function(){
|
||||
console.log('SUBJECT: ATTACH');
|
||||
|
@ -80,10 +87,21 @@ inputPhoneSubject.prototype.attach = function(){
|
|||
/* (1) On initialise le jeu de données */
|
||||
lsi.createDataset('subject');
|
||||
|
||||
/* (2) On attache l'évènement sur le bouton d'ajout de contact */
|
||||
// Pointeur pour les scopes des addEventListener()
|
||||
var ptr = this;
|
||||
this.store_button.addEventListener('click', function(e){ ptr.fieldsToStorage(); }, false);
|
||||
// Handler de mise à jour quand les champs sont bons
|
||||
function fts(e){ if( ptr.fieldsToStorage() ) ptr.storageToFields(); }
|
||||
|
||||
/* (3) On charge le sujet depuis la mémoire ('localStorage') */
|
||||
|
||||
/* (2) On attache l'évènement sur le bouton d'enregistrement */
|
||||
this.store_button.addEventListener('click', fts, false);
|
||||
|
||||
/* (3) On attache un évènement de 'blur' sur chaque '<input type="text">' */
|
||||
this.number.addEventListener( 'blur', fts, false);
|
||||
this.username.addEventListener( 'blur', fts, false);
|
||||
this.firstname.addEventListener( 'blur', fts, false);
|
||||
this.lastname.addEventListener( 'blur', fts, false);
|
||||
|
||||
/* (4) On charge le sujet depuis la mémoire ('localStorage') */
|
||||
this.storageToFields();
|
||||
};
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
function APIClass(b){this.target=b}
|
||||
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,
|
||||
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)}};
|
||||
APIClass.prototype={xhr:[],buffer:null,send:function(b,e,g){b.hasOwnProperty("path")||e({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(d.buffer=d.xhr[a].responseText,
|
||||
-1<[0,200].indexOf(d.xhr[a].status))try{e(JSON.parse(d.xhr[a].responseText))}catch(b){e({ModuleError:-1,ErrorDescription:"Erreur au niveau de api.js"})}else e({ModuleError:3})};var f=new FormData,c;for(c in b)"path"==c?f.append(c,b[c]):b[c]instanceof File?f.append(c,b[c]):f.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(f)}};
|
||||
|
|
|
@ -4,6 +4,7 @@ function APIClass(target){ this.target = target; }
|
|||
APIClass.prototype = {
|
||||
xhr: [], // tableau d'objets pour les requêtes ajax
|
||||
|
||||
buffer: null,
|
||||
|
||||
/* transaction avec le serveur (http://host/api/)
|
||||
*
|
||||
|
@ -54,6 +55,7 @@ APIClass.prototype = {
|
|||
this.xhr[i].onreadystatechange = function(){
|
||||
if( ptrAPI.xhr[i].readyState == 4 ){ // si la requête est terminée
|
||||
|
||||
ptrAPI.buffer = ptrAPI.xhr[i].responseText;
|
||||
/* DEBUG : affiche la réponse BRUTE de http://host/api/ */
|
||||
// console.log('http://host/api/ => '+ptrAPI.xhr[i].responseText);
|
||||
// console.log( JSON.parse(ptrAPI.xhr[i].responseText) );
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
function FormDeflater(b,c,a){for(var d=0;d<c.length;d++)c[d]=c[d].toLowerCase();for(d=0;d<a.length;d++)a[d]=a[d].toLowerCase();this.container=b;this.tags=c;this.attr=a}
|
||||
FormDeflater.prototype={container:this.container,tags:this.tags,attr:this.attr,deflate:function(){for(var b=this.getChildren(this.container),b=this.filterElements(b),c={},a=0;a<b.length;a++)for(var d=0;d<this.attr.length;d++){var e=b[a].getAttribute(this.attr[d]);if(null!==e&&0<e.length){c.hasOwnProperty(e)?c[e]instanceof Array?c[e].push({value:b[a].value,status:b[a].checked}):c[e]=[c[e],{value:b[a].value,status:b[a].checked}]:c[e]={value:b[a].value,status:b[a].checked};break}}return c},getChildren:function(b){if(!(b instanceof
|
||||
Element))return[];for(var c=b=[].slice.call(b.children),a=0;a<b.length;a++)c=c.concat([].slice.call(this.getChildren(b[a])));return c},filterElements:function(b){for(var c=[],a=0;a<b.length;a++)-1<this.tags.indexOf(b[a].tagName.toLowerCase())&&c.push(b[a]);return c}};
|
||||
function FormDeflater(b,c,a){for(var d=0;d<c.length;d++)c[d]=c[d].toLowerCase();for(d=0;d<a.length;d++)a[d]=a[d].toLowerCase();this.container=b;this.tags=c;this.attr=a}FormDeflater.prototype={container:this.container,tags:this.tags,attr:this.attr};
|
||||
FormDeflater.prototype.deflate=function(){for(var b=this.getChildren(this.container),b=this.filterElements(b),c={},a=0;a<b.length;a++)for(var d=0;d<this.attr.length;d++){var e=b[a].getAttribute(this.attr[d]);if(null!==e&&0<e.length){c.hasOwnProperty(e)?c[e]instanceof Array?c[e].push({target:b[a],attr:this.attr[d],value:b[a].value,checked:b[a].checked}):c[e]=[c[e],{target:b[a],attr:this.attr[d],value:b[a].value,checked:b[a].checked}]:c[e]={target:b[a],attr:this.attr[d],value:b[a].value,checked:b[a].checked};
|
||||
break}}return c=this.cleanOutput(c)};FormDeflater.prototype.checkable=function(b){return"INPUT"!=b.tagName||-1==["radio","checkbox"].indexOf(b.getAttribute("type").toLowerCase())?!1:!0};
|
||||
FormDeflater.prototype.cleanOutput=function(b){var c={},a;for(a in b)if(b[a]instanceof Array){var d=!0,e=[],f;for(f in b[a])if(this.checkable(b[a][f].target))!0===b[a][f].checked&&e.push(f);else{d=!1;break}if(d)if(1==e.length)c[a]=b[a][e[0]].value;else for(f in c[a]=[],e)c[a].push(b[a][e[f]].value);else for(f in c[a]=[],b[a])c[a].push(b[a][f].value)}else this.checkable(b[a].target)?c[a]=b[a].checked?b[a].value:null:c[a]=b[a].value;return c};
|
||||
FormDeflater.prototype.getChildren=function(b){if(!(b instanceof Element))return[];for(var c=b=[].slice.call(b.children),a=0;a<b.length;a++)c=c.concat([].slice.call(this.getChildren(b[a])));return c};FormDeflater.prototype.filterElements=function(b){for(var c=[],a=0;a<b.length;a++)-1<this.tags.indexOf(b[a].tagName.toLowerCase())&&c.push(b[a]);return c};
|
||||
|
|
|
@ -34,132 +34,236 @@ function FormDeflater(container, tags, attr){
|
|||
|
||||
FormDeflater.prototype = {
|
||||
container: this.container, // Contiendra le 'formulaire' (<form> ou autre)
|
||||
tags: this.tags, // Contiendra les balises HTML à ne pas prendre en compte
|
||||
attr: this.attr, // Contiendra la liste des attributs à prendre pour nom (par ordre de priorité)
|
||||
tags: this.tags, // Contiendra les balises HTML à ne pas prendre en compte
|
||||
attr: this.attr // Contiendra la liste des attributs à prendre pour nom (par ordre de priorité)
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* RETOURNE UN OBJET CONTENANT LES DONNÉES DU FORMULAIRE
|
||||
*
|
||||
* @return form<Object> Objet correspondant aux données du formulaire
|
||||
*
|
||||
*/
|
||||
FormDeflater.prototype.deflate = function(){
|
||||
/* [1] On récupère tous les enfants
|
||||
=========================================================*/
|
||||
var children = this.getChildren( this.container );
|
||||
|
||||
/* RETOURNE UN OBJET CONTENANT LES DONNÉES DU FORMULAIRE
|
||||
*
|
||||
* @return form<Object> Objet correspondant aux données du formulaire
|
||||
*
|
||||
*/
|
||||
deflate: function(){
|
||||
/* [1] On récupère tous les enfants
|
||||
=========================================================*/
|
||||
var children = this.getChildren( this.container );
|
||||
|
||||
/* [2] On filtre les éléments qui ont pas le bon tag
|
||||
=========================================================*/
|
||||
children = this.filterElements( children );
|
||||
/* [2] On filtre les éléments qui ont pas le bon tag
|
||||
=========================================================*/
|
||||
children = this.filterElements( children );
|
||||
|
||||
|
||||
/* [3] On essaie de trouver les attributs primants (non vides et en premier dans la liste @this.attr)
|
||||
=========================================================*/
|
||||
/* (0) On initialise l'objet de retour */
|
||||
var object = {};
|
||||
/* [3] On essaie de trouver les attributs primants (non vides et en premier dans la liste @this.attr)
|
||||
=========================================================*/
|
||||
/* (0) On initialise l'objet de retour */
|
||||
var object = {};
|
||||
|
||||
/* (1) Pour chacun des éléments */
|
||||
for( var c = 0 ; c < children.length ; c++ ){
|
||||
/* (1) Pour chacun des éléments */
|
||||
for( var c = 0 ; c < children.length ; c++ ){
|
||||
|
||||
/* (2) Pour chacun des attributs par ordre de priorité */
|
||||
for( var a = 0 ; a < this.attr.length ; a++ ){
|
||||
// On récupère l'attribut
|
||||
var attr = children[c].getAttribute(this.attr[a]);
|
||||
/* (2) Pour chacun des attributs par ordre de priorité */
|
||||
for( var a = 0 ; a < this.attr.length ; a++ ){
|
||||
// On récupère l'attribut
|
||||
var attr = children[c].getAttribute(this.attr[a]);
|
||||
|
||||
/* (3) Si l'attribut n'est pas null ni vide */
|
||||
if( attr !== null && attr.length > 0 ){
|
||||
|
||||
/* (4) Si on a pas déja un champ de même nom */
|
||||
if( object.hasOwnProperty(attr) ){
|
||||
var existing = object[attr];
|
||||
|
||||
// {1} Si l'existant est un tableau, on ajoute notre valeur //
|
||||
if( existing instanceof Array )
|
||||
object[attr].push( { value: children[c].value, status: children[c].checked } );
|
||||
/* (3) Si l'attribut est défini (pas null ni vide) */
|
||||
if( attr !== null && attr.length > 0 ){
|
||||
|
||||
// {2} Sinon, si c'est une valeur seule, on crée un tableau //
|
||||
else
|
||||
object[attr] = [ object[attr], { value: children[c].value, status: children[c].checked } ];
|
||||
/* (4) Si on a pas déja un champ de même nom */
|
||||
if( object.hasOwnProperty(attr) ){
|
||||
var existing = object[attr];
|
||||
|
||||
/* (5) Si c'est le premier champ avec ce nom, on le crée */
|
||||
}else
|
||||
object[attr] = { value: children[c].value, status: children[c].checked };
|
||||
// {1} Si l'existant est un tableau, on ajoute notre valeur //
|
||||
if( existing instanceof Array )
|
||||
object[attr].push( { target: children[c], attr: this.attr[a], value: children[c].value, checked: children[c].checked } );
|
||||
|
||||
// On en a fini pour cet élément
|
||||
break;
|
||||
}
|
||||
// {2} Sinon, si c'est une valeur seule, on crée un tableau //
|
||||
else
|
||||
object[attr] = [ object[attr], { target: children[c], attr: this.attr[a], value: children[c].value, checked: children[c].checked } ];
|
||||
|
||||
/* (5) Si c'est le premier champ avec ce nom, on le crée */
|
||||
}else
|
||||
object[attr] = { target: children[c], attr: this.attr[a], value: children[c].value, checked: children[c].checked };
|
||||
|
||||
// On en a fini pour cet élément
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
return object;
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
/* RETOURNE LA LISTE DE TOUS LES ÉLÉMENTS QUEL QUE SOIT LE NIVEAU HIÉRARCHIQUE
|
||||
*
|
||||
* @parent<Element> Parent duquel on veut les enfants
|
||||
*
|
||||
* @return children<Array> Tableau contenant tous les enfants
|
||||
*
|
||||
*/
|
||||
getChildren: function(parent){
|
||||
// Si le parent n'est pas un élément, on retourne aucun enfant
|
||||
if( !(parent instanceof Element) ) return [];
|
||||
|
||||
/* [1] Initialisation des variables
|
||||
=========================================================*/
|
||||
// Contient la liste des enfants directs
|
||||
var children = [].slice.call(parent.children);
|
||||
|
||||
// Contiendra la liste des enfants directs et indirects
|
||||
var allChildren = children;
|
||||
|
||||
/* [2] On parcourt tous les enfants
|
||||
=========================================================*/
|
||||
for( var i = 0 ; i < children.length ; i++ ){
|
||||
// On relance la fonction récursivement sur tous les enfants
|
||||
allChildren = allChildren.concat( [].slice.call(this.getChildren(children[i])) );
|
||||
}
|
||||
|
||||
/* [3] On retourne le résultat
|
||||
=========================================================*/
|
||||
return allChildren;
|
||||
},
|
||||
|
||||
|
||||
|
||||
/* FILTRE LES éléments en fonction de @this.tags et @this.attr
|
||||
*
|
||||
* @elements<Array> Le tableau contenant les éléments à trier
|
||||
*
|
||||
* @return filtered<Array> Retourne le tableau des éléments filtrés
|
||||
*
|
||||
*/
|
||||
filterElements: function(elements){
|
||||
// Contiendra les éléments correspondants aux critères
|
||||
var filtered = [];
|
||||
|
||||
/* [1] On parcourt tous les éléments
|
||||
=========================================================*/
|
||||
for( var i = 0 ; i < elements.length ; i++ ){
|
||||
/* (1) Si l'élément a le bon tag, on le garde */
|
||||
if( this.tags.indexOf( elements[i].tagName.toLowerCase() ) > -1 )
|
||||
filtered.push(elements[i]);
|
||||
}
|
||||
|
||||
/* [3] On retourne les éléments filtrés
|
||||
=========================================================*/
|
||||
return filtered;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* [4] On met en forme les données
|
||||
=========================================================*/
|
||||
object = this.cleanOutput(object);
|
||||
|
||||
|
||||
return object;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/* RETOURNE SI UN ELEMENT EST UN BOUTON DE TYPE RADIO/CHECKBOX OU NON
|
||||
*
|
||||
* @element<Element> Element en question
|
||||
*
|
||||
* @return result<Boolean> Renvoie si TRUE or FALSE il en est un
|
||||
*
|
||||
*/
|
||||
FormDeflater.prototype.checkable = function(element){
|
||||
if( element.tagName != 'INPUT' )
|
||||
return false;
|
||||
|
||||
if( ['radio', 'checkbox'].indexOf( element.getAttribute('type').toLowerCase() ) == -1 )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/* NETTOIE LES DONNÉES EN SORTIE POUR QU'ELLES SOIENT UTILISABLES ET OPTIMISÉES
|
||||
*
|
||||
* @input<Object> Données "brutes"
|
||||
*
|
||||
* @return output<Object> Données sans les valeurs inutiles et explicitées
|
||||
*
|
||||
*/
|
||||
FormDeflater.prototype.cleanOutput = function(input){
|
||||
var output = {};
|
||||
|
||||
/* [1] On parcourt toutes les valeurs récupérées
|
||||
=========================================================*/
|
||||
for( var key in input ){
|
||||
|
||||
/* [2] Si c'est un tableau
|
||||
=========================================================*/
|
||||
if( input[key] instanceof Array ){
|
||||
|
||||
// VRAI si tous les éléments sont radio/checkbox
|
||||
var areCheckable = true;
|
||||
// Contiendra les indices des valeurs ou 'checked=TRUE'
|
||||
var checkedIndexes = [];
|
||||
|
||||
/* (1) On vérifie si tous les champs sont checkables */
|
||||
for( var i in input[key])
|
||||
// si pas checkable, on arrête de vérifier
|
||||
if( !this.checkable(input[key][i].target) ){
|
||||
areCheckable = false;
|
||||
break;
|
||||
// Sinon si checkable et checked=TRUE, on incrémente @nbChecked
|
||||
}else if( input[key][i].checked === true )
|
||||
checkedIndexes.push(i);
|
||||
|
||||
/* (2) Si c'est que des radio ou des checkbox avec une seule valeur à TRUE */
|
||||
if( areCheckable )
|
||||
if( checkedIndexes.length == 1 )
|
||||
output[key] = input[key][checkedIndexes[0]].value;
|
||||
|
||||
/* (3) Si c'est que des radio ou des checkbox avec plusieurs valeurs à TRUE */
|
||||
else{
|
||||
output[key] = [];
|
||||
for( var i in checkedIndexes )
|
||||
output[key].push( input[key][checkedIndexes[i]].value );
|
||||
}
|
||||
|
||||
/* (4) Si c'est pas que des radio ou des checkbox, on met les valeurs */
|
||||
else{
|
||||
output[key] = [];
|
||||
for( var i in input[key] )
|
||||
output[key].push( input[key][i].value );
|
||||
}
|
||||
|
||||
/* [3] S'il n'y a qu'une donnée (pas un tableau)
|
||||
=========================================================*/
|
||||
}else{
|
||||
|
||||
/* (1) Si de type 'radio' ou 'checkbox', on met la valeur de 'checked' */
|
||||
if( this.checkable(input[key].target) )
|
||||
output[key] = input[key].checked ? input[key].value : null;
|
||||
|
||||
/* (2) Sinon, on met la valeur de 'value' */
|
||||
else
|
||||
output[key] = input[key].value;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
return output;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* RETOURNE LA LISTE DE TOUS LES ÉLÉMENTS QUEL QUE SOIT LE NIVEAU HIÉRARCHIQUE
|
||||
*
|
||||
* @parent<Element> Parent duquel on veut les enfants
|
||||
*
|
||||
* @return children<Array> Tableau contenant tous les enfants
|
||||
*
|
||||
*/
|
||||
FormDeflater.prototype.getChildren = function(parent){
|
||||
// Si le parent n'est pas un élément, on retourne aucun enfant
|
||||
if( !(parent instanceof Element) ) return [];
|
||||
|
||||
/* [1] Initialisation des variables
|
||||
=========================================================*/
|
||||
// Contient la liste des enfants directs
|
||||
var children = [].slice.call(parent.children);
|
||||
|
||||
// Contiendra la liste des enfants directs et indirects
|
||||
var allChildren = children;
|
||||
|
||||
/* [2] On parcourt tous les enfants
|
||||
=========================================================*/
|
||||
for( var i = 0 ; i < children.length ; i++ ){
|
||||
// On relance la fonction récursivement sur tous les enfants
|
||||
allChildren = allChildren.concat( [].slice.call(this.getChildren(children[i])) );
|
||||
}
|
||||
|
||||
/* [3] On retourne le résultat
|
||||
=========================================================*/
|
||||
return allChildren;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/* FILTRE LES éléments en fonction de @this.tags et @this.attr
|
||||
*
|
||||
* @elements<Array> Le tableau contenant les éléments à trier
|
||||
*
|
||||
* @return filtered<Array> Retourne le tableau des éléments filtrés
|
||||
*
|
||||
*/
|
||||
FormDeflater.prototype.filterElements = function(elements){
|
||||
// Contiendra les éléments correspondants aux critères
|
||||
var filtered = [];
|
||||
|
||||
/* [1] On parcourt tous les éléments
|
||||
=========================================================*/
|
||||
for( var i = 0 ; i < elements.length ; i++ )
|
||||
// Si l'élément a le bon tag, on le garde
|
||||
if( this.tags.indexOf( elements[i].tagName.toLowerCase() ) > -1 )
|
||||
filtered.push(elements[i]);
|
||||
|
||||
/* [2] On retourne les éléments filtrés
|
||||
=========================================================*/
|
||||
return filtered;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
function localStorageInterface(){}
|
||||
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);
|
||||
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;
|
||||
localStorageInterface.prototype={dataset:[],dataset_keys:[],storage:localStorage,setStorage:function(a){if(a!=localStorage&&a!=sessionStorage)return!1;this.storage=a},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),this.storage.setItem(a,JSON.stringify(this.dataset_keys[c])));this.storage.setItem(a+"_"+b,JSON.stringify(d));return!0},get:function(a,b){if(null!=b)return b=b.toString(),-1==this.dataset.indexOf(a)?
|
||||
!1:JSON.parse(this.storage.getItem(a+"_"+b))},del:function(a,b){b=b.toString();var d=this.dataset.indexOf(a);if(-1==d)return!1;var c=this.dataset_keys[d].indexOf(b);if(-1==c)return!1;this.storage.removeItem(a+"_"+b);this.dataset_keys[d].splice(c,1);this.storage.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=this.storage.getItem(a);null!=b?(this.dataset.push(a),this.dataset_keys.push(JSON.parse(b))):
|
||||
(this.dataset.push(a),this.dataset_keys.push([]),this.storage.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]=[];this.storage.setItem(a,JSON.stringify(this.dataset_keys[b]));return!0}};var lsi=new localStorageInterface;
|
||||
|
|
|
@ -5,6 +5,17 @@ localStorageInterface.prototype = {
|
|||
dataset: [], // Contiendra les différents 'dataset'
|
||||
dataset_keys: [], // Contiendra les clés de chaque 'dataset'
|
||||
|
||||
storage: localStorage, // Peut contenir 'localStorage' ou 'sessionStorage'
|
||||
|
||||
setStorage: function(storage){
|
||||
// Si valeur incohérente
|
||||
if( storage != localStorage && storage != sessionStorage )
|
||||
return false;
|
||||
|
||||
// Sinon on enregistre le type de storage
|
||||
this.storage = storage;
|
||||
},
|
||||
|
||||
|
||||
/* AJOUTE UN ELEMENT AU DATASET DONNE
|
||||
*
|
||||
|
@ -26,11 +37,11 @@ localStorageInterface.prototype = {
|
|||
/* (2) On enregistre la nouvelle clé, si elle est nouvelle */
|
||||
if( this.dataset_keys[index].indexOf(key) == -1 ){
|
||||
this.dataset_keys[index].push(key);
|
||||
localStorage.setItem(dataset_name, JSON.stringify(this.dataset_keys[index]));
|
||||
this.storage.setItem(dataset_name, JSON.stringify(this.dataset_keys[index]));
|
||||
}
|
||||
|
||||
/* (3) On propage au 'localStorage' */
|
||||
localStorage.setItem(dataset_name+'_'+key, JSON.stringify(value) );
|
||||
this.storage.setItem(dataset_name+'_'+key, JSON.stringify(value) );
|
||||
|
||||
return true;
|
||||
},
|
||||
|
@ -44,6 +55,9 @@ localStorageInterface.prototype = {
|
|||
*
|
||||
*/
|
||||
get: function(dataset_name, key){
|
||||
if( key == null )
|
||||
return null;
|
||||
|
||||
// On met la clé en <String>
|
||||
key = key.toString();
|
||||
|
||||
|
@ -51,7 +65,7 @@ localStorageInterface.prototype = {
|
|||
if( this.dataset.indexOf(dataset_name) == -1 ) return false; // erreur
|
||||
|
||||
/* (2) On propage au 'localStorage' */
|
||||
return JSON.parse( localStorage.getItem(dataset_name+'_'+key) );
|
||||
return JSON.parse( this.storage.getItem(dataset_name+'_'+key) );
|
||||
},
|
||||
|
||||
/* SUPPRIME UN ELEMENT D'UN DATASET DONNE
|
||||
|
@ -75,13 +89,13 @@ localStorageInterface.prototype = {
|
|||
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);
|
||||
this.storage.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]));
|
||||
this.storage.setItem(dataset, JSON.stringify(this.dataset_keys[index]));
|
||||
|
||||
|
||||
return true;
|
||||
|
@ -105,7 +119,7 @@ localStorageInterface.prototype = {
|
|||
if( datasetIndex > -1 ) return true;
|
||||
|
||||
/* (3) On charge le dataset s'il existe */
|
||||
var storedDataset = localStorage.getItem(name);
|
||||
var storedDataset = this.storage.getItem(name);
|
||||
if( storedDataset != null ){ // Si le dataset existe, on charge les données
|
||||
|
||||
this.dataset.push(name);
|
||||
|
@ -116,7 +130,7 @@ localStorageInterface.prototype = {
|
|||
|
||||
this.dataset.push(name);
|
||||
this.dataset_keys.push([]);
|
||||
localStorage.setItem(name, JSON.stringify([]));
|
||||
this.storage.setItem(name, JSON.stringify([]));
|
||||
|
||||
}
|
||||
|
||||
|
@ -218,7 +232,7 @@ localStorageInterface.prototype = {
|
|||
|
||||
/* (3) Par précaution, on supprime les clés du dataset */
|
||||
this.dataset_keys[index] = [];
|
||||
localStorage.setItem(dataset, JSON.stringify(this.dataset_keys[index]));
|
||||
this.storage.setItem(dataset, JSON.stringify(this.dataset_keys[index]));
|
||||
|
||||
/* (4) On retourne que tout s'est bien passé */
|
||||
return true;
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
var NotificationClass=function(a){this.container=a};NotificationClass.prototype={container:this.container,stack:[],types:["warning","info","success","error"],defaultTimeout:2E3,errorCodes:{}};NotificationClass.prototype.pushStack=function(a,c,b){if(!(a instanceof Array&&b instanceof Array))return null;var e=-1,d;for(d in a)if(-1<b.indexOf(a[d])){e=d;break}if(-1==e)return a.push(c)-1;a[e]=c;return e};
|
||||
NotificationClass.prototype.hide=function(a){if(isNaN(a))return!1;a=parseInt(a);this.container.removeChild(this.stack[a].element);this.stack[a]=null};
|
||||
NotificationClass.prototype.show=function(a,c,b,e){a=-1<this.types.indexOf(a)?a:this.types[0];c="string"==typeof c?c:"";b="string"==typeof b.toString()?b:"...";null!=this.errorCodes[b]&&(b=this.errorCodes[b]);e="number"==typeof e?e:this.defaultTimeout;var d={element:document.createElement("div"),type:a,title:c,message:b,timeout:null};d.element.className="notification-element";d.element.setAttribute("data-"+a,"");d.element.innerHTML="<p><strong>"+c+":</strong> "+b+"<p>";this.container.appendChild(d.element);
|
||||
var f=this.pushStack(this.stack,d,[null]);d.element.id=f;var g=this;d.element.className="notification-element notification-visible";setTimeout(function(){d.element.className="notification-element"},500+e);d.timeout=setTimeout(function(){g.hide(f)},500+e+500);d.element.addEventListener("click",function(a){g.hide(f)},!1);return d.element};NotificationClass.prototype.warning=function(a,c,b){return this.show("warning",a,c,b)};
|
||||
NotificationClass.prototype.info=function(a,c,b){return this.show("info",a,c,b)};NotificationClass.prototype.success=function(a,c,b){return this.show("success",a,c,b)};NotificationClass.prototype.error=function(a,c,b){return this.show("error",a,c,b)};
|
|
@ -0,0 +1,179 @@
|
|||
|
||||
/* [0] CONSTRUCTEUR
|
||||
=========================================================*/
|
||||
var NotificationClass = function(container){
|
||||
this.container = container;
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* [1] PROTOTYPE ET ATTRIBUTS
|
||||
=========================================================*/
|
||||
NotificationClass.prototype = {
|
||||
container: this.container, // Parent de la page à notifier
|
||||
stack: [], // Contiendra les données de toutes les notifications actives
|
||||
types: [ // Définition des différents types
|
||||
'warning',
|
||||
'info',
|
||||
'success',
|
||||
'error'
|
||||
],
|
||||
defaultTimeout: 2000, // Temps d'apparition par défaut
|
||||
errorCodes: {} // codes d'erreurs sous la forme {codeErreur1: texteErreur1, codeErreur2: texteErreur2, ...}
|
||||
};
|
||||
|
||||
|
||||
/* [2] AJOUT D'UN ELEMENT DANS LA PILE
|
||||
=========================================================*/
|
||||
/*
|
||||
*
|
||||
* @stack<Array> Pile dans laquelle on veut ajouter un élément
|
||||
* @element<Mixed> Elément que l'on veut ajouter à la pile
|
||||
* @emptyValues<Array> Liste des valeurs à considérer comme 'vides'
|
||||
*
|
||||
*/
|
||||
NotificationClass.prototype.pushStack = function(stack, element, emptyValues){
|
||||
/* (0) Vérification des INPUT
|
||||
---------------------------------------------------------*/
|
||||
/* (1) Vérification de @stack */
|
||||
if( !(stack instanceof Array) )
|
||||
return null;
|
||||
/* (2) Vérification de @emptyValues */
|
||||
if( !(emptyValues instanceof Array) )
|
||||
return null;
|
||||
|
||||
|
||||
/* (1) On cherche la première valeur vide dans @stack
|
||||
---------------------------------------------------------*/
|
||||
var index = -1;
|
||||
for( var i in stack )
|
||||
if( emptyValues.indexOf(stack[i]) > -1 ){
|
||||
index = i;
|
||||
break;
|
||||
}
|
||||
|
||||
/* (2) Insertion et résultat
|
||||
---------------------------------------------------------*/
|
||||
/* (1) Si on a rien trouvé, on fait un push normal */
|
||||
if( index == -1 )
|
||||
return stack.push(element) - 1;
|
||||
|
||||
/* (2) Si on a trouvé, on enregistre @element et on renvoie @index */
|
||||
stack[index] = element;
|
||||
return index;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* [3] SUPPRESSION D'UNE NOTIFICATION
|
||||
=========================================================*/
|
||||
/*
|
||||
*
|
||||
* @id<int> Id de la notification dans la pile
|
||||
*
|
||||
*/
|
||||
NotificationClass.prototype.hide = function(id){
|
||||
/* (0) Vérification de @id */
|
||||
if( isNaN(id) )
|
||||
return false;
|
||||
|
||||
id = parseInt(id);
|
||||
|
||||
/* (1) Suppression de l'élément */
|
||||
this.container.removeChild( this.stack[id].element );
|
||||
|
||||
/* (2) On supprime la notification de la pile */
|
||||
this.stack[id] = null;
|
||||
};
|
||||
|
||||
|
||||
/* [4] AFFICHAGE D'UNE NOTIFICATION
|
||||
=========================================================*/
|
||||
/*
|
||||
*
|
||||
* @type<String> Type de notification parmi 'warning', 'info', 'success', 'error'
|
||||
* @title<String> Titre de la notification
|
||||
* @message<String> Message de la notification
|
||||
* @timeout<int> Temps d'apparition de la notification en ms (millisecondes) + 2 * 500ms (fadeIn+fadeOut)
|
||||
*
|
||||
*/
|
||||
NotificationClass.prototype.show = function(type, title, message, timeout){
|
||||
/* (0) Vérification des INPUT
|
||||
---------------------------------------------------------*/
|
||||
/* (1) Vérification de @type */
|
||||
type = this.types.indexOf(type) > -1 ? type : this.types[0];
|
||||
|
||||
/* (2) Vérification de @title */
|
||||
title = typeof title == 'string' ? title : '';
|
||||
|
||||
/* (3) Vérification de @message */
|
||||
message = typeof message.toString() == 'string' ? message : '...';
|
||||
|
||||
// On cherche s'il y a une occurence dans le dictionnaire
|
||||
if( this.errorCodes[message] != null )
|
||||
message = this.errorCodes[message];
|
||||
|
||||
/* (4) Vérification de @timeout */
|
||||
timeout = typeof timeout == 'number' ? timeout : this.defaultTimeout;
|
||||
|
||||
/* (1) Construction de l'élément
|
||||
---------------------------------------------------------*/
|
||||
/* (1) Création du set de données */
|
||||
var stackItem = {
|
||||
element: document.createElement('div'),
|
||||
type: type,
|
||||
title: title,
|
||||
message: message,
|
||||
timeout: null
|
||||
};
|
||||
|
||||
/* (2) Construction de l'élément */
|
||||
stackItem.element.className = 'notification-element';
|
||||
stackItem.element.setAttribute('data-'+type, '');
|
||||
stackItem.element.innerHTML = '<p><strong>'+title+':</strong> '+message+'<p>';
|
||||
|
||||
/* (2) Ajout à la pile et au DOM
|
||||
---------------------------------------------------------*/
|
||||
this.container.appendChild(stackItem.element);
|
||||
var id = this.pushStack( this.stack, stackItem, [null] );
|
||||
stackItem.element.id = id;
|
||||
|
||||
/* (3) Gestion du temps d'apparition
|
||||
---------------------------------------------------------*/
|
||||
var ptr = this;
|
||||
|
||||
// {1} fadeIn START //
|
||||
stackItem.element.className = 'notification-element notification-visible';
|
||||
|
||||
// {2} fadeOut START //
|
||||
setTimeout(function(){
|
||||
stackItem.element.className = 'notification-element';
|
||||
}, 500+timeout);
|
||||
|
||||
// {3} fadeOut STOP + animation STOP //
|
||||
stackItem.timeout = setTimeout(function(){
|
||||
ptr.hide(id);
|
||||
}, 500+timeout+500);
|
||||
|
||||
|
||||
/* (4) Gestion du clic qui ferme la notification
|
||||
---------------------------------------------------------*/
|
||||
stackItem.element.addEventListener('click', function(e){
|
||||
ptr.hide(id);
|
||||
}, false);
|
||||
|
||||
|
||||
/* (5) On retourne l'élément
|
||||
---------------------------------------------------------*/
|
||||
return stackItem.element;
|
||||
|
||||
};
|
||||
|
||||
|
||||
/* [6] 'Raccourcis' d'accès
|
||||
=========================================================*/
|
||||
NotificationClass.prototype.warning = function(title, message, timeout){ return this.show('warning', title, message, timeout); };
|
||||
NotificationClass.prototype.info = function(title, message, timeout){ return this.show('info', title, message, timeout); };
|
||||
NotificationClass.prototype.success = function(title, message, timeout){ return this.show('success', title, message, timeout); };
|
||||
NotificationClass.prototype.error = function(title, message, timeout){ return this.show('error', title, message, timeout); };
|
|
@ -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())};
|
||||
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 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");
|
||||
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 d=this;d.addClass(a);setTimeout(function(){d.remClass(a)},b)};var _includes=[],_includeTags=[];
|
||||
function include(a,b,d){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 d&&d){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;d=document.createElement("script");d.type="text/javascript";d.src=a;document.head.appendChild(d);_includes.push(a);_includeTags.push(d);d.onload=b}return!0}
|
||||
function diff(a,b,d){var e=[],c;for(c in a)null==b[c]||null==a[c]||d instanceof Array&&-1<d.indexOf(c)||(typeof a[c]!==typeof b[c]?e.push(c):a[c]instanceof Object&&b[c]instanceof Object?0<diff(a[c],b[c]).length&&e.push(c):a[c]!=b[c]&&e.push(c));return e}var format_number=new formatChecker(null,"0i ii ii ii ii");
|
||||
|
|
|
@ -152,16 +152,17 @@ function include(jsResource, callback, action){ // action=true -> EXCLUSION, SIN
|
|||
*
|
||||
* @A<Object> Premier Objet
|
||||
* @B<Object> Second Objet
|
||||
* @ignore<Array> Tableau des clés à ignorer
|
||||
*
|
||||
* @return diff<Array> Tableau contenant les clés des valeurs différentes (uniquement les clés communes et non NULLes)
|
||||
*
|
||||
*/
|
||||
function diff(A, B){
|
||||
function diff(A, B, ignore){
|
||||
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 )
|
||||
if( B[key] == null || A[key] == null || ignore instanceof Array && ignore.indexOf(key) > -1 )
|
||||
continue;
|
||||
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
if( self::$instance == null || self::$error != ManagerError::Success ){ // Si aucune instance existante OU erreur de connection
|
||||
|
||||
// chargement de la configuration du server SQL
|
||||
if( !isset($_SERVER['HTTP_HOST']) || isset($_SERVER['HTTP_HOST']) && $_SERVER['HTTP_HOST'] == 'socioview' )
|
||||
if( !checkdnsrr($_SERVER['SERVER_NAME'], 'NS') )
|
||||
$conf = json_decode( ResourceDispatcher::getResource(self::$config_path['local']), true );
|
||||
else
|
||||
$conf = json_decode( ResourceDispatcher::getResource(self::$config_path['remote']), true );
|
||||
|
|
|
@ -110,7 +110,7 @@
|
|||
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 "Description d'erreur inconnue..."; break;
|
||||
}
|
||||
|
||||
// Erreur inconnue
|
||||
|
|
|
@ -1,12 +1,36 @@
|
|||
<?php
|
||||
|
||||
// On definit la racine __ROOT__ si c'est pas deja fait
|
||||
/* [0] On definit la racine __ROOT__ si c'est pas deja fait
|
||||
=========================================================*/
|
||||
if( !defined('__ROOT__') ) define('__ROOT__', dirname(dirname(__FILE__)) );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* [1] On définit __SERVER_HOST__ et __SERVER_ROOT__ si c'est pas déja fait
|
||||
=========================================================*/
|
||||
if( !defined('__SERVER_HOST__') || !defined('__SERVER_ROOT') ){
|
||||
/* (1) On charge le fichier de configuration */
|
||||
$json = json_decode( file_get_contents(__ROOT__.'/config/server.json'), true );
|
||||
|
||||
// Si pas d'erreur, on définit
|
||||
if( !is_null($json) ){
|
||||
|
||||
/* (2) Gestion de la config si server local ou remote */
|
||||
if( !checkdnsrr($_SERVER['SERVER_NAME'], 'NS') )
|
||||
$config = $json['local'];
|
||||
else
|
||||
$config = $json['remote'];
|
||||
|
||||
/* (3) Création des constantes */
|
||||
define('__SERVER_HOST__', $config['host']);
|
||||
define('__SERVER_ROOT__', $config['root']);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ACTIVE LE DEBUGGAGE (WARNING + EXCEPTION)
|
||||
|
@ -53,7 +77,7 @@
|
|||
|
||||
|
||||
|
||||
/* [1] Gestion des droits des utilisateurs
|
||||
/* [3] Gestion des droits des utilisateurs
|
||||
=========================================================*/
|
||||
/* (1) Retourne si l'utilisateur est connecte ou non */
|
||||
function connected(){ return isset($_SESSION['permission']) && count($_SESSION['permission']) > 0; }
|
||||
|
|
|
@ -74,6 +74,7 @@
|
|||
/* (2) On enregistre le contact dans l'annuaire s'il y est pas déjà */
|
||||
if( !isset($phone_directory[$number]) )
|
||||
$phone_directory[$number] = array(
|
||||
|
||||
'name' => strlen($log['Name']) ? (string) $log['Name'] : null,
|
||||
'calls' => 0,
|
||||
'sms' => 0
|
||||
|
@ -89,8 +90,9 @@
|
|||
|
||||
/* (5) On complète le log */
|
||||
$phone_log = array(
|
||||
'source' => ($log['Direction']=='INCOMING') ? $number : Database::formatNumber($phone_number),
|
||||
'target' => ($log['Direction']=='INCOMING') ? Database::formatNumber($phone_number) : $number,
|
||||
'source' => ($log['Direction']!='OUTCOMING') ? $number : Database::formatNumber($phone_number),
|
||||
'target' => ($log['Direction']!='OUTCOMING') ? Database::formatNumber($phone_number) : $number,
|
||||
'missed' => $log['Direction']==['MISSED'],
|
||||
'type' => strtolower($log['Type']),
|
||||
'date' => strtotime($log['Date']),
|
||||
'duration' => (int) $log['Duration']
|
||||
|
@ -175,136 +177,6 @@
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* DESERIALISATION D'UN JOURNAL D'APPEL
|
||||
*
|
||||
* @content<String> Le contenu du journal d'appel a deserialiser
|
||||
*
|
||||
* @return sms<Array> Retourne un tableau associatif contenant les sms triees
|
||||
* @return call<Array> Retourne un tableau associatif contenant les appels triees
|
||||
* @return contact<Array> Retourne un tableau associatif contenant les correspondances numero/nom de contact
|
||||
*
|
||||
*/
|
||||
private static function unserializeOld($params){
|
||||
$filecontent = null;
|
||||
extract($params);
|
||||
|
||||
/* [2] On recupere le xml
|
||||
=========================================================*/
|
||||
$xml = simplexml_load_string($filecontent);
|
||||
|
||||
// Si le format XML n'est pas bon, on retourne une erreur
|
||||
if( $xml === false )
|
||||
return array('ModuleError' => ManagerError::ParsingFailed);
|
||||
|
||||
return array( 'ModuleError' => ManagerError::Success, 'xml' => $xml );
|
||||
|
||||
|
||||
/* [3] Initialisation des variables
|
||||
=========================================================*/
|
||||
$names = array(); // Contiendra les correspondances numero/contact
|
||||
$msms = array(); // Contiendra les personnes utilisant SMS/MMS
|
||||
$call = array(); // Contiendra les personnes utilisant CALL
|
||||
|
||||
|
||||
/* [4] On traite les donnees pour chaque champ du xml
|
||||
=========================================================*/
|
||||
foreach($xml->Item as $log){
|
||||
// On recupere le numero en string
|
||||
$num = (string) $log['Number'];
|
||||
|
||||
// On formatte le numero
|
||||
if( preg_match("/^(?:\+33|33|0)(.+)/", $num, $m) )
|
||||
$num = '0'.$m[1];
|
||||
// Si pas un numero, on sort de la boucle
|
||||
else
|
||||
continue;
|
||||
|
||||
|
||||
/* (1) Si le type est MMS ou SMS */
|
||||
if( $log['Type'] == 'SMS' || $log['Type'] == 'MMS' ){
|
||||
|
||||
// Si la personne n'est pas referencee, on l'ajoute
|
||||
// Sinon on incremente son nombre d'apparition
|
||||
if( isset($msms[$num]) )
|
||||
$msms[$num]+= 1;
|
||||
else
|
||||
$msms[$num] = 1;
|
||||
|
||||
// On enregistre le nom si c'est pas fait
|
||||
if( !isset($names[$num]) ) $names[$num] = $log['Name'];
|
||||
|
||||
|
||||
/* (2) Si le type est PHONE */
|
||||
}else if( $log['Type'] == 'PHONE' ){
|
||||
|
||||
// Si la personne n'est pas referencee, on l'ajoute
|
||||
// Sinon on incremente son nombre d'apparition
|
||||
if( isset($call[$num]) )
|
||||
$call[$num]+= 1;
|
||||
else
|
||||
$call[$num] = 1;
|
||||
|
||||
// On enregistre le nom si c'est pas fait
|
||||
if( !isset($names[$num]) ) $names[$num] = $log['Name'];
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* [4] On trie par nombre d'interactions (sms/appel)
|
||||
=========================================================*/
|
||||
$tmp = $msms;
|
||||
/* (1) Tri des SMS/MMS */
|
||||
$sortedMSMS = array();
|
||||
// On fait le tri pour les 10 premiers elements sauf s'il en a moins
|
||||
for( $i = 0 ; $i < 10 && $i < count($tmp) ; $i++ ){
|
||||
$maxval = max($tmp);
|
||||
$maxkey = array_search($maxval, $tmp);
|
||||
array_push( $sortedMSMS, array($maxkey, $maxval) );
|
||||
unset($tmp[$maxkey]);
|
||||
}
|
||||
|
||||
|
||||
$tmp = $call;
|
||||
/* (2) Tri des appels */
|
||||
$sortedCALL = array();
|
||||
// On fait le tri pour les 10 premiers elements sauf s'il en a moins
|
||||
for( $i = 0 ; $i < 10 && $i < count($tmp) ; $i++ ){
|
||||
$maxval = max($tmp);
|
||||
$maxkey = array_search($maxval, $tmp);
|
||||
array_push( $sortedCALL, array($maxkey, $maxval) );
|
||||
unset($tmp[$maxkey]);
|
||||
}
|
||||
|
||||
|
||||
/* [5] Gestion du retour
|
||||
=========================================================*/
|
||||
return array(
|
||||
'ModuleError' => ManagerError::Success,
|
||||
'sms' => $sortedMSMS,
|
||||
'call' => $sortedCALL,
|
||||
'contact' => $names
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
class input{
|
||||
|
||||
|
||||
|
||||
/* TRAITE LES DONNÉES D'UN FORMULAIRE DE TYPE TÉLÉPHONIQUE
|
||||
*
|
||||
* @subject<Array> Tableau contenant les données du sujet
|
||||
|
@ -46,17 +45,141 @@
|
|||
$subject_id = $create_subject_response->get('id_subject');
|
||||
|
||||
|
||||
/* [2] Pour chaque contact, on crée le sujet + les relations
|
||||
|
||||
/* [2] On extrait les contacts des 2 top 10 (sans duplication)
|
||||
=========================================================*/
|
||||
// TODO : Here !!
|
||||
$closest = array();
|
||||
|
||||
foreach($fiches as $i=>$fiche){
|
||||
/* (1) Si le contact n'est pas déja enregistré, on l'enregistre */
|
||||
if( !array_key_exists($fiche['contact'], $closest) )
|
||||
$closest[ $fiche['contact'] ] = array();
|
||||
|
||||
/* (2) Si c'est un lien par CALL, on l'ajoute */
|
||||
if( $i < 10 )
|
||||
array_push( $closest[ $fiche['contact'] ], 'CALL' );
|
||||
/* (3) Si c'est un lien par SMS, on l'ajoute */
|
||||
else
|
||||
array_push( $closest[ $fiche['contact'] ], 'SMS' );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* [2] Gestion du retour
|
||||
/* [3] On crée les contacts les plus proches
|
||||
=========================================================*/
|
||||
$closest_id = array();
|
||||
// Pour chacun des top 10*2 plus proches
|
||||
foreach($closest as $contact=>$relations){
|
||||
|
||||
/* (1) On rédige la requête de création de sujet*/
|
||||
$create_contact_request = new ModuleRequest('subject/create', array(
|
||||
'username' => $contacts[$contact]['username'],
|
||||
'firstname' => $contacts[$contact]['firstname'],
|
||||
'lastname' => $contacts[$contact]['lastname'],
|
||||
'number' => $contacts[$contact]['number']
|
||||
));
|
||||
|
||||
/* (2) On exécute la requête (création) */
|
||||
$create_contact_response = $create_contact_request->dispatch();
|
||||
|
||||
/* (3) Gestion de l'erreur, si erreur de création */
|
||||
if( $create_contact_response->error != ManagerError::Success )
|
||||
return array( 'ModuleError' => $create_contact_response->error );
|
||||
|
||||
/* (4) On récupère l'id du sujet */
|
||||
$closest_id[$contact] = $create_contact_response->get('id_subject');
|
||||
|
||||
|
||||
|
||||
/* [4] On crée les relations avec le sujet de l'enquête
|
||||
=========================================================*/
|
||||
/* (1) Relation de type _CALL_ */
|
||||
if( in_array('CALL', $relations) ){
|
||||
$call_rel_request = new Repo('subject/link', array( $subject_id, $closest_id[$contact], '_CALL_' ));
|
||||
|
||||
$call_rel_response = $call_rel_request->answer();
|
||||
|
||||
// Si erreur de création de relation
|
||||
if( $call_rel_response === false )
|
||||
return array( 'ModuleError' => ManagerError::ModuleError );
|
||||
|
||||
}
|
||||
|
||||
/* (2) Relation de type _SMS_ */
|
||||
if( in_array('SMS', $relations) ){
|
||||
$sms_rel_request = new Repo('subject/link', array( $subject_id, $closest_id[$contact], '_SMS_' ));
|
||||
|
||||
$sms_rel_response = $sms_rel_request->answer();
|
||||
|
||||
// Si erreur de création de relation
|
||||
if( $sms_rel_response === false )
|
||||
return array( 'ModuleError' => ManagerError::ModuleError );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* [4] Ajout des relations de la matrice
|
||||
=========================================================*/
|
||||
// Pour chacun des top 10*2 plus proches
|
||||
foreach($closest as $A=>$rels){
|
||||
|
||||
// Pour chaque relation avec le contact actuel (s'il y en a)
|
||||
if( isset($matrice[$A]) && is_array($matrice[$A]) ){
|
||||
foreach($matrice[$A] as $B){
|
||||
$relation_request = new Repo('subject/link', array( $closest_id[$A], $closest_id[$B], '' ));
|
||||
|
||||
$relation_response = $relation_request->answer();
|
||||
|
||||
// Si erreur de création de relation
|
||||
if( $relation_response === false )
|
||||
return array( 'ModuleError' => ManagerError::ModuleError );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* [5] Enregistrer les données des FICHES dans la base de données
|
||||
=========================================================*/
|
||||
// TODO: Enregistrer les données des fiches dans la base de données
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* [6] Enregistrement des mini-fiches dans un fichier '.json'
|
||||
=========================================================*/
|
||||
$file = array();
|
||||
|
||||
/* (1) On enregistre les données des fiches */
|
||||
foreach($mini as $id=>$miniFiche){
|
||||
$data = array(
|
||||
'number' => $contacts[$id]['number'],
|
||||
'username' => $contacts[$id]['username'],
|
||||
'firstname' => $contacts[$id]['firstname'],
|
||||
'lastname' => $contacts[$id]['lastname'],
|
||||
|
||||
// TODO: Finir l'implémentation du fichier XML contenant les données des MINI+des CONTACTS
|
||||
);
|
||||
}
|
||||
|
||||
/* (2) On enregistre les données des mini-fiches */
|
||||
|
||||
|
||||
/* [n] Gestion du retour
|
||||
=========================================================*/
|
||||
return array(
|
||||
'ModuleError' => ManagerError::Success,
|
||||
'subject_id' => $subject_id
|
||||
'subject_id' => $subject_id,
|
||||
'contacts' => $closest,
|
||||
'created' => $closest_id
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -126,6 +126,10 @@
|
|||
$remove = new Repo('subject/remove', array($id_subject));
|
||||
$remove_status = $remove->answer();
|
||||
|
||||
// Si erreur lors de la requête
|
||||
if( $remove_status === false )
|
||||
return array( 'ModuleError' => ManagerError::ModuleError );
|
||||
|
||||
|
||||
/* [3] On verifie que le sujet est bien supprime
|
||||
=========================================================*/
|
||||
|
|
|
@ -279,10 +279,10 @@
|
|||
/* (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['sexe']) && is_string($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']);
|
||||
$checkMini = $checkMini && isset($mini['loc']) && is_numeric($mini['loc']);
|
||||
|
||||
// Si erreur des attributs des mini-fiches incorrects ou manquants
|
||||
if( !$checkMini )
|
||||
|
@ -295,17 +295,18 @@
|
|||
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['sexe']) && is_string($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['loc']) && is_numeric($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['famsit']) && is_numeric($fiches['famsit']);
|
||||
$checkFiche = $checkFiche && isset($fiches['reltype']) && is_numeric($fiches['reltype']);
|
||||
$checkFiche = $checkFiche && isset($fiches['reltypeSpecial']) && is_string($fiches['reltypeSpecial']);
|
||||
$checkFiche = $checkFiche && isset($fiches['city']) && is_string($fiches['city']);
|
||||
$checkFiche = $checkFiche && isset($fiches['cp']) && is_string($fiches['cp']);
|
||||
$checkFiche = $checkFiche && isset($fiches['duration']) && is_array($fiches['duration']);
|
||||
$checkFiche = $checkFiche && isset($fiches['context']) && is_array($fiches['context']);
|
||||
$checkFiche = $checkFiche && isset($fiches['context']) && is_numeric($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']);
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
<?php
|
||||
|
||||
namespace manager\repo;
|
||||
use \manager\Database;
|
||||
use \manager\sessionManager;
|
||||
|
||||
class category extends parentRepo{
|
||||
|
||||
protected static function table_name(){ static $table_name = 'categories'; return $table_name; }
|
||||
|
||||
|
||||
/* CREATION D'UNE NOUVELLE CATEGORIE SI AUCUNE AVEC CE NOM N'EXISTE DEJA, SINON RENVOIE L'ID
|
||||
*
|
||||
* @intitule<String> Nom de la catégorie
|
||||
*
|
||||
* @return id<int> Retourne l'id de la catégorie crée, FALSE si erreur
|
||||
*
|
||||
*/
|
||||
public static function getOrCreate($intitule){
|
||||
/* [0] Vérification des INPUT
|
||||
=========================================================*/
|
||||
// Si erreur de type de paramètre, on retourne FALSE
|
||||
if( !Database::check('varchar(0,40)', $intitule) )
|
||||
return false;
|
||||
|
||||
/* [1] Vérification qu'aucune n'a cet intitulé
|
||||
=========================================================*/
|
||||
$existing = self::getByIntitule($intitule);
|
||||
|
||||
/* (1) Si existe déja avec cet intitulé, on récupère l'id */
|
||||
if( is_array($existing) && count($existing) > 0 )
|
||||
return $existing[0]['idCategorie'];
|
||||
|
||||
|
||||
/* [2] Création si l'intitulé n'est pas déja utilisé
|
||||
=========================================================*/
|
||||
$create_r = Database::getPDO()->prepare("INSERT INTO categories(idCategorie, intitule)
|
||||
VALUES(DEFAULT, :intitule)");
|
||||
$create_r_status = $create_r->execute( array( ':intitule' => $intitule ) );
|
||||
|
||||
// Si erreur de requête
|
||||
if( $create_r_status === false )
|
||||
return false;
|
||||
|
||||
|
||||
/* [3] On vérifie et renvoie l'id
|
||||
=========================================================*/
|
||||
$created = self::getByIntitule($intitule);
|
||||
|
||||
/* (1) Si existe déja avec cet intitulé, on récupère l'id */
|
||||
if( is_array($created) && count($created) > 0 )
|
||||
return $created[0]['idCategorie'];
|
||||
|
||||
// Sinon, c'est qu'il y a une erreur
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
|
@ -45,6 +45,7 @@
|
|||
array_push($table_columns, $column['Field']);
|
||||
}
|
||||
|
||||
|
||||
/* [3] On vérifie que la valeur après 'get' est dans $table_columns
|
||||
=========================================================*/
|
||||
$columnName = strtolower($matches[1]);
|
||||
|
@ -56,15 +57,25 @@
|
|||
// Si ni 'getAll' ni 'getSomething' -> erreur
|
||||
if( !$getById && !$getAll && !$getSomething ) return false;
|
||||
|
||||
|
||||
/* [4] On rédige la requête
|
||||
=========================================================*/
|
||||
$getRequestString = 'SELECT * FROM '.static::table_name();
|
||||
|
||||
// Si c'est 'getById', on ajoute une condition (clé primaire)
|
||||
if( $getById ){
|
||||
$getRequestString .= ' WHERE '.$table_columns['_PRIMARY_'][0].' = :value';
|
||||
|
||||
// TODO: Gestion d'une clé primaire composée (plusieurs arguments)
|
||||
// S'il manque un paramètre, on retourne une erreur
|
||||
if( count($args) < count($table_columns['_PRIMARY_']) )
|
||||
return false;
|
||||
|
||||
// Pour chaque clé primaire (si elle est composée)
|
||||
foreach($table_columns['_PRIMARY_'] as $i=>$primary_column)
|
||||
// Première ligne
|
||||
if( $i == 0 ) $getRequestString .= ' WHERE '.$table_columns['_PRIMARY_'][$i].' = :primary'.$i;
|
||||
// Lignes suivantes
|
||||
else $getRequestString .= ' AND '.$table_columns['_PRIMARY_'][$i].' = :primary'.$i;
|
||||
|
||||
|
||||
// Si c'est 'getSomething', on ajoute une condition
|
||||
}else if( $getSomething )
|
||||
|
@ -75,12 +86,24 @@
|
|||
// On prépare la requête
|
||||
$getRequest = Database::getPDO()->prepare($getRequestString);
|
||||
|
||||
|
||||
/* [5] On exécute la requête
|
||||
=========================================================*/
|
||||
// Si 'getById', on compose la clé primaire
|
||||
if( $getById ){
|
||||
|
||||
$pdo_vars = array();
|
||||
|
||||
foreach($table_columns['_PRIMARY_'] as $i=>$primary_column)
|
||||
$pdo_vars[':primary'.$i] = $args[$i];
|
||||
|
||||
$getRequest->execute( $pdo_vars );
|
||||
|
||||
// Si 'getSomething', on ajoute le champ
|
||||
$getRequest->execute(array(
|
||||
':value' => ($getSomething||$getById) ? $args[0] : null
|
||||
));
|
||||
}else
|
||||
$getRequest->execute(array(
|
||||
':value' => ($getSomething||$getById) ? $args[0] : null
|
||||
));
|
||||
|
||||
/* [6] On récupère le résultat
|
||||
=========================================================*/
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
<?php
|
||||
|
||||
namespace manager\repo;
|
||||
use \manager\Database;
|
||||
use \manager\sessionManager;
|
||||
|
||||
class relation extends parentRepo{
|
||||
|
||||
protected static function table_name(){ static $table_name = 'relations'; return $table_name; }
|
||||
|
||||
|
||||
/* CREATION D'UNE RELATION ENTRE @A ET @B DE TYPE @category
|
||||
*
|
||||
* @A<int> UID du sujet A
|
||||
* @B<int> UID du sujet B
|
||||
* @category<int> UID de la categorie en question
|
||||
*
|
||||
* @return status<Boolean> On retourne TRUE si tout s'est bien passé, sinon FALSE si erreur
|
||||
*
|
||||
*/
|
||||
public static function create($A, $B, $category){
|
||||
/* [0] Vérification des INPUT
|
||||
=========================================================*/
|
||||
$checkInput = Database::check('id', $A);
|
||||
$checkInput = $checkInput && Database::check('id', $B);
|
||||
$checkInput = $checkInput && Database::check('id', $category);
|
||||
|
||||
// Si erreur de type de paramètre, on retourne FALSE
|
||||
if( !$checkInput )
|
||||
return false;
|
||||
|
||||
|
||||
|
||||
/* [1] On vérifie que la relation n'existe pas déja
|
||||
=========================================================*/
|
||||
$exists = self::getById($A, $B, $category);
|
||||
|
||||
// Si la relation existe, on retourne TRUE
|
||||
if( is_array($exists) && count($exists) > 0 )
|
||||
return true;
|
||||
|
||||
|
||||
/* [2] Création de la relation
|
||||
=========================================================*/
|
||||
$create_relation = Database::getPDO()->prepare("INSERT INTO relations(idPersonneA, idPersonneB, idCategorie)
|
||||
VALUES(:A, :B, :category)");
|
||||
$create_rel_status = $create_relation->execute( array(
|
||||
':A' => $A,
|
||||
':B' => $B,
|
||||
':category' => $category
|
||||
));
|
||||
|
||||
|
||||
// Si erreur de requête -> FALSE
|
||||
if( $create_rel_status === false )
|
||||
return false;
|
||||
|
||||
|
||||
/* [3] On vérifie que la relation est crée
|
||||
=========================================================*/
|
||||
$get_relation = self::getById($A, $B, $category);
|
||||
|
||||
// Si la relation n'existe pas, on renvoie une erreur
|
||||
if( !is_array($get_relation) || is_array($get_relation) && count($get_relation) == 0 )
|
||||
return false;
|
||||
|
||||
|
||||
// Si tout s'est bien passé, on retourne TRUE
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public static function remove(){
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
|
@ -3,6 +3,7 @@
|
|||
namespace manager\repo;
|
||||
use \manager\Database;
|
||||
use \manager\sessionManager;
|
||||
use \manager\Repo;
|
||||
|
||||
class subject extends parentRepo{
|
||||
|
||||
|
@ -24,7 +25,11 @@
|
|||
$getSubject = Database::getPDO()->prepare("SELECT idSujet, pseudo, prenom, nom, id_facebook, telephone
|
||||
FROM sujets
|
||||
WHERE idSujet = :id_subject");
|
||||
$getSubject->execute(array( ':id_subject' => $id_subject ));
|
||||
$get_status = $getSubject->execute(array( ':id_subject' => $id_subject ));
|
||||
|
||||
// Si erreur de requête
|
||||
if( $get_status === false )
|
||||
return false;
|
||||
|
||||
|
||||
/* [2] On recupere le resultat de la requete
|
||||
|
@ -157,12 +162,64 @@
|
|||
* @id_subject<int> UID du sujet en question
|
||||
*
|
||||
*/
|
||||
// TODO: Finir l'implémentation
|
||||
public static function remove($id_subject){
|
||||
/* [0] Vérification des INPUT
|
||||
=========================================================*/
|
||||
if( !Database::check('id', $id_subject) )
|
||||
return false;
|
||||
|
||||
/* [1] On effectue la suppression
|
||||
=========================================================*/
|
||||
$getSubject = Database::getPDO()->prepare("DELETE FROM subjects WHERE id_subject = :id_subject");
|
||||
$getSubject->execute(array( ':id_subject' => $id_subject ));
|
||||
$delSubject = Database::getPDO()->prepare("DELETE FROM sujets WHERE idSujet = :id_subject");
|
||||
return $delSubject->execute(array( ':id_subject' => $id_subject ));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* CREER UNE RELATION ENTRE 2 SUJETS
|
||||
*
|
||||
* @A<int> UID du premier sujet
|
||||
* @B<int> UID du second sujet
|
||||
* @category<String> Intitulé du type de relation
|
||||
*
|
||||
* @return id_relation<int> Renvoie l'id de la relation crée, sinon FALSE si erreur
|
||||
*
|
||||
*/
|
||||
public static function link($A, $B, $category){
|
||||
/* [0] Vérification des INPUT
|
||||
=========================================================*/
|
||||
$checkInput = Database::check('id', $A);
|
||||
$checkInput = $checkInput && Database::check('id', $B);
|
||||
$checkInput = $checkInput && Database::check('varchar(0,40)', $category);
|
||||
|
||||
// Si erreur de type de paramètre, on retourne FALSE
|
||||
if( !$checkInput )
|
||||
return false;
|
||||
|
||||
/* [1] On récupère ou crée la catégorie
|
||||
=========================================================*/
|
||||
$category_id_req = new Repo('category/getOrCreate', array($category));
|
||||
$category_id = $category_id_req->answer();
|
||||
|
||||
// Si erreur -> FALSE
|
||||
if( $category_id === false )
|
||||
return false;
|
||||
|
||||
|
||||
/* [2] On crée la relation
|
||||
=========================================================*/
|
||||
$relation_req = new Repo('relation/create', array($A, $B, $category_id));
|
||||
$relation = $relation_req->answer();
|
||||
|
||||
// Si erreur de création -> FALSE
|
||||
if( $relation === false )
|
||||
return false;
|
||||
|
||||
// Si tout s'est bien passé, on retourne TRUE
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
// On definit la racine __ROOT__ si c'est pas deja fait
|
||||
if( !defined('__ROOT__') ) define('__ROOT__', dirname(dirname(__FILE__)) );
|
||||
|
||||
// On charge l'autoloader
|
||||
require_once __ROOT__.'/manager/autoloader.php';
|
||||
|
||||
use \manager\ResourceDispatcher;
|
||||
|
||||
|
||||
define('__HOST__')
|
||||
|
||||
|
||||
/* [1] Si on est en local, on charge les données locales
|
||||
=========================================================*/
|
||||
if( !checkdnsrr($_SERVER['SERVER_NAME'], 'NS') ){
|
||||
$config_file = ResourceDispatcher::getResource('f/json/server-local/confs');
|
||||
|
||||
if( !$config_file )
|
||||
|
||||
}
|
||||
?>
|
|
@ -0,0 +1,2 @@
|
|||
Order deny,allow
|
||||
Deny from all
|
File diff suppressed because one or more lines are too long
6
view.php
6
view.php
|
@ -22,6 +22,7 @@
|
|||
<link type='text/css' rel='stylesheet' href='/f/css/min/css/menu-side' /> <!-- Gestion du menu -->
|
||||
<link type='text/css' rel='stylesheet' href='/f/css/min/css/container' /> <!-- Gestion du container -->
|
||||
<link type='text/css' rel='stylesheet' href='/f/css/min/css/global' /> <!-- Style global -->
|
||||
<link type='text/css' rel='stylesheet' href='/f/css/min/css/notif' /> <!-- Inclusion du system de notifs -->
|
||||
|
||||
|
||||
<!-- Dépendences Javascript -->
|
||||
|
@ -33,6 +34,7 @@
|
|||
<script type='text/javascript' src='/f/js/reset-min/js/lib' ></script> <!-- Corrections Javascript natif (ajouts) -->
|
||||
<script type='text/javascript' src='/f/js/api-min/js/lib' ></script> <!-- Gestion des transactions avec le serveur -->
|
||||
<script type='text/javascript' src='/f/js/page-manager-min/js/lib' ></script> <!-- Gestion réseau/chargement/liens/URL -->
|
||||
<script type='text/javascript' src='/f/js/notif-min/js/lib' ></script> <!-- Gestion des notifications -->
|
||||
|
||||
<!-- Dépendences Spéficiques pré-chargeables -->
|
||||
<script type='text/javascript' src='/f/js/input-html-data-min/js/includes' ></script> <!-- Gestion du constructeur HTML pour la page d'acquisition -->
|
||||
|
@ -70,6 +72,10 @@
|
|||
</div>
|
||||
|
||||
|
||||
<!-- CONTENEUR DES NOTIFICATIONS -->
|
||||
<div id='notification-container'></div>
|
||||
|
||||
|
||||
|
||||
<!-- CORPS DE LA PAGE -->
|
||||
<div id='WRAPPER'>
|
||||
|
|
|
@ -27,10 +27,20 @@ $pers = $request->answer();
|
|||
<input type='password' name='pass1' value='value_pass1'>
|
||||
<input type='number' name='number1' value='value_number1'>
|
||||
|
||||
<input type='radio' data-name='rad1' id='A' value='A'><label for='A'>A</label><br>
|
||||
<input type='radio' data-name='rad1' id='A' value='A' checked><label for='A'>A</label><br>
|
||||
<input type='radio' data-name='rad1' id='B' value='B'><label for='B'>B</label><br>
|
||||
<input type='radio' data-name='rad1' id='C' value='C'><label for='C'>C</label><br>
|
||||
|
||||
<br><br>
|
||||
<input type='radio' data-name='rad2' name='rad2' id='D' value='D' checked><label for='D'>D</label><br>
|
||||
<input type='radio' data-name='rad2' name='rad2' id='E' value='E'><label for='E'>E</label><br>
|
||||
<input type='radio' data-name='rad2' name='rad2' id='F' value='F'><label for='F'>F</label><br>
|
||||
|
||||
<br><br>
|
||||
<input type='radio' data-name='rad3' id='G' value='G'><label for='G'>G</label><br>
|
||||
<input type='checkbox' data-name='chk1' id='H' value='H'><label for='H'>H</label><br>
|
||||
|
||||
<br>
|
||||
<div>
|
||||
<span>
|
||||
<input type='test' values='valuetestHier'>
|
|
@ -0,0 +1,7 @@
|
|||
<?php
|
||||
// On définit la racine ET on récupère l'autoloader
|
||||
if( !defined('__ROOT__') ) define('__ROOT__', dirname(dirname(__FILE__)) );
|
||||
require_once __ROOT__.'/manager/autoloader.php';
|
||||
|
||||
header('Location: '.__SERVER_HOST__.__SERVER_ROOT__);
|
||||
?>
|
|
@ -120,63 +120,12 @@
|
|||
<article class='relation-panel'></article>
|
||||
<span data-space></span>
|
||||
|
||||
|
||||
|
||||
<!-- 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 class='matrice-panel'></article>
|
||||
|
||||
|
||||
<!-- BOUTON D'ENVOI DU FORMULAIRE -->
|
||||
|
|
|
@ -1,13 +1,15 @@
|
|||
var subjectManager,contactManager,miniManager,ficheManager,matriceManager,defTrue={status:!0,value:"on"},defFalse={status:!1,value:"on"};
|
||||
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=
|
||||
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(),
|
||||
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}
|
||||
var subjectManager,contactManager,miniManager,ficheManager,matriceManager;
|
||||
function dynamicUpdate(b){var a=b instanceof Element,e=a&&"SPAN"==b.tagName&&"switch-left"==b.className,f=a&&"SPAN"==b.tagName&&"switch-both"==b.className,g=a&&"INPUT"==b.tagName&&"submit"==b.type,c=a&&"SPAN"==b.tagName&&("nav-mini"==b.parentNode.id||"nav-fiche"==b.parentNode.id),a=a&&"SPAN"==b.tagName&&"nav-contact"==b.parentNode.id;if(!(f||e||g||c||a)&&!0!==b)return!1;if(f)console.log("> switch firstname <-> lastname"),e=b.parentNode,b=e.children[8],e=e.children[10],f=b.value,b.value=e.value,e.value=
|
||||
f;else if(e){console.log("> switch firstname+lastname -> username");e=b.parentNode;f=e.children[6];b=e.children[8];e=e.children[10];if(0<f.value.length||0==b.value.length&&0==e.value.length)return!1;f.value=b.value+" "+e.value;b.value="";e.value=""}else console.log("> dynamic update"),miniManager.fieldsToStorage(),ficheManager.fieldsToStorage(),contactManager.fieldsToStorage(),matriceManager.fieldsToStorage(),ficheManager.sync(),miniManager.sync(),miniManager.storageToFields(),ficheManager.storageToFields(),
|
||||
matriceManager.storageToFields(),(g||a)&&contactManager.storageToFields()}function readableName(b,a,e){var f=a.length,g=e.length;return 0<b.length?0<f+g?b+" ("+(a+" "+e).trim()+")":b:0<f+g?(a+" "+e).trim():"Inconnu"}
|
||||
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"]'),
|
||||
$('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);
|
||||
$('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)})})})})});
|
||||
$('input#call_log-import[type="file"]').addEventListener("click",function(b){b.target.value=null},!1);$('input#call_log-import[type="file"]').addEventListener("change",function(b){b={path:"upload/call_log",phone_number:$("#subject_phone_number").value,file:b.target.files[0]};api.send(b,function(a){console.log(a);var b=null;if(0!=a.ModuleError)9==a.ModuleError?Notification.error("Erreur","Il est n\u00e9cessaire de saisir les informations du <b>sujet</b> avant d'exporter son journal d'appel"):Notification.error("Erreur",
|
||||
a.ModuleError);else{for(var b=Notification.info("Info","Chargement du journal d'appel"),f=0,g=[],c=0;c<a.calls.length&&10>c;c++)g.push(a.calls[c].number);for(c=0;c<g.length;c++){var d=a.directory[g[c]].name.split(" ");lsi.set("contacts",f,{uid:f,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:c,sms:-1});f++}console.warn(1);for(var h=[],c=0;c<a.sms.length&&10>c;c++)h.push(a.sms[c].number);
|
||||
for(c=0;c<h.length;c++)if(d=g.indexOf(h[c]),-1<d){var l=lsi.get("contacts",d);l.sms=c;lsi.set("contacts",d,l)}else d=[""],null!=a.directory[h[c]].name&&(d=a.directory[h[c]].name.split(" ")),lsi.set("contacts",f,{uid:f,number:h[c],username:0<d.length?d[0]:"",firstname:0<d.length?d[0]:"",lastname:1<d.length?d.splice(1).join(" "):"",countsms:a.directory[h[c]].sms,countcall:a.directory[h[c]].calls,call:-1,sms:c}),f++;for(var k in a.directory)-1<g.indexOf(k)||-1<h.indexOf(k)||(d=(null===a.directory[k].name?
|
||||
"":a.directory[k].name).split(" "),lsi.set("contacts",f,{uid:f,number:k,username:1==d.length?d[0]:"",firstname:1<d.length?d[0]:"",lastname:1<d.length?d.splice(1).join(" "):"",countsms:a.directory[k].sms,countcall:a.directory[k].calls,call:-1,sms:-1}),f++);console.warn(3);contactManager.storageToFields();dynamicUpdate(!0);null!=b&&b.click();Notification.success("OK","Chargement termin\u00e9")}})},!1);$("#clear-all").addEventListener("click",function(b){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();Notification.success("OK","Les donn\u00e9es ont \u00e9t\u00e9 supprim\u00e9es")},!1);$("#export-all").addEventListener("click",function(b){Notification.info("INFORMATION","Lancement du t\u00e9l\u00e9chargement de la sauvegarde");b={subject:lsi["export"]("subject")[0],contacts:lsi["export"]("contacts"),
|
||||
mini:lsi["export"]("mini-fiches"),fiches:lsi["export"]("fiches"),matrice:lsi["export"]("matrice")[0]};var a=$("#download-target");a.download="local-data.json";a.href="data:application/octet-stream,"+encodeURIComponent(JSON.stringify(b));a.click()},!1);$("#import-all").addEventListener("click",function(b){$("#local-upload").click()},!1);$("#local-upload").addEventListener("click",function(b){b.target.value=null},!1);$("#local-upload").addEventListener("change",function(b){b={path:"upload/local_data",
|
||||
file:$("#local-upload").files[0]};api.send(b,function(a){console.log(a);if(0!=a.ModuleError)return Notification.error("Erreur",a.ModuleError),!1;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(b){console.log("> GATHERING ALL DATA");subjectManager.fieldsToStorage();contactManager.fieldsToStorage();miniManager.fieldsToStorage();ficheManager.fieldsToStorage();if(!subjectManager.check())return Notification.warning("Attention","Vous devez saisir les informations du <i>sujet</i>"),!1;b=lsi["export"]("mini-fiches");for(var a in b)if(!b[a].valid)return Notification.warning("Attention","La <i>fiche rapide</i> <b>"+(parseInt(a)+1)+"</b> est incompl\u00e8te et/ou incorrecte"),!1;b=lsi["export"]("fiches");
|
||||
for(a in b)if(!b[a].valid)return Notification.warning("Attention","La <i>fiche compl\u00e8te</i> <b>"+(parseInt(a)+1)+"</b> est incompl\u00e8te et/ou incorrecte"),!1;a={path:"input/phone",subject:lsi["export"]("subject")[0],contacts:lsi["export"]("contacts"),mini:lsi["export"]("mini-fiches"),fiches:lsi["export"]("fiches"),matrice:lsi["export"]("matrice")[0]};api.send(a,function(a){if(0!=a.ModuleError)return Notification.error("ERREUR",a.ModuleError),!1;console.log(a)},!1)},!1)})})})})});
|
||||
|
|
142
view/js/input.js
142
view/js/input.js
|
@ -15,10 +15,6 @@ var miniManager;
|
|||
var ficheManager;
|
||||
var matriceManager;
|
||||
|
||||
// CONSTANTES
|
||||
var defTrue = {status: true, value: 'on'};
|
||||
var defFalse = {status: false, value: 'on'};
|
||||
|
||||
|
||||
/* (2) Fonctions utiles */
|
||||
function dynamicUpdate(target){
|
||||
|
@ -95,14 +91,14 @@ function dynamicUpdate(target){
|
|||
/* (4) On enregistre la MATRICE */
|
||||
matriceManager.fieldsToStorage();
|
||||
|
||||
/* (5) On synchronise les MINI avec les CONTACTS */
|
||||
miniManager.sync();
|
||||
|
||||
/* (6) On synchronise les FICHE avec les CONTACTS */
|
||||
/* (5) On synchronise les FICHE avec les CONTACTS */
|
||||
// 1. On synchronise les `mini` et `fiches` associées en fonction de la dernière date de modification
|
||||
// 2. On synchronise les `fiches` dupliquées en fonction de la dernière date de modification
|
||||
ficheManager.sync();
|
||||
|
||||
/* (6) On synchronise les MINI avec les CONTACTS */
|
||||
// Supprime les contacts déja dans les FICHES
|
||||
miniManager.sync();
|
||||
|
||||
/* (7) On affiche le tout */
|
||||
miniManager.storageToFields();
|
||||
|
@ -115,15 +111,40 @@ function dynamicUpdate(target){
|
|||
}
|
||||
}
|
||||
|
||||
// Vérifie qu'une seule valeur vaut TRUE et les autres false (objet deflated de type <radio> )
|
||||
function checkRadioValue(selectData){
|
||||
var nbTrue = 0;
|
||||
for( var i = 0 ; i < selectData.length ; i++ )
|
||||
if( selectData[i].status === true )
|
||||
nbTrue++;
|
||||
|
||||
if( nbTrue != 1 ) return false;
|
||||
else return true;
|
||||
|
||||
/* AFFICHE UN NOM EXPLICITE A PARTIR DE @u username, @f firstname, et @l lastname
|
||||
*
|
||||
*/
|
||||
function readableName(u, f, l){
|
||||
/* (1) On calcule les tailles des chaines */
|
||||
var ul = u.length,
|
||||
fl = f.length,
|
||||
ll = l.length;
|
||||
|
||||
/* (2) Si @username n'est pas vide */
|
||||
if( ul > 0 ){
|
||||
|
||||
/* (3) Si @username+(@firstname et/ou @lastname) -> username (firstname lastname) */
|
||||
if( fl+ll > 0 )
|
||||
return u+' ('+(f+' '+l).trim()+')';
|
||||
|
||||
/* (4) Si @username uniquement -> username */
|
||||
else
|
||||
return u;
|
||||
|
||||
/* (5) Si pas @username */
|
||||
}else{
|
||||
|
||||
/* (6) Si @firstname et/ou @lastname -> firstname lastname*/
|
||||
if( fl+ll > 0 )
|
||||
return (f+' '+l).trim();
|
||||
|
||||
/* (7) Si rien -> Inconnu */
|
||||
else
|
||||
return 'Inconnu';
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -137,17 +158,10 @@ function checkRadioValue(selectData){
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* [2] Inclusion des scripts externes et lancement
|
||||
=========================================================*/
|
||||
// TODO: Mettre les versions minifiées
|
||||
include('/js/includes/input-phone-subject.js', function(){
|
||||
include('/js/includes/input-phone-contact.js', function(){
|
||||
include('/js/includes/input-phone-mini.js', function(){
|
||||
|
@ -250,9 +264,17 @@ include('/js/includes/input-phone-matrice.js', function(){
|
|||
api.send(request, function(response){
|
||||
console.log(response);
|
||||
|
||||
var loadingNotif = null;
|
||||
|
||||
// Si erreur, on quitte
|
||||
if( response.ModuleError != 0 )
|
||||
if( response.ModuleError != 0 ){
|
||||
if( response.ModuleError == 9 )
|
||||
Notification.error('Erreur', 'Il est nécessaire de saisir les informations du <b>sujet</b> avant d\'exporter son journal d\'appel');
|
||||
else
|
||||
Notification.error('Erreur', response.ModuleError);
|
||||
return;
|
||||
}else
|
||||
loadingNotif = Notification.info('Info', 'Chargement du journal d\'appel');
|
||||
|
||||
|
||||
|
||||
|
@ -282,6 +304,7 @@ include('/js/includes/input-phone-matrice.js', function(){
|
|||
uid++;
|
||||
}
|
||||
|
||||
console.warn(1);
|
||||
|
||||
|
||||
|
||||
|
@ -301,14 +324,17 @@ include('/js/includes/input-phone-matrice.js', function(){
|
|||
continue;
|
||||
}
|
||||
|
||||
var splittedName = response.directory[most_sms[i]].name.split(' ');
|
||||
|
||||
var splittedName = [''];
|
||||
if( response.directory[most_sms[i]].name != null )
|
||||
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
|
||||
username: splittedName.length > 0 ? splittedName[0] : '', // Si un seul mot -> pseudo
|
||||
firstname: splittedName.length > 0 ? 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
|
||||
|
@ -351,11 +377,20 @@ include('/js/includes/input-phone-matrice.js', function(){
|
|||
uid++;
|
||||
}
|
||||
|
||||
console.warn(3);
|
||||
|
||||
/* (8) On met à jour l'affichage */
|
||||
contactManager.storageToFields();
|
||||
dynamicUpdate(true);
|
||||
|
||||
|
||||
/* (9) On notifie la fin du chargement */
|
||||
// On retire la notification de chargement
|
||||
if( loadingNotif != null )
|
||||
loadingNotif.click();
|
||||
// On notifie que tout s'est bien passé
|
||||
Notification.success('OK', 'Chargement terminé');
|
||||
|
||||
});
|
||||
|
||||
}, false);
|
||||
|
@ -379,6 +414,8 @@ include('/js/includes/input-phone-matrice.js', function(){
|
|||
miniManager.storageToFields();
|
||||
ficheManager.storageToFields();
|
||||
matriceManager.storageToFields();
|
||||
|
||||
Notification.success('OK', 'Les données ont été supprimées');
|
||||
}, false);
|
||||
|
||||
|
||||
|
@ -386,6 +423,9 @@ include('/js/includes/input-phone-matrice.js', function(){
|
|||
/* (8) Gestion de l'export des données locales
|
||||
---------------------------------------------------------*/
|
||||
$('#export-all').addEventListener('click', function(e){
|
||||
|
||||
Notification.info('INFORMATION', 'Lancement du téléchargement de la sauvegarde');
|
||||
|
||||
/* (1) On construit les données */
|
||||
var data = {
|
||||
subject: lsi.export('subject')[0],
|
||||
|
@ -433,10 +473,10 @@ include('/js/includes/input-phone-matrice.js', function(){
|
|||
console.log(response);
|
||||
|
||||
// Si erreur, on quitte
|
||||
if( response.ModuleError != 0 )
|
||||
if( response.ModuleError != 0 ){
|
||||
Notification.error('Erreur', response.ModuleError);
|
||||
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);
|
||||
|
@ -469,24 +509,54 @@ include('/js/includes/input-phone-matrice.js', function(){
|
|||
miniManager.fieldsToStorage();
|
||||
ficheManager.fieldsToStorage();
|
||||
|
||||
/* (2) On prépare la requête avec toutes les données */
|
||||
/* (2) Vérification de la validité de toutes les données */
|
||||
// {1} Vérification du sujet //
|
||||
if( !subjectManager.check() ){
|
||||
Notification.warning('Attention', 'Vous devez saisir les informations du <i>sujet</i>');
|
||||
return false;
|
||||
}
|
||||
// {2} Vérification des mini-fiches //
|
||||
var mini = lsi.export('mini-fiches');
|
||||
for( var id in mini )
|
||||
if( !mini[id].valid ){
|
||||
Notification.warning('Attention', 'La <i>fiche rapide</i> <b>'+(parseInt(id)+1)+'</b> est incomplète et/ou incorrecte');
|
||||
return false;
|
||||
}
|
||||
// {3} Vérification des fiches //
|
||||
var fiches = lsi.export('fiches');
|
||||
for( var id in fiches )
|
||||
if( !fiches[id].valid ){
|
||||
Notification.warning('Attention', 'La <i>fiche complète</i> <b>'+(parseInt(id)+1)+'</b> est incomplète et/ou incorrecte');
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* (3) On prépare la requête avec toutes les données */
|
||||
var request = {
|
||||
path: 'input/phone',
|
||||
|
||||
subject: lsi.export('subject')[0],
|
||||
contacts: lsi.export('contacts'),
|
||||
mini: lsi.export('mini-fiches'),
|
||||
fiches: lsi.export('fiches')
|
||||
fiches: lsi.export('fiches'),
|
||||
matrice: lsi.export('matrice')[0]
|
||||
};
|
||||
|
||||
/* (3) On envoie la requête et traite la réponse */
|
||||
/* (4) On envoie la requête et traite la réponse */
|
||||
api.send(request, function(response){
|
||||
// Si erreur, on la notifie
|
||||
if( response.ModuleError != 0 ){
|
||||
Notification.error('ERREUR', response.ModuleError);
|
||||
return false;
|
||||
}
|
||||
|
||||
console.log(response);
|
||||
|
||||
}, false);
|
||||
|
||||
|
||||
}, false);
|
||||
|
||||
|
||||
|
||||
}); }); }); }); });
|
||||
|
|
Loading…
Reference in New Issue