123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- <?php
- class CsvImport{
- public $mime = 'application/csv';
- public $extension = 'csv';
- public $description = 'Fichier tableur générique';
- public $meta = array();
- /* convertis le fichier en tableau lignes / colonnes
-
- Le tableau final doit avoir la forme :
- array( <-- excel
- array( <-- ligne
- array( <-- cellule
- 'value' => '' <-- valeur cellule
- 'color' => '' <-- propriété optionelle "couleur" (ou autre)
- )
- )
- )
- */
- public function toArray($file){
- $stream = file_get_contents($file);
- $stream = utf8_encode($stream);
-
- //met a plat les lignes comportant un saut de ligne car entre ""
- $stream = preg_replace_callback('/"(.*)"/Uis', function($match){
- return str_replace(array("\n","\r"),'<br>',$match[1]);
- }, $stream);
-
- $finalArray = array();
- $emptyLines = 0;
- foreach(explode(PHP_EOL,$stream) as $line){
- //si + de 10 lignes vides on arrette de lire (evite les excels sans fin)
- if($this->emptyLine($line,true)) $emptyLines++;
- if($emptyLines>10) break;
- $finalLine = array();
- foreach(explode(';',$line) as $cell) $finalLine[]= array('value'=>$cell);
-
- $finalArray[] = $finalLine;
- }
-
- return $finalArray;
- }
- //vérifie si une ligne est a vide ou non
- public function emptyLine($line,$raw = false){
- if($raw) return str_replace(array(';',' ',"\t","\n","\r"),'',$line) == '';
- $oneFilled = false;
- foreach($line as $i=>$cell){
- if( $this->emptyCell($cell) ) continue;
-
- $oneFilled = true;
- break;
- }
- return !$oneFilled;
- }
- //vérifie si une cellule est a vide ou non
- public function emptyCell($cell){
- return str_replace(array(';',' ',"\t","\n","\r"),'',$cell['value']) == '';
- }
- //Déduction du type d'une celleule a partir de sa valeur
- public function cellType($headerCell,$valueCell){
- $columnName = isset($headerCell['label']) ? $headerCell['label'] : $headerCell['value'];
- $value = $valueCell['value'];
- $deductedType = 'text';
-
- if(strlen($value)>225) $deductedType = 'textarea';
- if(is_int($value)) $deductedType = 'number';
- if(is_float($value) || is_double($value)) $deductedType = 'decimal';
- if( strtolower($value) =='oui'
- || strtolower($value) =='non'
- || strtolower($value) =='o'
- || strtolower($value) =='x'
- || strtolower($value) =='n'
- || stripos($columnName, 'VRAI/FAUX') !== false
- || stripos($columnName, 'OUI/NON') !== false
- || stripos($columnName, 'O/N') !== false
- ) $deductedType = 'boolean';
- if(strpos($value,'€') !== false) $deductedType = 'price';
- if(stripos($columnName, 'prix ')===0 || stripos($columnName, 'montant ')===0 || stripos($columnName, 'tarif ')===0 ) $deductedType = 'price';
- if(stripos($columnName, 'date ')===0) $deductedType = 'date';
- if(stripos($columnName, 'catégorie ')===0 || stripos($columnName, 'categorie ')===0 ) $deductedType = 'dictionary';
- if(stripos($columnName, 'type ')===0 ) $deductedType = 'dictionary';
-
- return $deductedType;
- }
- //Réglages spécifiques a ce modèle d'import
- public function settings(){
- return array();
- }
- }
- ?>
|