58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace nulib\file\tab;
 | |
| 
 | |
| use nulib\cl;
 | |
| use nulib\exceptions;
 | |
| use nulib\file\csv\CsvBuilder;
 | |
| use nulib\file\web\Upload;
 | |
| use nulib\os\path;
 | |
| use nulib\ValueException;
 | |
| 
 | |
| trait TAbstractBuilder {
 | |
|   /** @param Upload|string|array $builder */
 | |
|   static function with($builder, ?array $params=null): IBuilder {
 | |
|     if ($builder instanceof self) return $builder;
 | |
|     $class = null;
 | |
|     if ($builder instanceof Upload) {
 | |
|       # faire un builder dans le même format que le fichier uploadé
 | |
|       if ($builder->isExt(".csv")) {
 | |
|         $class = CsvBuilder::class;
 | |
|       } else {
 | |
|         $class = static::class;
 | |
|         if ($builder->isExt(".ods")) {
 | |
|           $params["ss_type"] = "ods";
 | |
|         } else {
 | |
|           $params["ss_type"] = "xlsx";
 | |
|         }
 | |
|       }
 | |
|       return new $class($builder->name, $params);
 | |
|     }
 | |
| 
 | |
|     if (is_string($builder)) {
 | |
|       $params["output"] = $builder;
 | |
|     } elseif (is_array($builder)) {
 | |
|       $params = cl::merge($builder, $params);
 | |
|     } elseif ($builder !== null) {
 | |
|       throw exceptions::invalid_type($builder, "builder", self::class);
 | |
|     }
 | |
| 
 | |
|     $output = $params["output"] ?? null;
 | |
|     $ssType = null;
 | |
|     if (is_string($output)) {
 | |
|       $ext = path::ext($output);
 | |
|       if ($output === "-" || $ext === ".csv") {
 | |
|         $class = CsvBuilder::class;
 | |
|       } elseif ($ext === ".ods") {
 | |
|         $ssType = "ods";
 | |
|       } elseif ($ext === ".xlsx") {
 | |
|         $ssType = "xlsx";
 | |
|       } else {
 | |
|         $ssType = "xlsx";
 | |
|       }
 | |
|     }
 | |
|     $params["ss_type"] = $ssType;
 | |
|     if ($class === null) $class = static::class;
 | |
|     return new $class(null, $params);
 | |
|   }
 | |
| }
 |