| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | <?phpclass 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();	}}?>
 |