'key', 'label' => 'string', 'description' => 'longstring', 'plugin' => 'string', 'dataset' => 'string', 'slug' => 'string', 'filename' => 'string', 'privacy' => 'string', 'export_format' => 'string' ); const PRIVACY_PRIVATE = 'private'; const PRIVACY_PUBLIC = 'public'; public function privacy(){ return $this->privacy==self::PRIVACY_PRIVATE?'Privé':'Public'; } //Renvoie les infos des documents placés en dropzone public function documents(){ $documents = array(); foreach(glob(__ROOT__.FILE_PATH.'export'.SLASH.'documents'.SLASH.$this->plugin.SLASH.$this->id.SLASH.'*.*') as $file){ if(is_dir($file)) continue; $filenameDisk = $file; // $filenameDisk = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' ? html_decode_utf8($file) : $file; if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') $file = utf8_encode($file); $documents[] = array( 'path' => 'export'.SLASH.'documents'.SLASH.$this->plugin.SLASH.$this->id.SLASH.basename($file), 'url' => 'action.php?action=export_exportmodel_download_document&path='.$this->plugin.SLASH.$this->id.SLASH.rawurlencode(basename($file)), 'name' => basename($file), 'icon' => getExtIcon(getExt($file)), 'lastModification' => ' - '.date('d/m/Y', filemtime($filenameDisk)) ); } return $documents; } public static function get_standard_dataset($parameters){ global $myUser, $myFirm; if(isset($parameters['description']) && $parameters['description']!=true){ //Common DS $data['programme.date.compact'] = date('d/m/Y'); setlocale (LC_TIME, 'fr_FR.utf8','fra'); $data['programme.date.littéral'] = utf8_encode(strftime('%d %B %Y')); $data['programme.heure'] = date('H:i'); $data['utilisateur.photo'] = '::'.$myUser->getAvatar(true); $data['utilisateur.identifiant'] = $myUser->login; $data['utilisateur.prénom'] = $myUser->firstname; $data['utilisateur.nom'] = $myUser->name; $data['utilisateur.fonction'] = $myUser->function; $data['utilisateur.email'] = $myUser->mail; $data['établissement.logo'] = '::'.$myFirm->logo('path'); $data['établissement.libellé'] = $myFirm->label; $data['établissement.téléphone'] = $myFirm->phone; $data['établissement.fax'] = $myFirm->fax; $data['établissement.adresse.rue'] = $myFirm->street; $data['établissement.adresse.complément'] = $myFirm->street2; $data['établissement.adresse.ville'] = $myFirm->city; $data['établissement.adresse.cp'] = $myFirm->zipcode; $data['établissement.email'] = $myFirm->mail; $data['établissement.siret'] = $myFirm->siret; } else { //Common DS $data['programme.date.compact'] = 'Date courante (format "dd/mm/YYYY")'; $data['programme.date.littéral'] = 'Date courante (format "01 Janvier 1970")'; $data['programme.heure'] = 'Heure courante (format hh:mm)'; $data['utilisateur.photo'] = array('desc'=>'Photo de profil de l\'utilisateur courant', 'type'=>'photo'); $data['utilisateur.identifiant'] = 'Identifiant de l\'utilisateur courant'; $data['utilisateur.prénom'] = 'Prénom de l\'utilisateur courant'; $data['utilisateur.nom'] = 'Nom de l\'utilisateur courant'; $data['utilisateur.fonction'] = 'Fonction occupée par l\'utilisateur courant'; $data['utilisateur.email'] = 'Adresse e-mail de l\'utilisateur courant'; $data['établissement.logo'] = array('desc'=>'Le logo de l\'établissement courant', 'type'=>'photo'); $data['établissement.libellé'] = 'Le libellé de l\'établissement courant'; $data['établissement.téléphone'] = 'Le n° de téléphone de l\'établissement courant'; $data['établissement.fax'] = 'Le n° de fax de l\'établissement courant'; $data['établissement.adresse.rue'] = 'La rue de l\'établissement courant'; $data['établissement.adresse.complément'] ='Le complément d\'adresse de l\'établissement courant'; $data['établissement.adresse.ville'] ='La ville de l\'établissement courant'; $data['établissement.adresse.cp'] = 'Le code postal de l\'établissement courant'; $data['établissement.email'] = 'L\'adresse mail de l\'établissement courant'; $data['établissement.siret'] = 'Le n° de SIRET de l\'établissement courant'; } return $data; } //Renvoie les différents type de templates pris en compte public static function templates($key=null){ $templates = array(); foreach (glob(__DIR__.SLASH.'template'.SLASH.'*.class.php') as $templatePath) { require_once($templatePath); $className = str_replace('.class.php','',basename($templatePath)); $infos = get_class_vars($className); $templates[$infos['extension']] = array('handler' => $className,'mime'=>$infos['mime'],'extension'=>$infos['extension'], 'description'=>$infos['description']); } if(!isset($key)) return $templates; return isset($templates[$key]) ? $templates[$key] : $templates['txt']; } //Permet d'ajouter un jeu de données pour un plugin donné public static function add($plugin, $dataset, $label, $func){ Plugin::addHook('export_model_data', function(&$datasets, $params) use ($plugin, $dataset, $label, $func){ global $myUser; if(isset($params['plugin']) && $params['plugin'] != $plugin) return; if(isset($params['dataset']) && $params['dataset'] != $dataset) return; $datasets[$dataset] = array( 'plugin' => $plugin, 'dataset' => $dataset, 'label' => $label, 'function' => $func ); }); } //Récuperation de toutes les données (ou description) d'un dataset public static function dataset($plugin,$dataset,$parameters=array(),$description = null){ $datasets = array(); Plugin::callHook('export_model_data', array( &$datasets, array( 'plugin' => $plugin, 'dataset' => $dataset, 'description' => true ))); $current = reset($datasets); $current['values'] = array(); //Merge des données génériques erp et des données du dataset $allDataset = array_merge( ExportModel::get_standard_dataset($parameters), $current['function']($parameters) ); foreach ($allDataset as $macro => $value) { $row = array(); if(is_array($value)){ $row['type'] = $value['type']; $row['desc'] = $value['desc']; if(isset($value['subitems'])) $row['subitems'] = $value['subitems']; } else { $row['type'] = 'value'; $row['desc'] = $value; } $current['values'][$macro] = $row; } return $current; } //Permet de fusionner le fichier d'export modèle et les données associées public static function merge_data_template(&$filename, $docInfos, $datas, $return = 'stream'){ $document = $docInfos['document']; $ext = getExt($document['name']); $tplType = ExportModel::templates($docInfos['format']); $tplHandler = $tplType['handler']; //Gestion macros de nombre et macro dans le titre foreach($datas as $key => $value){ if(is_array($value)){ $datas[$key.'.nombre'] = count($value); continue; } $filename = str_replace('{{'.$key.'}}', $value, $filename); } $filename = preg_replace('#[\<\>\?\|\*\:\\\/\"\'\,]#i', '-', $filename); $filePath = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') ? utf8_decode($document['path']) : $document['path']; return $tplHandler::from_template($filePath, $datas, $return); } } ?>