ExportModel.class.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. /**
  3. * Define a exportmodel.
  4. * @author Valentin MORREEL
  5. * @category Plugin
  6. * @license copyright
  7. */
  8. class ExportModel extends Entity{
  9. public $id,$label,$description,$plugin,$dataset,$slug,$filename,$privacy,$export_format;
  10. protected $TABLE_NAME = 'export_model';
  11. public $fields =
  12. array(
  13. 'id' => 'key',
  14. 'label' => 'string',
  15. 'description' => 'longstring',
  16. 'plugin' => 'string',
  17. 'dataset' => 'string',
  18. 'slug' => 'string',
  19. 'filename' => 'string',
  20. 'privacy' => 'string',
  21. 'export_format' => 'string'
  22. );
  23. const PRIVACY_PRIVATE = 'private';
  24. const PRIVACY_PUBLIC = 'public';
  25. public function privacy(){
  26. return $this->privacy==self::PRIVACY_PRIVATE?'Privé':'Public';
  27. }
  28. //Renvoie les infos des documents placés en dropzone
  29. public function documents(){
  30. $documents = array();
  31. foreach(glob(__ROOT__.FILE_PATH.'export'.SLASH.'documents'.SLASH.$this->plugin.SLASH.$this->id.SLASH.'*.*') as $file){
  32. if(is_dir($file)) continue;
  33. $filenameDisk = $file;
  34. // $filenameDisk = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' ? html_decode_utf8($file) : $file;
  35. if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') $file = utf8_encode($file);
  36. $documents[] = array(
  37. 'path' => 'export'.SLASH.'documents'.SLASH.$this->plugin.SLASH.$this->id.SLASH.basename($file),
  38. 'url' => 'action.php?action=export_exportmodel_download_document&path='.$this->plugin.SLASH.$this->id.SLASH.rawurlencode(basename($file)),
  39. 'name' => basename($file),
  40. 'icon' => getExtIcon(getExt($file)),
  41. 'lastModification' => ' - '.date('d/m/Y', filemtime($filenameDisk))
  42. );
  43. }
  44. return $documents;
  45. }
  46. public static function get_standard_dataset($parameters){
  47. global $myUser, $myFirm;
  48. if(isset($parameters['description']) && $parameters['description']!=true){
  49. //Common DS
  50. $data['programme.date.compact'] = date('d/m/Y');
  51. setlocale (LC_TIME, 'fr_FR.utf8','fra');
  52. $data['programme.date.littéral'] = utf8_encode(strftime('%d %B %Y'));
  53. $data['programme.heure'] = date('H:i');
  54. $data['utilisateur.photo'] = '::'.$myUser->getAvatar(true);
  55. $data['utilisateur.identifiant'] = $myUser->login;
  56. $data['utilisateur.prénom'] = $myUser->firstname;
  57. $data['utilisateur.nom'] = $myUser->name;
  58. $data['utilisateur.fonction'] = $myUser->function;
  59. $data['utilisateur.email'] = $myUser->mail;
  60. $data['établissement.logo'] = '::'.$myFirm->logo('path');
  61. $data['établissement.libellé'] = $myFirm->label;
  62. $data['établissement.téléphone'] = $myFirm->phone;
  63. $data['établissement.fax'] = $myFirm->fax;
  64. $data['établissement.adresse.rue'] = $myFirm->street;
  65. $data['établissement.adresse.complément'] = $myFirm->street2;
  66. $data['établissement.adresse.ville'] = $myFirm->city;
  67. $data['établissement.adresse.cp'] = $myFirm->zipcode;
  68. $data['établissement.email'] = $myFirm->mail;
  69. $data['établissement.siret'] = $myFirm->siret;
  70. } else {
  71. //Common DS
  72. $data['programme.date.compact'] = 'Date courante (format "dd/mm/YYYY")';
  73. $data['programme.date.littéral'] = 'Date courante (format "01 Janvier 1970")';
  74. $data['programme.heure'] = 'Heure courante (format hh:mm)';
  75. $data['utilisateur.photo'] = array('desc'=>'Photo de profil de l\'utilisateur courant', 'type'=>'photo');
  76. $data['utilisateur.identifiant'] = 'Identifiant de l\'utilisateur courant';
  77. $data['utilisateur.prénom'] = 'Prénom de l\'utilisateur courant';
  78. $data['utilisateur.nom'] = 'Nom de l\'utilisateur courant';
  79. $data['utilisateur.fonction'] = 'Fonction occupée par l\'utilisateur courant';
  80. $data['utilisateur.email'] = 'Adresse e-mail de l\'utilisateur courant';
  81. $data['établissement.logo'] = array('desc'=>'Le logo de l\'établissement courant', 'type'=>'photo');
  82. $data['établissement.libellé'] = 'Le libellé de l\'établissement courant';
  83. $data['établissement.téléphone'] = 'Le n° de téléphone de l\'établissement courant';
  84. $data['établissement.fax'] = 'Le n° de fax de l\'établissement courant';
  85. $data['établissement.adresse.rue'] = 'La rue de l\'établissement courant';
  86. $data['établissement.adresse.complément'] ='Le complément d\'adresse de l\'établissement courant';
  87. $data['établissement.adresse.ville'] ='La ville de l\'établissement courant';
  88. $data['établissement.adresse.cp'] = 'Le code postal de l\'établissement courant';
  89. $data['établissement.email'] = 'L\'adresse mail de l\'établissement courant';
  90. $data['établissement.siret'] = 'Le n° de SIRET de l\'établissement courant';
  91. }
  92. return $data;
  93. }
  94. //Renvoie les différents type de templates pris en compte
  95. public static function templates($key=null){
  96. $templates = array();
  97. foreach (glob(__DIR__.SLASH.'template'.SLASH.'*.class.php') as $templatePath) {
  98. require_once($templatePath);
  99. $className = str_replace('.class.php','',basename($templatePath));
  100. $infos = get_class_vars($className);
  101. $templates[$infos['extension']] = array('handler' => $className,'mime'=>$infos['mime'],'extension'=>$infos['extension'], 'description'=>$infos['description']);
  102. }
  103. if(!isset($key)) return $templates;
  104. return isset($templates[$key]) ? $templates[$key] : $templates['txt'];
  105. }
  106. //Permet d'ajouter un jeu de données pour un plugin donné
  107. public static function add($plugin, $dataset, $label, $func){
  108. Plugin::addHook('export_model_data', function(&$datasets, $params) use ($plugin, $dataset, $label, $func){
  109. global $myUser;
  110. if(isset($params['plugin']) && $params['plugin'] != $plugin) return;
  111. if(isset($params['dataset']) && $params['dataset'] != $dataset) return;
  112. $datasets[$dataset] = array(
  113. 'plugin' => $plugin,
  114. 'dataset' => $dataset,
  115. 'label' => $label,
  116. 'function' => $func
  117. );
  118. });
  119. }
  120. //Récuperation de toutes les données (ou description) d'un dataset
  121. public static function dataset($plugin,$dataset,$parameters=array(),$description = null){
  122. $datasets = array();
  123. Plugin::callHook('export_model_data', array(
  124. &$datasets, array(
  125. 'plugin' => $plugin,
  126. 'dataset' => $dataset,
  127. 'description' => true
  128. )));
  129. $current = reset($datasets);
  130. $current['values'] = array();
  131. //Merge des données génériques erp et des données du dataset
  132. $allDataset = array_merge(
  133. ExportModel::get_standard_dataset($parameters),
  134. $current['function']($parameters)
  135. );
  136. foreach ($allDataset as $macro => $value) {
  137. $row = array();
  138. if(is_array($value)){
  139. $row['type'] = $value['type'];
  140. $row['desc'] = $value['desc'];
  141. if(isset($value['subitems']))
  142. $row['subitems'] = $value['subitems'];
  143. } else {
  144. $row['type'] = 'value';
  145. $row['desc'] = $value;
  146. }
  147. $current['values'][$macro] = $row;
  148. }
  149. return $current;
  150. }
  151. //Permet de fusionner le fichier d'export modèle et les données associées
  152. public static function merge_data_template(&$filename, $docInfos, $datas, $return = 'stream'){
  153. $document = $docInfos['document'];
  154. $ext = getExt($document['name']);
  155. $tplType = ExportModel::templates($docInfos['format']);
  156. $tplHandler = $tplType['handler'];
  157. //Gestion macros de nombre et macro dans le titre
  158. foreach($datas as $key => $value){
  159. if(is_array($value)){
  160. $datas[$key.'.nombre'] = count($value);
  161. continue;
  162. }
  163. $filename = str_replace('{{'.$key.'}}', $value, $filename);
  164. }
  165. $filename = preg_replace('#[\<\>\?\|\*\:\\\/\"\'\,]#i', '-', $filename);
  166. $filePath = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') ? utf8_decode($document['path']) : $document['path'];
  167. return $tplHandler::from_template($filePath, $datas, $return);
  168. }
  169. }
  170. ?>