diff --git a/config/modules.json b/config/modules.json
index 91b0dc2..d8fa239 100755
--- a/config/modules.json
+++ b/config/modules.json
@@ -262,6 +262,15 @@
},
+ "iexplorer_convert": {
+ "description": "Convertisseur .txt (iExplorer) vers .xml (Call Log)",
+ "permissions": ["admin"],
+ "parameters": {
+ "file": { "description": "Fichier exporté de iExplorer", "type": "FILE" }
+ }
+ },
+
+
"local_data": {
"description": "Upload d'une sauvegarde de formulaire local au format .json.",
"permissions": ["admin"],
diff --git a/config/upload-auth.json b/config/upload-auth.json
index 76a23c2..552dcce 100644
--- a/config/upload-auth.json
+++ b/config/upload-auth.json
@@ -2,6 +2,7 @@
"root": "/src/upload",
"directories": [
"call_log",
- "local_data"
+ "local_data",
+ "convert_iexplorer"
]
}
diff --git a/js/includes/input-phone-matrice-min.js b/js/includes/input-phone-matrice-min.js
index 9a2505c..31153be 100644
--- a/js/includes/input-phone-matrice-min.js
+++ b/js/includes/input-phone-matrice-min.js
@@ -2,4 +2,4 @@ function inputPhoneMatrice(a){this.container=a}inputPhoneMatrice.prototype={cont
inputPhoneMatrice.prototype.fieldsToStorage=function(){console.log("MATRICE: FIELDS TO STORAGE");var a=(new FormDeflater(this.container,["input"],["data-name"])).deflate();crc32(JSON.stringify(a));var d={},b;for(b in a)if(a[b]instanceof Array)for(var e in a[b])null==d[b]&&(d[b]=[]),d[b].push(parseInt(a[b][e]));else null!==a[b]&&(null==d[b]&&(d[b]=[]),d[b].push(parseInt(a[b])));lsi.set("p_matrice",0,d)};
inputPhoneMatrice.prototype.storageToFields=function(){console.log("MATRICE: STORAGE TO FIELDS");var a=lsi["export"]("p_fiches"),d=lsi.get("p_matrice",0),b=lsi["export"]("p_contacts"),e=[],c;for(c in a)-1==e.indexOf(a[c].contact)&&e.push(a[c].contact);a="
"};
-inputPhoneMatrice.prototype.attach=function(){console.log("MATRICE: ATTACH");lsi.createDataset("p_matrice");this.storageToFields();var a=this;this.container.addEventListener("click",function(d){a.fieldsToStorage();a.storageToFields()},!1)};
+inputPhoneMatrice.prototype.attach=function(){console.log("MATRICE: ATTACH");lsi.createDataset("p_matrice");this.storageToFields();var a=this;this.container.addEventListener("click",function(d){a.fieldsToStorage();a.storageToFields()},!1);this.snake()};inputPhoneMatrice.prototype.snake=function(){this.sVelocity=[0,0];this.sLength=0;this.sStack=[]};
diff --git a/js/includes/input-phone-matrice.js b/js/includes/input-phone-matrice.js
index a797aaf..6352ee0 100644
--- a/js/includes/input-phone-matrice.js
+++ b/js/includes/input-phone-matrice.js
@@ -170,4 +170,26 @@ inputPhoneMatrice.prototype.attach = function(){
ptr.fieldsToStorage();
ptr.storageToFields();
}, false);
+
+ this.snake();
+};
+
+
+
+
+
+
+
+
+
+
+inputPhoneMatrice.prototype.snake = function(){
+
+ /* [0] On écrit les fonctions principales
+ =========================================================*/
+ this.sVelocity = [0, 0];
+ this.sLength = 0;
+ this.sStack = [];
+
+
};
diff --git a/manager/module/upload.php b/manager/module/upload.php
index 6c36338..7f4060e 100644
--- a/manager/module/upload.php
+++ b/manager/module/upload.php
@@ -364,6 +364,127 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /* CONVERTISSEUR .txt de iExplorer vers .xml de Call Log
+ *
+ * @file Pointeur vers $_FILES['']
+ *
+ */
+ public static function iexplorer_convert($params){
+ extract($params);
+
+ /* [1] Gestion de l'upload du fichier et de la vérification du format
+ =========================================================*/
+ $uploadError = self::simpleFile(
+ 'convert_iexplorer',// nom du dossier d'upload
+ 'txt', // format du fichier
+ $file, // Fichier lui-même
+ function($content){
+ $lines = explode("\n", $content);
+
+ foreach($lines as $l=>$line)
+ if( strlen($line) > 0 && !preg_match('/^([\w\(\):\.@-]+(?: {1,3}[\w\(\):\.@-]+)*) +([\w\(\):\.@-]+(?: {1,3}[\w\(\):\.@-]+)*) +([\w\(\):\.@-]+(?: {1,3}[\w\(\):\.@-]+)*) +([\w\(\):\.@-]+(?: {1,3}[\w\(\):\.@-]+)*) *$/u', $line) )
+ return false;
+
+ return true;
+ }
+ );
+
+ /* (1) Si erreur d'upload, on la renvoie */
+ if( $uploadError != ManagerError::Success )
+ return array( 'ModuleError' => $uploadError );
+
+
+
+ /* [2] On récupère les colonnes avec la premiére ligne
+ =========================================================*/
+ /* (1) On met un handler sur le fichier pour le lire */
+ $path = __ROOT__."/src/upload/convert_iexplorer/".$_SESSION['username'].".txt";
+
+ $handler = new \SplFileObject($path, 'r');
+
+ /* (2) On récupère pour chaque colonne, la position dans le chaine, et la valeur */
+ $data = array();
+ $lineCount = 0;
+ while( !$handler->eof() ){
+ $line = $handler->fgets();
+
+ /* (1) Si première ligne, c'est les intitulés */
+ if( $lineCount == 0 ){
+ // Si erreur dans les intitulés, on retourne une erreur
+ if( !preg_match('/^([\w\(\):\.@-]+(?: [\w\(\):\.@-]+)*) +([\w\(\):\.@-]+(?: [\w\(\):\.@-]+)*) +([\w\(\):\.@-]+(?: [\w\(\):\.@-]+)*) +([\w\(\):\.@-]+(?: [\w\(\):\.@-]+)*) *$/u', $line, $matches) )
+ return array( 'ModuleError' => ManagerError::FormatError );
+
+ // On récupère les colonnes
+ $columns = array_slice($matches, 1);
+
+ // On récupére les positions des colonnes
+ $colpos = array();
+ foreach($columns as $column)
+ array_push($colpos, strpos($line, $column));
+
+ }
+
+
+
+ /* (2) S'il reconnait pas la ligne, on passe à la suivante */
+ if( !preg_match('/^([\w\(\):\.@-]+(?: {1,3}[\w\(\):\.@-]+)*) +([\w\(\):\.@-]+(?: {1,3}[\w\(\):\.@-]+)*) +([\w\(\):\.@-]+(?: {1,3}[\w\(\):\.@-]+)*) +([\w\(\):\.@-]+(?: {1,3}[\w\(\):\.@-]+)*) *$/u', $line, $matches) )
+ continue;
+
+ /* (3) On enregistre les données sinon */
+ $cur = array();
+ foreach($columns as $c=>$column)
+ $cur[$column] = $matches[$c+1];
+
+ array_push($data, $cur);
+
+
+ $lineCount++;
+ }
+
+
+ $handler = null;
+
+ /* (3) Restitution du retour de `unserialize` */
+ return array(
+ 'ModuleError' => ManagerError::Success,
+ 'data' => $data
+ );
+ }
+
+
}
diff --git a/view/iexplorer-to-call-log.php b/view/iexplorer-to-call-log.php
new file mode 100644
index 0000000..297f9d0
--- /dev/null
+++ b/view/iexplorer-to-call-log.php
@@ -0,0 +1,111 @@
+dispatch();
+
+ // Si erreur, on l'affiche
+ if( $response->error != ManagerError::Success )
+ var_dump( ManagerError::explicit($response->error) );
+
+ // On récupère les données
+ $logs = $response->get('data');
+
+ /* [1] On associe un faux numéro à chaque utilisateur
+ =========================================================*/
+ $falseNumbers = array(0); // Contiendra les numéros attribués
+ $alreadyNumbered = array(); // Contiendra aux mêmes indices que les numéros, les noms des personnes les ayant utilisé
+
+ // Pour chaque utilisateur
+ foreach($logs as $i=>$log){
+
+ // On évite la première ligne
+ if( $i == 0 ){
+ unset($logs[$i]);
+ continue;
+ }
+
+ $numberIndex = array_search($log['Number'], $alreadyNumbered);
+
+ /* (1) Si pas encore de numéro, on en attribue un */
+ if( $numberIndex === false ){
+ $lastnumIndex = count($falseNumbers) - 1;
+ $newNumber = ++$falseNumbers[$lastnumIndex];
+ $numberIndex = array_push($falseNumbers, $newNumber ) - 1;
+ $alreadyNumbered[$numberIndex] = $log['Number'];
+ }
+
+ $logs[$i]['Name'] = $logs[$i]['Number'];
+ $logs[$i]['Number'] = $falseNumbers[$numberIndex];
+ }
+
+ /* (2) On convertit les numéros en string */
+ foreach($falseNumbers as $n=>$number){
+ $stringNumber = "0600000000"; $snlen = strlen($stringNumber);
+ $stringValue = strval($number); $svlen = strlen($stringValue);
+
+ $stringNumber = substr($stringNumber, 0, $snlen-$svlen);
+ $stringNumber .= $stringValue;
+
+ $falseNumbers[$n] = $stringNumber;
+ $logs[$i]['Number'] = $falseNumbers[$numberIndex];
+ }
+
+ foreach($logs as $i=>$log){
+ $numberIndex = array_search($log['Name'], $alreadyNumbered);
+ $logs[$i]['Number'] = $falseNumbers[$numberIndex];
+ }
+
+ /* [2] On rédige les headers
+ =========================================================*/
+ header('Content-type: text/xml');
+ header('Content-Disposition: attachment; filename=call-log.xml');
+
+
+ /* [3] On rédige le contenu du fichier XML
+ =========================================================*/
+ echo "\n";
+ echo "\n";
+
+ // Pour chaque utilisateur
+ foreach($logs as $i=>$log)
+ echo " \n";
+
+ echo "\n";
+
+ // Si aucun fichier
+ }else{ ?>
+
+