| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 | 
							- <?php 
 
- class TextExport
 
- {
 
- 	public static $mime = 'text/plain';
 
- 	public static $extension = 'txt';
 
- 	public static $description = 'Fichier de texte brut';
 
- 	public static function sample($dataset){
 
- 		$stream = '';
 
- 		foreach($dataset as $macro => $infos)
 
- 			$stream .= ($infos['type']=='list') ? '{{#'.$macro.'}}{{/'.$macro.'}} : '.$infos['desc'].PHP_EOL : '{{'.$macro.'}} : '.$infos['desc'].PHP_EOL;
 
- 		return $stream;
 
- 	}
 
- 	public static function from_template($source, $data, $return, $isHtml=false){
 
- 		$fileParts = explode('.', $source);
 
- 		$ext = count($fileParts)>1 ? '.'.end($fileParts) : '';
 
- 		if(count(explode(SLASH, $ext)) > 1) $ext = '';
 
- 		$destination = File::dir().'tmp'.SLASH.'template.'.time().'-'.rand(0,100).$ext;
 
- 		$source = File::dir().$source;
 
- 		copy($source,$destination);
 
- 		$stream = file_get_contents($destination);
 
- 		if(mb_detect_encoding($stream, 'UTF-8', true) == false) $stream = utf8_encode($stream);
 
- 		
 
- 		foreach($data as $tag=>$value){
 
- 			if(is_array($value)){
 
- 				$stream =  preg_replace_callback(
 
- 					'#\{\{\#'.$tag.'\}\}(.*)\{{\/'.$tag.'\}\}#si',
 
- 					function ($match) use($value) {
 
- 						$html = '';
 
- 						foreach($value as $line){
 
- 							$bloc = $match[1];
 
- 							foreach($line as $k=>$v){
 
- 								$bloc = str_replace('{{'.$k.'}}',$v,$bloc);
 
- 								$bloc = self::if_condition($bloc, $line);
 
- 								$bloc = self::else_condition($bloc, $line);
 
- 							}
 
- 							$html .=$bloc;
 
- 						}
 
- 						return $html;
 
- 					},
 
- 					$stream
 
- 				);
 
- 				continue;
 
- 			}
 
- 			//Pas d'images possibles dans un fichier texte
 
- 			if(substr($value,0,2)=='::' && !$isHtml) continue;
 
- 			//Remplacement d'image pour les fichiers HTML/PDF
 
- 			if(substr($value,0,2)=='::') $value = substr($value,2);
 
- 			$stream = str_replace('{{'.$tag.'}}', $value, $stream);
 
- 		}
 
- 		$stream = self::if_condition($stream, $data);
 
- 		$stream = self::else_condition($stream, $data);
 
- 		file_put_contents($destination, $stream);
 
- 		if($return!='stream') return $destination;
 
- 		$stream = file_get_contents($destination);
 
- 		unlink($destination);
 
- 		return ($isHtml ? $stream : utf8_decode($stream));
 
- 	}
 
- 	public static function if_condition($stream, $data){
 
- 		// $ifRegex = '/\{\{\#([^\/\:\#}]*)\}\}(.*?)\{\{\/\1\}\}/is';
 
- 		// $stream = recursive_preg_replace($ifRegex, $stream, $data);
 
- 		
 
- 		//conditions
 
- 		$ifRegex = '/\{\{\#([^\/\:\#}]*)\}\}(.*?)\{\{\/\1\}\}/is';
 
- 		return preg_replace_callback($ifRegex,function($matches) use ($data) {
 
- 			$key = $matches[1];
 
- 			$stream = $matches[2];
 
- 			return !isset($data[$key]) || (!is_array($data[$key]) && empty($data[$key])) || (is_array($data[$key]) && count($data[$key])==0) ?'':$stream;
 
- 		},$stream);
 
- 	}
 
- 	public static function else_condition($stream, $data){
 
- 		// $elseRegex = '/\{\{\^([^\/\:\#}]*)\}\}(.*?)\{\{\/\1\}\}/is';
 
- 		// $stream = recursive_preg_replace($elseRegex, $stream, $data);
 
- 		
 
- 		//conditions
 
- 		$elseRegex = '/\{\{\^([^\/\:\#}]*)\}\}(.*?)\{\{\/\1\}\}/is';
 
- 		return preg_replace_callback($elseRegex,function($matches) use ($data) {
 
- 			$key = $matches[1];
 
- 			$stream = $matches[2];
 
- 			return (isset($data[$key]) && !is_array($data[$key]) && !empty($data[$key])) || (is_array($data[$key]) && count($data[$key])>0) ?'':$stream;
 
- 		},$stream);
 
- 	}
 
- }
 
 
  |