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);
- }
- }
|