Merged feature/input_phone into dev
This commit is contained in:
commit
6c764edddb
30
automate.php
30
automate.php
|
@ -44,11 +44,11 @@
|
|||
echo $num.' <> '.$name.'<br>';
|
||||
}
|
||||
|
||||
parseCallLog();
|
||||
// parseCallLog();
|
||||
|
||||
|
||||
|
||||
/* () Test du client de l'API generique */
|
||||
/* [1] Test du client de l'API generique
|
||||
=========================================================*/
|
||||
// $api = new client();
|
||||
|
||||
// $response = $api->send('generate-network-chart-data', array(
|
||||
|
@ -57,10 +57,32 @@
|
|||
|
||||
// var_dump($response);
|
||||
|
||||
// var_dump( Database::delNumeric( Database::getPDO()->query("SHOW COLUMNS FROM users")->fetchAll() ) );
|
||||
|
||||
/* [2] Gestion du getter dynamique des Repos
|
||||
=========================================================*/
|
||||
// var_dump( \manager\repo\user::getById(1) );
|
||||
// // var_dump( \manager\repo\user::getByLogin('xdrm') );
|
||||
// // var_dump( \manager\repo\subject::getById(1) );
|
||||
|
||||
|
||||
|
||||
/* [3] Test de la vérification du format de fichier pour l'upload
|
||||
=========================================================*/
|
||||
// ?>
|
||||
<!-- <form action='' method='POST' enctype='multipart/form-data'>
|
||||
<input type='file' name='file'>
|
||||
<input type='submit' value='Upload'>
|
||||
</form> -->
|
||||
<?php //
|
||||
// var_dump($_FILES);
|
||||
//
|
||||
// if( isset($_FILES) ){
|
||||
//
|
||||
// $request = new ModuleRequest('upload/local_data', array() );
|
||||
// $response = $request->dispatch();
|
||||
// var_dump( ManagerError::explicit($response->error) );
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
?>
|
||||
|
|
|
@ -29,6 +29,13 @@
|
|||
"description": "Méthode utile à phpunit pour le test des permissions.",
|
||||
"permissions": ["a", "b"],
|
||||
"parameters": {}
|
||||
},
|
||||
|
||||
|
||||
"markdown": {
|
||||
"description": "Retourne une description en markdown des différents modules de l'API",
|
||||
"permissions": [],
|
||||
"parameters": {}
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -92,12 +99,12 @@
|
|||
"description": "Recupere le contenu d'un fichier XML de journal d'appel s'il a été importé au préalable.",
|
||||
"permissions": [],
|
||||
"parameters": {
|
||||
"phone_number": { "description": "Numéro de téléphone de l'interrogé.", "type": "phone_number" }
|
||||
"phone_number": { "description": "Numéro de téléphone de l'interrogé.", "type": "number" }
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"charts": {
|
||||
"chart": {
|
||||
|
||||
"network_data": {
|
||||
"description": "Renvoie un jeu de donnees fictif pour un graphique de type #network.",
|
||||
|
@ -178,13 +185,39 @@
|
|||
|
||||
},
|
||||
|
||||
"input": {
|
||||
|
||||
"phone": {
|
||||
"description": "Enregistre les données d'une enquête téléphonique.",
|
||||
"permissions": ["admin"],
|
||||
"parameters": {
|
||||
"subject": { "description": "Données sur le sujet de l'enquête.", "type": "array" },
|
||||
"contacts": { "description": "Données des contacts de l'enquête.", "type": "array<array>" },
|
||||
"mini": { "description": "Mini fiches relations sur les contacts de l'enquête.", "type": "array<array>" },
|
||||
"fiches": { "description": "Fiches relation sur les plus proches contacts de l'enquête.", "type": "array<array>" }
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
"upload": {
|
||||
|
||||
"call_log": {
|
||||
"description": "Upload d'un journal d'appel au format .xml.",
|
||||
"permissions": ["admin"],
|
||||
"parameters": {
|
||||
"file": { "description": "Fichier du journal d'appel", "type": "FILE" }
|
||||
"phone_number": { "description": "Numéro de téléphone de l'interrogé.", "type": "number" },
|
||||
"file": { "description": "Fichier du journal d'appel.", "type": "FILE" }
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
"local_data": {
|
||||
"description": "Upload d'une sauvegarde de formulaire local au format .json.",
|
||||
"permissions": ["admin"],
|
||||
"parameters": {
|
||||
"file": { "description": "Fichier du de sauvegarde de formulaire local.", "type": "FILE" }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
"root": "/src/upload",
|
||||
"directories": [
|
||||
"call_log",
|
||||
"local_data",
|
||||
"spss",
|
||||
"pspp"
|
||||
]
|
||||
|
|
|
@ -82,6 +82,7 @@
|
|||
-ms-user-select: none; /* IE/Edge */
|
||||
user-select: none; /* non-prefixed */
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
// Receptacle
|
||||
&:before{
|
||||
|
@ -104,6 +105,11 @@
|
|||
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
// Animation de hover pour le texte
|
||||
&:hover{
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
// Quand actif
|
||||
|
@ -117,6 +123,10 @@
|
|||
// Specifique a checkbox
|
||||
& input[type="checkbox"] + label[for]:before{
|
||||
border-radius: 3px;
|
||||
@include transition( border .1s ease-in-out );
|
||||
}
|
||||
& input[type="checkbox"] + label[for]:hover:before{
|
||||
border-color: darken($theme-fg-primary, 15);
|
||||
}
|
||||
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -6,9 +6,9 @@
|
|||
"../constants.scss"
|
||||
],
|
||||
"sourcesContent": [
|
||||
"@import 'constants.scss';\n\n#WRAPPER > #CONTAINER{\n\n\t/* [1] Section (contenu)\n\t=========================================================*/\n\t& > section{\n\t\tdisplay: none;\n\n\t\tmargin: 3em;\n\n\t\t// Gestion de l'activation des sous-parties\n\t\t&.active{ display: block; }\n\n\t\t// Gestion d'une section contenant des graphiques\n\t\t&.charts{\n\t\t\tdisplay: flex;\n\n\t\t\tflex-direction: row;\n\t\t\tflex-wrap: wrap;\n\t\t\tjustify-content: space-around;\n\t\t}\n\n\t\tposition: relative;\n\t\tflex-grow: 1;\n\n\t\tpadding: 1em;\n\n\t\tborder-radius: 3px;\n\n\t\tbackground-color: #fff;\n\n\t\tcolor: #000;\n\t\tfont-size: 1em;\n\n\t\tborder: 1px solid #ddd;\n\n\n\n\t\t/* [2] Titres\n\t\t=========================================================*/\n\t\t& h6{\n\t\t\tcolor: lighten($theme-fg, 20);\n\t\t\tfont-size: 1.2em;\n\t\t\ttext-transform: uppercase;\n\t\t\tfont-weight: 300;\n\t\t\tletter-spacing: .2em;\n\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\n\t\t\t&:before{content:'- ';}\n\t\t\t&:after{content:' -';}\n\n\t\t\t// quand centré\n\t\t\t&.center{\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t}\n\n\n\n\n\n\t\t/* [3][4] Boutons radio + Checkboxes\n\t\t=========================================================*/\n\t\t& input[type=\"radio\"],\n\t\t& input[type=\"checkbox\"]{\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t// Label\n\t\t& input[type=\"radio\"] + label[for],\n\t\t& input[type=\"checkbox\"] + label[for]{\n\t\t\tpadding-left: .8em;\n\n\t\t\t// Pas de selection\n\t\t\t-webkit-touch-callout: none; /* iOS Safari */\n\t\t\t-webkit-user-select: none; /* Chrome/Safari/Opera */\n\t\t\t-khtml-user-select: none; /* Konqueror */\n\t\t\t-moz-user-select: none; /* Firefox */\n\t\t\t-ms-user-select: none; /* IE/Edge */\n\t\t\tuser-select: none; /* non-prefixed */\n\n\n\t\t\t// Receptacle\n\t\t\t&:before{\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tposition: relative;\n\t\t\t\t\ttop: .1em;\n\t\t\t\t\tleft: -.8em;\n\t\t\t\t\twidth: calc( 1em - 2*.15em );\n\t\t\t\t\theight: calc( 1em - 2*.15em );\n\n\t\t\t\tborder-radius: 50% / 50%;\n\t\t\t\tborder: .15em solid $theme-fg-primary;\n\n\t\t\t\tbackground: #fff center center no-repeat;\n\t\t\t\tbackground-image: none;\n\t\t\t\tbackground-size: 70% auto;\n\n\t\t\t\t@include transition( background .2s ease-in-out );\n\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\t\t}\n\n\t\t// Quand actif\n\t\t& input[type=\"radio\"]:checked + label[for]:before,\n\t\t& input[type=\"checkbox\"]:checked + label[for]:before{\n\t\t\tbackground-color: $theme-fg-primary;\n\t\t\tbackground-image: url('/f/svg/checked/st/container');\n\t\t}\n\n\n\t\t// Specifique a checkbox\n\t\t& input[type=\"checkbox\"] + label[for]:before{\n\t\t\tborder-radius: 3px;\n\t\t}\n\n\n\n\n\n\t\t/* [5] Boutons de submit\n\t\t=========================================================*/\n\t\t& input[type=\"submit\"],\n\t\t& input[type=\"button\"]{\n\t\t\tmargin: .5em 0;\n\t\t\tpadding: .3em .5em;\n\n\t\t\tborder-radius: 3px;\n\t\t\tborder: 1px solid $theme-fg;\n\n\t\t\tcolor: $theme-fg;\n\n\t\t\tbackground-color: #fff;\n\n\t\t\t@include transition( background .1s ease-in-out, color .1s ease-in-out );\n\n\t\t\t/* (1) Animation de @hover */\n\t\t\t&:hover{\n\t\t\t\tbackground-color: $theme-fg;\n\t\t\t\tcolor: #fff;\n\t\t\t}\n\n\n\t\t\t/* (2) Bouton primaire */\n\t\t\t&.primary{\n\t\t\t\tborder-color: $theme-fg-primary;\n\t\t\t\tcolor: $theme-fg-primary;\n\t\t\t\tbackground-color: #fff;\n\n\n\t\t\t\t/* (3) Animation de @hover pour bouton primaire */\n\t\t\t\t&:hover{\n\t\t\t\t\tbackground-color: $theme-fg-primary;\n\t\t\t\t\tcolor: #fff;\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t}\n\n\t\t/* [6] Images inline\n\t\t=========================================================*/\n\t\t& img{\n\t\t\tmargin: 1em;\n\t\t\theight: 3em;\n\t\t}\n\n\t\t/* [7] Contour flags\n\t\t=========================================================*/\n\t\t& .flag{\n\t\t\tmargin: 0 .8em;\n\t\t\tpadding: .2em .5em;\n\n\t\t\tborder-radius: 5px;\n\t\t\tborder: 1px solid #b5b5b5;\n\n\t\t\tcolor: #555;\n\t\t\tfont-family: 'Inconsolata';\n\t\t}\n\n\n\t}\n\n}\n",
|
||||
"/* [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"
|
||||
"@import 'constants.scss';\n\n#WRAPPER > #CONTAINER{\n\n\t/* [1] Section (contenu)\n\t=========================================================*/\n\t& > section{\n\t\tdisplay: none;\n\n\t\tmargin: 3em;\n\n\t\t// Gestion de l'activation des sous-parties\n\t\t&.active{ display: block; }\n\n\t\t// Gestion d'une section contenant des graphiques\n\t\t&.charts{\n\t\t\tdisplay: flex;\n\n\t\t\tflex-direction: row;\n\t\t\tflex-wrap: wrap;\n\t\t\tjustify-content: space-around;\n\t\t}\n\n\t\tposition: relative;\n\t\tflex-grow: 1;\n\n\t\tpadding: 1em;\n\n\t\tborder-radius: 3px;\n\n\t\tbackground-color: #fff;\n\n\t\tcolor: #000;\n\t\tfont-size: 1em;\n\n\t\tborder: 1px solid #ddd;\n\n\n\n\t\t/* [2] Titres\n\t\t=========================================================*/\n\t\t& h6{\n\t\t\tcolor: lighten($theme-fg, 20);\n\t\t\tfont-size: 1.2em;\n\t\t\ttext-transform: uppercase;\n\t\t\tfont-weight: 300;\n\t\t\tletter-spacing: .2em;\n\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\n\t\t\t&:before{content:'- ';}\n\t\t\t&:after{content:' -';}\n\n\t\t\t// quand centré\n\t\t\t&.center{\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t}\n\n\n\n\n\n\t\t/* [3][4] Boutons radio + Checkboxes\n\t\t=========================================================*/\n\t\t& input[type=\"radio\"],\n\t\t& input[type=\"checkbox\"]{\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t// Label\n\t\t& input[type=\"radio\"] + label[for],\n\t\t& input[type=\"checkbox\"] + label[for]{\n\t\t\tpadding-left: .8em;\n\n\t\t\t// Pas de selection\n\t\t\t-webkit-touch-callout: none; /* iOS Safari */\n\t\t\t-webkit-user-select: none; /* Chrome/Safari/Opera */\n\t\t\t-khtml-user-select: none; /* Konqueror */\n\t\t\t-moz-user-select: none; /* Firefox */\n\t\t\t-ms-user-select: none; /* IE/Edge */\n\t\t\tuser-select: none; /* non-prefixed */\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Receptacle\n\t\t\t&:before{\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tposition: relative;\n\t\t\t\t\ttop: .1em;\n\t\t\t\t\tleft: -.8em;\n\t\t\t\t\twidth: calc( 1em - 2*.15em );\n\t\t\t\t\theight: calc( 1em - 2*.15em );\n\n\t\t\t\tborder-radius: 50% / 50%;\n\t\t\t\tborder: .15em solid $theme-fg-primary;\n\n\t\t\t\tbackground: #fff center center no-repeat;\n\t\t\t\tbackground-image: none;\n\t\t\t\tbackground-size: 70% auto;\n\n\t\t\t\t@include transition( background .2s ease-in-out );\n\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\n\t\t\t// Animation de hover pour le texte\n\t\t\t&:hover{\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\t\t}\n\n\t\t// Quand actif\n\t\t& input[type=\"radio\"]:checked + label[for]:before,\n\t\t& input[type=\"checkbox\"]:checked + label[for]:before{\n\t\t\tbackground-color: $theme-fg-primary;\n\t\t\tbackground-image: url('/f/svg/checked/st/container');\n\t\t}\n\n\n\t\t// Specifique a checkbox\n\t\t& input[type=\"checkbox\"] + label[for]:before{\n\t\t\tborder-radius: 3px;\n\t\t\t@include transition( border .1s ease-in-out );\n\t\t}\n\t\t& input[type=\"checkbox\"] + label[for]:hover:before{\n\t\t\tborder-color: darken($theme-fg-primary, 15);\n\t\t}\n\n\n\n\n\n\t\t/* [5] Boutons de submit\n\t\t=========================================================*/\n\t\t& input[type=\"submit\"],\n\t\t& input[type=\"button\"]{\n\t\t\tmargin: .5em 0;\n\t\t\tpadding: .3em .5em;\n\n\t\t\tborder-radius: 3px;\n\t\t\tborder: 1px solid $theme-fg;\n\n\t\t\tcolor: $theme-fg;\n\n\t\t\tbackground-color: #fff;\n\n\t\t\t@include transition( background .1s ease-in-out, color .1s ease-in-out );\n\n\t\t\t/* (1) Animation de @hover */\n\t\t\t&:hover{\n\t\t\t\tbackground-color: $theme-fg;\n\t\t\t\tcolor: #fff;\n\t\t\t}\n\n\n\t\t\t/* (2) Bouton primaire */\n\t\t\t&.primary{\n\t\t\t\tborder-color: $theme-fg-primary;\n\t\t\t\tcolor: $theme-fg-primary;\n\t\t\t\tbackground-color: #fff;\n\n\n\t\t\t\t/* (3) Animation de @hover pour bouton primaire */\n\t\t\t\t&:hover{\n\t\t\t\t\tbackground-color: $theme-fg-primary;\n\t\t\t\t\tcolor: #fff;\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t}\n\n\t\t/* [6] Images inline\n\t\t=========================================================*/\n\t\t& img{\n\t\t\tmargin: 1em;\n\t\t\theight: 3em;\n\t\t}\n\n\t\t/* [7] Contour flags\n\t\t=========================================================*/\n\t\t& .flag{\n\t\t\tmargin: 0 .8em;\n\t\t\tpadding: .2em .5em;\n\n\t\t\tborder-radius: 5px;\n\t\t\tborder: 1px solid #b5b5b5;\n\n\t\t\tcolor: #555;\n\t\t\tfont-family: 'Inconsolata';\n\t\t}\n\n\n\t}\n\n}\n",
|
||||
"/* [1] COULEURS\n=========================================================*/\n/* (1) COULEURS DU THEME $DEFAULT */\n$theme-bg: #e8e8e8;\n$theme-bg-primary: #ffffff;\n$theme-fg: #515151;\n$theme-fg-primary: #399ced;\n\n/* (2) COULEURS DE THEME $DARK */\n$dark-bg: #313541;\n$dark-bg-primary: #29282e;\n$dark-fg: #939393;\n$dark-fg-primary: #ffffff;\n\n$header-dark: #333333;\n\n/* (3) Couleurs du theme pour la timeline */\n$timeline-color: #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
|
@ -6,9 +6,9 @@
|
|||
"../constants.scss"
|
||||
],
|
||||
"sourcesContent": [
|
||||
"@import 'constants.scss';\n\n#WRAPPER > #CONTAINER{\n\n\t/* [1] Section (contenu)\n\t=========================================================*/\n\t& > section{\n\t\tdisplay: none;\n\n\t\tmargin: 3em;\n\n\t\t// Gestion de l'activation des sous-parties\n\t\t&.active{ display: block; }\n\n\t\t// Gestion d'une section contenant des graphiques\n\t\t&.charts{\n\t\t\tdisplay: flex;\n\n\t\t\tflex-direction: row;\n\t\t\tflex-wrap: wrap;\n\t\t\tjustify-content: space-around;\n\t\t}\n\n\t\tposition: relative;\n\t\tflex-grow: 1;\n\n\t\tpadding: 1em;\n\n\t\tborder-radius: 3px;\n\n\t\tbackground-color: #fff;\n\n\t\tcolor: #000;\n\t\tfont-size: 1em;\n\n\t\tborder: 1px solid #ddd;\n\n\n\n\t\t/* [2] Titres\n\t\t=========================================================*/\n\t\t& h6{\n\t\t\tcolor: lighten($theme-fg, 20);\n\t\t\tfont-size: 1.2em;\n\t\t\ttext-transform: uppercase;\n\t\t\tfont-weight: 300;\n\t\t\tletter-spacing: .2em;\n\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\n\t\t\t&:before{content:'- ';}\n\t\t\t&:after{content:' -';}\n\n\t\t\t// quand centré\n\t\t\t&.center{\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t}\n\n\n\n\n\n\t\t/* [3][4] Boutons radio + Checkboxes\n\t\t=========================================================*/\n\t\t& input[type=\"radio\"],\n\t\t& input[type=\"checkbox\"]{\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t// Label\n\t\t& input[type=\"radio\"] + label[for],\n\t\t& input[type=\"checkbox\"] + label[for]{\n\t\t\tpadding-left: .8em;\n\n\t\t\t// Pas de selection\n\t\t\t-webkit-touch-callout: none; /* iOS Safari */\n\t\t\t-webkit-user-select: none; /* Chrome/Safari/Opera */\n\t\t\t-khtml-user-select: none; /* Konqueror */\n\t\t\t-moz-user-select: none; /* Firefox */\n\t\t\t-ms-user-select: none; /* IE/Edge */\n\t\t\tuser-select: none; /* non-prefixed */\n\n\n\t\t\t// Receptacle\n\t\t\t&:before{\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tposition: relative;\n\t\t\t\t\ttop: .1em;\n\t\t\t\t\tleft: -.8em;\n\t\t\t\t\twidth: calc( 1em - 2*.15em );\n\t\t\t\t\theight: calc( 1em - 2*.15em );\n\n\t\t\t\tborder-radius: 50% / 50%;\n\t\t\t\tborder: .15em solid $theme-fg-primary;\n\n\t\t\t\tbackground: #fff center center no-repeat;\n\t\t\t\tbackground-image: none;\n\t\t\t\tbackground-size: 70% auto;\n\n\t\t\t\t@include transition( background .2s ease-in-out );\n\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\t\t}\n\n\t\t// Quand actif\n\t\t& input[type=\"radio\"]:checked + label[for]:before,\n\t\t& input[type=\"checkbox\"]:checked + label[for]:before{\n\t\t\tbackground-color: $theme-fg-primary;\n\t\t\tbackground-image: url('/f/svg/checked/st/container');\n\t\t}\n\n\n\t\t// Specifique a checkbox\n\t\t& input[type=\"checkbox\"] + label[for]:before{\n\t\t\tborder-radius: 3px;\n\t\t}\n\n\n\n\n\n\t\t/* [5] Boutons de submit\n\t\t=========================================================*/\n\t\t& input[type=\"submit\"],\n\t\t& input[type=\"button\"]{\n\t\t\tmargin: .5em 0;\n\t\t\tpadding: .3em .5em;\n\n\t\t\tborder-radius: 3px;\n\t\t\tborder: 1px solid $theme-fg;\n\n\t\t\tcolor: $theme-fg;\n\n\t\t\tbackground-color: #fff;\n\n\t\t\t@include transition( background .1s ease-in-out, color .1s ease-in-out );\n\n\t\t\t/* (1) Animation de @hover */\n\t\t\t&:hover{\n\t\t\t\tbackground-color: $theme-fg;\n\t\t\t\tcolor: #fff;\n\t\t\t}\n\n\n\t\t\t/* (2) Bouton primaire */\n\t\t\t&.primary{\n\t\t\t\tborder-color: $theme-fg-primary;\n\t\t\t\tcolor: $theme-fg-primary;\n\t\t\t\tbackground-color: #fff;\n\n\n\t\t\t\t/* (3) Animation de @hover pour bouton primaire */\n\t\t\t\t&:hover{\n\t\t\t\t\tbackground-color: $theme-fg-primary;\n\t\t\t\t\tcolor: #fff;\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t}\n\n\t\t/* [6] Images inline\n\t\t=========================================================*/\n\t\t& img{\n\t\t\tmargin: 1em;\n\t\t\theight: 3em;\n\t\t}\n\n\t\t/* [7] Contour flags\n\t\t=========================================================*/\n\t\t& .flag{\n\t\t\tmargin: 0 .8em;\n\t\t\tpadding: .2em .5em;\n\n\t\t\tborder-radius: 5px;\n\t\t\tborder: 1px solid #b5b5b5;\n\n\t\t\tcolor: #555;\n\t\t\tfont-family: 'Inconsolata';\n\t\t}\n\n\n\t}\n\n}\n",
|
||||
"/* [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"
|
||||
"@import 'constants.scss';\n\n#WRAPPER > #CONTAINER{\n\n\t/* [1] Section (contenu)\n\t=========================================================*/\n\t& > section{\n\t\tdisplay: none;\n\n\t\tmargin: 3em;\n\n\t\t// Gestion de l'activation des sous-parties\n\t\t&.active{ display: block; }\n\n\t\t// Gestion d'une section contenant des graphiques\n\t\t&.charts{\n\t\t\tdisplay: flex;\n\n\t\t\tflex-direction: row;\n\t\t\tflex-wrap: wrap;\n\t\t\tjustify-content: space-around;\n\t\t}\n\n\t\tposition: relative;\n\t\tflex-grow: 1;\n\n\t\tpadding: 1em;\n\n\t\tborder-radius: 3px;\n\n\t\tbackground-color: #fff;\n\n\t\tcolor: #000;\n\t\tfont-size: 1em;\n\n\t\tborder: 1px solid #ddd;\n\n\n\n\t\t/* [2] Titres\n\t\t=========================================================*/\n\t\t& h6{\n\t\t\tcolor: lighten($theme-fg, 20);\n\t\t\tfont-size: 1.2em;\n\t\t\ttext-transform: uppercase;\n\t\t\tfont-weight: 300;\n\t\t\tletter-spacing: .2em;\n\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\n\t\t\t&:before{content:'- ';}\n\t\t\t&:after{content:' -';}\n\n\t\t\t// quand centré\n\t\t\t&.center{\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t}\n\n\n\n\n\n\t\t/* [3][4] Boutons radio + Checkboxes\n\t\t=========================================================*/\n\t\t& input[type=\"radio\"],\n\t\t& input[type=\"checkbox\"]{\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t// Label\n\t\t& input[type=\"radio\"] + label[for],\n\t\t& input[type=\"checkbox\"] + label[for]{\n\t\t\tpadding-left: .8em;\n\n\t\t\t// Pas de selection\n\t\t\t-webkit-touch-callout: none; /* iOS Safari */\n\t\t\t-webkit-user-select: none; /* Chrome/Safari/Opera */\n\t\t\t-khtml-user-select: none; /* Konqueror */\n\t\t\t-moz-user-select: none; /* Firefox */\n\t\t\t-ms-user-select: none; /* IE/Edge */\n\t\t\tuser-select: none; /* non-prefixed */\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Receptacle\n\t\t\t&:before{\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tposition: relative;\n\t\t\t\t\ttop: .1em;\n\t\t\t\t\tleft: -.8em;\n\t\t\t\t\twidth: calc( 1em - 2*.15em );\n\t\t\t\t\theight: calc( 1em - 2*.15em );\n\n\t\t\t\tborder-radius: 50% / 50%;\n\t\t\t\tborder: .15em solid $theme-fg-primary;\n\n\t\t\t\tbackground: #fff center center no-repeat;\n\t\t\t\tbackground-image: none;\n\t\t\t\tbackground-size: 70% auto;\n\n\t\t\t\t@include transition( background .2s ease-in-out );\n\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\n\t\t\t// Animation de hover pour le texte\n\t\t\t&:hover{\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\t\t}\n\n\t\t// Quand actif\n\t\t& input[type=\"radio\"]:checked + label[for]:before,\n\t\t& input[type=\"checkbox\"]:checked + label[for]:before{\n\t\t\tbackground-color: $theme-fg-primary;\n\t\t\tbackground-image: url('/f/svg/checked/st/container');\n\t\t}\n\n\n\t\t// Specifique a checkbox\n\t\t& input[type=\"checkbox\"] + label[for]:before{\n\t\t\tborder-radius: 3px;\n\t\t\t@include transition( border .1s ease-in-out );\n\t\t}\n\t\t& input[type=\"checkbox\"] + label[for]:hover:before{\n\t\t\tborder-color: darken($theme-fg-primary, 15);\n\t\t}\n\n\n\n\n\n\t\t/* [5] Boutons de submit\n\t\t=========================================================*/\n\t\t& input[type=\"submit\"],\n\t\t& input[type=\"button\"]{\n\t\t\tmargin: .5em 0;\n\t\t\tpadding: .3em .5em;\n\n\t\t\tborder-radius: 3px;\n\t\t\tborder: 1px solid $theme-fg;\n\n\t\t\tcolor: $theme-fg;\n\n\t\t\tbackground-color: #fff;\n\n\t\t\t@include transition( background .1s ease-in-out, color .1s ease-in-out );\n\n\t\t\t/* (1) Animation de @hover */\n\t\t\t&:hover{\n\t\t\t\tbackground-color: $theme-fg;\n\t\t\t\tcolor: #fff;\n\t\t\t}\n\n\n\t\t\t/* (2) Bouton primaire */\n\t\t\t&.primary{\n\t\t\t\tborder-color: $theme-fg-primary;\n\t\t\t\tcolor: $theme-fg-primary;\n\t\t\t\tbackground-color: #fff;\n\n\n\t\t\t\t/* (3) Animation de @hover pour bouton primaire */\n\t\t\t\t&:hover{\n\t\t\t\t\tbackground-color: $theme-fg-primary;\n\t\t\t\t\tcolor: #fff;\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t}\n\n\t\t/* [6] Images inline\n\t\t=========================================================*/\n\t\t& img{\n\t\t\tmargin: 1em;\n\t\t\theight: 3em;\n\t\t}\n\n\t\t/* [7] Contour flags\n\t\t=========================================================*/\n\t\t& .flag{\n\t\t\tmargin: 0 .8em;\n\t\t\tpadding: .2em .5em;\n\n\t\t\tborder-radius: 5px;\n\t\t\tborder: 1px solid #b5b5b5;\n\n\t\t\tcolor: #555;\n\t\t\tfont-family: 'Inconsolata';\n\t\t}\n\n\n\t}\n\n}\n",
|
||||
"/* [1] COULEURS\n=========================================================*/\n/* (1) COULEURS DU THEME $DEFAULT */\n$theme-bg: #e8e8e8;\n$theme-bg-primary: #ffffff;\n$theme-fg: #515151;\n$theme-fg-primary: #399ced;\n\n/* (2) COULEURS DE THEME $DARK */\n$dark-bg: #313541;\n$dark-bg-primary: #29282e;\n$dark-fg: #939393;\n$dark-fg-primary: #ffffff;\n\n$header-dark: #333333;\n\n/* (3) Couleurs du theme pour la timeline */\n$timeline-color: #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": []
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -7,3 +7,34 @@
|
|||
/* [2] Formulaire de type 'timeline'
|
||||
=========================================================*/
|
||||
@import 'timeline-form';
|
||||
|
||||
#WRAPPER > #CONTAINER table,
|
||||
#WRAPPER > #CONTAINER > section > table{
|
||||
|
||||
& tr,
|
||||
& > tr{
|
||||
|
||||
& > td{
|
||||
padding: .8em;
|
||||
|
||||
|
||||
color: #888;
|
||||
font-weight: normal;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
|
||||
& > input[type="checkbox"]+label[for]:before{
|
||||
left: -.4em;
|
||||
width: calc( 1.05em - 2*.15em );
|
||||
}
|
||||
}
|
||||
|
||||
& > td.hidden:before{
|
||||
content: '+';
|
||||
color: #ddd;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -124,7 +124,7 @@ body{
|
|||
width: 35em;
|
||||
height: 10em;
|
||||
|
||||
background: url('/f/svg/icon/st') center center no-repeat;
|
||||
background: url('/f/svg/iconv2/st') center center no-repeat;
|
||||
background-size: auto 100%;
|
||||
}
|
||||
|
||||
|
|
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/icon/st') center center no-repeat;\n\t\tbackground-size: auto 100%;\n\t}\n\n\n\t/* (2) Formulaire de connexion */\n\t& > #login-form{\n\t\tdisplay: block;\n\n\n\t\t/* (2.1) Champs de texte (login/password) */\n\t\t& > input[type='text'],\n\t\t& > input[type='password'],\n\t\t& > input[type='submit']{\n\t\t\tdisplay: flex;\n\t\t\t\twidth: 20em;\n\n\t\t\tmargin: 2em 0;\n\t\t\tpadding: 1em 2em;\n\n\t\t\t// flex properties\n\t\t\tflex-direction: column;\n\t\t\tjustify-content: space-around;\n\t\t\tflex-wrap: nowrap;\n\t\t\talign-items: middle;\n\n\n\t\t\tborder-radius: 5px;\n\t\t\tborder: 1px solid lighten($theme-fg, 10);\n\n\t\t\tbackground-color: $dark-bg;\n\n\t\t\tcolor: $dark-fg-primary;\n\t\t\tfont-weight: bold;\n\t\t\tletter-spacing: .07em;\n\n\t\t\t@include transition( border .2s ease-in-out );\n\n\t\t\tcursor: default;\n\n\t\t\t// Animation de @hover/@focus\n\t\t\t&:hover,\n\t\t\t&:focus{\n\t\t\t\tborder-color: $theme-fg-primary;\n\t\t\t}\n\n\t\t}\n\n\n\t\t/* (2.2) Bouton de connexion */\n\t\t& > input[type='submit']{\n\t\t\twidth: 100%;\n\t\t\tmargin: 2em 0;\n\n\t\t\tborder: 0;\n\n\t\t\tbackground-color: $theme-fg-primary;\n\n\t\t\tcolor: $dark-fg-primary;\n\t\t\tfont-weight: bold;\n\t\t\ttext-align: left;\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Animation de @hover\n\t\t\t&:hover{\n\t\t\t\tbackground-color: darken($theme-fg-primary, 10);\n\t\t\t\tbox-shadow: 0 0 1em darken($dark-bg, 10);\n\t\t\t}\n\n\t\t}\n\n\n\n\n\n\t\t/* (3) Mot de passe oublie */\n\t\t& > #lost-password{\n\t\t\tcolor: $dark-fg;\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Animation de @hover\n\t\t\t&:hover{\n\t\t\t\tcolor: $theme-fg-primary;\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/* (4) Gestion de la fermeture */\n\t& > #login-close{\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\t\ttop: 2em;\n\t\t\tright: 2em;\n\t\t\tmin-width: 2em;\n\t\t\theight: 2em;\n\n\t\tbackground: url('/f/svg/back/st/container/ffffff') right center no-repeat;\n\t\tbackground-size: 1em;\n\n\t\tcolor: #fff;\n\t\tpadding-right: 2em;\n\t\tline-height: 2em;\n\t\tfont-weight: bold;\n\n\t\tcursor: pointer;\n\t}\n}\n",
|
||||
"@import 'constants';\n\nbody{\n\n\tfont-family: 'Open Sans';\n\tfont-size: 15px;\n}\n\n\n\n#WRAPPER{\n\tdisplay: block;\n\tposition: fixed;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\tbackground-color: $theme-bg;\n\n\toverflow-x: hidden;\n\toverflow-y: auto;\n\n\tz-index: 1;\n\n\n\t/* [1] Header de la page\n\t==========================================*/\n\t& > #HEADER{\n\t\tdisplay: block;\n\t\tposition: fixed;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\twidth: 100%;\n\t\t\theight: calc( #{$header-height} - 1px );\n\n\t\tborder-bottom: 1px solid darken($header-dark, 10);\n\n\t\tbackground-color: $header-dark;\n\n\t\tz-index: 100;\n\n\t}\n\n\n\t/* [2] Side-Menu de la page\n\t==========================================*/\n\t// Gestion du menu\n\t& > #MENU-SIDE{\n\t\tdisplay: block;\n\t\tposition: fixed;\n\t\t\ttop: $header-height;\n\t\t\tleft: 0;\n\t\t\twidth: $menu-side-width;\n\t\t\theight: calc( 100% - #{$header-height} );\n\n\t\tbox-shadow: 2px 1px 3px #ddd;\n\n\t\tbackground-color: #fff;\n\n\t\t@include transition( all .3s );\n\n\t\tz-index: 10;\n\t}\n\n\n\t/* [3] Container de la page\n\t==========================================*/\n\t& > #CONTAINER{\n\t\tdisplay: flex;\n\t\tposition: absolute;\n\t\t\ttop: $header-height;\n\t\t\tleft: $menu-side-width;\n\t\t\twidth: calc( 100% - #{$menu-side-width} );\n\t\t\tmin-height: calc( 100% - #{$header-height} );\n\t\t// margin: 1em;\n\n\t\t// Flex properties\n\t\tflex-direction: row;\n\t\tjustify-content: space-between;\n\t\tflex-wrap: wrap;\n\n\t\toverflow-x: none;\n\t\toverflow-y: auto;\n\t}\n}\n\n\n\n\n/* [4] Page de login\n=========================================================*/\n#LOGIN{\n\tdisplay: flex;\n\tposition: fixed;\n\t\ttop: 0;\n\t\tleft: -100%;\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t// Quand la page de login est visible\n\t&.active{\n\t\tleft: 0;\n\t}\n\n\t// flex properties\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\tjustify-content: space-around;\n\talign-items: center;\n\n\n\tbackground-color: $dark-bg;\n\n\t@include transition( left .3s ease-in-out );\n\n\tz-index: 101;\n\n\n\n\n\t/* (1) Logo et nom du site */\n\t& > #login-icon{\n\t\twidth: 35em;\n\t\theight: 10em;\n\n\t\tbackground: url('/f/svg/iconv2/st') center center no-repeat;\n\t\tbackground-size: auto 100%;\n\t}\n\n\n\t/* (2) Formulaire de connexion */\n\t& > #login-form{\n\t\tdisplay: block;\n\n\n\t\t/* (2.1) Champs de texte (login/password) */\n\t\t& > input[type='text'],\n\t\t& > input[type='password'],\n\t\t& > input[type='submit']{\n\t\t\tdisplay: flex;\n\t\t\t\twidth: 20em;\n\n\t\t\tmargin: 2em 0;\n\t\t\tpadding: 1em 2em;\n\n\t\t\t// flex properties\n\t\t\tflex-direction: column;\n\t\t\tjustify-content: space-around;\n\t\t\tflex-wrap: nowrap;\n\t\t\talign-items: middle;\n\n\n\t\t\tborder-radius: 5px;\n\t\t\tborder: 1px solid lighten($theme-fg, 10);\n\n\t\t\tbackground-color: $dark-bg;\n\n\t\t\tcolor: $dark-fg-primary;\n\t\t\tfont-weight: bold;\n\t\t\tletter-spacing: .07em;\n\n\t\t\t@include transition( border .2s ease-in-out );\n\n\t\t\tcursor: default;\n\n\t\t\t// Animation de @hover/@focus\n\t\t\t&:hover,\n\t\t\t&:focus{\n\t\t\t\tborder-color: $theme-fg-primary;\n\t\t\t}\n\n\t\t}\n\n\n\t\t/* (2.2) Bouton de connexion */\n\t\t& > input[type='submit']{\n\t\t\twidth: 100%;\n\t\t\tmargin: 2em 0;\n\n\t\t\tborder: 0;\n\n\t\t\tbackground-color: $theme-fg-primary;\n\n\t\t\tcolor: $dark-fg-primary;\n\t\t\tfont-weight: bold;\n\t\t\ttext-align: left;\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Animation de @hover\n\t\t\t&:hover{\n\t\t\t\tbackground-color: darken($theme-fg-primary, 10);\n\t\t\t\tbox-shadow: 0 0 1em darken($dark-bg, 10);\n\t\t\t}\n\n\t\t}\n\n\n\n\n\n\t\t/* (3) Mot de passe oublie */\n\t\t& > #lost-password{\n\t\t\tcolor: $dark-fg;\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Animation de @hover\n\t\t\t&:hover{\n\t\t\t\tcolor: $theme-fg-primary;\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/* (4) Gestion de la fermeture */\n\t& > #login-close{\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\t\ttop: 2em;\n\t\t\tright: 2em;\n\t\t\tmin-width: 2em;\n\t\t\theight: 2em;\n\n\t\tbackground: url('/f/svg/back/st/container/ffffff') right center no-repeat;\n\t\tbackground-size: 1em;\n\n\t\tcolor: #fff;\n\t\tpadding-right: 2em;\n\t\tline-height: 2em;\n\t\tfont-weight: bold;\n\n\t\tcursor: pointer;\n\t}\n}\n",
|
||||
"/* [1] COULEURS\n=========================================================*/\n/* (1) COULEURS DU THEME $DEFAULT */\n$theme-bg: #e8e8e8;\n$theme-bg-primary: #ffffff;\n$theme-fg: #515151;\n$theme-fg-primary: #399ced;\n\n/* (2) COULEURS DE THEME $DARK */\n$dark-bg: #313541;\n$dark-bg-primary: #29282e;\n$dark-fg: #939393;\n$dark-fg-primary: #ffffff;\n\n$header-dark: #333333;\n\n/* (3) Couleurs du theme pour la timeline */\n$timeline-color: #738394;\n$timeline-0: #399ced;\n$timeline-1: #e64e3e;\n$timeline-2: #10baa3;\n$timeline-3: #b14be7;\n$timeline-4: #053b5d;\n\n\n/* [2] DIMENSIONS\n=========================================================*/\n/* (1) Layout de base */\n$menu-side-width: 15em;\n$header-height: 4em;\n\n\n\n/* [3] Mixins\n=========================================================*/\n@mixin transform($value...) {\n transform: $value;\n\t-moz-transform: $value;\n\t-o-transform: $value;\n\t-ms-transform: $value;\n\t-webkit-transform: $value;\n}\n\n\n@mixin transition($value...) {\n -webkit-transition: $value;\n transition: $value;\n}\n\n/* [4] Functions\n=========================================================*/\n// Transforme une couleur hex en string sans le #\n@function color-str($color){\n @return str-slice(#{$color}, 2, str-length(#{$color}));\n}\n"
|
||||
],
|
||||
"mappings": "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",
|
||||
"mappings": "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",
|
||||
"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/icon/st') center center no-repeat;\n\t\tbackground-size: auto 100%;\n\t}\n\n\n\t/* (2) Formulaire de connexion */\n\t& > #login-form{\n\t\tdisplay: block;\n\n\n\t\t/* (2.1) Champs de texte (login/password) */\n\t\t& > input[type='text'],\n\t\t& > input[type='password'],\n\t\t& > input[type='submit']{\n\t\t\tdisplay: flex;\n\t\t\t\twidth: 20em;\n\n\t\t\tmargin: 2em 0;\n\t\t\tpadding: 1em 2em;\n\n\t\t\t// flex properties\n\t\t\tflex-direction: column;\n\t\t\tjustify-content: space-around;\n\t\t\tflex-wrap: nowrap;\n\t\t\talign-items: middle;\n\n\n\t\t\tborder-radius: 5px;\n\t\t\tborder: 1px solid lighten($theme-fg, 10);\n\n\t\t\tbackground-color: $dark-bg;\n\n\t\t\tcolor: $dark-fg-primary;\n\t\t\tfont-weight: bold;\n\t\t\tletter-spacing: .07em;\n\n\t\t\t@include transition( border .2s ease-in-out );\n\n\t\t\tcursor: default;\n\n\t\t\t// Animation de @hover/@focus\n\t\t\t&:hover,\n\t\t\t&:focus{\n\t\t\t\tborder-color: $theme-fg-primary;\n\t\t\t}\n\n\t\t}\n\n\n\t\t/* (2.2) Bouton de connexion */\n\t\t& > input[type='submit']{\n\t\t\twidth: 100%;\n\t\t\tmargin: 2em 0;\n\n\t\t\tborder: 0;\n\n\t\t\tbackground-color: $theme-fg-primary;\n\n\t\t\tcolor: $dark-fg-primary;\n\t\t\tfont-weight: bold;\n\t\t\ttext-align: left;\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Animation de @hover\n\t\t\t&:hover{\n\t\t\t\tbackground-color: darken($theme-fg-primary, 10);\n\t\t\t\tbox-shadow: 0 0 1em darken($dark-bg, 10);\n\t\t\t}\n\n\t\t}\n\n\n\n\n\n\t\t/* (3) Mot de passe oublie */\n\t\t& > #lost-password{\n\t\t\tcolor: $dark-fg;\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Animation de @hover\n\t\t\t&:hover{\n\t\t\t\tcolor: $theme-fg-primary;\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/* (4) Gestion de la fermeture */\n\t& > #login-close{\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\t\ttop: 2em;\n\t\t\tright: 2em;\n\t\t\tmin-width: 2em;\n\t\t\theight: 2em;\n\n\t\tbackground: url('/f/svg/back/st/container/ffffff') right center no-repeat;\n\t\tbackground-size: 1em;\n\n\t\tcolor: #fff;\n\t\tpadding-right: 2em;\n\t\tline-height: 2em;\n\t\tfont-weight: bold;\n\n\t\tcursor: pointer;\n\t}\n}\n",
|
||||
"@import 'constants';\n\nbody{\n\n\tfont-family: 'Open Sans';\n\tfont-size: 15px;\n}\n\n\n\n#WRAPPER{\n\tdisplay: block;\n\tposition: fixed;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\tbackground-color: $theme-bg;\n\n\toverflow-x: hidden;\n\toverflow-y: auto;\n\n\tz-index: 1;\n\n\n\t/* [1] Header de la page\n\t==========================================*/\n\t& > #HEADER{\n\t\tdisplay: block;\n\t\tposition: fixed;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\twidth: 100%;\n\t\t\theight: calc( #{$header-height} - 1px );\n\n\t\tborder-bottom: 1px solid darken($header-dark, 10);\n\n\t\tbackground-color: $header-dark;\n\n\t\tz-index: 100;\n\n\t}\n\n\n\t/* [2] Side-Menu de la page\n\t==========================================*/\n\t// Gestion du menu\n\t& > #MENU-SIDE{\n\t\tdisplay: block;\n\t\tposition: fixed;\n\t\t\ttop: $header-height;\n\t\t\tleft: 0;\n\t\t\twidth: $menu-side-width;\n\t\t\theight: calc( 100% - #{$header-height} );\n\n\t\tbox-shadow: 2px 1px 3px #ddd;\n\n\t\tbackground-color: #fff;\n\n\t\t@include transition( all .3s );\n\n\t\tz-index: 10;\n\t}\n\n\n\t/* [3] Container de la page\n\t==========================================*/\n\t& > #CONTAINER{\n\t\tdisplay: flex;\n\t\tposition: absolute;\n\t\t\ttop: $header-height;\n\t\t\tleft: $menu-side-width;\n\t\t\twidth: calc( 100% - #{$menu-side-width} );\n\t\t\tmin-height: calc( 100% - #{$header-height} );\n\t\t// margin: 1em;\n\n\t\t// Flex properties\n\t\tflex-direction: row;\n\t\tjustify-content: space-between;\n\t\tflex-wrap: wrap;\n\n\t\toverflow-x: none;\n\t\toverflow-y: auto;\n\t}\n}\n\n\n\n\n/* [4] Page de login\n=========================================================*/\n#LOGIN{\n\tdisplay: flex;\n\tposition: fixed;\n\t\ttop: 0;\n\t\tleft: -100%;\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t// Quand la page de login est visible\n\t&.active{\n\t\tleft: 0;\n\t}\n\n\t// flex properties\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\tjustify-content: space-around;\n\talign-items: center;\n\n\n\tbackground-color: $dark-bg;\n\n\t@include transition( left .3s ease-in-out );\n\n\tz-index: 101;\n\n\n\n\n\t/* (1) Logo et nom du site */\n\t& > #login-icon{\n\t\twidth: 35em;\n\t\theight: 10em;\n\n\t\tbackground: url('/f/svg/iconv2/st') center center no-repeat;\n\t\tbackground-size: auto 100%;\n\t}\n\n\n\t/* (2) Formulaire de connexion */\n\t& > #login-form{\n\t\tdisplay: block;\n\n\n\t\t/* (2.1) Champs de texte (login/password) */\n\t\t& > input[type='text'],\n\t\t& > input[type='password'],\n\t\t& > input[type='submit']{\n\t\t\tdisplay: flex;\n\t\t\t\twidth: 20em;\n\n\t\t\tmargin: 2em 0;\n\t\t\tpadding: 1em 2em;\n\n\t\t\t// flex properties\n\t\t\tflex-direction: column;\n\t\t\tjustify-content: space-around;\n\t\t\tflex-wrap: nowrap;\n\t\t\talign-items: middle;\n\n\n\t\t\tborder-radius: 5px;\n\t\t\tborder: 1px solid lighten($theme-fg, 10);\n\n\t\t\tbackground-color: $dark-bg;\n\n\t\t\tcolor: $dark-fg-primary;\n\t\t\tfont-weight: bold;\n\t\t\tletter-spacing: .07em;\n\n\t\t\t@include transition( border .2s ease-in-out );\n\n\t\t\tcursor: default;\n\n\t\t\t// Animation de @hover/@focus\n\t\t\t&:hover,\n\t\t\t&:focus{\n\t\t\t\tborder-color: $theme-fg-primary;\n\t\t\t}\n\n\t\t}\n\n\n\t\t/* (2.2) Bouton de connexion */\n\t\t& > input[type='submit']{\n\t\t\twidth: 100%;\n\t\t\tmargin: 2em 0;\n\n\t\t\tborder: 0;\n\n\t\t\tbackground-color: $theme-fg-primary;\n\n\t\t\tcolor: $dark-fg-primary;\n\t\t\tfont-weight: bold;\n\t\t\ttext-align: left;\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Animation de @hover\n\t\t\t&:hover{\n\t\t\t\tbackground-color: darken($theme-fg-primary, 10);\n\t\t\t\tbox-shadow: 0 0 1em darken($dark-bg, 10);\n\t\t\t}\n\n\t\t}\n\n\n\n\n\n\t\t/* (3) Mot de passe oublie */\n\t\t& > #lost-password{\n\t\t\tcolor: $dark-fg;\n\n\t\t\tcursor: pointer;\n\n\t\t\t// Animation de @hover\n\t\t\t&:hover{\n\t\t\t\tcolor: $theme-fg-primary;\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/* (4) Gestion de la fermeture */\n\t& > #login-close{\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\t\ttop: 2em;\n\t\t\tright: 2em;\n\t\t\tmin-width: 2em;\n\t\t\theight: 2em;\n\n\t\tbackground: url('/f/svg/back/st/container/ffffff') right center no-repeat;\n\t\tbackground-size: 1em;\n\n\t\tcolor: #fff;\n\t\tpadding-right: 2em;\n\t\tline-height: 2em;\n\t\tfont-weight: bold;\n\n\t\tcursor: pointer;\n\t}\n}\n",
|
||||
"/* [1] COULEURS\n=========================================================*/\n/* (1) COULEURS DU THEME $DEFAULT */\n$theme-bg: #e8e8e8;\n$theme-bg-primary: #ffffff;\n$theme-fg: #515151;\n$theme-fg-primary: #399ced;\n\n/* (2) COULEURS DE THEME $DARK */\n$dark-bg: #313541;\n$dark-bg-primary: #29282e;\n$dark-fg: #939393;\n$dark-fg-primary: #ffffff;\n\n$header-dark: #333333;\n\n/* (3) Couleurs du theme pour la timeline */\n$timeline-color: #738394;\n$timeline-0: #399ced;\n$timeline-1: #e64e3e;\n$timeline-2: #10baa3;\n$timeline-3: #b14be7;\n$timeline-4: #053b5d;\n\n\n/* [2] DIMENSIONS\n=========================================================*/\n/* (1) Layout de base */\n$menu-side-width: 15em;\n$header-height: 4em;\n\n\n\n/* [3] Mixins\n=========================================================*/\n@mixin transform($value...) {\n transform: $value;\n\t-moz-transform: $value;\n\t-o-transform: $value;\n\t-ms-transform: $value;\n\t-webkit-transform: $value;\n}\n\n\n@mixin transition($value...) {\n -webkit-transition: $value;\n transition: $value;\n}\n\n/* [4] Functions\n=========================================================*/\n// Transforme une couleur hex en string sans le #\n@function color-str($color){\n @return str-slice(#{$color}, 2, str-length(#{$color}));\n}\n"
|
||||
],
|
||||
"mappings": "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",
|
||||
"mappings": "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",
|
||||
"names": []
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
@import 'constants';
|
||||
|
||||
@import 'constants';
|
||||
/* [1] Formulaire de type timeline
|
||||
=========================================================*/
|
||||
#WRAPPER > #CONTAINER section[data-timeline]{
|
||||
|
@ -39,9 +39,6 @@
|
|||
|
||||
// background-color: $timeline-color;
|
||||
|
||||
/* TODO: Transformer les background en ::before pour que ca soit juste un cercle avec bg et border*/
|
||||
/* FIXME: Corriger le liseré pour les autres navigateurs que FF*/
|
||||
|
||||
/* Gestion du before (compteur css) //*/
|
||||
&[data-n]:before{
|
||||
content: attr(data-n);
|
||||
|
@ -427,7 +424,7 @@
|
|||
border: 1px solid darken(#d8e0e9, 10);
|
||||
|
||||
// Pas de rebord droite sauf si dernier
|
||||
&:not(:last-child){
|
||||
&:not(:last-child):not(.lc){
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
|
@ -438,8 +435,13 @@
|
|||
@include transition( .2s ease-in-out );
|
||||
|
||||
|
||||
&:first-child{ border-top-left-radius: 5px; border-bottom-left-radius: 5px; }
|
||||
&:last-child{ border-top-right-radius: 5px; border-bottom-right-radius: 5px; }
|
||||
// Arrondi pour premier
|
||||
&:first-child,
|
||||
&.fc{ border-top-left-radius: 5px; border-bottom-left-radius: 5px; }
|
||||
|
||||
// Arrondi pour dernier
|
||||
&:last-child,
|
||||
&.lc{ border-top-right-radius: 5px; border-bottom-right-radius: 5px; }
|
||||
|
||||
// Animation quand la page est validée
|
||||
&.done{
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,5 @@
|
|||
function sociogramClass(a){this.container=a;this.log("sociogram created")}
|
||||
sociogramClass.prototype={container:this.container,sigma:null,request:{path:"charts/network_data"},response:null,nodes:[],edges:[],rad:500,nodeDistance:100,overloadGraph:function(){},load:function(){},nodeAt:function(a,b){},arrange:function(a,b,d){},extractNodesFromResponse:function(){},extractEdgesFromResponse:function(){},renderNodes:function(){},renderEdges:function(){},overload:{nodeNeighbors:function(a){},nodeDirectNeighbors:function(a){}},bindings:{clickNode:function(a,b){},clickStage:function(a,
|
||||
sociogramClass.prototype={container:this.container,sigma:null,request:{path:"chart/network_data"},response:null,nodes:[],edges:[],rad:500,nodeDistance:100,overloadGraph:function(){},load:function(){},nodeAt:function(a,b){},arrange:function(a,b,d){},extractNodesFromResponse:function(){},extractEdgesFromResponse:function(){},renderNodes:function(){},renderEdges:function(){},overload:{nodeNeighbors:function(a){},nodeDirectNeighbors:function(a){}},bindings:{clickNode:function(a,b){},clickStage:function(a,
|
||||
b){}},log:function(a){console.log("--[SOCIOGRAM]--");console.warn(a);console.log("--[/SOCIOGRAM]--")}};sociogramClass.prototype.overloadGraph=function(){sigma.classes.graph.addMethod("nodeNeighbors",this.overload.nodeNeighbors);sigma.classes.graph.addMethod("nodeDirectNeighbors",this.overload.nodeDirectNeighbors);this.log("graph overloaded")};
|
||||
sociogramClass.prototype.load=function(){this.sigma=new sigma({renderer:{container:this.container,type:"canvas"}});var a=this;api.send(this.request,function(b){a.log(b);0==b.ModuleError&&(a.response=b,a.sigma.settings({defaultNodeColor:"#348ed8",defaultLabelSize:14,defaultLabelBGColor:"#ddd",defaultHoverLabelBGColor:"#002147",defaultLabelHoverColor:"#fff",labelThreshold:10,defaultEdgeType:"line"}),a.extractNodesFromResponse(),a.extractEdgesFromResponse(),a.addNodes(),a.addEdges(),a.sigma.bind("clickNode",
|
||||
function(b){a.bindings.clickNode(a,b)}),a.sigma.bind("clickStage",function(b){a.bindings.clickStage(a,b)}),a.sigma.graph.nodes().forEach(function(b){a.arrange(b.id,null,!0)}),a.sigma.camera.ratio=1.2,a.sigma.refresh())})};sociogramClass.prototype.nodeAt=function(a,b){var d=this.sigma.graph.nodes(),c=null,e;for(e in d){var f=Math.sqrt(Math.pow(a-d[e].x,2)+Math.pow(b-d[e].y,2));if(null==c||f<c)c=f}return c};
|
||||
|
|
|
@ -27,7 +27,7 @@ function sociogramClass(container){
|
|||
sociogramClass.prototype = {
|
||||
container: this.container,
|
||||
sigma: null,
|
||||
request: { path: 'charts/network_data' },
|
||||
request: { path: 'chart/network_data' },
|
||||
response: null,
|
||||
nodes: [],
|
||||
edges: [],
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -3,7 +3,15 @@
|
|||
/* (1) Constructeur de formulaire de contact */
|
||||
var contactBuilder = new HTMLBuilder();
|
||||
contactBuilder.setLayout(
|
||||
"<h4 data-icon='p' class='new-contact color2'> \n"+
|
||||
"<h4 data-icon='o' class='new-contact color2'> \n"+
|
||||
|
||||
"\t<input type='hidden' data-name='uid' value='@uid'>\n"+
|
||||
"\t<input type='hidden' data-name='call' value='@call'>\n"+
|
||||
"\t<input type='hidden' data-name='sms' value='@sms'>\n"+
|
||||
|
||||
"\t<input type='hidden' data-name='countcall' value='@countcall'>\n"+
|
||||
"\t<input type='hidden' data-name='countsms' value='@countsms'>\n"+
|
||||
|
||||
"\t<input type='text' data-name='number' placeholder='Numéro de téléphone' value='@number' > \n"+
|
||||
"\t<input type='text' data-name='username' placeholder='Pseudo' value='@username' > \n"+
|
||||
"\t<span class='switch-left'></span> \n"+
|
||||
|
@ -43,7 +51,14 @@ miniFicheBuilder.setLayout(
|
|||
"\t<input type='hidden' data-name='username' value='@username'>\n"+
|
||||
|
||||
"\t<span data-space></span>\n"+
|
||||
"\t<h4 data-icon='o' class='color2'>@firstname @lastname (@username)</h4>\n"+
|
||||
"\t<h4 data-icon='a' class='color2'>@firstname @lastname @username</h4>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>"+
|
||||
"\t\t@countcall appels"+
|
||||
"\t</h5>"+
|
||||
"\t<h5 class='nobold color0'>"+
|
||||
"\t\t@countsms sms"+
|
||||
"\t</h5>"+
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\t<input type='radio' name='sexe_min_@uid' data-name='sexe' id='sexeH_min_@uid'><label for='sexeH_min_@uid'>Homme</label>\n"+
|
||||
|
@ -52,59 +67,83 @@ miniFicheBuilder.setLayout(
|
|||
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\t<input type='number' min='5' max='120' data-name='age' placeholder='Age' value='@age'>\n"+
|
||||
"\t\t<span class='select-container'><select data-name='age'>\n"+
|
||||
"\t\t\t<option value='.' disabled selected>Age:</option>\n"+
|
||||
"\t\t\t<option value='1' >5 à 10 ans</option>\n"+
|
||||
"\t\t\t<option value='2' >10 à 15 ans</option>\n"+
|
||||
"\t\t\t<option value='3' >15 à 20 ans</option>\n"+
|
||||
"\t\t\t<option value='4' >20 à 25 ans</option>\n"+
|
||||
"\t\t\t<option value='5' >25 à 30 ans</option>\n"+
|
||||
"\t\t\t<option value='6' >30 à 35 ans</option>\n"+
|
||||
"\t\t\t<option value='7' >35 à 40 ans</option>\n"+
|
||||
"\t\t\t<option value='8' >40 à 45 ans</option>\n"+
|
||||
"\t\t\t<option value='9' >45 à 50 ans</option>\n"+
|
||||
"\t\t\t<option value='10'>50 à 55 ans</option>\n"+
|
||||
"\t\t\t<option value='11'>55 à 60 ans</option>\n"+
|
||||
"\t\t\t<option value='12'>60 à 65 ans</option>\n"+
|
||||
"\t\t\t<option value='13'>65 à 70 ans</option>\n"+
|
||||
"\t\t\t<option value='14'>70 à 75 ans</option>\n"+
|
||||
"\t\t\t<option value='15'>75 à 80 ans</option>\n"+
|
||||
"\t\t\t<option value='16'>80 à 85 ans</option>\n"+
|
||||
"\t\t\t<option value='17'>85 à 90 ans</option>\n"+
|
||||
"\t\t\t<option value='18'>90 à 95 ans</option>\n"+
|
||||
"\t\t\t<option value='19'>95 à 100 ans</option>\n"+
|
||||
"\t\t</select></span>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\t<span class='select-container'><select data-name='job'>\n"+
|
||||
"\t\t\t<option value='.' disabled>Dernière profession exercée:</option>\n"+
|
||||
"\t\t<span class='select-container'><select data-name='studies'>\n"+
|
||||
"\t\t\t<option value='.' disabled selected>Niveau d'études maximal:</option>\n"+
|
||||
"\t\t\t<option value='0'>Inconnue</option>\n"+
|
||||
"\t\t\t<option value='1-' disabled>Agriculateur exploitants</option>\n"+
|
||||
"\t\t\t\t<option value='10'>- Agriculteurs exploitants (Agriculteurs, maraîchers, viticulteurs…)</option>\n"+
|
||||
"\t\t\t<option value='2-' disabled>Artisans, commerçants et chefs d'entreprises</option>\n"+
|
||||
"\t\t\t\t<option value='21'>- Artisans (Maçons, électriciens, couturiers, boulangers, garagistes, coiffeurs…)</option>\n"+
|
||||
"\t\t\t\t<option value='22'>- Commerçants et assimilés (Commerçants en détail ou en gros, buralistes, cafetiers, agents immobiliers…)</option>\n"+
|
||||
"\t\t\t\t<option value='23'>- Chefs d'entreprise de 10 salariés ou plus</option>\n"+
|
||||
"\t\t\t<option value='3-' disabled>Cadres et professions intellectuelles supérieures</option>\n"+
|
||||
"\t\t\t\t<option value='31'>- Professions libérales et assimilés (Médecins, avocats, notaires, architectes libéraux…)</option>\n"+
|
||||
"\t\t\t\t<option value='32'>- Cadres de la fonction publique, professions intellectuelles et artistiques (Personnels administratifs</option>\n"+
|
||||
"\t\t\t\t\t<option class='pad' value='32'>de catégorie A, professeurs de l’enseignement secondaire ou supérieur, médecins hospitaliers, artistes…)</option>\n"+
|
||||
"\t\t\t\t<option value='36'>- Cadres d'entreprise (Cadres administratifs, cadres commerciaux, ingénieurs…)</option>\n"+
|
||||
"\t\t\t<option value='4-' disabled>Professions Intermédiaires</option>\n"+
|
||||
"\t\t\t\t<option value='41'>- Professions intermédiaires de l'enseignement, de la santé, de la fonction publique et assimilés </option>\n"+
|
||||
"\t\t\t\t\t<option class='pad' value='41'>(Personnels administratifs de catégorie B, instituteurs, infirmiers, travailleurs sociaux…)</option>\n"+
|
||||
"\t\t\t\t<option value='46'>- Professions intermédiaires administratives et commerciales des entreprises (Comptables, chargés de clientèles…)</option>\n"+
|
||||
"\t\t\t\t<option value='47'>- Techniciens (Techniciens d’études, techniciens de contrôle, dessinateurs en bâtiment, géomètres…)</option>\n"+
|
||||
"\t\t\t\t<option value='48'>- Contremaîtres, agents de maîtrise (Conducteurs de travaux, chefs d’équipe…)</option>\n"+
|
||||
"\t\t\t<option value='5-' disabled>Employés</option>\n"+
|
||||
"\t\t\t\t<option value='51'>- Employés de la fonction publique (Personnels de catégorie C, agents administratifs, agents de service…)</option>\n"+
|
||||
"\t\t\t\t<option value='54'>- Employés administratifs d'entreprise (Secrétaires, agents d’accueil…)</option>\n"+
|
||||
"\t\t\t\t<option value='55'>- Employés de commerce (Vendeurs, caissiers…)</option>\n"+
|
||||
"\t\t\t\t<option value='56'>- Personnels des services directs aux particuliers (Serveurs, coiffeurs, assistantes maternelles…)</option>\n"+
|
||||
"\t\t\t<option value='6-' disabled>Ouvriers</option>\n"+
|
||||
"\t\t\t\t<option value='61'>- Ouvriers qualifiés de type industriel ou artisanal (Mécaniciens, chauffeurs, cuisiniers…)</option>\n"+
|
||||
"\t\t\t\t<option value='66'>- Ouvriers non qualifiés de type industriel ou artisanal (Ouvrier de production, manœuvres…)</option>\n"+
|
||||
"\t\t\t\t<option value='69'>- Ouvriers agricoles (Bergers, ouvriers de la viticulture, bûcherons, ouvrier forestiers…)</option>\n"+
|
||||
"\t\t\t<option value='7-' disabled>Retraités</option>\n"+
|
||||
"\t\t\t\t<option value='71'>- Anciens agriculteurs exploitants</option>\n"+
|
||||
"\t\t\t\t<option value='72'>- Anciens artisans, commerçants, chefs d'entreprise</option>\n"+
|
||||
"\t\t\t\t<option value='73'>- Anciens cadres</option>\n"+
|
||||
"\t\t\t\t<option value='74'>- Anciennes professions intermédiaires</option>\n"+
|
||||
"\t\t\t\t<option value='75'>- Anciens employés</option>\n"+
|
||||
"\t\t\t\t<option value='76'>- Anciens ouvriers</option>\n"+
|
||||
"\t\t\t<option value='8-' disabled>Sans activité professionnelle</option>\n"+
|
||||
"\t\t\t\t<option value='81'>- Chômeurs n'ayant jamais travaillé</option>\n"+
|
||||
"\t\t\t\t<option value='82'>- Inactifs divers (autres que retraités)</option>\n"+
|
||||
"\t\t\t<option value='01'>Pas de scolarité</option>\n"+
|
||||
"\t\t\t<option value='02'>Aucun diplôme mais scolarité jusqu'en école primaire ou au collège</option>\n"+
|
||||
"\t\t\t<option value='03'>Aucun diplôme mais scolarité au-delà du collège</option>\n"+
|
||||
"\t\t\t<option value='04'>Certificat d'études primaires (CEP)</option>\n"+
|
||||
"\t\t\t<option value='05'>BEPC, brevet élémentaire, brevet des collèges</option>\n"+
|
||||
"\t\t\t<option value='06'>Certificat d'aptitudes professionnelles (CAP), brevet de compagnon, y compris CAPA</option>\n"+
|
||||
"\t\t\t<option value='07'>Brevet d'études professionnelles (BEP), y compris BEPA et diplômes agricoles (BAA, BPA)</option>\n"+
|
||||
"\t\t\t\t<option value='07' class='pad'>Diplômes sociaux (aide-soignante, auxiliaire de puériculture, travailleuse familiale)</option>\n"+
|
||||
"\t\t\t<option value='08'>Baccalauréat général, brevet supérieur</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='08'>BAC ( L, ES, S ou A, B , C, D, D’, E )</option>\n"+
|
||||
"\t\t\t<option value='09'>Bac technologique ou professionnel, brevet professionnel ou de technicien</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='09'>BAC (STI, STL, SMS, STT ou F, G, H)</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='09'>BEC, BEI, BEH, capacité en droit</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='09'>Brevet de technicien agricole (BTA)</option>\n"+
|
||||
|
||||
"\t\t\t<option value='10'>Diplôme universitaire de 1er cycle</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='10'>BTS, DUT, DEUG</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='10'>Diplôme des professions sociales ou de santé, d'infirmier(ère)</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='10'>Diplôme universitaire propédeutique, DUEL, DUES, DEUG, PCEM</option>\n"+
|
||||
"\t\t\t<option value='11'>Diplôme universitaire de 2ème ou 3ème cycle</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='11'>MASTER, DOCTORAT (y compris médecine, pharmacie, dentaire),</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='11'>Maîtrise, DEA, DESS,</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='11'>CAPES, CAPET, agrégation</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='11'>Diplôme d'ingénieur, d'une grande école, etc.</option>\n"+
|
||||
"\t\t</select></span>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
"\t<h4 data-icon='a'>Type de relation</h4>\n"+
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype0_mini_@uid'><label for='reltype0_mini_@uid'>Père, mère ou équivalent</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype1_mini_@uid'><label for='reltype1_mini_@uid'>Frère ou soeur</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype2_mini_@uid'><label for='reltype2_mini_@uid'>Autre membre de la famille</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype3_mini_@uid'><label for='reltype3_mini_@uid'>Relation amoureuse</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype4_mini_@uid'><label for='reltype4_mini_@uid'>Collègue</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype5_mini_@uid'><label for='reltype5_mini_@uid'>Voisin</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype6_mini_@uid'><label for='reltype6_mini_@uid'>Ami</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype7_mini_@uid'><label for='reltype7_mini_@uid'>Copain</label><br>\n"+
|
||||
"\t\t <input type='radio' name='reltype_mini_@uid' data-name='reltype' id='reltype8_mini_@uid'><label for='reltype8_mini_@uid'>Autre : <input type='text' data-name='reltypeSpecial' placeholder='coéquipier de tennis, ..' value='@reltypespecial'></label><br>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\tOù habite t-elle/il ?<br>\n"+
|
||||
"\t\t   <input type='radio' name='loc_min_@uid' data-name='loc' id='locA_min_@uid'><label for='locA_min_@uid'>- de 10km</label><br>\n"+
|
||||
"\t\t   <input type='radio' name='loc_min_@uid' data-name='loc' id='locB_min_@uid'><label for='locB_min_@uid'>de 10km à 30km</label><br>\n"+
|
||||
"\t\t   <input type='radio' name='loc_min_@uid' data-name='loc' id='locC_min_@uid'><label for='locC_min_@uid'>de 30km à 100km</label><br>\n"+
|
||||
"\t\t   <input type='radio' name='loc_min_@uid' data-name='loc' id='locD_min_@uid'><label for='locD_min_@uid'>+ de 100km</label>\n"+
|
||||
"\t\t <input type='radio' name='loc_min_@uid' data-name='loc' id='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</h5>\n"+
|
||||
"</article>");
|
||||
|
||||
|
@ -157,12 +196,20 @@ var ficheBuilder = new HTMLBuilder();
|
|||
ficheBuilder.setLayout(
|
||||
"<article class='fiche-relation'>\n"+
|
||||
|
||||
"\t<input type='hidden' data-name='contact' value='@contact'>\n"+
|
||||
"\t<input type='hidden' data-name='uid' value='@uid'>\n"+
|
||||
"\t<input type='hidden' data-name='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='o' class='color2'>@firstname @lastname (@username)</h4>\n"+
|
||||
"\t<h4 data-icon='a' class='color2'>@firstname @lastname @username</h4>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>"+
|
||||
"\t\t@countcall appels"+
|
||||
"\t</h5>"+
|
||||
"\t<h5 class='nobold color0'>"+
|
||||
"\t\t@countsms sms"+
|
||||
"\t</h5>"+
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\t<input type='radio' name='sexe_@uid' data-name='sexe' id='sexeH_@uid'><label for='sexeH_@uid'>Homme</label>\n"+
|
||||
|
@ -171,7 +218,28 @@ ficheBuilder.setLayout(
|
|||
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\t<input type='number' min='5' max='120' data-name='age' placeholder='Age' value='@age'>\n"+
|
||||
"\t\t<span class='select-container'><select data-name='age'>\n"+
|
||||
"\t\t\t<option value='.' disabled selected>Age:</option>\n"+
|
||||
"\t\t\t<option value='1' >5 à 10 ans</option>\n"+
|
||||
"\t\t\t<option value='2' >10 à 15 ans</option>\n"+
|
||||
"\t\t\t<option value='3' >15 à 20 ans</option>\n"+
|
||||
"\t\t\t<option value='4' >20 à 25 ans</option>\n"+
|
||||
"\t\t\t<option value='5' >25 à 30 ans</option>\n"+
|
||||
"\t\t\t<option value='6' >30 à 35 ans</option>\n"+
|
||||
"\t\t\t<option value='7' >35 à 40 ans</option>\n"+
|
||||
"\t\t\t<option value='8' >40 à 45 ans</option>\n"+
|
||||
"\t\t\t<option value='9' >45 à 50 ans</option>\n"+
|
||||
"\t\t\t<option value='10'>50 à 55 ans</option>\n"+
|
||||
"\t\t\t<option value='11'>55 à 60 ans</option>\n"+
|
||||
"\t\t\t<option value='12'>60 à 65 ans</option>\n"+
|
||||
"\t\t\t<option value='13'>65 à 70 ans</option>\n"+
|
||||
"\t\t\t<option value='14'>70 à 75 ans</option>\n"+
|
||||
"\t\t\t<option value='15'>75 à 80 ans</option>\n"+
|
||||
"\t\t\t<option value='16'>80 à 85 ans</option>\n"+
|
||||
"\t\t\t<option value='17'>85 à 90 ans</option>\n"+
|
||||
"\t\t\t<option value='18'>90 à 95 ans</option>\n"+
|
||||
"\t\t\t<option value='19'>95 à 100 ans</option>\n"+
|
||||
"\t\t</select></span>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
|
@ -179,41 +247,41 @@ ficheBuilder.setLayout(
|
|||
"\t\t\t<option value='.' disabled selected>Dernière profession exercée:</option>\n"+
|
||||
"\t\t\t<option value='0'>Inconnue</option>\n"+
|
||||
"\t\t\t<option value='1-' disabled>Agriculateur exploitants</option>\n"+
|
||||
"\t\t\t\t<option value='10'>- Agriculteurs exploitants (Agriculteurs, maraîchers, viticulteurs…)</option>\n"+
|
||||
"\t\t\t\t<option value='10'>Agriculteurs exploitants (Agriculteurs, maraîchers, viticulteurs…)</option>\n"+
|
||||
"\t\t\t<option value='2-' disabled>Artisans, commerçants et chefs d'entreprises</option>\n"+
|
||||
"\t\t\t\t<option value='21'>- Artisans (Maçons, électriciens, couturiers, boulangers, garagistes, coiffeurs…)</option>\n"+
|
||||
"\t\t\t\t<option value='22'>- Commerçants et assimilés (Commerçants en détail ou en gros, buralistes, cafetiers, agents immobiliers…)</option>\n"+
|
||||
"\t\t\t\t<option value='23'>- Chefs d'entreprise de 10 salariés ou plus</option>\n"+
|
||||
"\t\t\t\t<option value='21'>Artisans (Maçons, électriciens, couturiers, boulangers, garagistes, coiffeurs…)</option>\n"+
|
||||
"\t\t\t\t<option value='22'>Commerçants et assimilés (Commerçants en détail ou en gros, buralistes, cafetiers, agents immobiliers…)</option>\n"+
|
||||
"\t\t\t\t<option value='23'>Chefs d'entreprise de 10 salariés ou plus</option>\n"+
|
||||
"\t\t\t<option value='3-' disabled>Cadres et professions intellectuelles supérieures</option>\n"+
|
||||
"\t\t\t\t<option value='31'>- Professions libérales et assimilés (Médecins, avocats, notaires, architectes libéraux…)</option>\n"+
|
||||
"\t\t\t\t<option value='32'>- Cadres de la fonction publique, professions intellectuelles et artistiques (Personnels administratifs</option>\n"+
|
||||
"\t\t\t\t<option value='31'>Professions libérales et assimilés (Médecins, avocats, notaires, architectes libéraux…)</option>\n"+
|
||||
"\t\t\t\t<option value='32'>Cadres de la fonction publique, professions intellectuelles et artistiques (Personnels administratifs</option>\n"+
|
||||
"\t\t\t\t\t<option class='pad' value='32'>de catégorie A, professeurs de l’enseignement secondaire ou supérieur, médecins hospitaliers, artistes…)</option>\n"+
|
||||
"\t\t\t\t<option value='36'>- Cadres d'entreprise (Cadres administratifs, cadres commerciaux, ingénieurs…)</option>\n"+
|
||||
"\t\t\t\t<option value='36'>Cadres d'entreprise (Cadres administratifs, cadres commerciaux, ingénieurs…)</option>\n"+
|
||||
"\t\t\t<option value='4-' disabled>Professions Intermédiaires</option>\n"+
|
||||
"\t\t\t\t<option value='41'>- Professions intermédiaires de l'enseignement, de la santé, de la fonction publique et assimilés </option>\n"+
|
||||
"\t\t\t\t<option value='41'>Professions intermédiaires de l'enseignement, de la santé, de la fonction publique et assimilés </option>\n"+
|
||||
"\t\t\t\t\t<option class='pad' value='41'>(Personnels administratifs de catégorie B, instituteurs, infirmiers, travailleurs sociaux…)</option>\n"+
|
||||
"\t\t\t\t<option value='46'>- Professions intermédiaires administratives et commerciales des entreprises (Comptables, chargés de clientèles…)</option>\n"+
|
||||
"\t\t\t\t<option value='47'>- Techniciens (Techniciens d’études, techniciens de contrôle, dessinateurs en bâtiment, géomètres…)</option>\n"+
|
||||
"\t\t\t\t<option value='48'>- Contremaîtres, agents de maîtrise (Conducteurs de travaux, chefs d’équipe…)</option>\n"+
|
||||
"\t\t\t\t<option value='46'>Professions intermédiaires administratives et commerciales des entreprises (Comptables, chargés de clientèles…)</option>\n"+
|
||||
"\t\t\t\t<option value='47'>Techniciens (Techniciens d’études, techniciens de contrôle, dessinateurs en bâtiment, géomètres…)</option>\n"+
|
||||
"\t\t\t\t<option value='48'>Contremaîtres, agents de maîtrise (Conducteurs de travaux, chefs d’équipe…)</option>\n"+
|
||||
"\t\t\t<option value='5-' disabled>Employés</option>\n"+
|
||||
"\t\t\t\t<option value='51'>- Employés de la fonction publique (Personnels de catégorie C, agents administratifs, agents de service…)</option>\n"+
|
||||
"\t\t\t\t<option value='54'>- Employés administratifs d'entreprise (Secrétaires, agents d’accueil…)</option>\n"+
|
||||
"\t\t\t\t<option value='55'>- Employés de commerce (Vendeurs, caissiers…)</option>\n"+
|
||||
"\t\t\t\t<option value='56'>- Personnels des services directs aux particuliers (Serveurs, coiffeurs, assistantes maternelles…)</option>\n"+
|
||||
"\t\t\t\t<option value='51'>Employés de la fonction publique (Personnels de catégorie C, agents administratifs, agents de service…)</option>\n"+
|
||||
"\t\t\t\t<option value='54'>Employés administratifs d'entreprise (Secrétaires, agents d’accueil…)</option>\n"+
|
||||
"\t\t\t\t<option value='55'>Employés de commerce (Vendeurs, caissiers…)</option>\n"+
|
||||
"\t\t\t\t<option value='56'>Personnels des services directs aux particuliers (Serveurs, coiffeurs, assistantes maternelles…)</option>\n"+
|
||||
"\t\t\t<option value='6-' disabled>Ouvriers</option>\n"+
|
||||
"\t\t\t\t<option value='61'>- Ouvriers qualifiés de type industriel ou artisanal (Mécaniciens, chauffeurs, cuisiniers…)</option>\n"+
|
||||
"\t\t\t\t<option value='66'>- Ouvriers non qualifiés de type industriel ou artisanal (Ouvrier de production, manœuvres…)</option>\n"+
|
||||
"\t\t\t\t<option value='69'>- Ouvriers agricoles (Bergers, ouvriers de la viticulture, bûcherons, ouvrier forestiers…)</option>\n"+
|
||||
"\t\t\t\t<option value='61'>Ouvriers qualifiés de type industriel ou artisanal (Mécaniciens, chauffeurs, cuisiniers…)</option>\n"+
|
||||
"\t\t\t\t<option value='66'>Ouvriers non qualifiés de type industriel ou artisanal (Ouvrier de production, manœuvres…)</option>\n"+
|
||||
"\t\t\t\t<option value='69'>Ouvriers agricoles (Bergers, ouvriers de la viticulture, bûcherons, ouvrier forestiers…)</option>\n"+
|
||||
"\t\t\t<option value='7-' disabled>Retraités</option>\n"+
|
||||
"\t\t\t\t<option value='71'>- Anciens agriculteurs exploitants</option>\n"+
|
||||
"\t\t\t\t<option value='72'>- Anciens artisans, commerçants, chefs d'entreprise</option>\n"+
|
||||
"\t\t\t\t<option value='73'>- Anciens cadres</option>\n"+
|
||||
"\t\t\t\t<option value='74'>- Anciennes professions intermédiaires</option>\n"+
|
||||
"\t\t\t\t<option value='75'>- Anciens employés</option>\n"+
|
||||
"\t\t\t\t<option value='76'>- Anciens ouvriers</option>\n"+
|
||||
"\t\t\t\t<option value='71'>Anciens agriculteurs exploitants</option>\n"+
|
||||
"\t\t\t\t<option value='72'>Anciens artisans, commerçants, chefs d'entreprise</option>\n"+
|
||||
"\t\t\t\t<option value='73'>Anciens cadres</option>\n"+
|
||||
"\t\t\t\t<option value='74'>Anciennes professions intermédiaires</option>\n"+
|
||||
"\t\t\t\t<option value='75'>Anciens employés</option>\n"+
|
||||
"\t\t\t\t<option value='76'>Anciens ouvriers</option>\n"+
|
||||
"\t\t\t<option value='8-' disabled>Sans activité professionnelle</option>\n"+
|
||||
"\t\t\t\t<option value='81'>- Chômeurs n'ayant jamais travaillé</option>\n"+
|
||||
"\t\t\t\t<option value='82'>- Inactifs divers (autres que retraités)</option>\n"+
|
||||
"\t\t\t\t<option value='81'>Chômeurs n'ayant jamais travaillé</option>\n"+
|
||||
"\t\t\t\t<option value='82'>Inactifs divers (autres que retraités)</option>\n"+
|
||||
"\t\t</select></span>\n"+
|
||||
"\t</h5>\n"+
|
||||
|
||||
|
@ -229,26 +297,26 @@ ficheBuilder.setLayout(
|
|||
"\t\t<span class='select-container'><select data-name='studies'>\n"+
|
||||
"\t\t\t<option value='.' disabled selected>Niveau d'études maximal:</option>\n"+
|
||||
"\t\t\t<option value='0'>Inconnue</option>\n"+
|
||||
"\t\t\t<option value='01'>- Pas de scolarité</option>\n"+
|
||||
"\t\t\t<option value='02'>- Aucun diplôme mais scolarité jusqu'en école primaire ou au collège</option>\n"+
|
||||
"\t\t\t<option value='03'>- Aucun diplôme mais scolarité au-delà du collège</option>\n"+
|
||||
"\t\t\t<option value='04'>- Certificat d'études primaires (CEP)</option>\n"+
|
||||
"\t\t\t<option value='05'>- BEPC, brevet élémentaire, brevet des collèges</option>\n"+
|
||||
"\t\t\t<option value='06'>- Certificat d'aptitudes professionnelles (CAP), brevet de compagnon, y compris CAPA</option>\n"+
|
||||
"\t\t\t<option value='07'>- Brevet d'études professionnelles (BEP), y compris BEPA et diplômes agricoles (BAA, BPA)</option>\n"+
|
||||
"\t\t\t<option value='01'>Pas de scolarité</option>\n"+
|
||||
"\t\t\t<option value='02'>Aucun diplôme mais scolarité jusqu'en école primaire ou au collège</option>\n"+
|
||||
"\t\t\t<option value='03'>Aucun diplôme mais scolarité au-delà du collège</option>\n"+
|
||||
"\t\t\t<option value='04'>Certificat d'études primaires (CEP)</option>\n"+
|
||||
"\t\t\t<option value='05'>BEPC, brevet élémentaire, brevet des collèges</option>\n"+
|
||||
"\t\t\t<option value='06'>Certificat d'aptitudes professionnelles (CAP), brevet de compagnon, y compris CAPA</option>\n"+
|
||||
"\t\t\t<option value='07'>Brevet d'études professionnelles (BEP), y compris BEPA et diplômes agricoles (BAA, BPA)</option>\n"+
|
||||
"\t\t\t\t<option value='07' class='pad'>Diplômes sociaux (aide-soignante, auxiliaire de puériculture, travailleuse familiale)</option>\n"+
|
||||
"\t\t\t<option value='08'>- Baccalauréat général, brevet supérieur</option>\n"+
|
||||
"\t\t\t<option value='08'>Baccalauréat général, brevet supérieur</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='08'>BAC ( L, ES, S ou A, B , C, D, D’, E )</option>\n"+
|
||||
"\t\t\t<option value='09'>- Bac technologique ou professionnel, brevet professionnel ou de technicien</option>\n"+
|
||||
"\t\t\t<option value='09'>Bac technologique ou professionnel, brevet professionnel ou de technicien</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='09'>BAC (STI, STL, SMS, STT ou F, G, H)</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='09'>BEC, BEI, BEH, capacité en droit</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='09'>Brevet de technicien agricole (BTA)</option>\n"+
|
||||
|
||||
"\t\t\t<option value='10'>- Diplôme universitaire de 1er cycle</option>\n"+
|
||||
"\t\t\t<option value='10'>Diplôme universitaire de 1er cycle</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='10'>BTS, DUT, DEUG</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='10'>Diplôme des professions sociales ou de santé, d'infirmier(ère)</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='10'>Diplôme universitaire propédeutique, DUEL, DUES, DEUG, PCEM</option>\n"+
|
||||
"\t\t\t<option value='11'>- Diplôme universitaire de 2ème ou 3ème cycle</option>\n"+
|
||||
"\t\t\t<option value='11'>Diplôme universitaire de 2ème ou 3ème cycle</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='11'>MASTER, DOCTORAT (y compris médecine, pharmacie, dentaire),</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='11'>Maîtrise, DEA, DESS,</option>\n"+
|
||||
"\t\t\t\t<option class='pad' value='11'>CAPES, CAPET, agrégation</option>\n"+
|
||||
|
@ -277,10 +345,11 @@ ficheBuilder.setLayout(
|
|||
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
"\t\t <input type='radio' name='loc_@uid' data-name='loc' id='locA_@uid'><label for='locA_@uid'>- de 5 minutes</label><br>\n"+
|
||||
"\t\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\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</h5>\n"+
|
||||
|
||||
"\t<h5 class='nobold color0'>\n"+
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
function inputPhoneContact(a){this.container=a}inputPhoneContact.prototype={container:this.container,handler:null};
|
||||
inputPhoneContact.prototype.fieldsToStorage=function(){console.log("CONTACTS: FIELDS TO STORAGE");for(var a=$$("article.contact-panel .new-contact"),c=0;c<a.length;c++){var d=a[c].parentNode.children.indexOf(a[c]),b=(new FormDeflater(a[c],["input"],["data-name"])).deflate(),e=0<b.number.value.length;if(e=e&&0<b.username.value.length+b.firstname.value.length+b.lastname.value.length)b={uid:d,number:b.number.value,username:b.username.value,firstname:b.firstname.value,lastname:b.lastname.value},b.hash=
|
||||
crc32(JSON.stringify(b)),lsi.set("contacts","form"+d,b)}};
|
||||
inputPhoneContact.prototype.add=function(a){console.log("CONTACTS: ADD");a.number=null!=a.number?a.number:"";a.username=null!=a.username?a.username:"";a.firstname=null!=a.firstname?a.firstname:"";a.lastname=null!=a.lastname?a.lastname:"";this.container.innerHTML+=contactBuilder.build(a);a=$$("article.contact-panel .new-contact");for(var c=this,d=0;d<a.length;d++)a[d].removeEventListener("click",function(a){c.handler(a.target)},!1),a[d].addEventListener("click",function(a){c.handler(a.target)},!1)};
|
||||
inputPhoneContact.prototype.storageToFields=function(){console.log("CONTACTS: STORAGE TO FIELDS");var a=lsi["export"]("contacts");this.container.innerHTML="";for(var c in a)this.add(a[c]);this.add({number:"",firstname:"",lastname:"",username:""})};inputPhoneContact.prototype.attach=function(a){console.log("CONTACTS: ATTACH");lsi.createDataset("contacts");this.handler=a;this.storageToFields()};
|
||||
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)}};
|
||||
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)};
|
||||
|
|
|
@ -1,14 +1,17 @@
|
|||
/* [0] Constructeur -> définit le conteneur et le bouton d'ajout
|
||||
=========================================================*/
|
||||
function inputPhoneContact(container){
|
||||
this.container = container;
|
||||
function inputPhoneContact(container, navContainer){
|
||||
this.container = container;
|
||||
this.nav_container = navContainer;
|
||||
}
|
||||
|
||||
/* [1] Attributs
|
||||
=========================================================*/
|
||||
inputPhoneContact.prototype = {
|
||||
container: this.container, // Conteneur des formulaires de contact
|
||||
handler: null // Fonction pour l'enregistrement et la synchronisation des données
|
||||
container: this.container, // Conteneur des formulaires de contact
|
||||
nav_container: this.nav_container, // Conteneur de la navigation entre les formulaires
|
||||
selected: 0, // UID du permier des contacts sélectionnés (10 par 10)
|
||||
handler: null // Fonction pour l'enregistrement et la synchronisation des données
|
||||
};
|
||||
|
||||
|
||||
|
@ -18,16 +21,13 @@ inputPhoneContact.prototype.fieldsToStorage = function(){
|
|||
console.log('CONTACTS: FIELDS TO STORAGE');
|
||||
|
||||
// {1} Pour chaque formulaire de contact présent //
|
||||
var existingContacts = $$('article.contact-panel .new-contact');
|
||||
for( var i = 0 ; i < existingContacts.length ; i++ ){
|
||||
var visibleContacts = $$('article.contact-panel .new-contact');
|
||||
for( var i = 0 ; i < visibleContacts.length ; i++ ){
|
||||
|
||||
// {2} On récupère les informations relatives à l'élément courant //
|
||||
var indexInParent = existingContacts[i].parentNode.children.indexOf(existingContacts[i]);
|
||||
// {2} On initialise notre deflater pour récupérer les valeurs //
|
||||
var deflater = new FormDeflater(visibleContacts[i], ['input'], ['data-name']);
|
||||
|
||||
// {3} On initialise notre deflater pour récupérer les valeurs //
|
||||
var deflater = new FormDeflater(existingContacts[i], ['input'], ['data-name']);
|
||||
|
||||
// {4} On enregistre ce contact si le numéro n'est pas vide et soit pseudo/prénom/nom //
|
||||
// {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
|
||||
|
@ -38,25 +38,29 @@ inputPhoneContact.prototype.fieldsToStorage = function(){
|
|||
// Si le formulaire n'est pas valide, on ne l'enregistre pas
|
||||
if( !validForm ) continue;
|
||||
|
||||
// {5} On récupère et met en forme les valeurs du deflater //
|
||||
// {4} On récupère et met en forme les valeurs du deflater //
|
||||
var obj = {
|
||||
uid: indexInParent,
|
||||
uid: parseInt(deflated.uid.value),
|
||||
number: deflated.number.value,
|
||||
username: deflated.username.value,
|
||||
firstname: deflated.firstname.value,
|
||||
lastname: deflated.lastname.value
|
||||
lastname: deflated.lastname.value,
|
||||
|
||||
call: parseInt(deflated.call.value),
|
||||
sms: parseInt(deflated.sms.value),
|
||||
|
||||
countcall: parseInt(deflated.countcall.value),
|
||||
countsms: parseInt(deflated.countsms.value)
|
||||
};
|
||||
|
||||
/* (6) On calcule et ajoute le hash des données */
|
||||
/* (5) On calcule et ajoute le hash des données */
|
||||
obj.hash = crc32( JSON.stringify(obj) );
|
||||
|
||||
// {7} On enregistre les données dans le 'localStorage' //
|
||||
lsi.set('contacts', 'form'+indexInParent, obj);
|
||||
// {6} On enregistre les données dans le 'localStorage' //
|
||||
lsi.set('contacts', parseInt(deflated.uid.value), obj);
|
||||
|
||||
}
|
||||
|
||||
// {7} On met à jour le rendu des contacts//
|
||||
// this.storageToFields();
|
||||
};
|
||||
|
||||
|
||||
|
@ -77,11 +81,19 @@ inputPhoneContact.prototype.fieldsToStorage = function(){
|
|||
inputPhoneContact.prototype.add = function(objectData){
|
||||
console.log('CONTACTS: ADD');
|
||||
|
||||
// Si pas d'uid, on quitte
|
||||
if( objectData == null || objectData.uid == null || isNaN(objectData.uid) )
|
||||
return false
|
||||
|
||||
// {0} On formatte l'object //
|
||||
objectData.number = (objectData.number != null) ? objectData.number : '';
|
||||
objectData.username = (objectData.username != null) ? objectData.username : '';
|
||||
objectData.firstname = (objectData.firstname != null) ? objectData.firstname : '';
|
||||
objectData.lastname = (objectData.lastname != null) ? objectData.lastname : '';
|
||||
objectData.call = (objectData.call != null) ? objectData.call : -1;
|
||||
objectData.sms = (objectData.sms != null) ? objectData.sms : -1;
|
||||
objectData.countcall = (objectData.countcall != null) ? objectData.countcall : 0;
|
||||
objectData.countsms = (objectData.countsms != null) ? objectData.countsms : 0;
|
||||
|
||||
|
||||
// {1} On ajoute le HTML //
|
||||
|
@ -93,8 +105,8 @@ inputPhoneContact.prototype.add = function(objectData){
|
|||
// On met à jour les listener (remove, puis add)
|
||||
var ptr = this;
|
||||
for( var i = 0 ; i < contactForms.length ; i++ ){
|
||||
contactForms[i].removeEventListener('click', function(e){ ptr.handler(e.target); }, false);
|
||||
contactForms[i].addEventListener('click', function(e){ ptr.handler(e.target); }, false);
|
||||
contactForms[i].removeEventListener('click', function(e){ ptr.nav(e.target); ptr.handler(e.target); }, false);
|
||||
contactForms[i].addEventListener('click', function(e){ ptr.nav(e.target); ptr.handler(e.target); }, false);
|
||||
}
|
||||
|
||||
};
|
||||
|
@ -114,23 +126,88 @@ inputPhoneContact.prototype.storageToFields = function(){
|
|||
console.log('CONTACTS: STORAGE TO FIELDS');
|
||||
|
||||
// {1} Pour chaque contact du 'localStorage' //
|
||||
var contactsData = lsi.export('contacts');
|
||||
var contactKeys = lsi.keys('contacts');
|
||||
|
||||
// On réinitialise le HTML
|
||||
this.container.innerHTML = '';
|
||||
|
||||
// {2} On ajoute chaque contact à la liste //
|
||||
for( var key in contactsData )
|
||||
this.add(contactsData[key]);
|
||||
// {2} On ajoute chaque contact (parmi les séléctionnés) à la liste //
|
||||
var min = this.selected; // On affiche du contact sélectionné
|
||||
var max = this.selected+10; // On s'arrête à 10 contacs
|
||||
|
||||
for( var i = min ; i < max && i < contactKeys.length ; i++ )
|
||||
this.add( lsi.get('contacts', contactKeys[i]) );
|
||||
|
||||
|
||||
// On ajoute un champ de plus à remplir
|
||||
this.add({number:'', firstname:'', lastname:'', username:''});
|
||||
// On ajoute un champ de plus à remplir si c'est la dernière page
|
||||
if( max >= contactKeys.length )
|
||||
this.add({uid: contactKeys.length});
|
||||
|
||||
/* (3) On met à jour la barre de navigation */
|
||||
this.updateNavBar();
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* [6] Gestion de la navigation entre les formulaires (10 par 10)
|
||||
=========================================================*/
|
||||
inputPhoneContact.prototype.nav = function(element){
|
||||
/* (1) On vérifie que l'élément contient un nombre et existe */
|
||||
if( element == null )
|
||||
return false;
|
||||
|
||||
if( element.getData('n') === false || isNaN(element.getData('n')) || element.parentNode.id != 'nav-contact' )
|
||||
return false;
|
||||
|
||||
/* (2) On désactive tous les éléments actifs */
|
||||
var activeElements = $$('#nav-contact > span.active');
|
||||
for( var i = 0 ; i < activeElements.length ; i++ )
|
||||
activeElements[i].remClass('active');
|
||||
|
||||
/* (3) On active l'élément courant */
|
||||
element.addClass('active');
|
||||
this.selected = parseInt(element.getData('n'));
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* [7] Mise à jour de la navigation
|
||||
=========================================================*/
|
||||
inputPhoneContact.prototype.updateNavBar = function(){
|
||||
var contactKeys = lsi.keys('contacts');
|
||||
var len = contactKeys.length;
|
||||
|
||||
|
||||
/* (1) On vérifie si la barre de navigation est à jour */
|
||||
var navBarUpToDate = this.nav_container.children.length == len;
|
||||
|
||||
|
||||
/* (2) On vide et remplit la barre de nav, si elle n'est pas à jour */
|
||||
if( !navBarUpToDate ){
|
||||
this.nav_container.innerHTML = '';
|
||||
|
||||
for( var i = 0 ; i < len ; i+=10 )
|
||||
this.nav_container.innerHTML += '<span data-n="'+i+'">'+ (1+i/10) +'</span>';
|
||||
}
|
||||
|
||||
|
||||
/* (4) On séléctionne par défaut la dernière MINI fiche sélectionnée */
|
||||
this.nav( $('#nav-contact [data-n="'+( this.selected )+'"]') );
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* [5] Point d'amorçage de la gestion des contacts
|
||||
=========================================================*/
|
||||
inputPhoneContact.prototype.attach = function(handler){
|
||||
|
@ -139,9 +216,20 @@ inputPhoneContact.prototype.attach = function(handler){
|
|||
/* (1) On initialise le jeu de données */
|
||||
lsi.createDataset('contacts');
|
||||
|
||||
/* (2) On enregistre le handler */
|
||||
/* (2) On charge les contacts depuis la mémoire ('localStorage') */
|
||||
this.storageToFields();
|
||||
|
||||
/* (3) On enregistre le handler */
|
||||
this.handler = handler;
|
||||
|
||||
/* (3) On charge les contacts depuis la mémoire ('localStorage') */
|
||||
this.storageToFields();
|
||||
/* (4) On attache l'évènement sur le conteneur de navigation */
|
||||
var ptr = this;
|
||||
this.nav_container.addEventListener('click', function(e){
|
||||
// 1. On gère la navigation
|
||||
ptr.nav(e.target);
|
||||
|
||||
// 2. On gere le chargement dynamique
|
||||
ptr.handler(e.target);
|
||||
}, false);
|
||||
|
||||
};
|
||||
|
|
|
@ -1,22 +1,23 @@
|
|||
function inputPhoneFiche(a,b){this.container=a;this.nav_container=b}
|
||||
inputPhoneFiche.prototype={container:this.container,nav_container:this.nav_container,selected:0,handler:null,defaultData:{firstname:"",lastname:"",username:"",sexe:[{status:!0},{status:!1}],age:"",job:".",famsit:[{status:!0},{status:!1},{status:!1}],studies:".",reltype:[{status:!0},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1}],reltypeSpecial:"",city:"",loc:[{status:!0},{status:!1},{status:!1},{status:!1}],duration:["",""],context:[{status:!0},{status:!1},
|
||||
{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1},{status:!1}],contextSpecial:["","",""],freq:[[{status:!0},{status:!1},{status:!1},{status:!1}],[{status:!0},{status:!1},{status:!1},{status:!1}],[{status:!0},{status:!1},{status:!1},{status:!1}],[{status:!0},{status:!1},{status:!1},{status:!1}],[{status:!0},{status:!1},{status:!1},{status:!1}]],connect:[[{status:!1},{status:!0}],[{status:!1},{status:!0}],[{status:!1},
|
||||
{status:!0}],[{status:!1},{status:!0}],[{status:!1},{status:!0}],[{status:!1},{status:!0}]],connectSpecial:["",""]}};
|
||||
inputPhoneFiche.prototype.fieldsToStorage=function(){console.log("FICHE: FIELDS TO STORAGE");for(var a=$$("article.relation-panel .fiche-relation"),b=0;b<a.length;b++){var c=(new FormDeflater(a[b],["input","select"],["data-name"])).deflate();console.log(c);var d=lsi.get("fiches","form"+c.uid.value);!1===d&&(d.username="inconnu",d.firstname="inconnu",d.lastname="inconnu");c={uid:c.uid.value,firstname:d.firstname,lastname:d.lastname,username:d.username,sexe:c.sexe,age:c.age.value,job:c.job.value,famsit:c.famsit,
|
||||
studies:c.studies.value,reltype:c.reltype,reltypeSpecial:c.reltypeSpecial.value,city:c.city.value,loc:c.loc,duration:[c.duration[0].value,c.duration[1].value],context:c.context,contextSpecial:[c.contextSpecial[0].value,c.contextSpecial[1].value,c.contextSpecial[2].value],freq:[c.freq0,c.freq1,c.freq2,c.freq3,c.freq4],connect:[c.connect0,c.connect1,c.connect2,c.connect3,c.connect4,c.connect5],connectSpecial:[c.connectSpecial[0].value,c.connectSpecial[1].value]};c.valid=this.check(c);lsi.set("fiches",
|
||||
"form"+c.uid,c)}};
|
||||
inputPhoneFiche.prototype.add=function(a){console.log("FICHE: ADD");if(null==a.uid)return!1;a.firstname=null!=a.firstname?a.firstname:this.defaultData.firstname;a.lastname=null!=a.lastname?a.lastname:this.defaultData.lastname;a.username=null!=a.username?a.username:this.defaultData.username;a.age=null!=a.age?a.age:this.defaultData.age;a.city=null!=a.city?a.city:this.defaultData.city;a.duration[0]=null!=a.duration[0]?a.duration[0]:this.defaultData.duration[0];a.duration[1]=null!=a.duration[1]?a.duration[1]:
|
||||
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.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;this.container.innerHTML+=ficheBuilder.build({firstname:a.firstname,lastname:a.lastname,username:a.username,uid:a.uid,age:a.age,city:a.city,duration0:a.duration[0],duration1:a.duration[1],reltypespecial:a.reltypeSpecial,contextspecial0:a.contextSpecial[0],contextspecial1:a.contextSpecial[1],contextspecial2:a.contextSpecial[2],connectspecial0:a.connectSpecial[0],connectspecial1:a.connectSpecial[1]});var b=$('article.fiche-relation input[data-name="uid"][value="'+
|
||||
a.uid+'"] ~ h5>span>select[data-name="job"]>option[value="'+a.job+'"]');null!=b&&b.setAttribute("selected","selected");b=$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="studies"]>option[value="'+a.studies+'"]');null!=b&&b.setAttribute("selected","selected");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 d=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="freq'+c+'"]'),b=0;b<d.length&&b<a.freq[c].length;b++)a.freq[c][b].status?d[b].setAttribute("checked","checked"):d[b].removeAttribute("checked");for(c=0;c<a.connect.length;c++)for(d=$$('article.fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="connect'+c+'"]'),b=0;b<d.length&&b<a.connect[c].length;b++)a.connect[c][b].status?
|
||||
d[b].setAttribute("checked","checked"):d[b].removeAttribute("checked")};inputPhoneFiche.prototype.storageToFields=function(){console.log("FICHE: STORAGE TO FIELDS");var a=lsi["export"]("fiches");this.container.innerHTML="";var b=[],c;for(c in a){var d=a[c].uid;d==this.selected&&this.add(a[c]);b.push(d)}this.updateNavBar(b)};
|
||||
inputPhoneFiche.prototype.sync=function(){console.log("FICHE: SYNC");for(var a=lsi.keys("contacts"),b=0;b<a.length&&10>b;b++){var c=lsi.get("contacts",a[b]),d=lsi.get("fiches",a[b]);null==d&&(d=this.defaultData);d.uid=c.uid;d.firstname=c.firstname;d.lastname=c.lastname;d.username=c.username;lsi.set("fiches",a[b],d)}};
|
||||
inputPhoneFiche.prototype.nav=function(a){if("undefined"==typeof a||isNaN(a.innerHTML))return!1;for(var b=$$("#nav-fiche > span.active"),c=0;c<b.length;c++)b[c].remClass("active");a.addClass("active");this.selected=parseInt(a.innerHTML)-1};
|
||||
inputPhoneFiche.prototype.updateNavBar=function(a){this.nav_container.innerHTML="";for(var b=0;b<a.length;b++){var c=parseInt(a[b])+1;this.nav_container.innerHTML+="<span>"+c+"</span>"}a=lsi["export"]("fiches");for(var d in a)!0===a[d].valid?this.nav_container.children[a[d].uid].addClass("done"):this.nav_container.children[a[d].uid].remClass("done");this.nav(this.nav_container.children[this.selected])};
|
||||
inputPhoneFiche.prototype.check=function(a){if(isNaN(parseInt(a.age))||2>a.city.length||isNaN(parseInt(a.duration[0]))&&0<a.duration[0].length||isNaN(parseInt(a.duration[1]))&&0<a.duration[1].length||0==a.duration[0].length+a.duration[1].length||"."==a.job||"."==a.studies||!checkRadioValue(a.sexe)||!checkRadioValue(a.famsit)||!checkRadioValue(a.reltype)||!checkRadioValue(a.loc)||!checkRadioValue(a.context))return!1;for(var b=0;b<a.freq.length;b++)if(!checkRadioValue(a.freq[b]))return!1;for(b=0;b<
|
||||
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()},!1)};
|
||||
inputPhoneFiche.prototype={container:this.container,nav_container:this.nav_container,selected:0,handler:null,defaultData:{sexe:[defTrue,defFalse],age:".",job:".",famsit:[defTrue,defFalse,defFalse],studies:".",reltype:[defTrue,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse],reltypeSpecial:"",city:"",loc:[defTrue,defFalse,defFalse,defFalse],duration:["",""],context:[defTrue,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,defFalse,
|
||||
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="'+
|
||||
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()};
|
||||
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)))};
|
||||
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)};
|
||||
|
|
|
@ -13,38 +13,37 @@ 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
|
||||
firstname: '',
|
||||
lastname: '',
|
||||
username: '',
|
||||
sexe: [ {status:true}, {status:false}],
|
||||
age: '',
|
||||
sexe: [ defTrue, defFalse],
|
||||
age: '.',
|
||||
job: '.',
|
||||
famsit: [ {status:true}, {status:false}, {status:false} ], // Choix 1 à 3
|
||||
famsit: [ defTrue, defFalse, defFalse ], // Choix 1 à 3
|
||||
studies: '.',
|
||||
reltype: [ {status:true}, {status:false}, {status:false}, {status:false}, {status:false},
|
||||
{status:false}, {status:false}, {status:false}, {status:false}], // Choix 1 à 9
|
||||
reltype: [ defTrue, defFalse, defFalse, defFalse, defFalse,
|
||||
defFalse, defFalse, defFalse, defFalse], // Choix 1 à 9
|
||||
reltypeSpecial: '',
|
||||
city: '',
|
||||
loc: [ {status:true}, {status:false}, {status:false}, {status:false} ],
|
||||
loc: [ defTrue, defFalse, defFalse, defFalse ],
|
||||
duration: ['', ''],
|
||||
context: [ {status:true}, {status:false}, {status:false}, {status:false}, {status:false},
|
||||
{status:false}, {status:false}, {status:false}, {status:false}, {status:false},
|
||||
{status:false}, {status:false}, {status:false}, {status:false}], // Choix 1 à 14
|
||||
context: [ defTrue, defFalse, defFalse, defFalse, defFalse,
|
||||
defFalse, defFalse, defFalse, defFalse, defFalse,
|
||||
defFalse, defFalse, defFalse, defFalse], // Choix 1 à 14
|
||||
contextSpecial: ['', '', ''],
|
||||
freq: [
|
||||
[ {status:true}, {status:false}, {status:false}, {status:false} ],
|
||||
[ {status:true}, {status:false}, {status:false}, {status:false} ],
|
||||
[ {status:true}, {status:false}, {status:false}, {status:false} ],
|
||||
[ {status:true}, {status:false}, {status:false}, {status:false} ],
|
||||
[ {status:true}, {status:false}, {status:false}, {status:false} ]],
|
||||
[ defTrue, defFalse, defFalse, defFalse ],
|
||||
[ defTrue, defFalse, defFalse, defFalse ],
|
||||
[ defTrue, defFalse, defFalse, defFalse ],
|
||||
[ defTrue, defFalse, defFalse, defFalse ],
|
||||
[ defTrue, defFalse, defFalse, defFalse ]],
|
||||
connect: [
|
||||
[ {status:false}, {status:true} ],
|
||||
[ {status:false}, {status:true} ],
|
||||
[ {status:false}, {status:true} ],
|
||||
[ {status:false}, {status:true} ],
|
||||
[ {status:false}, {status:true} ],
|
||||
[ {status:false}, {status:true} ]],
|
||||
connectSpecial: ['', '']
|
||||
[ defFalse, defTrue ],
|
||||
[ defFalse, defTrue ],
|
||||
[ defFalse, defTrue ],
|
||||
[ defFalse, defTrue ],
|
||||
[ defFalse, defTrue ],
|
||||
[ defFalse, defTrue ]],
|
||||
connectSpecial: ['', ''],
|
||||
timestamp: 0,
|
||||
valid: false
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -63,37 +62,39 @@ inputPhoneFiche.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();
|
||||
// On crée le hash
|
||||
var deflatedHash = crc32(JSON.stringify(deflated));
|
||||
|
||||
|
||||
console.log(deflated);
|
||||
// console.log( deflated );
|
||||
|
||||
|
||||
// {4} On récupère les données du LSI si elles existent //
|
||||
var existingData = lsi.get('fiches', 'form'+deflated.uid.value);
|
||||
var existingData = lsi.get('fiches', deflated.uid.value);
|
||||
|
||||
// Si n'existe pas, on initialise
|
||||
if( existingData === false ){
|
||||
existingData.username = 'inconnu';
|
||||
existingData.firstname = 'inconnu';
|
||||
existingData.lastname = 'inconnu';
|
||||
}
|
||||
// Si n'existe pas, on passe au suivant
|
||||
if( existingData === false )
|
||||
continue;
|
||||
|
||||
|
||||
// {5} On récupère et met en forme les valeurs du deflater //
|
||||
// Si le hash est le même, on ne fait rien
|
||||
if( existingData.hash != null && existingData.hash == deflatedHash )
|
||||
return;
|
||||
|
||||
|
||||
var obj = {
|
||||
uid: deflated.uid.value,
|
||||
firstname: existingData.firstname,
|
||||
lastname: existingData.lastname,
|
||||
username: existingData.username,
|
||||
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
|
||||
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
|
||||
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
|
||||
|
@ -122,15 +123,22 @@ inputPhoneFiche.prototype.fieldsToStorage = function(){
|
|||
connectSpecial: [
|
||||
deflated.connectSpecial[0].value,
|
||||
deflated.connectSpecial[1].value
|
||||
]
|
||||
],
|
||||
hash: deflatedHash
|
||||
};
|
||||
|
||||
|
||||
/* (6) On vérifie la validité des données et on l'enregistre dans l'objet */
|
||||
/* (6) On vérifie la validité des données et on l'enregistre dans l'objet avec la date de modification */
|
||||
obj.valid = this.check(obj);
|
||||
|
||||
// {6} On enregistre les données dans le 'localStorage' //
|
||||
lsi.set('fiches', 'form'+obj.uid, obj);
|
||||
// On met à jour la date de modification, si on a pas qu'@uid de différent
|
||||
if( diff(existingData, obj).length > 0 ){
|
||||
console.warn('> FICHE UPDATE');
|
||||
obj.timestamp = Date.now();
|
||||
}
|
||||
|
||||
/* (7) On enregistre les données dans le 'localStorage' */
|
||||
lsi.set('fiches', obj.uid, obj);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -152,16 +160,12 @@ inputPhoneFiche.prototype.fieldsToStorage = function(){
|
|||
inputPhoneFiche.prototype.add = function(objectData){
|
||||
console.log('FICHE: ADD');
|
||||
|
||||
// Si pas d'UID, on retourne une erreur
|
||||
if( objectData.uid == null )
|
||||
// Si pas d'UID ou d'UID de contact, on retourne une erreur
|
||||
if( objectData.uid == null || objectData.contact == null )
|
||||
return false;
|
||||
|
||||
/* (0) Gestion du formattage des valeur */
|
||||
// {1} Champs de texte //
|
||||
objectData.firstname = (objectData.firstname != null) ? objectData.firstname : this.defaultData.firstname;
|
||||
objectData.lastname = (objectData.lastname != null) ? objectData.lastname : this.defaultData.lastname;
|
||||
objectData.username = (objectData.username != null) ? objectData.username : this.defaultData.username;
|
||||
objectData.age = (objectData.age != null) ? objectData.age : this.defaultData.age;
|
||||
objectData.city = (objectData.city != null) ? objectData.city : this.defaultData.city;
|
||||
objectData.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];
|
||||
|
@ -175,6 +179,7 @@ inputPhoneFiche.prototype.add = function(objectData){
|
|||
// {2} Champs <select> //
|
||||
objectData.job = (objectData.job != null) ? objectData.job : this.defaultData.job;
|
||||
objectData.studies = (objectData.studies != null) ? objectData.studies : this.defaultData.studies;
|
||||
objectData.age = (objectData.age != null) ? objectData.age : this.defaultData.age;
|
||||
|
||||
// {3} Champs <radio> //
|
||||
objectData.sexe = (objectData.sexe != null) ? objectData.sexe : this.defaultData.sexe;
|
||||
|
@ -186,13 +191,23 @@ inputPhoneFiche.prototype.add = function(objectData){
|
|||
objectData.connect = (objectData.connect != null) ? objectData.connect : this.defaultData.connect;
|
||||
|
||||
|
||||
// {1} Création physique //
|
||||
// {4} On récupère username/firstname/lastname du contact associé //
|
||||
var associatedContact = lsi.get('contacts', objectData.contact);
|
||||
|
||||
// Si on ne trouve pas le contact, on ne fais rien
|
||||
if( associatedContact === false )
|
||||
return false;
|
||||
|
||||
|
||||
// {5} Création physique //
|
||||
this.container.innerHTML += ficheBuilder.build({
|
||||
firstname: objectData.firstname,
|
||||
lastname: objectData.lastname,
|
||||
username: objectData.username,
|
||||
firstname: associatedContact.firstname,
|
||||
lastname: associatedContact.lastname,
|
||||
username: (associatedContact.username.length==0) ? '' : '('+associatedContact.username+')',
|
||||
countcall: associatedContact.countcall,
|
||||
countsms: associatedContact.countsms,
|
||||
uid: objectData.uid,
|
||||
age: objectData.age,
|
||||
contact: objectData.contact, // uid du contact associé
|
||||
city: objectData.city,
|
||||
duration0: objectData.duration[0],
|
||||
duration1: objectData.duration[1],
|
||||
|
@ -205,53 +220,59 @@ inputPhoneFiche.prototype.add = function(objectData){
|
|||
});
|
||||
|
||||
|
||||
/* (2) On sélectionne la valeur dans le select (manuellement) de la PROFESSION */
|
||||
/* {6} On sélectionne la valeur dans le select (manuellement) de la PROFESSION */
|
||||
var selectedOption = $('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="job"]>option[value="'+objectData.job+'"]');
|
||||
if( selectedOption != null )
|
||||
selectedOption.setAttribute('selected', 'selected');
|
||||
|
||||
/* (3) On sélectionne la valeur dans le select (manuellement) des ETUDES */
|
||||
/* {7} On sélectionne la valeur dans le select (manuellement) des ETUDES */
|
||||
selectedOption = $('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="studies"]>option[value="'+objectData.studies+'"]');
|
||||
if( selectedOption != null )
|
||||
selectedOption.setAttribute('selected', 'selected');
|
||||
|
||||
|
||||
/* (4) On sélectionna la valeur des boutons <radio> pour le SEXE */
|
||||
/* {8} On sélectionne la valeur dans le select (manuellement) de l'AGE */
|
||||
selectedOption = $('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="age"]>option[value="'+objectData.age+'"]');
|
||||
if( selectedOption != null )
|
||||
selectedOption.setAttribute('selected', 'selected');
|
||||
|
||||
|
||||
/* {9} On sélectionna la valeur des boutons <radio> pour le SEXE */
|
||||
var sexeCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]');
|
||||
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');
|
||||
|
||||
|
||||
/* (5) On sélectionna la valeur des boutons <radio> pour la SITUATION FAMILIALE */
|
||||
/* {10} On sélectionna la valeur des boutons <radio> pour la SITUATION FAMILIALE */
|
||||
var famsitCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="famsit"]');
|
||||
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');
|
||||
|
||||
|
||||
/* (6) On sélectionna la valeur des boutons <radio> pour le TYPE DE RELATION */
|
||||
/* {11} On sélectionna la valeur des boutons <radio> pour le TYPE DE RELATION */
|
||||
var reltypeCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="reltype"]');
|
||||
for( var i = 0 ; i < reltypeCreated.length && i < objectData.reltype.length ; i++ )
|
||||
if( objectData.reltype[i].status ) reltypeCreated[i].setAttribute('checked', 'checked');
|
||||
else reltypeCreated[i].removeAttribute('checked');
|
||||
|
||||
|
||||
/* (7) On sélectionna la valeur des boutons <radio> pour la LOCATION */
|
||||
/* {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');
|
||||
|
||||
|
||||
/* (8) On sélectionna la valeur des boutons <radio> pour le CONTEXTE DE RENCONTRE */
|
||||
/* {13} On sélectionna la valeur des boutons <radio> pour le CONTEXTE DE RENCONTRE */
|
||||
var contextCreated = $$('article.fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="context"]');
|
||||
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');
|
||||
else contextCreated[i].removeAttribute('checked');
|
||||
|
||||
|
||||
/* (9) On sélectionna la valeur des boutons <radio> pour les FREQUENCES */
|
||||
/* {14} On sélectionna la valeur des boutons <radio> pour les FREQUENCES */
|
||||
for( var f = 0 ; f < objectData.freq.length ; f++ ){
|
||||
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++ )
|
||||
|
@ -259,7 +280,7 @@ inputPhoneFiche.prototype.add = function(objectData){
|
|||
else freqCreated[i].removeAttribute('checked');
|
||||
}
|
||||
|
||||
/* (10) On sélectionna la valeur des boutons <radio> pour les CONNECTIONS */
|
||||
/* {15} On sélectionna la valeur des boutons <radio> pour les CONNECTIONS */
|
||||
for( var c = 0 ; c < objectData.connect.length ;c++ ){
|
||||
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++ )
|
||||
|
@ -291,21 +312,13 @@ inputPhoneFiche.prototype.storageToFields = function(){
|
|||
// On réinitialise le HTML
|
||||
this.container.innerHTML = '';
|
||||
|
||||
// On récupère les UIDS
|
||||
var UIDs = [];
|
||||
//
|
||||
for( var key in ficheData ){
|
||||
var uid = ficheData[key].uid;
|
||||
|
||||
if( uid == this.selected )
|
||||
for( var key in ficheData )
|
||||
if( ficheData[key].uid == this.selected )
|
||||
this.add(ficheData[key]);
|
||||
|
||||
UIDs.push(uid);
|
||||
}
|
||||
|
||||
|
||||
// {4} On met à jour la navigation //
|
||||
this.updateNavBar(UIDs);
|
||||
this.updateNavBar();
|
||||
|
||||
};
|
||||
|
||||
|
@ -324,33 +337,167 @@ inputPhoneFiche.prototype.storageToFields = function(){
|
|||
inputPhoneFiche.prototype.sync = function(){
|
||||
console.log('FICHE: SYNC');
|
||||
|
||||
/* (1) On récupère les clés de tous les CONTACTS */
|
||||
var contactUIDs = lsi.keys('contacts');
|
||||
/* (1) Mise à jour en fonction des contacts APRÈS IMPORT
|
||||
---------------------------------------------------------*/
|
||||
/* (1) On récupère tous les CONTACTS */
|
||||
var contacts = lsi.export('contacts');
|
||||
var addedFicheUids = []; // Contiendra les uids des fiches qui seront crées
|
||||
|
||||
/* (2) Pour chaque CONTACT, on met à jour/crée la MINI fiche associée */
|
||||
for( var i = 0 ; i < contactUIDs.length && i < 10; i++ ){
|
||||
/* (2) Pour chaque CONTACT, on met à jour/crée la FICHE associée, si dans le TOP 10 des APPELS ou des SMS */
|
||||
for( var uid in contacts ){
|
||||
|
||||
/* (3) On récupère les informations du CONTACT */
|
||||
var contactData = lsi.get('contacts', contactUIDs[i]);
|
||||
var inCallTop10 = false;
|
||||
|
||||
/* (4) On récupère les informations de la MINI (si elle existe) */
|
||||
var ficheData = lsi.get('fiches', contactUIDs[i]);
|
||||
/* (3) Indice de 0 à 9 si dans le TOP 10 des APPELS */
|
||||
if( contacts[uid].call > -1 ){
|
||||
// On calcule le rang de la fiche en fonction du classement
|
||||
var ficheIndex = contacts[uid].call;
|
||||
addedFicheUids.push(ficheIndex);
|
||||
|
||||
// On récupère les informations de la FICHE (si elle existe) */
|
||||
var ficheData = lsi.get('fiches', ficheIndex);
|
||||
|
||||
// Si la fiche n'existe pas, on la crée avec les valeurs par défaut
|
||||
if( ficheData == null )
|
||||
ficheData = this.defaultData;
|
||||
|
||||
// On met à jour la fiche ET on l'enregistre
|
||||
ficheData.uid = ficheIndex;
|
||||
ficheData.contact = parseInt(uid);
|
||||
lsi.set('fiches', ficheIndex, ficheData);
|
||||
}
|
||||
|
||||
|
||||
/* (5) Si la FICHE n'exise pas, on la crée avec les valeurs par défaut */
|
||||
if( ficheData == null )
|
||||
ficheData = this.defaultData;
|
||||
/* (4) Indice de 10 à 19 si dans le TOP 10 des SMS */
|
||||
if( contacts[uid].sms > -1 ){
|
||||
// On calcule le rang de la fiche en fonction du classement
|
||||
var ficheIndex = 10+contacts[uid].sms;
|
||||
addedFicheUids.push(ficheIndex);
|
||||
|
||||
// On récupère les informations de la FICHE (si elle existe) */
|
||||
var ficheData = lsi.get('fiches', ficheIndex);
|
||||
|
||||
// Si la fiche n'existe pas, on la crée avec les valeurs par défaut
|
||||
if( ficheData == null )
|
||||
ficheData = this.defaultData;
|
||||
|
||||
// On met à jour la fiche ET on l'enregistre
|
||||
ficheData.uid = ficheIndex;
|
||||
ficheData.contact = parseInt(uid);
|
||||
lsi.set('fiches', ficheIndex, ficheData);
|
||||
|
||||
|
||||
/* (6) On met à jour la fiche */
|
||||
ficheData.uid = contactData.uid;
|
||||
ficheData.firstname = contactData.firstname;
|
||||
ficheData.lastname = contactData.lastname;
|
||||
ficheData.username = contactData.username;
|
||||
}
|
||||
|
||||
|
||||
/* (7) On enregistre les modification */
|
||||
lsi.set('fiches', contactUIDs[i], ficheData);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* (2) Mise à jour en fonction des contacts APRÈS SAISIE MANUELLE
|
||||
---------------------------------------------------------*/
|
||||
// Si moins de 10+10 contacts crées, on les complètes en fonction des contacts séquentiellement
|
||||
if( addedFicheUids.length < 20 ){
|
||||
|
||||
/* (1) Pour chaque CONTACT, on met à jour/crée la FICHE associée*/
|
||||
for( var uid in contacts ){
|
||||
|
||||
/* (2) On cherche un uid de fiche non existant dans l'intervalle 0-19 */
|
||||
var ficheUid = 0;
|
||||
while( addedFicheUids.indexOf(ficheUid) > -1 && ficheUid < 20 )
|
||||
ficheUid++;
|
||||
// On enregistre le nouvel UID dans les uid crées
|
||||
addedFicheUids.push(ficheUid);
|
||||
|
||||
/* (3) On récupère les informations de la FICHE (si elle existe) */
|
||||
var ficheData = lsi.get('fiches', ficheUid);
|
||||
|
||||
// Si la fiche n'existe pas, on la crée avec les valeurs par défaut
|
||||
if( ficheData == null )
|
||||
ficheData = this.defaultData;
|
||||
|
||||
/* (4) On met à jour la fiche ET on l'enregistre */
|
||||
ficheData.uid = ficheUid;
|
||||
ficheData.contact = uid;
|
||||
lsi.set('fiches', ficheUid, ficheData);
|
||||
|
||||
|
||||
/* (5) Si on a déja crée 10+10 fiches, on arrête */
|
||||
if( addedFicheUids.length >= 20 )
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* (3) Mise à jour en fonction des MINI fiches
|
||||
---------------------------------------------------------*/
|
||||
/* (1) On récupère les valeurs des MINI fiches et des FICHES */
|
||||
var ficheData = lsi.export('fiches');
|
||||
|
||||
|
||||
/* (2) Pour chaque champ, on synchronise les MINI fiches avec les FICHES associées */
|
||||
for( var key in ficheData ){
|
||||
miniData = lsi.get('mini-fiches', ficheData[key].contact);
|
||||
|
||||
var ficheModifiedLast = ficheData[key].timestamp >= miniData.timestamp;
|
||||
|
||||
/* (3) Si la FICHE a été modifiée en dernier, on utilise ses données */
|
||||
if( ficheModifiedLast ){
|
||||
miniData.sexe = ficheData[key].sexe;
|
||||
miniData.age = ficheData[key].age;
|
||||
miniData.studies = ficheData[key].studies;
|
||||
miniData.loc = ficheData[key].loc;
|
||||
miniData.reltype = ficheData[key].reltype;
|
||||
miniData.reltypeSpecial = ficheData[key].reltypeSpecial;
|
||||
|
||||
/* (4) Sinon, on utilise les données de la MINI */
|
||||
}else{
|
||||
ficheData[key].sexe = miniData.sexe;
|
||||
ficheData[key].age = miniData.age;
|
||||
ficheData[key].studies = miniData.studies;
|
||||
ficheData[key].loc = miniData.loc;
|
||||
ficheData[key].reltype = miniData.reltype;
|
||||
ficheData[key].reltypeSpecial = miniData.reltypeSpecial;
|
||||
}
|
||||
|
||||
/* (5) On enregistre les modifications */
|
||||
lsi.set('mini-fiches', ficheData[key].contact, miniData);
|
||||
lsi.set('fiches', key, ficheData[key]);
|
||||
}
|
||||
|
||||
|
||||
/* (4) Mise à jour des fiches dupliquées entre le top 10 des APPELS et celui des SMS
|
||||
---------------------------------------------------------*/
|
||||
for( var key in ficheData ){
|
||||
/* (1) On récupère le contact associé */
|
||||
var associatedContact = lsi.get('contacts', ficheData[key].contact);
|
||||
|
||||
// Si erreur, on passe au suivant
|
||||
if( associatedContact == null )
|
||||
continue;
|
||||
|
||||
/* (2) Si la fiche n'est pas dans les 2 top 10 (APPELS et SMS) */
|
||||
if( associatedContact.sms == -1 || associatedContact.call == -1 )
|
||||
continue; // On passe au suivant
|
||||
|
||||
|
||||
/* (3) On récupère l'autre fiche (clone) */
|
||||
var inCall = parseInt(key) < 10; // Si on est dans le top 10 des APPELS, sinon dans celui des SMS
|
||||
var cloneIndex = inCall ? 10+associatedContact.sms : associatedContact.call; // Contient l'index du clone dans l'autre top (APPELS ou SMS)
|
||||
|
||||
var clone = ficheData[cloneIndex];
|
||||
|
||||
|
||||
/* (4) Si le clone a été modifié en dernier, on ne fait rien */
|
||||
if( clone.timestamp >= ficheData[key].timestamp )
|
||||
continue;
|
||||
|
||||
/* (5) On copie les données de la FICHE dans le clone (cas ou la fiche est modifiée en dernier) */
|
||||
var obj = ficheData[key];
|
||||
obj.uid = clone.uid;
|
||||
lsi.set('fiches', clone.uid, obj);
|
||||
|
||||
}
|
||||
|
||||
|
@ -366,10 +513,10 @@ inputPhoneFiche.prototype.sync = function(){
|
|||
=========================================================*/
|
||||
inputPhoneFiche.prototype.nav = function(element){
|
||||
/* (1) On vérifie que l'élément contient un nombre et existe */
|
||||
if( typeof element == 'undefined' )
|
||||
if( element == null )
|
||||
return false;
|
||||
|
||||
if( isNaN(element.innerHTML) )
|
||||
if( element.getData('n') === false || isNaN(element.getData('n')) || element.parentNode.id != 'nav-fiche' )
|
||||
return false;
|
||||
|
||||
/* (2) On désactive tous les éléments actifs */
|
||||
|
@ -379,7 +526,7 @@ inputPhoneFiche.prototype.nav = function(element){
|
|||
|
||||
/* (3) On active l'élément courant */
|
||||
element.addClass('active');
|
||||
this.selected = parseInt(element.innerHTML) - 1;
|
||||
this.selected = parseInt(element.getData('n'));
|
||||
|
||||
};
|
||||
|
||||
|
@ -391,32 +538,53 @@ inputPhoneFiche.prototype.nav = function(element){
|
|||
|
||||
/* [7] Mise à jour de la navigation
|
||||
=========================================================*/
|
||||
inputPhoneFiche.prototype.updateNavBar = function(uid_list){
|
||||
/* (1) On vide la nav bar */
|
||||
this.nav_container.innerHTML = '';
|
||||
inputPhoneFiche.prototype.updateNavBar = function(){
|
||||
var ficheData = lsi.export('fiches');
|
||||
var len = lsi.keys('fiches').length;
|
||||
|
||||
/* (2) On la re-remplit avec toutes les données */
|
||||
for( var i = 0 ; i < uid_list.length ; i++ ){
|
||||
// On rajoute 1 pour la lisibilité
|
||||
var realIndex = parseInt(uid_list[i]) + 1;
|
||||
|
||||
this.nav_container.innerHTML += '<span>'+realIndex+'</span>';
|
||||
/* (1) On vérifie si la barre de navigation est à jour */
|
||||
var navBarUpToDate = $$('#nav-fiche [data-n]').length == len;
|
||||
|
||||
|
||||
/* (2) On vide et remplit la barre de nav, si elle n'est pas à jour */
|
||||
if( !navBarUpToDate ){
|
||||
this.nav_container.innerHTML = '<span>APPELS</span>';
|
||||
|
||||
for( var i = 0 ; i < len ; i++ )
|
||||
// Si fin du top 10 des APPELS, on met un espace et un border-right
|
||||
if( i == 9 )
|
||||
this.nav_container.innerHTML += '<span data-n="'+i+'" class="lc">'+(i%10 + 1)+'</span> ';
|
||||
|
||||
// Si début du top 10 des SMS, on met le label 'SMS' et un border-left
|
||||
else if( i == 10 ){
|
||||
this.nav_container.innerHTML += '<span class="fc">SMS</span>';
|
||||
this.nav_container.innerHTML += '<span data-n="'+i+'">'+(i%10 + 1)+'</span>';
|
||||
|
||||
// Sinon, on ajoute juste le bouton
|
||||
}else
|
||||
this.nav_container.innerHTML += '<span data-n="'+i+'">'+(i%10 + 1)+'</span>';
|
||||
}
|
||||
|
||||
/* (3) On montre les FICHES qui sont correctes */
|
||||
var ficheData = lsi.export('fiches');
|
||||
for( var key in ficheData ){
|
||||
|
||||
// Si la MINI fiche est valide
|
||||
if( ficheData[key].valid === true ) this.nav_container.children[ficheData[key].uid].addClass('done');
|
||||
var currentElement = $('#nav-fiche [data-n="'+ficheData[key].uid+'"]');
|
||||
|
||||
if( currentElement == null )
|
||||
continue;
|
||||
|
||||
// Si on ne trouve pas le bouton
|
||||
|
||||
// Si la FICHE est valide
|
||||
if( ficheData[key].valid === true ) currentElement.addClass('done');
|
||||
// Si elle est invalide
|
||||
else this.nav_container.children[ficheData[key].uid].remClass('done');
|
||||
else currentElement.remClass('done');
|
||||
|
||||
}
|
||||
|
||||
/* (4) On séléctionne par défaut le dernier sélectionné */
|
||||
this.nav( this.nav_container.children[this.selected] );
|
||||
this.nav( $('#nav-fiche [data-n="'+this.selected+'"]') );
|
||||
};
|
||||
|
||||
|
||||
|
@ -427,29 +595,29 @@ inputPhoneFiche.prototype.updateNavBar = function(uid_list){
|
|||
inputPhoneFiche.prototype.check = function(ficheData){
|
||||
|
||||
// {1} Vérification des <input> //
|
||||
// 1. L'age est un nombre
|
||||
if( isNaN(parseInt(ficheData.age)) )
|
||||
return false;
|
||||
// 2. La ville a au moins 2 caractères
|
||||
// 1. La ville a au moins 2 caractères
|
||||
if( ficheData.city.length < 2 )
|
||||
return false;
|
||||
// 3. La durée de la relation en mois est vide ou un nombre
|
||||
// 2. La durée de la relation en mois est vide ou un nombre
|
||||
if( isNaN(parseInt(ficheData.duration[0])) && ficheData.duration[0].length > 0 )
|
||||
return false;
|
||||
// 4. La durée de la relation en année est vide ou un nombre
|
||||
// 3. La durée de la relation en année est vide ou un nombre
|
||||
if( isNaN(parseInt(ficheData.duration[1])) && ficheData.duration[1].length > 0 )
|
||||
return false;
|
||||
// 5. Pour la durée de la relation, au moins un des 2 n'est pas vide
|
||||
// 4. Pour la durée de la relation, au moins un des 2 n'est pas vide
|
||||
if( ficheData.duration[0].length+ficheData.duration[1].length == 0 )
|
||||
return false;
|
||||
|
||||
// {2} Vérification des <select> //
|
||||
// 6. Le <select> pour la profession n'est pas indéfini
|
||||
// 5. Le <select> pour la profession n'est pas indéfini
|
||||
if( ficheData.job == '.' )
|
||||
return false;
|
||||
// 7. Le <select> pour les études n'est pas indéfini
|
||||
// 6. Le <select> pour les études n'est pas indéfini
|
||||
if( ficheData.studies == '.' )
|
||||
return false;
|
||||
// 7. 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
|
||||
|
@ -471,7 +639,6 @@ inputPhoneFiche.prototype.check = function(ficheData){
|
|||
for( var i = 0 ; i < ficheData.freq.length ; i++ )
|
||||
if( !checkRadioValue( ficheData.freq[i] ) )
|
||||
return false;
|
||||
|
||||
// 14. 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] ) )
|
||||
|
@ -525,7 +692,7 @@ inputPhoneFiche.prototype.attach = function(handler){
|
|||
// 1. On gère la navigation
|
||||
ptr.nav(e.target);
|
||||
// 2. On gere le chargement dynamique
|
||||
ptr.handler();
|
||||
ptr.handler(e.target);
|
||||
}, false);
|
||||
|
||||
};
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
function inputPhoneMatrice(a){this.container=a}inputPhoneMatrice.prototype={container:this.container};
|
||||
inputPhoneMatrice.prototype.fieldsToStorage=function(){console.log("MATRICE: FIELDS TO STORAGE");var a=(new FormDeflater(this.container,["input"],["data-name"])).deflate();crc32(JSON.stringify(a));var d={},b;for(b in a)if(a[b]instanceof Array)for(var e in a[b])!0===a[b][e].status&&(null==d[b]&&(d[b]=[]),d[b].push(parseInt(a[b][e].value)));else!0===a[b].status&&(null==d[b]&&(d[b]=[]),d[b].push(parseInt(a[b].value)));lsi.set("matrice",0,d)};
|
||||
inputPhoneMatrice.prototype.storageToFields=function(){console.log("MATRICE: STORAGE TO FIELDS");var a=lsi["export"]("fiches"),d=lsi.get("matrice",0),b=lsi["export"]("contacts"),e=[],c;for(c in a)-1==e.indexOf(a[c].contact)&&e.push(a[c].contact);a="<table class='line'>";for(c=0;c<e.length;c++){var f=b[c],a=a+"<tr>";0<c?(a+='<td style="text-align: right;">',a+=f.firstname+" "+f.lastname,a+=0<f.username.length?" ("+f.username+")":"",a+="</td>"):a+="<td></td>";for(var h=0;h<e.length;h++)if(h<e.length-
|
||||
1){var g=b[h];0==c?(a+="<td>",a+='<span style="writing-mode: vertical-lr; text-align: right;">',a+=g.firstname+" "+g.lastname,a+=0<g.username.length?" ("+g.username+")":"",a+="</span>"):h<c?(a+="<td>",a+="<input type='checkbox' name='matrice_"+f.uid+"_"+g.uid+"' data-name='"+f.uid+"' value='"+g.uid+"' id='matrice_"+f.uid+"_"+g.uid+"'",null!=d[c]&&-1<d[c].indexOf(h)&&(a+=" checked"),a+=" >",a+="<label for='matrice_"+f.uid+"_"+g.uid+"'></label>"):a+="<td class='hidden'>";a+="</td>"}a+="</tr>"}this.container.innerHTML=
|
||||
a+"</table>"};inputPhoneMatrice.prototype.attach=function(){console.log("MATRICE: ATTACH");lsi.createDataset("matrice");this.storageToFields();var a=this;this.container.addEventListener("click",function(d){a.fieldsToStorage();a.storageToFields()},!1)};
|
|
@ -0,0 +1,176 @@
|
|||
/* [0] Constructeur -> définit le conteneur et le bouton d'ajout
|
||||
=========================================================*/
|
||||
function inputPhoneMatrice(container){
|
||||
this.container = container;
|
||||
}
|
||||
|
||||
/* [1] Attributs
|
||||
=========================================================*/
|
||||
inputPhoneMatrice.prototype = {
|
||||
container: this.container // Conteneur de la matrice
|
||||
};
|
||||
|
||||
|
||||
/* [2] Gestion de l'enregistrement de la matrice
|
||||
=========================================================*/
|
||||
inputPhoneMatrice.prototype.fieldsToStorage = function(){
|
||||
console.log('MATRICE: FIELDS TO STORAGE');
|
||||
|
||||
|
||||
// {1} On initialise notre deflater pour récupérer les valeurs //
|
||||
var deflater = new FormDeflater(this.container, ['input'], ['data-name']);
|
||||
|
||||
// {2} On extrait les données //
|
||||
var deflated = deflater.deflate();
|
||||
// On crée le hash
|
||||
var deflatedHash = crc32(JSON.stringify(deflated));
|
||||
|
||||
|
||||
// console.log(deflated);
|
||||
|
||||
/* (3) On crée l'objet et on le remplit avec les relations */
|
||||
var obj = {};
|
||||
|
||||
for( var i in deflated )
|
||||
|
||||
// {1} Si c'est un tableau de sujets //
|
||||
if( deflated[i] instanceof Array ){
|
||||
|
||||
// Pour chacune des différentes relations, on ajoute si TRUE
|
||||
for( var a in deflated[i] )
|
||||
if( deflated[i][a].status === true ){
|
||||
if( obj[i] == null )
|
||||
obj[i] = [];
|
||||
|
||||
obj[i].push( parseInt(deflated[i][a].value) );
|
||||
}
|
||||
|
||||
// {2} Si il n'y a qu'un sujet //
|
||||
}else if( deflated[i].status === true ){
|
||||
if( obj[i] == null )
|
||||
obj[i] = [];
|
||||
|
||||
obj[i].push( parseInt(deflated[i].value) );
|
||||
}
|
||||
|
||||
lsi.set( 'matrice', 0, obj );
|
||||
// Objet de la forme
|
||||
//
|
||||
// idA: [idV, idW], # A connait V et W (et réciproquement)
|
||||
// idB: [idX, idY], # B connait X et Y (et réciproquement)
|
||||
// ...
|
||||
//
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* [4] Gestion de l'affichage depuis le 'localStorage'
|
||||
=========================================================*/
|
||||
inputPhoneMatrice.prototype.storageToFields = function(){
|
||||
console.log('MATRICE: STORAGE TO FIELDS');
|
||||
|
||||
/* (1) On récupère la liste des contacts à mettre dans la matrice */
|
||||
// On récupère les fiches
|
||||
var ficheData = lsi.export('fiches');
|
||||
|
||||
// On récupère les données de la matrice
|
||||
var matriceData = lsi.get('matrice', 0);
|
||||
|
||||
// On récupère les contacts pour afficher les noms/prénoms
|
||||
var contactData = lsi.export('contacts');
|
||||
|
||||
// Contiendra les UID des contacts à mettre dans la matrice
|
||||
var contacts = [];
|
||||
|
||||
// Pour chaque fiche, on ajoute l'uid du contact s'il n'est pas déja ajouté
|
||||
for( var f in ficheData )
|
||||
if( contacts.indexOf( ficheData[f].contact ) == -1 )
|
||||
contacts.push( ficheData[f].contact );
|
||||
|
||||
|
||||
/* (2) On construit le HTML de la matrice */
|
||||
// Contiendra le HTML
|
||||
var matrice_html = "<table class='line'>";
|
||||
|
||||
// {1} Pour chaque ligne //
|
||||
for( var A = 0 ; A < contacts.length ; A++ ){
|
||||
var conA = contactData[A];
|
||||
|
||||
|
||||
matrice_html += '<tr>';
|
||||
|
||||
if( A > 0 ){ // Noms sur la première ligne (abscisses)
|
||||
matrice_html += '<td style="text-align: right;">';
|
||||
matrice_html += conA.firstname+' '+conA.lastname
|
||||
matrice_html += (conA.username.length>0) ? ' ('+conA.username+')' : '';
|
||||
matrice_html += '</td>';
|
||||
}else // Sinon,
|
||||
matrice_html += '<td></td>';
|
||||
|
||||
// {2} Pour chaque case //
|
||||
for( var B = 0 ; B < contacts.length ; B++ ){ if( B < contacts.length-1 ){
|
||||
var conB = contactData[B];
|
||||
|
||||
// {3} Première colonne -> Intitulé des ordonnées //
|
||||
if( A == 0 ){
|
||||
matrice_html += '<td>';
|
||||
matrice_html += '<span style="writing-mode: vertical-lr; text-align: right;">';
|
||||
matrice_html += conB.firstname+' '+conB.lastname;
|
||||
matrice_html += (conB.username.length>0) ? ' ('+conB.username+')' : '';
|
||||
matrice_html += '</span>';
|
||||
|
||||
// {4} Valeurs des relations (boutons) //
|
||||
}else if( B < A ){
|
||||
matrice_html += "<td>";
|
||||
matrice_html += "<input type='checkbox' name='matrice_"+conA.uid+"_"+conB.uid+"' data-name='"+conA.uid+"' value='"+conB.uid+"' id='matrice_"+conA.uid+"_"+conB.uid+"'";
|
||||
// Si la relation existe, on active le bouton
|
||||
if( matriceData[A] != null && matriceData[A].indexOf(B) > -1 )
|
||||
matrice_html += " checked";
|
||||
matrice_html += " >";
|
||||
matrice_html += "<label for='matrice_"+conA.uid+"_"+conB.uid+"'></label>";
|
||||
|
||||
// {5} Cases vides (moitié supérieure droite) //
|
||||
}else
|
||||
matrice_html += "<td class='hidden'>";
|
||||
|
||||
matrice_html += '</td>';
|
||||
}}
|
||||
|
||||
matrice_html += '</tr>';
|
||||
}
|
||||
matrice_html += '</table>';
|
||||
|
||||
|
||||
/* (3) On affiche la matrice */
|
||||
this.container.innerHTML = matrice_html;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* [9] Point d'amorçage de la gestion des contacts
|
||||
=========================================================*/
|
||||
inputPhoneMatrice.prototype.attach = function(){
|
||||
console.log('MATRICE: ATTACH');
|
||||
|
||||
/* (1) On initialise le jeu de données */
|
||||
lsi.createDataset('matrice');
|
||||
|
||||
/* (2) On charge les mini fiches depuis la mémoire ('localStorage') */
|
||||
this.storageToFields();
|
||||
|
||||
/* (3) On enregistre la matrice à chaque modification */
|
||||
var ptr = this;
|
||||
this.container.addEventListener('click', function(e){
|
||||
ptr.fieldsToStorage();
|
||||
ptr.storageToFields();
|
||||
}, false);
|
||||
};
|
|
@ -1,10 +1,10 @@
|
|||
function inputPhoneMini(a,b){this.container=a;this.nav_container=b}inputPhoneMini.prototype={container:this.container,nav_container:this.nav_container,selected:0,handler:null,defaultData:{firstname:"",lastname:"",username:"",sexe:[{status:!0},{status:!1}],age:"",job:".",loc:[{status:!0},{status:!1},{status:!1},{status:!1}]}};
|
||||
inputPhoneMini.prototype.fieldsToStorage=function(){console.log("MINI FICHE: FIELDS TO STORAGE");for(var a=$$("article.mini-relation-panel .mini-fiche-relation"),b=0;b<a.length;b++){var c=(new FormDeflater(a[b],["input","select"],["data-name"])).deflate();console.log(c);var d=lsi.get("mini-fiches","form"+c.uid.value);!1===d&&(d.username="inconnu",d.firstname="inconnu",d.lastname="inconnu");c={uid:c.uid.value,firstname:d.firstname,lastname:d.lastname,username:d.username,sexe:c.sexe,age:c.age.value,
|
||||
job:c.job.value,loc:c.loc};c.valid=this.check(c);lsi.set("mini-fiches","form"+c.uid,c)}};
|
||||
inputPhoneMini.prototype.add=function(a){console.log("MINI FICHE: ADD");if(null==a||null==a.uid)return!1;a.firstname=null!=a.firstname?a.firstname:this.defaultData.firstname;a.lastname=null!=a.lastname?a.lastname:this.defaultData.lastname;a.username=null!=a.username?a.username:this.defaultData.username;a.age=null!=a.age?a.age:this.defaultData.age;a.sexe=null!=a.sexe?a.sexe:this.defaultData.sexe;a.job=null!=a.job?a.job:this.defaultData.job;a.loc=null!=a.loc?a.loc:this.defaultData.loc;this.container.innerHTML+=
|
||||
miniFicheBuilder.build({firstname:a.firstname,lastname:a.lastname,username:a.username,uid:a.uid,age:a.age,job:a.job});var b=$('article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>span>select[data-name="job"]>option[value="'+a.job+'"]');null!=b&&b.setAttribute("selected","selected");for(var c=$$('article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]'),b=0;b<c.length&&b<a.sexe.length;b++)a.sexe[b].status?c[b].setAttribute("checked",
|
||||
"checked"):c[b].removeAttribute("checked");c=$$('article.mini-fiche-relation input[data-name="uid"][value="'+a.uid+'"] ~ h5>input[type="radio"][data-name="loc"]');for(b=0;b<c.length&&b<a.loc.length;b++)a.loc[b].status?c[b].setAttribute("checked","checked"):c[b].removeAttribute("checked")};inputPhoneMini.prototype.storageToFields=function(){console.log("MINI FICHE: STORAGE TO FIELDS");var a=lsi["export"]("mini-fiches");this.container.innerHTML="";this.add(a["form"+this.selected]);this.updateNavBar()};
|
||||
inputPhoneMini.prototype.sync=function(){console.log("MINI FICHE: SYNC");var a=lsi["export"]("contacts"),b;for(b in a){var c=lsi.get("mini-fiches",b);null==c&&(c=this.defaultData,c.valid=!1);c.uid=a[b].uid;c.firstname=a[b].firstname;c.lastname=a[b].lastname;c.username=a[b].username;lsi.set("mini-fiches",b,c)}};
|
||||
inputPhoneMini.prototype.nav=function(a){if("undefined"==typeof a||isNaN(a.innerHTML))return!1;for(var b=$$("#nav-mini > span.active"),c=0;c<b.length;c++)b[c].remClass("active");a.addClass("active");this.selected=parseInt(a.innerHTML)-1};
|
||||
inputPhoneMini.prototype.updateNavBar=function(){var a=lsi["export"]("mini-fiches"),a=Object.keys(a).length;if(this.nav_container.children.length!=a){this.nav_container.innerHTML="";for(var b=0;b<a;b++)this.nav_container.innerHTML+="<span></span>"}var a=lsi["export"]("mini-fiches"),c;for(c in a)b=this.nav_container.children[a[c].uid],b.innerHTML=a[c].uid+1,!0===a[c].valid?b.addClass("done"):b.remClass("done");this.nav(this.nav_container.children[this.selected])};
|
||||
inputPhoneMini.prototype.check=function(a){return!isNaN(parseInt(a.age))&&checkRadioValue(a.sexe)&&"."!=a.job&&checkRadioValue(a.loc)?!0:!1};inputPhoneMini.prototype.attach=function(a){console.log("MINI FICHE: ATTACH");lsi.createDataset("mini-fiches");this.storageToFields();this.handler=a;var b=this,b=this;this.nav_container.addEventListener("click",function(a){b.nav(a.target);b.handler(a.target)},!1)};
|
||||
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)}}};
|
||||
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)};
|
||||
|
|
|
@ -9,17 +9,19 @@ function inputPhoneMini(container, navContainer){
|
|||
=========================================================*/
|
||||
inputPhoneMini.prototype = {
|
||||
container: this.container, // Conteneur des mini fiches relation
|
||||
nav_container: this.nav_container, // Conteneur de la navigation entre les fiches
|
||||
nav_container: this.nav_container, // Conteneur de la navigation entre les MINI fiches
|
||||
selected: 0, // UID de la MINI fiche sélectionnée
|
||||
handler: null, // Fonction pour l'enregistrement et la synchronisation des données
|
||||
defaultData: { // Valeur par défaut
|
||||
firstname: '',
|
||||
lastname: '',
|
||||
username: '',
|
||||
sexe: [{status:true}, {status:false}],
|
||||
age: '',
|
||||
job: '.',
|
||||
loc: [{status:true}, {status:false}, {status:false}, {status:false}]
|
||||
sexe: [defTrue, defFalse],
|
||||
age: '.',
|
||||
studies: '.',
|
||||
loc: [defTrue, defFalse, defFalse, defFalse],
|
||||
reltype: [ defTrue, defFalse, defFalse, defFalse, defFalse,
|
||||
defFalse, defFalse, defFalse, defFalse], // Choix 1 à 9
|
||||
reltypeSpecial: '',
|
||||
timestamp: 0,
|
||||
valid: false
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -37,40 +39,55 @@ inputPhoneMini.prototype.fieldsToStorage = function(){
|
|||
|
||||
// {3} On enregistre ce contact si le numéro n'est pas vide et soit pseudo/prénom/nom //
|
||||
var deflated = deflater.deflate();
|
||||
// On crée le hash
|
||||
var deflatedHash = crc32(JSON.stringify(deflated));
|
||||
|
||||
|
||||
console.log(deflated);
|
||||
// console.log(deflated);
|
||||
|
||||
|
||||
// {4} On récupère les données du LSI si elles existent //
|
||||
var existingData = lsi.get('mini-fiches', 'form'+deflated.uid.value);
|
||||
var existingData = lsi.get('mini-fiches', deflated.uid.value);
|
||||
|
||||
// Si n'existe pas, on initialise
|
||||
if( existingData === false ){
|
||||
existingData.username = 'inconnu';
|
||||
existingData.firstname = 'inconnu';
|
||||
existingData.lastname = 'inconnu';
|
||||
}
|
||||
// Si n'existe pas, on passe à la suivante
|
||||
if( existingData === false )
|
||||
continue;
|
||||
|
||||
|
||||
// {5} On récupère et met en forme les valeurs du deflater //
|
||||
// Si le hash est le même, on ne fait rien
|
||||
if( existingData.hash != null && existingData.hash == deflatedHash )
|
||||
return;
|
||||
|
||||
console.warn('> MINI UPDATE');
|
||||
|
||||
|
||||
var obj = {
|
||||
uid: deflated.uid.value,
|
||||
firstname: existingData.firstname,
|
||||
lastname: existingData.lastname,
|
||||
username: existingData.username,
|
||||
sexe: deflated.sexe, // [0] Homme, [1] Femme
|
||||
age: deflated.age.value,
|
||||
job: deflated.job.value,
|
||||
loc: deflated.loc // [0] Choix 1 -> [3] Choix 4
|
||||
uid: parseInt(deflated.uid.value),
|
||||
firstname: existingData.firstname,
|
||||
lastname: existingData.lastname,
|
||||
username: existingData.username,
|
||||
sexe: deflated.sexe, // [0] Homme, [1] Femme
|
||||
age: deflated.age.value,
|
||||
studies: deflated.studies.value,
|
||||
reltype: deflated.reltype, // [0] ...
|
||||
reltypeSpecial: deflated.reltypeSpecial.value,
|
||||
loc: deflated.loc, // [0] Choix 1 -> [3] Choix 4
|
||||
hash: deflatedHash
|
||||
};
|
||||
|
||||
/* (8) On vérifie la validité des données et on l'enregistre dans l'objet */
|
||||
obj.valid = this.check(obj);
|
||||
/* (8) On vérifie la validité des données et on l'enregistre dans l'objet avec la date de modification */
|
||||
obj.valid = this.check(obj);
|
||||
|
||||
// On met à jour la date de modification, si on a pas qu'@uid de différent
|
||||
if( diff(existingData, obj).length > 0 ){
|
||||
console.warn('> FICHE UPDATE');
|
||||
obj.timestamp = Date.now();
|
||||
}
|
||||
|
||||
|
||||
/* (9) On enregistre les données dans le 'localStorage' */
|
||||
lsi.set('mini-fiches', 'form'+obj.uid, obj);
|
||||
lsi.set('mini-fiches', obj.uid, obj);
|
||||
|
||||
}
|
||||
};
|
||||
|
@ -98,42 +115,61 @@ inputPhoneMini.prototype.add = function(objectData){
|
|||
return false;
|
||||
|
||||
/* (0) Gestion du formattage des valeur */
|
||||
objectData.firstname = (objectData.firstname != null) ? objectData.firstname : this.defaultData.firstname;
|
||||
objectData.lastname = (objectData.lastname != null) ? objectData.lastname : this.defaultData.lastname;
|
||||
objectData.username = (objectData.username != null) ? objectData.username : this.defaultData.username;
|
||||
objectData.age = (objectData.age != null) ? objectData.age : this.defaultData.age;
|
||||
objectData.sexe = (objectData.sexe != null) ? objectData.sexe : this.defaultData.sexe;
|
||||
objectData.job = (objectData.job != null) ? objectData.job : this.defaultData.job;
|
||||
objectData.loc = (objectData.loc != null) ? objectData.loc : this.defaultData.loc;
|
||||
objectData.age = (objectData.age != null) ? objectData.age : this.defaultData.age;
|
||||
objectData.sexe = (objectData.sexe != null) ? objectData.sexe : this.defaultData.sexe;
|
||||
objectData.studies = (objectData.studies != null) ? objectData.studies : this.defaultData.studies;
|
||||
objectData.reltype = (objectData.reltype != null) ? objectData.reltype : this.defaultData.reltype;
|
||||
objectData.reltypeSpecial = (objectData.reltypeSpecial != null) ? objectData.reltypeSpecial : this.defaultData.reltypeSpecial;
|
||||
objectData.loc = (objectData.loc != null) ? objectData.loc : this.defaultData.loc;
|
||||
|
||||
|
||||
// {1} Création physique //
|
||||
// {1} On récupère username/firstname/lastname du contact associé //
|
||||
var associatedContact = lsi.get('contacts', objectData.uid);
|
||||
|
||||
// Si on ne trouve pas le contact, on ne fais rien
|
||||
if( associatedContact === false )
|
||||
return false;
|
||||
|
||||
|
||||
// {2} Création physique //
|
||||
this.container.innerHTML += miniFicheBuilder.build({
|
||||
firstname: objectData.firstname,
|
||||
lastname: objectData.lastname,
|
||||
username: objectData.username,
|
||||
uid: objectData.uid,
|
||||
age: objectData.age,
|
||||
job: objectData.job
|
||||
firstname: associatedContact.firstname,
|
||||
lastname: associatedContact.lastname,
|
||||
username: (associatedContact.username.length==0) ? '' : '('+associatedContact.username+')',
|
||||
countcall: associatedContact.countcall,
|
||||
countsms: associatedContact.countsms,
|
||||
uid: objectData.uid,
|
||||
reltypespecial: objectData.reltypeSpecial
|
||||
});
|
||||
|
||||
|
||||
/* (2) On sélectionne la valeur dans le select (manuellement) de la PROFESSION */
|
||||
var selectedOption = $('article.mini-fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="job"]>option[value="'+objectData.job+'"]');
|
||||
/* {3} On sélectionne la valeur dans le select (manuellement) de la PROFESSION */
|
||||
var selectedOption = $('article.mini-fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="studies"]>option[value="'+objectData.studies+'"]');
|
||||
if( selectedOption != null )
|
||||
selectedOption.setAttribute('selected', 'selected');
|
||||
|
||||
/* (3) On sélectionna la valeur des boutons <radio> pour le SEXE */
|
||||
/* {4} On sélectionne la valeur dans le select (manuellement) de l'AGE */
|
||||
selectedOption = $('article.mini-fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>span>select[data-name="age"]>option[value="'+objectData.age+'"]');
|
||||
if( selectedOption != null )
|
||||
selectedOption.setAttribute('selected', 'selected');
|
||||
|
||||
/* {5} On sélectionna la valeur des boutons <radio> pour le SEXE */
|
||||
var sexeCreated = $$('article.mini-fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="sexe"]');
|
||||
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');
|
||||
|
||||
/* (4) On sélectionna la valeur des boutons <radio> pour la LOCATION */
|
||||
/* {6} On sélectionna la valeur des boutons <radio> pour le TYPE DE RELATION */
|
||||
var reltypeCreated = $$('article.mini-fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="reltype"]');
|
||||
for( var i = 0 ; i < reltypeCreated.length && i < objectData.reltype.length ; i++ )
|
||||
if( objectData.reltype[i].status ) reltypeCreated[i].setAttribute('checked', 'checked');
|
||||
else reltypeCreated[i].removeAttribute('checked');
|
||||
|
||||
/* {7} On sélectionna la valeur des boutons <radio> pour la LOCATION */
|
||||
var locCreated = $$('article.mini-fiche-relation input[data-name="uid"][value="'+objectData.uid+'"] ~ h5>input[type="radio"][data-name="loc"]');
|
||||
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');
|
||||
if( objectData.loc[i].status ) locCreated[i].setAttribute('checked', 'checked');
|
||||
else locCreated[i].removeAttribute('checked');
|
||||
|
||||
};
|
||||
|
||||
|
@ -152,13 +188,13 @@ inputPhoneMini.prototype.storageToFields = function(){
|
|||
console.log('MINI FICHE: STORAGE TO FIELDS');
|
||||
|
||||
// {1} Pour chaque contact du 'localStorage' //
|
||||
var miniData = lsi.export('mini-fiches');
|
||||
var miniData = lsi.get('mini-fiches', this.selected);
|
||||
|
||||
// On réinitialise le HTML
|
||||
this.container.innerHTML = '';
|
||||
|
||||
// {2} On affiche la MINI fiche sélectionnée //
|
||||
this.add(miniData['form'+this.selected]);
|
||||
this.add(miniData);
|
||||
|
||||
// {3} On met à jour la navigation //
|
||||
this.updateNavBar();
|
||||
|
@ -197,10 +233,7 @@ inputPhoneMini.prototype.sync = function(){
|
|||
}
|
||||
|
||||
/* (5) On met à jour la MINI fiche */
|
||||
miniData.uid = contactData[key].uid;
|
||||
miniData.firstname = contactData[key].firstname;
|
||||
miniData.lastname = contactData[key].lastname;
|
||||
miniData.username = contactData[key].username;
|
||||
miniData.uid = contactData[key].uid;
|
||||
|
||||
|
||||
/* (6) On enregistre les modification */
|
||||
|
@ -220,10 +253,10 @@ inputPhoneMini.prototype.sync = function(){
|
|||
=========================================================*/
|
||||
inputPhoneMini.prototype.nav = function(element){
|
||||
/* (1) On vérifie que l'élément contient un nombre et existe */
|
||||
if( typeof element == 'undefined' )
|
||||
if( element == null )
|
||||
return false;
|
||||
|
||||
if( isNaN(element.innerHTML) )
|
||||
if( element.getData('n') === false || isNaN(element.getData('n')) || element.parentNode.id != 'nav-mini' )
|
||||
return false;
|
||||
|
||||
/* (2) On désactive tous les éléments actifs */
|
||||
|
@ -233,7 +266,7 @@ inputPhoneMini.prototype.nav = function(element){
|
|||
|
||||
/* (3) On active l'élément courant */
|
||||
element.addClass('active');
|
||||
this.selected = parseInt(element.innerHTML) - 1;
|
||||
this.selected = parseInt(element.getData('n'));
|
||||
};
|
||||
|
||||
|
||||
|
@ -248,24 +281,30 @@ inputPhoneMini.prototype.updateNavBar = function(){
|
|||
var miniData = lsi.export('mini-fiches');
|
||||
var len = Object.keys(miniData).length;
|
||||
|
||||
/* (1) On vérifie si la barre de navigation est à jour */
|
||||
var navBarUpToDate = this.nav_container.children.length == len;
|
||||
|
||||
/* (1) On vide et remplit la barre de nav, si elle n'est pas à jour */
|
||||
/* (1) On vérifie si la barre de navigation est à jour */
|
||||
var navBarUpToDate = $$('#nav-mini [data-n]').length == len;
|
||||
|
||||
|
||||
/* (2) On vide et remplit la barre de nav, si elle n'est pas à jour */
|
||||
if( !navBarUpToDate ){
|
||||
this.nav_container.innerHTML = '';
|
||||
|
||||
for( var i = 0 ; i < len ; i++ )
|
||||
this.nav_container.innerHTML += '<span></span>';
|
||||
this.nav_container.innerHTML += '<span data-n="'+i+'">'+(i+1)+'</span>';
|
||||
}
|
||||
|
||||
/* (3) On montre les MINI fiches qui sont correctes dans la navbar */
|
||||
var miniData = lsi.export('mini-fiches');
|
||||
for( var key in miniData ){
|
||||
|
||||
var currentElement = this.nav_container.children[miniData[key].uid];
|
||||
var currentElement = $('#nav-mini [data-n="'+miniData[key].uid+'"]');
|
||||
|
||||
currentElement.innerHTML = miniData[key].uid+1;
|
||||
if( currentElement == null )
|
||||
continue;
|
||||
|
||||
// On remplit avec le numéro de la MINI fiche
|
||||
// currentElement.setAttribute('data-n', miniData[key].uid);
|
||||
// currentElement.innerHTML = miniData[key].uid + 1;
|
||||
|
||||
// Si la MINI fiche est valide
|
||||
if( miniData[key].valid === true ) currentElement.addClass('done');
|
||||
|
@ -277,7 +316,7 @@ inputPhoneMini.prototype.updateNavBar = function(){
|
|||
|
||||
|
||||
/* (4) On séléctionne par défaut la dernière MINI fiche sélectionnée */
|
||||
this.nav( this.nav_container.children[this.selected] );
|
||||
this.nav( $('#nav-mini [data-n="'+this.selected+'"]') );
|
||||
};
|
||||
|
||||
|
||||
|
@ -287,18 +326,24 @@ inputPhoneMini.prototype.updateNavBar = function(){
|
|||
=========================================================*/
|
||||
inputPhoneMini.prototype.check = function(miniData){
|
||||
|
||||
// 1. L'age est un nombre
|
||||
if( isNaN(parseInt(miniData.age)) )
|
||||
return false;
|
||||
// 2. Le sexe est défini
|
||||
// 1. Le sexe est défini
|
||||
if( !checkRadioValue(miniData.sexe) )
|
||||
return false;
|
||||
// 3. Le métier est défini
|
||||
if( miniData.job == '.' )
|
||||
// 2. Le métier est défini
|
||||
if( miniData.studies == '.' )
|
||||
return false;
|
||||
// 3. L'age est définie
|
||||
if( miniData.age == '.' )
|
||||
return false;
|
||||
// 4. La distance de localisation est définie
|
||||
if( !checkRadioValue(miniData.loc) )
|
||||
return false;
|
||||
// 5. Le TYPE DE RELATION a un et un seul choix
|
||||
if( !checkRadioValue(miniData.reltype) )
|
||||
return false;
|
||||
// 6. TYPE DE RELATION si autre est coché (indice 8), reltypeSpecial doit avoir au moins 2 caractère
|
||||
if( miniData.reltype[8].status && miniData.reltypeSpecial.length < 2 )
|
||||
return false;
|
||||
|
||||
|
||||
// Si aucune erreur, tout est ok
|
||||
|
@ -323,9 +368,8 @@ inputPhoneMini.prototype.attach = function(handler){
|
|||
/* (3) On attache la barre de navigation à une fonction */
|
||||
// On enregistre le handler
|
||||
this.handler = handler;
|
||||
var ptr = this;
|
||||
|
||||
/* (2) On attache l'évènement sur le bouton d'ajout de contact */
|
||||
/* (2) On attache l'évènement sur le conteneur de navigation */
|
||||
var ptr = this;
|
||||
this.nav_container.addEventListener('click', function(e){
|
||||
// 1. On gère la navigation
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
function inputPhoneSubject(a,b,c,d,e){this.number=a;this.username=b;this.firstname=c;this.lastname=d;this.store_button=e}inputPhoneSubject.prototype={store_button:this.store_button,number:this.number,username:this.username,firstname:this.firstname,lastname:this.lastname};
|
||||
inputPhoneSubject.prototype.fieldsToStorage=function(){console.log("SUBJECT: FIELDS TO STORAGE");var a=0<this.number.value.length,a=a&&0<this.username.value.length+this.firstname.value.length+this.lastname.value.length;if(!a)return!1;lsi.set("subject","form",{number:this.number.value,username:this.username.value,firstname:this.firstname.value,lastname:this.lastname.value})};
|
||||
inputPhoneSubject.prototype.storageToFields=function(){console.log("SUBJECT: STORAGE TO FIELDS");var a=lsi.get("subject","form");null!=a&&(this.number.value=a.number,this.username.value=a.username,this.firstname.value=a.firstname,this.lastname.value=a.lastname)};inputPhoneSubject.prototype.attach=function(){console.log("SUBJECT: ATTACH");lsi.createDataset("subject");var a=this;this.store_button.addEventListener("click",function(b){a.fieldsToStorage()},!1);this.storageToFields()};
|
||||
inputPhoneSubject.prototype.fieldsToStorage=function(){console.log("SUBJECT: FIELDS TO STORAGE");var a=0<this.number.value.length,a=a&&0<this.username.value.length+this.firstname.value.length+this.lastname.value.length;if(!a)return!1;lsi.set("subject",0,{number:this.number.value,username:this.username.value,firstname:this.firstname.value,lastname:this.lastname.value})};
|
||||
inputPhoneSubject.prototype.storageToFields=function(){console.log("SUBJECT: STORAGE TO FIELDS");var a=lsi.get("subject",0);null==a&&(a={number:"",username:"",firstname:"",lastname:""});this.number.value=a.number;this.username.value=a.username;this.firstname.value=a.firstname;this.lastname.value=a.lastname};
|
||||
inputPhoneSubject.prototype.attach=function(){console.log("SUBJECT: ATTACH");lsi.createDataset("subject");var a=this;this.store_button.addEventListener("click",function(b){a.fieldsToStorage()},!1);this.storageToFields()};
|
||||
|
|
|
@ -43,7 +43,7 @@ inputPhoneSubject.prototype.fieldsToStorage = function(){
|
|||
};
|
||||
|
||||
// {3} On enregistre les données dans le 'localStorage' //
|
||||
lsi.set('subject', 'form', obj);
|
||||
lsi.set('subject', 0, obj);
|
||||
|
||||
};
|
||||
|
||||
|
@ -58,9 +58,10 @@ inputPhoneSubject.prototype.storageToFields = function(){
|
|||
console.log('SUBJECT: STORAGE TO FIELDS');
|
||||
|
||||
// {1} On récupère les informations du sujet //
|
||||
var subjectData = lsi.get('subject', 'form');
|
||||
var subjectData = lsi.get('subject', 0);
|
||||
|
||||
if( subjectData == null ) return;
|
||||
if( subjectData == null )
|
||||
subjectData = { number: '', username: '', firstname: '', lastname: '' };
|
||||
|
||||
// {2} On restore les valeurs //
|
||||
this.number.value = subjectData.number;
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
function APIClass(b){this.target=b}
|
||||
APIClass.prototype={xhr:[],send:function(b,c,f){b.hasOwnProperty("path")||c({ModuleError:4});for(var a=0;a<this.xhr.length;a++)4==this.xhr[a].readyState&&(this.xhr=this.xhr.slice(0,a-1).concat(this.xhr.slice(a,this.xhr.length-1)));this.xhr.push(null);a=this.xhr.length-1;this.xhr[a]=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHttpRequest");console.log(b);var d=this;this.xhr[a].onreadystatechange=function(){if(4==d.xhr[a].readyState)if(-1<[0,200].indexOf(d.xhr[a].status))try{c(JSON.parse(d.xhr[a].responseText))}catch(b){c({ModuleError:1})}else c({ModuleError:3})};
|
||||
var g=new FormData,e;for(e in b)g.append(e,b[e]);this.xhr[a].open("POST",this.target,!0);null!=f&&this.xhr[a].setRequestHeader("Authorization","Digest "+f);this.xhr[a].send(g)}};
|
||||
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)}};
|
||||
|
|
|
@ -60,8 +60,8 @@ APIClass.prototype = {
|
|||
|
||||
/* si success de requête */
|
||||
if( [0,200].indexOf(ptrAPI.xhr[i].status) > -1 ){ // si fichier existe et reçu
|
||||
try{ pHandler( JSON.parse(ptrAPI.xhr[i].responseText) ); } // si on peut parser, on envoie
|
||||
catch(e){ pHandler({ModuleError:1}); } // sinon on envoie obj.request = 'corrupted'
|
||||
try{ pHandler( JSON.parse(ptrAPI.xhr[i].responseText) ); } // si on peut parser, on envoie
|
||||
catch(e){ pHandler({ModuleError:-1, ErrorDescription:'Erreur au niveau de api.js'}); } // sinon on envoie obj.request = 'corrupted'
|
||||
}
|
||||
/* sinon retourne obj.request = 'unreachable' */
|
||||
else
|
||||
|
@ -75,8 +75,12 @@ APIClass.prototype = {
|
|||
|
||||
// On ajoute tous les attributs en POST
|
||||
for( var key in pRequest )
|
||||
form.append(key, pRequest[key]);
|
||||
|
||||
// On envoie le 'path' tel quel <String>
|
||||
if( key == 'path' ) form.append(key, pRequest[key]);
|
||||
// On envoie un fichier tel quel <File>
|
||||
else if( pRequest[key] instanceof File ) form.append(key, pRequest[key]);
|
||||
// On envoie le reste en JSON
|
||||
else form.append(key, JSON.stringify(pRequest[key]));
|
||||
|
||||
|
||||
this.xhr[i].open('POST', this.target, true);
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
function localStorageInterface(){}
|
||||
localStorageInterface.prototype={dataset:[],dataset_keys:[],set:function(a,b,d){var c=this.dataset.indexOf(a);if(-1==c)return!1;-1==this.dataset_keys[c].indexOf(b)&&(this.dataset_keys[c].push(b),localStorage.setItem(a,JSON.stringify(this.dataset_keys[c])));localStorage.setItem(a+"_"+b,JSON.stringify(d));return!0},get:function(a,b){return-1==this.dataset.indexOf(a)?!1:JSON.parse(localStorage.getItem(a+"_"+b))},createDataset:function(a){if(null==a||"string"!=typeof a)return!1;if(-1<this.dataset.indexOf(a))return!0;
|
||||
var b=localStorage.getItem(a);null!=b?(this.dataset.push(a),this.dataset_keys.push(JSON.parse(b))):(this.dataset.push(a),this.dataset_keys.push([]),localStorage.setItem(a,JSON.stringify([])));return!0},keys:function(a){a=this.dataset.indexOf(a);return-1==a?!1:this.dataset_keys[a]},"export":function(a){var b=this.dataset.indexOf(a);if(-1==b)return!1;for(var d={},c=0;c<this.dataset_keys[b].length;c++)d[this.dataset_keys[b][c]]=this.get(a,this.dataset_keys[b][c]);return d}};var lsi=new localStorageInterface;
|
||||
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;
|
||||
|
|
|
@ -16,9 +16,11 @@ localStorageInterface.prototype = {
|
|||
*
|
||||
*/
|
||||
set: function(dataset_name, key, value){
|
||||
var index = this.dataset.indexOf(dataset_name);
|
||||
// On met la clé en <String>
|
||||
key = key.toString();
|
||||
|
||||
/* (1) Si le 'dataset' n'existe pas */
|
||||
var index = this.dataset.indexOf(dataset_name);
|
||||
if( index == -1 ) return false; // erreur
|
||||
|
||||
/* (2) On enregistre la nouvelle clé, si elle est nouvelle */
|
||||
|
@ -42,6 +44,9 @@ localStorageInterface.prototype = {
|
|||
*
|
||||
*/
|
||||
get: function(dataset_name, key){
|
||||
// On met la clé en <String>
|
||||
key = key.toString();
|
||||
|
||||
/* (1) Si le 'dataset' n'existe pas */
|
||||
if( this.dataset.indexOf(dataset_name) == -1 ) return false; // erreur
|
||||
|
||||
|
@ -49,6 +54,39 @@ localStorageInterface.prototype = {
|
|||
return JSON.parse( localStorage.getItem(dataset_name+'_'+key) );
|
||||
},
|
||||
|
||||
/* SUPPRIME UN ELEMENT D'UN DATASET DONNE
|
||||
*
|
||||
* @dataset<String> Nom du dataset en question
|
||||
* @key<String> Clé de l'élément
|
||||
*
|
||||
* @return status<boolean> Retourne FALSE si erreur
|
||||
*
|
||||
*/
|
||||
del: function(dataset, key){
|
||||
// On met la clé en <String>
|
||||
key = key.toString();
|
||||
|
||||
/* (1) Si le 'dataset' n'existe pas */
|
||||
var index = this.dataset.indexOf(dataset);
|
||||
if( index == -1 ) return false; // erreur
|
||||
|
||||
/* (2) On récupère la clé dans la liste des clés */
|
||||
var keyIndex = this.dataset_keys[index].indexOf(key);
|
||||
if( keyIndex == -1 ) return false; // erreur si la clé n'est pas référencée
|
||||
|
||||
/* (3) On supprime dans le 'localStorage' */
|
||||
localStorage.removeItem(dataset+'_'+key);
|
||||
|
||||
/* (4) On supprime la clé dans la liste des clés */
|
||||
this.dataset_keys[index].splice(keyIndex, 1);
|
||||
|
||||
/* (5) On met à jour dans le 'localStorage' */
|
||||
localStorage.setItem(dataset, JSON.stringify(this.dataset_keys[index]));
|
||||
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
|
||||
/* CREATION D'UN DATASET OU RECUPERATION DES DONNEES S'IL EXISTE DEJA
|
||||
*
|
||||
|
@ -59,11 +97,12 @@ localStorageInterface.prototype = {
|
|||
*/
|
||||
createDataset: function(name){
|
||||
/* (1) On vérifie que le @name est correct */
|
||||
if( name == null || typeof name != 'string' ) return false; // erreur
|
||||
if( typeof name != 'string' ) return false; // erreur
|
||||
|
||||
|
||||
/* (2) Si le dataset est déjà enregistré, on ne fais rien */
|
||||
if( this.dataset.indexOf(name) > -1 ) return true;
|
||||
var datasetIndex = this.dataset.indexOf(name);
|
||||
if( datasetIndex > -1 ) return true;
|
||||
|
||||
/* (3) On charge le dataset s'il existe */
|
||||
var storedDataset = localStorage.getItem(name);
|
||||
|
@ -72,7 +111,7 @@ localStorageInterface.prototype = {
|
|||
this.dataset.push(name);
|
||||
this.dataset_keys.push( JSON.parse(storedDataset) );
|
||||
|
||||
/* (4) Sinon, on le crée 'dataset' */
|
||||
/* (4) Sinon, on crée le 'dataset' */
|
||||
}else{
|
||||
|
||||
this.dataset.push(name);
|
||||
|
@ -84,9 +123,17 @@ localStorageInterface.prototype = {
|
|||
return true;
|
||||
},
|
||||
|
||||
keys: function(dataset_name){
|
||||
|
||||
/* RENVOIE UN TABLEAU CONTENANT LES CLÉS DU DATASET
|
||||
*
|
||||
* @dataset<String> Le nom du dataset en question
|
||||
*
|
||||
* @return keys<Array> Retourne la liste des clés du dataset
|
||||
*
|
||||
*/
|
||||
keys: function(dataset){
|
||||
/* (1) Si le 'dataset' n'existe pas */
|
||||
var index = this.dataset.indexOf(dataset_name);
|
||||
var index = this.dataset.indexOf(dataset);
|
||||
if( index == -1 ) return false; // erreur
|
||||
|
||||
/* (2) On retourne la liste des clés pour ce dataset */
|
||||
|
@ -95,6 +142,13 @@ localStorageInterface.prototype = {
|
|||
},
|
||||
|
||||
|
||||
/* RENVOIE UN OBJET CORRESPONDANT AUX DONNÉES D'UN DATASET
|
||||
*
|
||||
* @dataset<String> Nom du dataset en question
|
||||
*
|
||||
* @return object<Object> Object correspondant aux valeurs du dataset ({key1: value1, key2: value2})
|
||||
*
|
||||
*/
|
||||
export: function(dataset){
|
||||
/* (1) Si le 'dataset' n'existe pas */
|
||||
var index = this.dataset.indexOf(dataset);
|
||||
|
@ -107,6 +161,67 @@ localStorageInterface.prototype = {
|
|||
|
||||
/* (3) On retourne le résultat */
|
||||
return obj;
|
||||
},
|
||||
|
||||
|
||||
/* REMPLIT UN DATASET AVEC LES DONNÉES D'UN OBJET SUR LE PRINCIPE {CLÉ: VALEUR}
|
||||
*
|
||||
* @dataset<String> Nom du dataset en question
|
||||
* @data<Object> Objet contenant les données à mettre dan sle dataset, sur le modèle ({key1: value1, key2: value2})
|
||||
*
|
||||
* @return status<Boolean> Retourne TRUE si tout s'est bien passé, sinon FALSE
|
||||
*
|
||||
*/
|
||||
import: function(dataset, data){
|
||||
/* (1) On récupère l'indice du dataset s'il existe déjà */
|
||||
var index = this.dataset.indexOf(dataset);
|
||||
|
||||
/* (2) Cas 1 : Le dataset n'existe pas -> on le crée */
|
||||
if( index == -1 )
|
||||
this.createDataset(dataset);
|
||||
|
||||
/* (3) Cas 2 : Le dataset existe -> on le vide */
|
||||
else
|
||||
this.clear(dataset);
|
||||
|
||||
|
||||
|
||||
/* (2) On remplit le dataset avec toutes les données de l'objet */
|
||||
for( var key in data )
|
||||
this.set(dataset, key, data[key]);
|
||||
|
||||
/* (3) On retourne le résultat */
|
||||
return true;
|
||||
},
|
||||
|
||||
|
||||
/* EFFACE TOUTES LES DONNÉES D'UN DATASET
|
||||
*
|
||||
* @dataset<String> Nom du dataset en question
|
||||
*
|
||||
* @return status<Boolean> Retourne TRUE si tout s'est bien passé, sinon FALSE
|
||||
*
|
||||
*/
|
||||
clear: function(dataset){
|
||||
/* (1) On récupère l'indice du dataset s'il existe déjà */
|
||||
var index = this.dataset.indexOf(dataset);
|
||||
|
||||
// Si le dataset n'existe pas, on retourne une erreur
|
||||
if( index == -1 ) return false;
|
||||
|
||||
/* (2) On supprime toutes les valeurs du dataset */
|
||||
var content = this.export(dataset);
|
||||
|
||||
// On supprime toutes les valeurs
|
||||
for( var key in content )
|
||||
this.del(dataset, key);
|
||||
|
||||
/* (3) Par précaution, on supprime les clés du dataset */
|
||||
this.dataset_keys[index] = [];
|
||||
localStorage.setItem(dataset, JSON.stringify(this.dataset_keys[index]));
|
||||
|
||||
/* (4) On retourne que tout s'est bien passé */
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
function $(a){return document.querySelector(a)}function $$(a){return document.querySelectorAll(a)}Element.prototype.getData=function(a){return"undefined"==typeof this.dataset?!1:this.dataset.hasOwnProperty(a)?this.dataset[a]:!1};Element.prototype.addClass=function(a){var b=this.className.split(" ");-1<b.indexOf(a)||(b.push(a),this.className=b.join(" ").trim())};
|
||||
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}
|
||||
var format_number=new formatChecker(null,"0i ii ii ii ii");
|
||||
function diff(a,b){var c=[],d;for(d in a)null!=b[d]&&null!=a[d]&&(typeof a[d]!==typeof b[d]?c.push(d):a[d]instanceof Object&&b[d]instanceof Object?0<diff(a[d],b[d]).length&&c.push(d):a[d]!=b[d]&&c.push(d));return c}var format_number=new formatChecker(null,"0i ii ii ii ii");
|
||||
|
|
|
@ -148,6 +148,44 @@ function include(jsResource, callback, action){ // action=true -> EXCLUSION, SIN
|
|||
|
||||
|
||||
|
||||
/* RETOURNE LES CLÉS N'AYANT PAS UNE VALEUR EGALE POUR 2 OBJETS
|
||||
*
|
||||
* @A<Object> Premier Objet
|
||||
* @B<Object> Second Objet
|
||||
*
|
||||
* @return diff<Array> Tableau contenant les clés des valeurs différentes (uniquement les clés communes et non NULLes)
|
||||
*
|
||||
*/
|
||||
function diff(A, B){
|
||||
var dKeys = [];
|
||||
|
||||
for( var key in A ){
|
||||
// Si A[key] ou B[key] est NULL, on ne compare pas
|
||||
if( B[key] == null || A[key] == null )
|
||||
continue;
|
||||
|
||||
|
||||
/* (1) On vérifie le type */
|
||||
if( typeof A[key] !== typeof B[key] )
|
||||
dKeys.push(key);
|
||||
|
||||
/* (2) Vérification récursive si 2 objets */
|
||||
else if( A[key] instanceof Object && B[key] instanceof Object ){
|
||||
// Si au moins 1 différence profonde (récursive), on ajoute la clé
|
||||
if( diff(A[key], B[key]).length > 0 )
|
||||
dKeys.push(key);
|
||||
|
||||
/* (3) Vérification superficielle (types non composés) */
|
||||
}else if( A[key] != B[key] )
|
||||
dKeys.push(key);
|
||||
|
||||
}
|
||||
|
||||
return dKeys;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* DEFINITION DES FORMATS UTILES POUR INPUT-CHECKER
|
||||
*
|
||||
|
|
|
@ -122,7 +122,7 @@
|
|||
for( $i = 0 ; $i < count($fetchData) ; $i++ ) // pour tout les utilisateurs
|
||||
foreach($fetchData[$i] as $col => $val){ // pour toutes les entrées
|
||||
|
||||
if( !mb_detect_encoding($val, 'UTF-8') )
|
||||
if( !\mb_detect_encoding($val, 'UTF-8') )
|
||||
$fetchData[$i][$col] = utf8_encode($val);
|
||||
|
||||
if( is_int($col) ){ // Si indice numerique
|
||||
|
@ -143,7 +143,7 @@
|
|||
// on supprime les doublons des entrées (indice numérique)
|
||||
foreach($fetchData as $i=>$val){ // pour toutes les entrées
|
||||
|
||||
if( !mb_detect_encoding($val, 'UTF-8') )
|
||||
if( !\mb_detect_encoding($val, 'UTF-8') )
|
||||
$fetchData[$i] = utf8_encode($val);
|
||||
|
||||
if( is_int($i) ){ // Si indice numerique
|
||||
|
@ -245,13 +245,27 @@
|
|||
case 'sha1':
|
||||
return $checker && is_string($value) && preg_match('/^[\da-f]{40}$/i', $value);
|
||||
break;
|
||||
break;
|
||||
|
||||
// Numéro de téléphone
|
||||
case 'phone_number':
|
||||
case 'number':
|
||||
return $checker && is_string($value) && preg_match('/^(?:0|\+33 ?|0?0?33 ?|)([1-9] ?(?:[0-9] ?){8})$/i', $value);
|
||||
break;
|
||||
|
||||
// Tableau non vide
|
||||
case 'array':
|
||||
return $checker && is_array($value) && count($value) > 0;
|
||||
break;
|
||||
|
||||
// Objet non vide
|
||||
case 'object':
|
||||
return $checker && is_object($value) && count((array) $value) > 0;
|
||||
break;
|
||||
|
||||
// Chaine JSON (on vérifie via le parser)
|
||||
case 'json':
|
||||
return $checker && is_string($value) && json_decode($value, true) !== NULL;
|
||||
break;
|
||||
|
||||
default:
|
||||
return false;
|
||||
break;
|
||||
|
|
|
@ -69,6 +69,12 @@
|
|||
/* Erreur d'UPLOAD */
|
||||
const UploadError = 17;
|
||||
|
||||
// Mauvais format de fichier
|
||||
const FormatError = 18;
|
||||
|
||||
/* Erreur au niveau javascript */
|
||||
//const JavascriptError = 19; // -> géré en js
|
||||
|
||||
|
||||
/* EXPLICITE UN CODE D'ERREUR
|
||||
*
|
||||
|
@ -101,7 +107,8 @@
|
|||
|
||||
case self::TokenError: return "Le token de connection est absent, érroné ou expiré."; break;
|
||||
case self::PermissionError: return "Vous n'avez pas la permission d'effectuer cette action."; break;
|
||||
case self::UploadError: return "Une erreur d'upload est survenue."; break;
|
||||
case self::UploadError: return "Une erreur d'upload est survenue."; break;
|
||||
case self::FormatError: return "Le fichier n'est pas au bon format."; break;
|
||||
|
||||
// default: return "Erreur inconnue..."; break;
|
||||
}
|
||||
|
|
|
@ -123,10 +123,10 @@
|
|||
|
||||
/* [4] Gestion de la reponse
|
||||
=========================================================*/
|
||||
$answer = new ModuleResponse($this->error);
|
||||
$answer->appendAll($returned);
|
||||
$response = new ModuleResponse($this->error);
|
||||
$response->appendAll($returned);
|
||||
|
||||
return $answer;
|
||||
return $response;
|
||||
}
|
||||
|
||||
|
||||
|
@ -192,8 +192,16 @@
|
|||
// On retire le @path de @params
|
||||
unset($params['path']);
|
||||
|
||||
/* [3] On met les paramètres JSON en JSON (si ils décodent sans erreur)
|
||||
=========================================================*/
|
||||
foreach($params as $name=>$value){
|
||||
$json = json_decode( $value, true );
|
||||
// Si aucune erreur, on affecte la valeur
|
||||
if( $json != null )
|
||||
$params[$name] = $json;
|
||||
}
|
||||
|
||||
/* [3] On retourne une instance de <ModuleRequest>
|
||||
/* [4] On retourne une instance de <ModuleRequest>
|
||||
=========================================================*/
|
||||
// On cree notre requete avec le token
|
||||
return new ModuleRequest($post['path'], $params, $token);
|
||||
|
|
|
@ -139,7 +139,7 @@
|
|||
// On rajoute l'erreur au message
|
||||
$returnData = array_merge(
|
||||
array(
|
||||
'ModuleError' => $this->error,
|
||||
'ModuleError' => $this->error,
|
||||
'ErrorDescription' => ManagerError::explicit($this->error)
|
||||
),
|
||||
$this->data
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
public static function unserialize($params){
|
||||
extract($params);
|
||||
|
||||
|
||||
// On formatte le numéro de téléphone
|
||||
$phone_number = Database::formatNumber($phone_number);
|
||||
|
||||
|
@ -97,15 +98,12 @@
|
|||
array_push($phone_logs, $phone_log);
|
||||
}
|
||||
|
||||
/* [5] On trie les contacts par nombre d'apparition
|
||||
/* [5] On trie les contacts par nombre d'apparition d'APPEL
|
||||
=========================================================*/
|
||||
// Système de poids -> 5 sms = 1 appel
|
||||
// 0 -> {number, name, calls, sms} (closest contact)
|
||||
// 1 -> {number, name, calls, sms} (2nd closest contact)
|
||||
$tmp = $phone_directory; // Permet de ne pas efface $phone_directory
|
||||
$maxNumber = -1; // Contiendra le numéro du plus gros
|
||||
$maxVal = null; // Contiendra la valeur max (sms+5*cal ls)
|
||||
$sorted_directory = array(); // Contiendra l'annuaire trié par nombre d'interraction
|
||||
$tmp = $phone_directory; // Permet de ne pas efface $phone_directory
|
||||
$maxNumber = -1; // Contiendra le numéro du plus gros
|
||||
$maxVal = null; // Contiendra la valeur max (total calls)
|
||||
$call_sorted = array(); // Contiendra l'annuaire trié par nombre d'interraction
|
||||
|
||||
/* (1) Tant qu'on a pas tout trié */
|
||||
while( count($tmp) > 0 ){
|
||||
|
@ -114,22 +112,51 @@
|
|||
|
||||
/* (2) On parcours toutes les entrées puor trouver le plus proche */
|
||||
foreach($tmp as $number=>$data)
|
||||
if( $data['sms']+5*$data['calls'] > $maxVal || is_null($maxVal) ){
|
||||
if( $data['calls'] > $maxVal || is_null($maxVal) ){
|
||||
// On met à jour la valeur max
|
||||
$maxVal = $data['sms']+5*$data['calls'];
|
||||
$maxVal = $data['calls'];
|
||||
// On met à jour l'indice
|
||||
$maxNumber = $number;
|
||||
}
|
||||
|
||||
/* (3) On supprime le plus proche qu'on a trouvé et on l'ajoute au tableau trié */
|
||||
array_push($sorted_directory, array(
|
||||
array_push($call_sorted, array(
|
||||
'number' => $maxNumber,
|
||||
'name' => $tmp[$maxNumber]['name'],
|
||||
'calls' => $tmp[$maxNumber]['calls'],
|
||||
'sms' => $tmp[$maxNumber]['sms'],
|
||||
'total' => $tmp[$maxNumber]['sms'] + 5*$tmp[$maxNumber]['calls']
|
||||
'count' => $tmp[$maxNumber]['calls']
|
||||
));
|
||||
|
||||
unset($tmp[$maxNumber]);
|
||||
}
|
||||
|
||||
|
||||
/* [6] On trie les contacts par nombre d'apparition de SMS/MMS
|
||||
=========================================================*/
|
||||
$tmp = $phone_directory; // Permet de ne pas efface $phone_directory
|
||||
$maxNumber = -1; // Contiendra le numéro du plus gros
|
||||
$maxVal = null; // Contiendra la valeur max (total calls)
|
||||
$sms_sorted = array(); // Contiendra l'annuaire trié par nombre d'interraction
|
||||
|
||||
/* (1) Tant qu'on a pas tout trié */
|
||||
while( count($tmp) > 0 ){
|
||||
$maxNumber = -1;
|
||||
$maxVal = null;
|
||||
|
||||
/* (2) On parcours toutes les entrées puor trouver le plus proche */
|
||||
foreach($tmp as $number=>$data)
|
||||
if( $data['sms'] > $maxVal || is_null($maxVal) ){
|
||||
// On met à jour la valeur max
|
||||
$maxVal = $data['sms'];
|
||||
// On met à jour l'indice
|
||||
$maxNumber = $number;
|
||||
}
|
||||
|
||||
/* (3) On supprime le plus proche qu'on a trouvé et on l'ajoute au tableau trié */
|
||||
array_push($sms_sorted, array(
|
||||
'number' => $maxNumber,
|
||||
'name' => $tmp[$maxNumber]['name'],
|
||||
'count' => $tmp[$maxNumber]['sms']
|
||||
));
|
||||
|
||||
unset($tmp[$maxNumber]);
|
||||
}
|
||||
|
@ -138,7 +165,9 @@
|
|||
=========================================================*/
|
||||
return array(
|
||||
'ModuleError' => ManagerError::Success,
|
||||
'directory' => $sorted_directory,
|
||||
'directory' => $phone_directory,
|
||||
'calls' => $call_sorted,
|
||||
'sms' => $sms_sorted,
|
||||
'logs' => $phone_logs
|
||||
);
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
|
||||
|
||||
class charts{
|
||||
class chart{
|
||||
|
||||
|
||||
/* RETOURNE UN JEU DE DONNEES POUR GRAPHIQUE #NETWORK
|
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
|
||||
namespace manager\module;
|
||||
use \manager\sessionManager;
|
||||
use \manager\Database;
|
||||
use \manager\ManagerError;
|
||||
use \manager\ModuleRequest;
|
||||
use \manager\Repo;
|
||||
|
||||
class input{
|
||||
|
||||
|
||||
|
||||
/* TRAITE LES DONNÉES D'UN FORMULAIRE DE TYPE TÉLÉPHONIQUE
|
||||
*
|
||||
* @subject<Array> Tableau contenant les données du sujet
|
||||
* @contacts<Array> Tableau contenant les données des contacts
|
||||
* @mini<Array> Tableau contenant les données des mini fiches relation
|
||||
* @fiches<Array> Tableau contenant les données des fiches relation
|
||||
*
|
||||
* @return subject_id<int> Retourne l'id sujet de l'enquête
|
||||
*
|
||||
*/
|
||||
public static function phone($params){
|
||||
extract($params);
|
||||
|
||||
|
||||
/* [1] On crée le sujet de l'enquête
|
||||
=========================================================*/
|
||||
/* (1) On rédige la requête */
|
||||
$create_subject_request = new ModuleRequest('subject/create', array(
|
||||
'username' => $subject['username'],
|
||||
'firstname' => $subject['firstname'],
|
||||
'lastname' => $subject['lastname'],
|
||||
'number' => $subject['number']
|
||||
));
|
||||
|
||||
/* (2) On exécute la requête (création) */
|
||||
$create_subject_response = $create_subject_request->dispatch();
|
||||
|
||||
/* (3) Gestion de l'erreur, si erreur de création */
|
||||
if( $create_subject_response->error != ManagerError::Success )
|
||||
return array( 'ModuleError' => $create_subject_response->error );
|
||||
|
||||
/* (4) On récupère l'id du sujet */
|
||||
$subject_id = $create_subject_response->get('id_subject');
|
||||
|
||||
|
||||
/* [2] Pour chaque contact, on crée le sujet + les relations
|
||||
=========================================================*/
|
||||
// TODO : Here !!
|
||||
|
||||
|
||||
|
||||
/* [2] Gestion du retour
|
||||
=========================================================*/
|
||||
return array(
|
||||
'ModuleError' => ManagerError::Success,
|
||||
'subject_id' => $subject_id
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
|
@ -2,9 +2,13 @@
|
|||
|
||||
namespace manager\module;
|
||||
use \manager\ManagerError;
|
||||
use \manager\ResourceDispatcher;
|
||||
|
||||
class module{
|
||||
|
||||
/* PERMET DE TESTER L'API
|
||||
*
|
||||
*/
|
||||
public static function method(){
|
||||
|
||||
return array(
|
||||
|
@ -15,6 +19,9 @@
|
|||
}
|
||||
|
||||
|
||||
/* PERMET DE TESTER UNE L'ORDRE DES PARAMÈTRES
|
||||
*
|
||||
*/
|
||||
public static function phpunitParams($params){
|
||||
extract($params);
|
||||
|
||||
|
@ -25,10 +32,58 @@
|
|||
);
|
||||
}
|
||||
|
||||
/* RENVOIE UNE DESCRIPTION EN MARKDOWN DES MODULES DE L'API
|
||||
*
|
||||
* @return markdown<String> Description des modules
|
||||
*
|
||||
*/
|
||||
public static function markdown(){
|
||||
/* [1] Récupération de la configuration
|
||||
=========================================================*/
|
||||
// On récupère le fichier et on le parse
|
||||
$modules = json_decode( ResourceDispatcher::getResource('f/json/modules/conf'), true );
|
||||
|
||||
// Gestion de l'erreur de parsage
|
||||
if( $modules == null )
|
||||
return array( 'ModuleError' => ManagerError::ParsingFailed );
|
||||
|
||||
/* [2] Mise en forme de la liste des modules
|
||||
=========================================================*/
|
||||
$markdown = "## Module List<br>";
|
||||
|
||||
foreach($modules as $moduleName=>$moduleData)
|
||||
$markdown .= "- $moduleName<br>";
|
||||
|
||||
/* [3] Mise en forme des méthodes des modules
|
||||
=========================================================*/
|
||||
$markdown .= '----<br>## Method List & Description<br>';
|
||||
|
||||
$count = 1;
|
||||
foreach($modules as $moduleName=>$moduleData){
|
||||
$markdown .= "### $count - '$moduleName' methods<br>";
|
||||
|
||||
foreach($moduleData as $methodName=>$methodData)
|
||||
$markdown .= "`$methodName` - ".$methodData['description']."<br>";
|
||||
|
||||
$markdown .= '----<br>';
|
||||
|
||||
$count++;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* [n] Gestion du retour
|
||||
=========================================================*/
|
||||
return array(
|
||||
'ModuleError' => ManagerError::Success,
|
||||
'markdown' => $markdown
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
?>
|
||||
|
|
|
@ -4,56 +4,47 @@
|
|||
use \manager\Database;
|
||||
use \manager\ResourceDispatcher;
|
||||
use \manager\sessionManager;
|
||||
use \manager\ModuleRequest;
|
||||
use \manager\ManagerError;
|
||||
use \manager\Repo;
|
||||
|
||||
class upload{
|
||||
|
||||
/* EFFECTUE UN UPLOAD D'UN fichier
|
||||
*
|
||||
|
||||
/* RENVOIE LE CHEMIN D'UN fichier
|
||||
*
|
||||
* @prefix<String> Préfixe (dossier parent) du fichier
|
||||
* @extension<String> Extension du fichier
|
||||
* @file<FILE> Pointeur vers $_FILES['']
|
||||
*
|
||||
* @return error<ManagerError> Retourne l'erreur attestant de l'état de l'upload
|
||||
*
|
||||
*/
|
||||
private static function simpleFile($prefix, $extension, $file){
|
||||
|
||||
*
|
||||
* @return response<Array> Renvoie le chemin du fichier, ainsi qu'une erreur de 'ManagerError'
|
||||
*
|
||||
*/
|
||||
private static function getPath($prefix, $extension){
|
||||
// Si on est pas connecté, on retourne une erreur -> impossible via token
|
||||
if( !connected() ) return ManagerError::PermissionError;
|
||||
if( !connected() ) return array( 'error' => ManagerError::PermissionError );
|
||||
|
||||
/* [0] On formatte les entrées
|
||||
=========================================================*/
|
||||
$prefix = htmlspecialchars($prefix);
|
||||
|
||||
// Si $prefix n'est pas au bon format
|
||||
if( !preg_match('/^[a-z0-9_-]+$/', $prefix) )
|
||||
return ManagerError::UploadError;
|
||||
|
||||
|
||||
/* [1] Chargement du fichier de config
|
||||
/* [1] Chargement du fichier de config
|
||||
=========================================================*/
|
||||
/* (1) On récupère le fichier */
|
||||
$uploadAuth = ResourceDispatcher::getResource('f/json/upload-auth/conf');
|
||||
|
||||
/* (2) Si une erreur pour le fichier de conf */
|
||||
if( $uploadAuth === false )
|
||||
return ManagerError::UnreachableResource;
|
||||
return array( 'error' => ManagerError::UnreachableResource );
|
||||
|
||||
/* (3) On récupère la config sous forme de tableau */
|
||||
$uploadAuth = json_decode( $uploadAuth, true );
|
||||
|
||||
/* (4) Si erreur de PARSAGE */
|
||||
if( !is_array($uploadAuth) )
|
||||
return ManagerError::ParsingFailed;
|
||||
return array( 'error' => ManagerError::ParsingFailed );
|
||||
|
||||
|
||||
/* [2] Vérification du préfixe
|
||||
=========================================================*/
|
||||
// Si le préfixe n'est pas dans la config -> erreur
|
||||
if( !in_array($prefix, $uploadAuth['directories']) )
|
||||
returnManagerError::UploadError;
|
||||
|
||||
return array( 'error' => ManagerError::UploadError );
|
||||
|
||||
/* [3] Construction du chemin
|
||||
=========================================================*/
|
||||
|
@ -69,14 +60,62 @@
|
|||
/* (4) On se place dans le dossier */
|
||||
chdir( $path );
|
||||
|
||||
/* [4] Création du fichier (temporaire->permanent)
|
||||
|
||||
/* [4] Gestion du retour
|
||||
=========================================================*/
|
||||
return array(
|
||||
'error' => ManagerError::Success,
|
||||
'path' => $path.$fileName
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* EFFECTUE UN UPLOAD D'UN fichier
|
||||
*
|
||||
* @prefix<String> Préfixe (dossier parent) du fichier
|
||||
* @extension<String> Extension du fichier
|
||||
* @file<FILE> Pointeur vers $_FILES['']
|
||||
* @tester<Function> Fonction qui renvoie TRUE si le format est correct (en prenant le contenu du fichier en paramètre)
|
||||
*
|
||||
* @return error<ManagerError> Retourne l'erreur attestant de l'état de l'upload
|
||||
*
|
||||
*/
|
||||
private static function simpleFile($prefix, $extension, $file, $tester){
|
||||
/* [1] On récupère le chemin du fichier à créer et vérifie le dossier
|
||||
=========================================================*/
|
||||
$pathResponse = self::getPath($prefix, $extension);
|
||||
|
||||
// Si une erreur est intervenue, on la retourne
|
||||
if( $pathResponse['error'] != ManagerError::Success )
|
||||
return $pathResponse['error'];
|
||||
|
||||
|
||||
/* [2] Vérification du format (via la fonction $tester)
|
||||
=========================================================*/
|
||||
/* (1) Si $tester est une fonction, on effectue le test */
|
||||
if( is_callable($tester) ){
|
||||
|
||||
/* (2) Sinon, on vérifie le format */
|
||||
$file_content = file_get_contents($file['tmp_name']);
|
||||
|
||||
/* (3) On retourne 'FormatError' si erreur de format */
|
||||
if( !$tester($file_content) ) return ManagerError::FormatError;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* [3] Création du fichier (temporaire->permanent)
|
||||
=========================================================*/
|
||||
if( move_uploaded_file($file['tmp_name'], $path.$fileName) ){
|
||||
/* (1) On déplace le fichier avec le nom formel */
|
||||
if( move_uploaded_file($file['tmp_name'], $pathResponse['path']) ){
|
||||
// on modifie les droits du fichier
|
||||
chmod($path.$fileName, 0774);
|
||||
|
||||
return ManagerError::Success;
|
||||
chmod($pathResponse['path'], 0774);
|
||||
return ManagerError::Success;
|
||||
|
||||
/* (2) Si une erreur occure -> 'UploadError' */
|
||||
}else
|
||||
return ManagerError::UploadError;
|
||||
}
|
||||
|
@ -86,6 +125,13 @@
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* IMPORT D'UN JOURNAL D'APPEL
|
||||
*
|
||||
* @file<FILE> Pointeur vers $_FILES['']
|
||||
|
@ -94,9 +140,228 @@
|
|||
public static function call_log($params){
|
||||
extract($params);
|
||||
|
||||
return array(
|
||||
'ModuleError' => self::simpleFile('call_log', 'xml', $file)
|
||||
);
|
||||
/* [1] Gestion de l'upload du fichier et de la vérification du format
|
||||
=========================================================*/
|
||||
$uploadError = self::simpleFile(
|
||||
'call_log', // nom du dossier d'upload
|
||||
'xml', // format du fichier
|
||||
$file, // Fichier lui-même
|
||||
function($content){ // Vérification du format du fichier
|
||||
/* (1) Vérification du format XML */
|
||||
$xml = simplexml_load_string($content);
|
||||
if( $xml === false ) return false; // Si erreur de parsage, on retourne une erreur
|
||||
|
||||
/* (2) Vérification du contenu (balises) */
|
||||
// Doit avoir des Item(s)
|
||||
if( !isset($xml->Item) )
|
||||
return false;
|
||||
|
||||
// Vérification de tous les champs
|
||||
foreach($xml->Item as $log){
|
||||
$checkAttributes = isset($log['Id']);
|
||||
$checkAttributes = $checkAttributes && isset($log['Number']);
|
||||
$checkAttributes = $checkAttributes && isset($log['Name']);
|
||||
$checkAttributes = $checkAttributes && isset($log['Date']);
|
||||
$checkAttributes = $checkAttributes && isset($log['Duration']);
|
||||
$checkAttributes = $checkAttributes && isset($log['Direction']);
|
||||
$checkAttributes = $checkAttributes && isset($log['Type']);
|
||||
|
||||
// Si on a pas tout les champs, on retourne une erreur
|
||||
if( !$checkAttributes )
|
||||
return false;
|
||||
}
|
||||
|
||||
/* (3) Si tout s'est bien passé, le format est bon */
|
||||
return true;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
/* [2] Gestion du retour (unserialize)
|
||||
=========================================================*/
|
||||
/* (1) Si erreur d'upload, on la renvoie */
|
||||
if( $uploadError != ManagerError::Success )
|
||||
return array( 'ModuleError' => $uploadError );
|
||||
|
||||
/* (2) Gestion du parsage (unserialize) du journal d'appel */
|
||||
$request = new ModuleRequest('call_log/unserialize', array( 'phone_number' => $phone_number ) );
|
||||
$response = $request->dispatch();
|
||||
|
||||
/* (3) Restitution du retour de `unserialize` */
|
||||
return array_merge(
|
||||
array( 'ModuleError' => $response->error ),
|
||||
$response->getAll()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* IMPORT D'UNE SAUVEGARDE DE FORMULAIRE LOCAL
|
||||
*
|
||||
* @file<FILE> Pointeur vers $_FILES['']
|
||||
*
|
||||
*/
|
||||
public static function local_data($params){
|
||||
extract($params);
|
||||
|
||||
/* [1] Upload et vérifiaction du format du fichier
|
||||
=========================================================*/
|
||||
$uploadError = self::simpleFile(
|
||||
'local_data', // nom du dossier d'upload
|
||||
'json', // format du fichier
|
||||
$file, // Fichier lui-même
|
||||
function($content){ // Vérification du format du fichier
|
||||
/* (1) Vérification du format JSON */
|
||||
$json = json_decode($content, true);
|
||||
if( $json == null )
|
||||
return false; // Si erreur de parsage, on retourne une erreur
|
||||
|
||||
|
||||
/* (2) Vérification du contenu de premier niveau */
|
||||
$checkLevel0 = isset($json['subject']) && is_array($json['subject']);
|
||||
$checkLevel0 = $checkLevel0 && isset($json['contacts']) && is_array($json['contacts']);
|
||||
$checkLevel0 = $checkLevel0 && isset($json['mini']) && is_array($json['mini']);
|
||||
$checkLevel0 = $checkLevel0 && isset($json['fiches']) && is_array($json['fiches']);
|
||||
$checkLevel0 = $checkLevel0 && isset($json['matrice']) && is_array($json['matrice']);
|
||||
|
||||
// Erreur si level 0 incorrect
|
||||
if( !$checkLevel0 )
|
||||
return false;
|
||||
|
||||
|
||||
/* (3) Vérification du sujet */
|
||||
$checkSubject = isset($json['subject']['username']) && is_string($json['subject']['username']);
|
||||
$checkSubject = $checkSubject && isset($json['subject']['firstname']) && is_string($json['subject']['firstname']);
|
||||
$checkSubject = $checkSubject && isset($json['subject']['lastname']) && is_string($json['subject']['lastname']);
|
||||
$checkSubject = $checkSubject && isset($json['subject']['number']) && is_string($json['subject']['number']);
|
||||
|
||||
// Erreur des attributs du sujet incorrects ou manquants
|
||||
if( !$checkSubject )
|
||||
return false;
|
||||
|
||||
|
||||
/* (4) Vérification des contacts */
|
||||
foreach($json['contacts'] as $contact){
|
||||
$checkContact = isset($contact['uid']) && is_numeric($contact['uid']);
|
||||
$checkContact = $checkContact && isset($contact['username']) && is_string($contact['username']);
|
||||
$checkContact = $checkContact && isset($contact['firstname']) && is_string($contact['firstname']);
|
||||
$checkContact = $checkContact && isset($contact['lastname']) && is_string($contact['lastname']);
|
||||
$checkContact = $checkContact && isset($contact['number']) && ( is_numeric($contact['number']) || is_string($contact['number']) );
|
||||
$checkContact = $checkContact && isset($contact['sms']) && is_numeric($contact['sms']);
|
||||
$checkContact = $checkContact && isset($contact['call']) && is_numeric($contact['call']);
|
||||
$checkContact = $checkContact && isset($contact['countsms']) && is_numeric($contact['countsms']);
|
||||
$checkContact = $checkContact && isset($contact['countcall']) && is_numeric($contact['countcall']);
|
||||
|
||||
// Si erreur des attributs du contact incorrects ou manquants
|
||||
if( !$checkContact )
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* (5) Vérification des mini-fiches */
|
||||
foreach($json['mini'] as $mini){
|
||||
$checkMini = isset($mini['uid']) && is_numeric($mini['uid']);
|
||||
$checkMini = $checkMini && isset($mini['sexe']) && is_array($mini['sexe']);
|
||||
$checkMini = $checkMini && isset($mini['age']) && is_string($mini['age']);
|
||||
$checkMini = $checkMini && isset($mini['studies']) && is_string($mini['studies']);
|
||||
$checkMini = $checkMini && isset($mini['loc']) && is_array($mini['loc']);
|
||||
|
||||
// Si erreur des attributs des mini-fiches incorrects ou manquants
|
||||
if( !$checkMini )
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* (6) Vérification des fiches */
|
||||
foreach($json['fiches'] as $fiches){
|
||||
$checkFiche = isset($fiches['uid']) && is_numeric($fiches['uid']);
|
||||
$checkFiche = $checkFiche && isset($fiches['contact']) && is_numeric($fiches['contact']);
|
||||
$checkFiche = $checkFiche && isset($fiches['sexe']) && is_array($fiches['sexe']);
|
||||
$checkFiche = $checkFiche && isset($fiches['age']) && is_string($fiches['age']);
|
||||
$checkFiche = $checkFiche && isset($fiches['job']) && is_string($fiches['job']);
|
||||
$checkFiche = $checkFiche && isset($fiches['loc']) && is_array($fiches['loc']);
|
||||
$checkFiche = $checkFiche && isset($fiches['studies']) && is_string($fiches['studies']);
|
||||
$checkFiche = $checkFiche && isset($fiches['famsit']) && is_array($fiches['famsit']);
|
||||
$checkFiche = $checkFiche && isset($fiches['reltype']) && is_array($fiches['reltype']);
|
||||
$checkFiche = $checkFiche && isset($fiches['reltypeSpecial']) && is_string($fiches['reltypeSpecial']);
|
||||
$checkFiche = $checkFiche && isset($fiches['city']) && is_string($fiches['city']);
|
||||
$checkFiche = $checkFiche && isset($fiches['duration']) && is_array($fiches['duration']);
|
||||
$checkFiche = $checkFiche && isset($fiches['context']) && is_array($fiches['context']);
|
||||
$checkFiche = $checkFiche && isset($fiches['contextSpecial']) && is_array($fiches['contextSpecial']);
|
||||
$checkFiche = $checkFiche && isset($fiches['freq']) && is_array($fiches['freq']);
|
||||
$checkFiche = $checkFiche && isset($fiches['connect']) && is_array($fiches['connect']);
|
||||
$checkFiche = $checkFiche && isset($fiches['connectSpecial']) && is_array($fiches['connectSpecial']);
|
||||
|
||||
// Si erreur des attributs des fiches incorrects ou manquants
|
||||
if( !$checkFiche )
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/* (7) Vérification de la matrice */
|
||||
foreach($json['matrice'] as $idA=>$Bs){
|
||||
$checkMatrice = is_numeric($idA);
|
||||
|
||||
if( !is_array($Bs) )
|
||||
return false;
|
||||
|
||||
// Pour chaque relation entre le sujet d'id @idA et le sujet d'id $B
|
||||
foreach($Bs as $B)
|
||||
$checkMatrice = $checkMatrice && is_numeric($B);
|
||||
|
||||
if( !$checkMatrice )
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
/* [2] Renvoi du contenu du fichier
|
||||
=========================================================*/
|
||||
/* (1) Si erreur d'upload, on la renvoie */
|
||||
if( $uploadError != ManagerError::Success )
|
||||
return array( 'ModuleError' => $uploadError );
|
||||
|
||||
/* (2) On récupère le fichier */
|
||||
$responsePath = self::getPath('local_data', 'json');
|
||||
// Si erreur, on la renvoie
|
||||
if( $responsePath['error'] != ManagerError::Success )
|
||||
return array( 'ModuleError' => $responsePath['error'] );
|
||||
|
||||
// On lit le fichier
|
||||
$json = json_decode( file_get_contents($responsePath['path']), true );
|
||||
|
||||
// Si erreur de parsage, on le retourne
|
||||
if( $json === false )
|
||||
return ManagerError::ParsingFailed;
|
||||
|
||||
/* (3) On renvoie le contenu du fichier */
|
||||
return array(
|
||||
'ModuleError' => ManagerError::Success,
|
||||
'local_data' => $json
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -90,77 +90,58 @@
|
|||
$checkInput = $checkInput && Database::check('varchar(0,30)', $lastname);
|
||||
$checkInput = $checkInput && !!strlen($username.$firstname.$lastname); // Pseudo, prénom, ou nom, au moins un n'est pas vide
|
||||
$checkInput = $checkInput && ( Database::check('id', $id_facebook) || is_null($id_facebook) );
|
||||
$checkInput = $checkInput && ( Database::check('number', $number) || is_null($number) );
|
||||
$checkInput = $checkInput && ( Database::check('number', $number) || is_null($number) );
|
||||
|
||||
// Si erreur en entree, on retourne FAUX
|
||||
if( !$checkInput ) return false;
|
||||
|
||||
/* [1] On écrit la requête
|
||||
=========================================================*/
|
||||
$request_create = 'INSERT INTO sujets(idSujet, pseudo, nom, prenom, id_facebook, telephone) ';
|
||||
$request_create .= 'VALUES (';
|
||||
$request_create .= 'DEFAULT, '; // idPersone
|
||||
$request_create .= strlen($username) ? ':pseudo, ' : 'NULL, '; // pseudo
|
||||
$request_create .= strlen($lastname) ? ':nom, ' : 'NULL, '; // nom
|
||||
$request_create .= strlen($firstname) ? ':prenom, ' : 'NULL, '; // prenom
|
||||
$request_create .= !is_null($id_facebook) ? ':id_facebook, ' : 'NULL, '; // Id facebook
|
||||
$request_create .= !is_null($number) ? ':number, ' : 'NULL, '; // Numéro de tél
|
||||
$request_create .= ')';
|
||||
$request_create_string = 'INSERT INTO sujets(idSujet, pseudo, nom, prenom, id_facebook, telephone) ';
|
||||
$request_create_string .= 'VALUES (';
|
||||
$request_create_string .= 'DEFAULT, '; // idPersone
|
||||
$request_create_string .= strlen($username) ? ':pseudo, ' : 'NULL, '; // pseudo
|
||||
$request_create_string .= strlen($lastname) ? ':nom, ' : 'NULL, '; // nom
|
||||
$request_create_string .= strlen($firstname) ? ':prenom, ' : 'NULL, '; // prenom
|
||||
$request_create_string .= !is_null($id_facebook) ? ':id_facebook, ' : 'NULL, '; // Id facebook
|
||||
$request_create_string .= !is_null($number) ? ':number, ' : 'NULL, '; // Numéro de tél
|
||||
// On retire la dernière virgule
|
||||
$request_create_string = preg_replace('/, ?$/', '', $request_create_string);
|
||||
$request_create_string .= ')';
|
||||
|
||||
/* (1) Si id_facebook NULL */
|
||||
if( $reference == null ){
|
||||
// On crée la requête
|
||||
$request_create = Database::getPDO()->prepare($request_create_string);
|
||||
|
||||
// TODO: Finir l'implémentation
|
||||
$create = Database::getPDO()->prepare("INSERT INTO subjects(id_subject, login, password, mail, reference, permission)
|
||||
VALUES(DEFAULT, :login, :password, :mail, NULL, :permission)");
|
||||
$create->execute(array(
|
||||
':login' => $login,
|
||||
':password' => $password,
|
||||
':mail' => $mail,
|
||||
':permission' => $permission
|
||||
));
|
||||
|
||||
/* (2) Si reference est defini */
|
||||
}else{
|
||||
/* [2] On exécute la requête avec les valeurs
|
||||
=========================================================*/
|
||||
/* (1) On ajoute les paramètres à ajouter */
|
||||
$variables = array();
|
||||
if( strlen($username) ) $variables[':pseudo'] = $username;
|
||||
if( strlen($lastname) ) $variables[':nom'] = $lastname;
|
||||
if( strlen($firstname) ) $variables[':prenom'] = $firstname;
|
||||
if( !is_null($id_facebook) ) $variables[':id_facebook'] = $id_facebook;
|
||||
if( !is_null($number) ) $variables[':number'] = $number;
|
||||
|
||||
$create = Database::getPDO()->prepare("INSERT INTO subjects(id_subject, login, password, mail, reference, permission)
|
||||
VALUES(DEFAULT, :login, :password, :mail, :reference, :permission)");
|
||||
$create->execute(array(
|
||||
':login' => $login,
|
||||
':password' => $password,
|
||||
':mail' => $mail,
|
||||
':reference' => (int) $reference,
|
||||
':permission' => $permission
|
||||
));
|
||||
/* (2) On exécute la requête avec leurs variables utiles uniquement */
|
||||
$status_created = $request_create->execute($variables);
|
||||
|
||||
}
|
||||
|
||||
/* [3] Verification de la creation + recuperation id
|
||||
=========================================================*/
|
||||
$checkCreate = Database::getPDO()->prepare("SELECT id_subject
|
||||
FROM subjects
|
||||
WHERE login = :login
|
||||
AND password = :password
|
||||
AND mail = :mail
|
||||
AND ( reference = :reference OR reference is NULL )
|
||||
AND permission = :permission");
|
||||
$checkCreate->execute(array(
|
||||
':login' => $login,
|
||||
':password' => $password,
|
||||
':mail' => $mail,
|
||||
':reference' => (int) $reference,
|
||||
':permission' => $permission
|
||||
));
|
||||
// Si erreur de création
|
||||
if( $status_created === false ) return false;
|
||||
|
||||
|
||||
// On recupere l'id du sujet
|
||||
$id_subject = $checkCreate->fetch();
|
||||
$id_subject = Database::getPDO()->lastInsertId();
|
||||
|
||||
// Si erreur, on retourne FALSE
|
||||
if( $id_subject === false ) return false;
|
||||
if( $id_subject == null ) return false;
|
||||
|
||||
/* [4] Gestion du retour
|
||||
=========================================================*/
|
||||
return $id_subject['id_subject'];
|
||||
return $id_subject;
|
||||
}
|
||||
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 231 KiB After Width: | Height: | Size: 241 KiB |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -13,7 +13,7 @@
|
|||
/* [1] Gestion du cercle des relations
|
||||
=======================================*/
|
||||
/* (1) On recupere les donnees */
|
||||
$getData = new ModuleRequest('charts/network_data');
|
||||
$getData = new ModuleRequest('chart/network_data');
|
||||
$answer = $getData->dispatch();
|
||||
|
||||
// Si pas d'erreur
|
||||
|
@ -25,7 +25,7 @@ $data = $answer->get('data');
|
|||
|
||||
|
||||
/* (2) On recupere le rendu */
|
||||
$getRender = new ModuleRequest('charts/network_render', array('dataset' => $data));
|
||||
$getRender = new ModuleRequest('chart/network_render', array('dataset' => $data));
|
||||
$answer = $getRender->dispatch();
|
||||
|
||||
// Si pas d'erreur
|
||||
|
|
100
view/input.php
100
view/input.php
|
@ -38,7 +38,17 @@
|
|||
|
||||
<h3 data-n='0' class='color4'>Effacer les données de la dernière enquête</h3>
|
||||
<span data-space></span>
|
||||
<h4 class='self color2' data-icon='e'>
|
||||
<h4 class='self color2' data-icon=''>
|
||||
<a style='display:none' id='download-target'></a>
|
||||
<input type='submit' class='primary' id='export-all' value="Sauvegarder l'enquête"><br>
|
||||
</h4>
|
||||
|
||||
<h4 class='self color2' data-icon='u'>
|
||||
<input type='file' id='local-upload' style='display: none;'>
|
||||
<input type='submit' class='primary' id='import-all' value='Récupérer une sauvegarde'><br>
|
||||
</h4>
|
||||
|
||||
<h4 class='self color2' data-icon='w'>
|
||||
<input type='submit' class='primary' id='clear-all' value='Tout effacer'>
|
||||
</h4>
|
||||
<span data-space></span>
|
||||
|
@ -64,22 +74,28 @@
|
|||
<span data-space></span>
|
||||
<h5 data-text="Seuls les fichiers au format XML et spécifiques sont pris en compte."></h5>
|
||||
<h4 data-icon='u' class='color2'>
|
||||
<input type='file' id='call_log-import' value='test'>
|
||||
<input type='file' id='call_log-import'>
|
||||
<span class='file-input'>Importer un journal d'appels</span>
|
||||
</h4>
|
||||
<span data-space></span>
|
||||
<!-- <span data-tag='OU'></span> -->
|
||||
<h3 data-n='2' class='color4'>Saisir manuellement les contacts</h3>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- GESTION DE L'AJOUT DES CONTACTS -->
|
||||
<span data-space></span>
|
||||
<h5 data-text="Renseigner au moins un des nominatifs pour chaque contact. (pseudo, prénom et/ou nom)"></h5>
|
||||
|
||||
<span data-space></span>
|
||||
<div class='arrow-container line' id='nav-contact'></div>
|
||||
|
||||
<article class='contact-panel'>
|
||||
</article>
|
||||
<span data-space></span>
|
||||
<span data-space></span>
|
||||
<span data-space></span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -94,21 +110,85 @@
|
|||
|
||||
</article>
|
||||
<span data-space></span>
|
||||
<span data-space></span>
|
||||
<span data-space></span>
|
||||
|
||||
|
||||
|
||||
<!-- GESTION DES FICHES RELATIONS -->
|
||||
<h3 data-n='4' class='color4'>Remplir les fiches relations complètes des contacts les plus contactés</h3>
|
||||
|
||||
<!-- NAVIGATION ENTRE LES FICHES -->
|
||||
<div class='arrow-container line' id='nav-fiche'></div>
|
||||
<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>
|
||||
|
||||
|
||||
<!-- BOUTON D'ENVOI DU FORMULAIRE -->
|
||||
<h3 data-n='6' class='color4'>Envoi des données</h3>
|
||||
<article class='submit-panel'>
|
||||
<h4>
|
||||
<input type='submit' class='line' value='Envoyer le formulaire' id='submit-all'>
|
||||
</h4>
|
||||
</article>
|
||||
|
||||
<article class='relation-panel'>
|
||||
|
||||
|
||||
</article>
|
||||
</section>
|
||||
<span data-space></span>
|
||||
|
||||
|
|
|
@ -1,7 +1,13 @@
|
|||
var clearAllButton=$("#clear-all"),importCallLog=$('input#call_log-import[type="file"]'),subjectManager,contactManager,miniManager,ficheManager;
|
||||
function dynamicUpdate(a){var c=a instanceof Element,b=c&&"SPAN"==a.tagName&&"switch-left"==a.className,d=c&&"SPAN"==a.tagName&&"switch-both"==a.className,e=c&&"INPUT"==a.tagName&&"submit"==a.type,c=c&&"SPAN"==a.tagName&&("nav-mini"==a.parentNode.id||"nav-fiche"==a.parentNode.id);if(!(d||b||e||c)&&!0!==a)return!1;d?(console.log("> switch firstname <-> lastname"),b=a.parentNode,a=b.children[3],b=b.children[5],d=a.value,a.value=b.value,b.value=d):b?(console.log("> switch firstname+lastname -> username"),
|
||||
b=a.parentNode,d=b.children[1],a=b.children[3],b=b.children[5],d.value=a.value+" "+b.value,a.value="",b.value=""):(console.log("> dynamic update"),miniManager.fieldsToStorage(),ficheManager.fieldsToStorage(),contactManager.fieldsToStorage(),miniManager.sync(),ficheManager.sync(),miniManager.storageToFields(),ficheManager.storageToFields(),e&&contactManager.storageToFields())}function checkRadioValue(a){for(var c=0,b=0;b<a.length;b++)!0===a[b].status&&c++;return 1!=c?!1:!0}
|
||||
include("/js/includes/input-phone-subject.js",function(){include("/js/includes/input-phone-contact.js",function(){include("/js/includes/input-phone-mini.js",function(){include("/js/includes/input-phone-fiche.js",function(){subjectManager=new inputPhoneSubject($('article.subject-panel [data-name="number"]'),$('article.subject-panel [data-name="username"]'),$('article.subject-panel [data-name="firstname"]'),$('article.subject-panel [data-name="lastname"]'),$('article.subject-panel [data-name="submit"]'));
|
||||
subjectManager.attach();contactManager=new inputPhoneContact($("article.contact-panel"),$("h4.add-contact"));contactManager.attach(dynamicUpdate);miniManager=new inputPhoneMini($("article.mini-relation-panel"),$("#nav-mini"));miniManager.attach(dynamicUpdate);ficheManager=new inputPhoneFiche($("article.relation-panel"),$("#nav-fiche"));ficheManager.attach(dynamicUpdate);importCallLog.addEventListener("change",function(a){api.send({path:"upload/call_log",file:importCallLog.files[0]},function(a){console.log(a);
|
||||
0==a.ModuleError&&(importCallLog.addClass("active"),a={path:"call_log/unserialize",phone_number:$("#subject_phone_number").value},api.send(a,function(a){console.log(a);if(0==a.ModuleError){for(var d=0;d<a.directory.length;d++){var c=(null===a.directory[d].name?"":a.directory[d].name).split(" ");lsi.set("contacts","form"+d,{uid:d,number:a.directory[d].number,username:1==c.length?c[0]:"",firstname:1<c.length?c[0]:"",lastname:1<c.length?c.splice(1).join(" "):""})}contactManager.storageToFields();dynamicUpdate(!0)}}))})},
|
||||
!1);clearAllButton.addEventListener("click",function(a){localStorage.clear();reload()},!1)})})})});
|
||||
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}
|
||||
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)})})})})});
|
||||
|
|
393
view/js/input.js
393
view/js/input.js
|
@ -3,36 +3,38 @@
|
|||
// contacts -> contient les données de tous les contacts
|
||||
// mini-fiches -> contient les données de toutes les mini fiches
|
||||
// fiches -> contient les données de toutes les fiches
|
||||
// matrice -> contient les relations de la matrice
|
||||
|
||||
|
||||
/* [1] Initialisation des utilitaires et variables
|
||||
=========================================================*/
|
||||
/* (1) Bouton pour effacer toutes les données */
|
||||
var clearAllButton = $('#clear-all');
|
||||
|
||||
/* (2) Input de type fichier pour l'import */
|
||||
var importCallLog = $('input#call_log-import[type="file"]');
|
||||
|
||||
/* (3) Initialisation des managers */
|
||||
=========================================================*
|
||||
/* (1) Initialisation des managers */
|
||||
var subjectManager;
|
||||
var contactManager;
|
||||
var miniManager;
|
||||
var ficheManager;
|
||||
var matriceManager;
|
||||
|
||||
/* (4) Fonctions utiles */
|
||||
// CONSTANTES
|
||||
var defTrue = {status: true, value: 'on'};
|
||||
var defFalse = {status: false, value: 'on'};
|
||||
|
||||
|
||||
/* (2) Fonctions utiles */
|
||||
function dynamicUpdate(target){
|
||||
|
||||
|
||||
/* (0) Vérification de la cohérence de la @target
|
||||
---------------------------------------------------------*/
|
||||
var isElement = target instanceof Element;
|
||||
var isSwitchLeft = isElement && target.tagName == 'SPAN' && target.className == 'switch-left';
|
||||
var isSwitchBoth = isElement && target.tagName == 'SPAN' && target.className == 'switch-both';
|
||||
var isSaveButton = isElement && target.tagName == 'INPUT' && target.type == 'submit';
|
||||
var isSwitchLeft = isElement && target.tagName == 'SPAN' && target.className == 'switch-left';
|
||||
var isSwitchBoth = isElement && target.tagName == 'SPAN' && target.className == 'switch-both';
|
||||
var isSaveButton = isElement && target.tagName == 'INPUT' && target.type == 'submit';
|
||||
var isNavButton = isElement && target.tagName == 'SPAN' && (target.parentNode.id == 'nav-mini' || target.parentNode.id == 'nav-fiche');
|
||||
var isNavContact = isElement && target.tagName == 'SPAN' && target.parentNode.id == 'nav-contact';
|
||||
|
||||
// Si erreur, on retourne une erreur
|
||||
if( !isSwitchBoth && !isSwitchLeft && !isSaveButton && !isNavButton && target !== true )
|
||||
if( !isSwitchBoth && !isSwitchLeft && !isSaveButton && !isNavButton && !isNavContact && target !== true )
|
||||
return false;
|
||||
|
||||
/* (1) Gestion de l'échange de nom/prénom
|
||||
|
@ -44,8 +46,8 @@ function dynamicUpdate(target){
|
|||
var currentForm = target.parentNode;
|
||||
|
||||
/* (2) On récupère Nom et Prénom */
|
||||
var firstname = currentForm.children[3];
|
||||
var lastname = currentForm.children[5];
|
||||
var firstname = currentForm.children[8];
|
||||
var lastname = currentForm.children[10];
|
||||
|
||||
/* (3) On échange leurs valeurs */
|
||||
var tmp = firstname.value;
|
||||
|
@ -61,11 +63,16 @@ function dynamicUpdate(target){
|
|||
var currentForm = target.parentNode;
|
||||
|
||||
/* (2) On récupère Pseudo, Nom et Prénom */
|
||||
var username = currentForm.children[1];
|
||||
var firstname = currentForm.children[3];
|
||||
var lastname = currentForm.children[5];
|
||||
var username = currentForm.children[6];
|
||||
var firstname = currentForm.children[8];
|
||||
var lastname = currentForm.children[10];
|
||||
|
||||
/* (3) On attribue à Pseudo, la valeur de Prénom+Nom */
|
||||
/* (3) Vérification de la validité */
|
||||
// Si pseudo pas vide, ou nom et prenom vide -> on ne fais rien
|
||||
if( username.value.length > 0 || firstname.value.length == 0 && lastname.value.length == 0 )
|
||||
return false;
|
||||
|
||||
/* (4) On attribue à Pseudo, la valeur de Prénom+Nom */
|
||||
username.value = firstname.value +' '+ lastname.value;
|
||||
firstname.value = '';
|
||||
lastname.value = '';
|
||||
|
@ -85,23 +92,30 @@ function dynamicUpdate(target){
|
|||
/* (3) On enregistre les CONTACTS */
|
||||
contactManager.fieldsToStorage();
|
||||
|
||||
/* (4) On synchronise les MINI avec les CONTACTS */
|
||||
/* (4) On enregistre la MATRICE */
|
||||
matriceManager.fieldsToStorage();
|
||||
|
||||
/* (5) On synchronise les MINI avec les CONTACTS */
|
||||
miniManager.sync();
|
||||
|
||||
/* (5) On synchronise les FICHE avec les CONTACTS */
|
||||
/* (6) On synchronise les FICHE avec les CONTACTS */
|
||||
// 1. On synchronise les `mini` et `fiches` associées en fonction de la dernière date de modification
|
||||
// 2. On synchronise les `fiches` dupliquées en fonction de la dernière date de modification
|
||||
ficheManager.sync();
|
||||
|
||||
/* (6) On affiche le tout */
|
||||
|
||||
/* (7) On affiche le tout */
|
||||
miniManager.storageToFields();
|
||||
ficheManager.storageToFields();
|
||||
matriceManager.storageToFields();
|
||||
|
||||
/* (7) On met à jour les contacts si on les a modifié */
|
||||
if( isSaveButton )
|
||||
/* (8) On met à jour les contacts si on les a modifié on si on navigue dans les contacts */
|
||||
if( isSaveButton || isNavContact )
|
||||
contactManager.storageToFields();
|
||||
}
|
||||
}
|
||||
|
||||
// Vérifie qu'une seule valeur vaut TRUE et les autres false
|
||||
// Vérifie qu'une seule valeur vaut TRUE et les autres false (objet deflated de type <radio> )
|
||||
function checkRadioValue(selectData){
|
||||
var nbTrue = 0;
|
||||
for( var i = 0 ; i < selectData.length ; i++ )
|
||||
|
@ -136,8 +150,9 @@ function checkRadioValue(selectData){
|
|||
=========================================================*/
|
||||
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-mini.js', function(){
|
||||
include('/js/includes/input-phone-fiche.js', function(){
|
||||
include('/js/includes/input-phone-matrice.js', function(){
|
||||
|
||||
|
||||
/* (1) Gestion du formulaire du sujet
|
||||
|
@ -163,7 +178,7 @@ include('/js/includes/input-phone-fiche.js', function(){
|
|||
/* (1) On crée une instance du gestionnaire des CONTACTS */
|
||||
contactManager = new inputPhoneContact(
|
||||
$('article.contact-panel'),
|
||||
$('h4.add-contact')
|
||||
$('#nav-contact')
|
||||
);
|
||||
|
||||
/* (2) On le démarre */
|
||||
|
@ -195,119 +210,283 @@ include('/js/includes/input-phone-fiche.js', function(){
|
|||
ficheManager.attach(dynamicUpdate);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* (5) Gestion de l'import du fichier
|
||||
/* (5) Gestion de la matrice de relations
|
||||
---------------------------------------------------------*/
|
||||
importCallLog.addEventListener('change', function(e){
|
||||
/* (1) On crée une instance du gestionnaire de la matrice */
|
||||
matriceManager = new inputPhoneMatrice(
|
||||
$('article.matrice-panel')
|
||||
);
|
||||
|
||||
/* (2) On le démarre */
|
||||
matriceManager.attach(dynamicUpdate);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* (6) Gestion de l'import du fichier
|
||||
---------------------------------------------------------*/
|
||||
// On vide l'input de type 'file' quand on clique
|
||||
$('input#call_log-import[type="file"]').addEventListener('click', function(e){
|
||||
e.target.value = null;
|
||||
}, false);
|
||||
|
||||
// Gestion de l'upload
|
||||
$('input#call_log-import[type="file"]').addEventListener('change', function(e){
|
||||
/* (1) On rédige la requête */
|
||||
var uploadRequest = {
|
||||
path: 'upload/call_log',
|
||||
file: importCallLog.files[0]
|
||||
var request = {
|
||||
path: 'upload/call_log',
|
||||
phone_number: $('#subject_phone_number').value,
|
||||
file: e.target.files[0]
|
||||
};
|
||||
|
||||
/* (2) On effectue l'upload (import) */
|
||||
api.send(uploadRequest, function(uploadResponse){
|
||||
console.log(uploadResponse);
|
||||
api.send(request, function(response){
|
||||
console.log(response);
|
||||
|
||||
// Si tout est bon, on met l'input en bleu
|
||||
if( uploadResponse.ModuleError == 0 ){
|
||||
importCallLog.addClass('active');
|
||||
|
||||
/* (3) On rédige la requête pour récupérer les données du fichier */
|
||||
var callLogRequest = {
|
||||
path: 'call_log/unserialize',
|
||||
phone_number: $('#subject_phone_number').value
|
||||
};
|
||||
|
||||
/* (4) On effectue la récupération d'informations */
|
||||
api.send(callLogRequest, function(dataResponse){
|
||||
console.log(dataResponse);
|
||||
|
||||
// Si erreur, on quitte
|
||||
if( dataResponse.ModuleError != 0 )
|
||||
return;
|
||||
// Si erreur, on quitte
|
||||
if( response.ModuleError != 0 )
|
||||
return;
|
||||
|
||||
|
||||
|
||||
/* (5) Pour chaque contact de l'annuaire, on ajoute un contact */
|
||||
for( var i = 0 ; i < dataResponse.directory.length ; i++ ){
|
||||
var uid = 0; // Contiendra l'uid des contacts
|
||||
|
||||
// On découpe le nom par espaces
|
||||
var name = dataResponse.directory[i].name===null ? '' : dataResponse.directory[i].name;
|
||||
var splitted = name.split(' ');
|
||||
/* (3) On récupère les contacts les plus APPELLÉS */
|
||||
var most_called = [];
|
||||
for( var i = 0 ; i < response.calls.length && i < 10 ; i++ )
|
||||
most_called.push( response.calls[i].number );
|
||||
|
||||
lsi.set('contacts', 'form'+i, {
|
||||
uid: i,
|
||||
number: dataResponse.directory[i].number,
|
||||
username: splitted.length == 1 ? splitted[0] : '', // Si un seul mot -> pseudo
|
||||
firstname: splitted.length > 1 ? splitted[0] : '', // Si plusieurs mots -> le 1er est le prénom
|
||||
lastname: splitted.length > 1 ? splitted.splice(1).join(' ') : '' // et les autres sont le nom
|
||||
});
|
||||
}
|
||||
/* (4) On crée les 10 contacts les plus APPELÉS */
|
||||
for( var i = 0 ; i < most_called.length ; i++ ){
|
||||
var splittedName = response.directory[most_called[i]].name.split(' ');
|
||||
|
||||
/* (6) On met à jour l'affichage */
|
||||
contactManager.storageToFields();
|
||||
dynamicUpdate(true);
|
||||
lsi.set('contacts', uid, {
|
||||
uid: uid,
|
||||
number: most_called[i],
|
||||
username: splittedName.length == 1 ? splittedName[0] : '', // Si un seul mot -> pseudo
|
||||
firstname: splittedName.length > 1 ? splittedName[0] : '', // Si plusieurs mots -> le 1er est le prénom
|
||||
lastname: splittedName.length > 1 ? splittedName.splice(1).join(' ') : '', // et les autres sont le nom
|
||||
countsms: response.directory[most_called[i]].sms, // Nombre de sms
|
||||
countcall: response.directory[most_called[i]].calls, // Nombre d'appels
|
||||
call: i, // classement dans le top 10 des APPELS
|
||||
sms: -1 // classement dans le top 10 des SMS
|
||||
});
|
||||
|
||||
uid++;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* (5) On récupère les contacts les plus SMSÉS */
|
||||
var most_sms = [];
|
||||
for( var i = 0 ; i < response.sms.length && i < 10 ; i++ )
|
||||
most_sms.push( response.sms[i].number );
|
||||
|
||||
/* (6) On crée les 10 contacts les plus SMSÉS */
|
||||
for( var i = 0 ; i < most_sms.length ; i++ ){
|
||||
// Si le contact est déja dans le top 10 des appels, on lui ajoute juste le classement dans le top 10 des SMS
|
||||
var callIndex = most_called.indexOf(most_sms[i]);
|
||||
if( callIndex > -1 ){
|
||||
var created = lsi.get('contacts', callIndex);
|
||||
created.sms = i;
|
||||
lsi.set('contacts', callIndex, created);
|
||||
continue;
|
||||
}
|
||||
|
||||
var splittedName = response.directory[most_sms[i]].name.split(' ');
|
||||
|
||||
lsi.set('contacts', uid, {
|
||||
uid: uid,
|
||||
number: most_sms[i],
|
||||
username: splittedName.length == 1 ? splittedName[0] : '', // Si un seul mot -> pseudo
|
||||
firstname: splittedName.length > 1 ? splittedName[0] : '', // Si plusieurs mots -> le 1er est le prénom
|
||||
lastname: splittedName.length > 1 ? splittedName.splice(1).join(' ') : '', // et les autres sont le nom
|
||||
countsms: response.directory[most_sms[i]].sms, // Nombre de sms
|
||||
countcall: response.directory[most_sms[i]].calls, // Nombre d'appels
|
||||
call: -1, // classement dans le top 10 des APPELS
|
||||
sms: i // classement dans le top 10 des SMS
|
||||
});
|
||||
|
||||
uid++;
|
||||
}
|
||||
|
||||
|
||||
/* (7) Pour chaque contact qui n'est pas dans le top 10, on l'ajoute */
|
||||
for( var number in response.directory ){
|
||||
|
||||
// Si dans top 10 des APPELS, on ne l'ajoute pas
|
||||
if( most_called.indexOf(number) > -1 )
|
||||
continue;
|
||||
|
||||
// Si dans top 10 des SMS, on ne l'ajoute pas
|
||||
if( most_sms.indexOf(number) > -1 )
|
||||
continue;
|
||||
|
||||
// On découpe le nom par espaces
|
||||
var name = response.directory[number].name===null ? '' : response.directory[number].name;
|
||||
var splittedName = name.split(' ');
|
||||
|
||||
|
||||
|
||||
lsi.set('contacts', uid, {
|
||||
uid: uid,
|
||||
number: number,
|
||||
username: splittedName.length == 1 ? splittedName[0] : '', // Si un seul mot -> pseudo
|
||||
firstname: splittedName.length > 1 ? splittedName[0] : '', // Si plusieurs mots -> le 1er est le prénom
|
||||
lastname: splittedName.length > 1 ? splittedName.splice(1).join(' ') : '', // et les autres sont le nom
|
||||
countsms: response.directory[number].sms, // Nombre de sms
|
||||
countcall: response.directory[number].calls, // Nombre d'appels
|
||||
call: -1,
|
||||
sms: -1
|
||||
});
|
||||
|
||||
uid++;
|
||||
}
|
||||
|
||||
|
||||
/* (8) On met à jour l'affichage */
|
||||
contactManager.storageToFields();
|
||||
dynamicUpdate(true);
|
||||
|
||||
});
|
||||
|
||||
}, false);
|
||||
|
||||
|
||||
/* (6) Gestion de l'effacement des données locales
|
||||
|
||||
/* (7) Gestion de l'effacement des données locales
|
||||
---------------------------------------------------------*/
|
||||
clearAllButton.addEventListener('click', function(e){
|
||||
localStorage.clear();
|
||||
reload();
|
||||
$('#clear-all').addEventListener('click', function(e){
|
||||
/* (1) On vide tous les dataset de données */
|
||||
lsi.clear('subject');
|
||||
lsi.clear('contacts');
|
||||
lsi.clear('mini-fiches');
|
||||
lsi.clear('fiches');
|
||||
lsi.clear('matrice');
|
||||
|
||||
|
||||
/* (2) On met à jour l'affichage */
|
||||
subjectManager.storageToFields();
|
||||
contactManager.storageToFields();
|
||||
miniManager.storageToFields();
|
||||
ficheManager.storageToFields();
|
||||
matriceManager.storageToFields();
|
||||
}, false);
|
||||
|
||||
|
||||
|
||||
}) }) }) });
|
||||
/* (8) Gestion de l'export des données locales
|
||||
---------------------------------------------------------*/
|
||||
$('#export-all').addEventListener('click', function(e){
|
||||
/* (1) On construit les données */
|
||||
var data = {
|
||||
subject: lsi.export('subject')[0],
|
||||
contacts: lsi.export('contacts'),
|
||||
mini: lsi.export('mini-fiches'),
|
||||
fiches: lsi.export('fiches'),
|
||||
matrice: lsi.export('matrice')[0]
|
||||
};
|
||||
|
||||
|
||||
/* (2) On lance le téléchargement */
|
||||
var downloadTarget = $('#download-target'); // On récupère le lien (<a>) caché qui fera le téléchargement
|
||||
downloadTarget.download = 'local-data.json'; // Nom du fichier qui sera téléchargé
|
||||
downloadTarget.href = 'data:application/octet-stream,' + encodeURIComponent(JSON.stringify(data)); // Contenu
|
||||
downloadTarget.click(); // On lance le téléchargement
|
||||
|
||||
}, false);
|
||||
|
||||
|
||||
|
||||
|
||||
// ETAPE 1 : INITIALISATION (ON RESTAURE LES DONNEES)
|
||||
// 1. contact.storageToFields();
|
||||
// 2. contact.add();
|
||||
// 3. mini.storageToFields();
|
||||
// 4. fiche.storageToFields();
|
||||
/* (9) Gestion de l'import des données locales
|
||||
---------------------------------------------------------*/
|
||||
// Le bouton lance l'<input> file
|
||||
$('#import-all').addEventListener('click', function(e){
|
||||
$('#local-upload').click();
|
||||
}, false);
|
||||
|
||||
// ETAPE 2 : ENREGISTREMENT + MISE À JOUR
|
||||
// 1. mini.fieldsToStorage();
|
||||
// 2. fiche.fieldsToStorage();
|
||||
// 3. contact.fieldsToStorage();
|
||||
// 4. mini.sync();
|
||||
// 5. fiche.sync();
|
||||
|
||||
// On vide l'input de type 'file' quand on clique
|
||||
$('#local-upload').addEventListener('click', function(e){
|
||||
e.target.value = null;
|
||||
}, false);
|
||||
|
||||
// Gestion de l'upload d'une sauvegarde de formulaire local
|
||||
$('#local-upload').addEventListener('change', function(e){
|
||||
/* (1) Rédaction de la requête d'upload */
|
||||
var request = {
|
||||
path: 'upload/local_data',
|
||||
file: $('#local-upload').files[0]
|
||||
};
|
||||
|
||||
/* (2) Upload et réponse */
|
||||
api.send(request, function(response){
|
||||
console.log(response);
|
||||
|
||||
// Si erreur, on quitte
|
||||
if( response.ModuleError != 0 )
|
||||
return false;
|
||||
|
||||
console.log(response.local_data.matrice);
|
||||
|
||||
/* (3) On enregistre les données dans le 'localStorage' */
|
||||
lsi.set('subject', 0, response.local_data.subject);
|
||||
lsi.import('contacts', response.local_data.contacts);
|
||||
lsi.import('mini-fiches', response.local_data.mini);
|
||||
lsi.import('fiches', response.local_data.fiches);
|
||||
lsi.set('matrice', 0, response.local_data.matrice);
|
||||
|
||||
/* (3) On met à jour l'affichage */
|
||||
subjectManager.storageToFields();
|
||||
contactManager.storageToFields();
|
||||
matriceManager.storageToFields();
|
||||
dynamicUpdate(true);
|
||||
|
||||
});
|
||||
|
||||
}, false);
|
||||
|
||||
|
||||
|
||||
|
||||
/* (10) Gestion de la validation et de l'envoi des données
|
||||
---------------------------------------------------------*/
|
||||
$('#submit-all').addEventListener('click', function(e){
|
||||
console.log('> GATHERING ALL DATA');
|
||||
|
||||
/* (1) On met dans la mémoire tout les champs non enregistrés */
|
||||
subjectManager.fieldsToStorage();
|
||||
contactManager.fieldsToStorage();
|
||||
miniManager.fieldsToStorage();
|
||||
ficheManager.fieldsToStorage();
|
||||
|
||||
/* (2) On prépare la requête avec toutes les données */
|
||||
var request = {
|
||||
path: 'input/phone',
|
||||
|
||||
subject: lsi.export('subject')[0],
|
||||
contacts: lsi.export('contacts'),
|
||||
mini: lsi.export('mini-fiches'),
|
||||
fiches: lsi.export('fiches')
|
||||
};
|
||||
|
||||
/* (3) On envoie la requête et traite la réponse */
|
||||
api.send(request, function(response){
|
||||
console.log(response);
|
||||
}, false);
|
||||
|
||||
|
||||
}, false);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// var number = $('input.number[type="text"]');
|
||||
// ic.append(number, format_number, '06 06 06 06 06');
|
||||
// // format_number -> format pour les numéros de téléphones
|
||||
//
|
||||
// number.addEventListener('keyup', function(e){
|
||||
// ic.correct(number, false);
|
||||
// }, false);
|
||||
}); }); }); }); });
|
||||
|
|
Loading…
Reference in New Issue