83 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace nur\mapper\csv;
 | |
| 
 | |
| use nur\b\params\Tparametrable;
 | |
| use nur\b\ValueException;
 | |
| use nur\mapper\base\Mapper;
 | |
| 
 | |
| abstract class AbstractCsvMapper extends Mapper {
 | |
|   use Tparametrable;
 | |
| 
 | |
|   const SEPARATOR = csv_defaults::OO_SEPARATOR;
 | |
|   const ENCLOSURE = csv_defaults::OO_ENCLOSURE;
 | |
|   const ESCAPE = csv_defaults::OO_ESCAPE;
 | |
| 
 | |
|   function __construct(?iterable $source=null) {
 | |
|     parent::__construct($source);
 | |
|     $this->separator = static::SEPARATOR;
 | |
|     $this->enclosure = static::ENCLOSURE;
 | |
|     $this->escape = static::ESCAPE;
 | |
|   }
 | |
| 
 | |
|   const PARAMETRABLE_PARAMS_SCHEMA = [
 | |
|     "csv_flavour" => [null, null, "type de fichier CSV: excel ou ooffice"],
 | |
|     "multi_schema" => ["bool", false, "les flux multi-schémas sont-ils supportés?"],
 | |
|   ];
 | |
| 
 | |
|   protected $separator;
 | |
|   protected $enclosure;
 | |
|   protected $escape;
 | |
| 
 | |
|   function getCsvFlavour(): array {
 | |
|     return [$this->separator, $this->enclosure, $this->escape];
 | |
|   }
 | |
| 
 | |
|   /** @param $csvFlavour string|array */
 | |
|   function pp_setCsvFlavour($csvFlavour): void {
 | |
|     if ($csvFlavour === null) {
 | |
|       $csvFlavour = [static::SEPARATOR, static::ENCLOSURE, static::ESCAPE];
 | |
|     }
 | |
|     if (is_string($csvFlavour)) {
 | |
|       $csvFlavour = csv_defaults::verifix_name($csvFlavour);
 | |
|       switch ($csvFlavour) {
 | |
|       case csv_defaults::OO_NAME:
 | |
|         $csvFlavour = csv_defaults::OO_FLAVOUR;
 | |
|         break;
 | |
|       case csv_defaults::XL_NAME:
 | |
|         $csvFlavour = csv_defaults::XL_FLAVOUR;
 | |
|         break;
 | |
|       default:
 | |
|         if (strlen($csvFlavour) <= 3) {
 | |
|           $separator = substr($csvFlavour, 0, 1);
 | |
|           if (!$separator) $separator = static::SEPARATOR;
 | |
|           $enclosure = substr($csvFlavour, 1, 1);
 | |
|           if (!$enclosure) $enclosure = static::ENCLOSURE;
 | |
|           $escape = substr($csvFlavour, 2, 1);
 | |
|           if (!$escape) $escape = static::ESCAPE;
 | |
|           $csvFlavour = [$separator, $enclosure, $escape];
 | |
|         }
 | |
|         break;
 | |
|       }
 | |
|     }
 | |
|     if (is_array($csvFlavour)) {
 | |
|       [$this->separator, $this->enclosure, $this->escape] = $csvFlavour;
 | |
|     } else {
 | |
|       throw ValueException::invalid_value($csvFlavour, "csv flavour");
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /** @param $csvFlavour string|array */
 | |
|   function setCsvFlavour($csvFlavour): self {
 | |
|     $this->pp_setCsvFlavour($csvFlavour);
 | |
|     return $this;
 | |
|   }
 | |
| 
 | |
|   /** @var bool les fichiers avec plusieurs schémas sont-ils supportés? */
 | |
|   protected $ppMultiSchema;
 | |
| 
 | |
|   function setMultiSchema(bool $multiSchema=true): self {
 | |
|     $this->ppMultiSchema = $multiSchema;
 | |
|     return $this;
 | |
|   }
 | |
| }
 |