| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 | 
							- <?php
 
- class TextExport {
 
- 	public $mime = 'text/plain';
 
- 	public $extension = 'txt';
 
- 	public $description = 'Fichier de texte brut';
 
- 	public function sample($dataset,$level = 0,$parent=''){
 
- 		$stream = '';
 
- 		$parent = ($parent!=''?$parent.'.':'');
 
- 		$indentation = str_repeat("\t", $level);
 
- 		foreach($dataset as $macro => $infos){
 
- 			$infos['type'] = isset($infos['type']) ? $infos['type'] : '';
 
- 			switch($infos['type']){
 
- 				case 'list':
 
- 					$stream .= $indentation.'-'.$parent.$macro.' '.(isset($infos['label'])?': '.$infos['label']:'').' (liste)'.PHP_EOL;
 
- 					$stream .= $indentation.'{{#'.$parent.$macro.'}}'.PHP_EOL;
 
- 					if(is_array($infos['value']) && isset($infos['value'][0])) $stream .=  self::sample($infos['value'][0],$level+1);
 
- 					$stream .=$indentation.'{{/'.$parent.$macro.'}}';
 
- 				break;
 
- 				case 'object':
 
- 					$stream .= $indentation.'-'.$parent.$macro.' '.(isset($infos['label'])?': '.$infos['label']:'').PHP_EOL;
 
- 					$stream .= self::sample($infos['value'],$level+1,$parent.$macro);
 
- 				break;
 
- 				case 'image': break;
 
- 				default :
 
- 					$stream .= $indentation.'{{'.$parent.$macro.'}} : '.( !isset($infos['label']) ? '': $infos['label']).PHP_EOL;
 
- 				break;
 
- 			}
 
- 		}
 
- 		return $stream;
 
- 	}
 
- 	//permet aux exports enfant de surcharger la méthode pour convertir des valeurs en fct de leurs type sur un export particulier
 
- 	// (ex: convertion des flux images en base64 sur les fichiers html)
 
- 	public  function formatValue($type,$value){
 
- 		if($type == 'image') return '';
 
- 		return $value;
 
- 	}
 
- 	public function decomposeKey($datas,$key){
 
- 		if(array_key_exists($key, $datas)) return isset($datas[$key]) ? $datas[$key] : '';
 
- 		$attributes = explode('.',$key);
 
- 		$current = $datas;
 
- 		$value = null;
 
-         foreach ($attributes as $attribute) {
 
-         	if(!array_key_exists($attribute, $current)) break;
 
-         	$current = $current[$attribute];
 
-         	$value = isset($current) ? $current : '';
 
-         }
 
-         return $value;
 
- 	}
 
- 	public function from_template($stream, $datas){
 
- 		//if / loop
 
- 		$loopIfRegex = '/\{\{\#([^\/\#}]*)\}\}(.*?)\{\{\/\1\}\}/is';
 
- 		$stream =  preg_replace_callback($loopIfRegex,function($matches) use ($datas) {
 
- 			$key = $matches[1];
 
- 			$streamTpl = $matches[2];
 
- 			$keyInfos = explode('::',$key);
 
- 			$key = $keyInfos[0];
 
- 			$type = isset($keyInfos[1]) ? $keyInfos[1] : 'string';
 
- 			$value = $this->decomposeKey($datas,$key);
 
- 			//gestion des boucles
 
- 			if(is_array($value)){
 
- 				$stream = '';
 
- 				foreach($value as $line){
 
- 					$localData = is_array($line) ? array_merge($datas,$line) : $datas;
 
- 					$stream .= $this->from_template($streamTpl,$localData);
 
- 				}
 
- 				return $stream;
 
- 			//gestion des if
 
- 			}else{
 
- 				return !isset($value) || (!is_array($value) && empty($value)) || (is_array($value) && count($value)==0) ? '' : $this->from_template($streamTpl,$datas);
 
- 			}
 
- 		},$stream);
 
- 		//gestion des else
 
- 		$elseRegex = '/\{\{\^([^\/\#}]*)\}\}(.*?)\{\{\/\1\}\}/is';
 
- 		$stream =  preg_replace_callback($elseRegex,function($matches) use ($datas) {
 
- 			$key = $matches[1];
 
- 			$streamTpl = $matches[2];
 
- 			$keyInfos = explode('::',$key);
 
- 			$key = $keyInfos[0];
 
- 			$type = isset($keyInfos[1]) ? $keyInfos[1] : 'string';
 
- 			$value = $this->decomposeKey($datas,$key);
 
- 			if(is_array($value)){
 
- 				$stream = '';
 
- 				foreach($value as $line){
 
- 					$localData = is_array($line) ? array_merge($datas,$line) : $datas;
 
- 					$stream .= $this->from_template($streamTpl,$localData);
 
- 				}
 
- 				return $stream;
 
- 			//gestion des else
 
- 			}else{
 
- 				return !isset($value) || (!is_array($value) && empty($value)) || (is_array($value) && count($value)==0) ? $this->from_template($streamTpl,$datas) : '';
 
- 			}
 
- 		},$stream);
 
- 		//gestion des simples variables
 
- 	    $stream = preg_replace_callback('/{{([^#\/}]*)}}/',function($matches) use ($datas) {
 
- 	        $key = $matches[1];
 
- 	        $keyInfos = explode('::',$key);
 
- 			$key = $keyInfos[0];
 
- 			$type = isset($keyInfos[1]) ? $keyInfos[1] : 'string';
 
- 	        $value = $this->decomposeKey($datas,$key);
 
- 	        if(!isset($value)) return $this->formatValue($type,$matches[0]);
 
- 	        if(is_array($value)) return 'Array';
 
- 	        return $this->formatValue($type,$value);
 
- 	    },$stream);
 
- 		return $stream;
 
- 	}
 
- }
 
 
  |