dolibarr  20.0.0-beta
doc_generic_shipment_odt.modules.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2010-2012 Laurent Destailleur <eldy@users.sourceforge.net>
3  * Copyright (C) 2012 Juanjo Menent <jmenent@2byte.es>
4  * Copyright (C) 2014 Marcos García <marcosgdf@gmail.com>
5  * Copyright (C) 2016 Charlie Benke <charlie@patas-monkey.com>
6  * Copyright (C) 2018-2021 Philippe Grand <philippe.grand@atoo-net.com>
7  * Copyright (C) 2018-2019 Frédéric France <frederic.france@netlogic.fr>
8  *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 3 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program. If not, see <https://www.gnu.org/licenses/>.
21 * or see https://www.gnu.org/
22 */
23 
30 require_once DOL_DOCUMENT_ROOT.'/core/modules/expedition/modules_expedition.php';
31 require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
32 require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
33 require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
34 require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
35 require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php';
36 
37 
42 {
47  public $version = 'dolibarr';
48 
49 
55  public function __construct($db)
56  {
57  global $conf, $langs, $mysoc;
58 
59  // Load translation files required by the page
60  $langs->loadLangs(array("main", "companies"));
61 
62  $this->db = $db;
63  $this->name = "ODT templates";
64  $this->description = $langs->trans("DocumentModelOdt");
65  $this->scandir = 'EXPEDITION_ADDON_PDF_ODT_PATH'; // Name of constant that is used to save list of directories to scan
66 
67  // Page size for A4 format
68  $this->type = 'odt';
69  $this->page_largeur = 0;
70  $this->page_hauteur = 0;
71  $this->format = array($this->page_largeur, $this->page_hauteur);
72  $this->marge_gauche = 0;
73  $this->marge_droite = 0;
74  $this->marge_haute = 0;
75  $this->marge_basse = 0;
76 
77  $this->option_logo = 1; // Display logo
78  $this->option_tva = 0; // Manage the vat option EXPEDITION_TVAOPTION
79  $this->option_modereg = 0; // Display payment mode
80  $this->option_condreg = 0; // Display payment terms
81  $this->option_multilang = 1; // Available in several languages
82  $this->option_escompte = 0; // Displays if there has been a discount
83  $this->option_credit_note = 0; // Support credit notes
84  $this->option_freetext = 1; // Support add of a personalised text
85  $this->option_draft_watermark = 0; // Support add of a watermark on drafts
86 
87  // Recupere emetteur
88  $this->emetteur = $mysoc;
89  if (!$this->emetteur->country_code) {
90  $this->emetteur->country_code = substr($langs->defaultlang, -2); // By default if not defined
91  }
92  }
93 
94 
101  public function info($langs)
102  {
103  global $conf, $langs;
104 
105  // Load translation files required by the page
106  $langs->loadLangs(array("errors", "companies"));
107 
108  $form = new Form($this->db);
109 
110  $texte = $this->description.".<br>\n";
111  $texte .= '<form action="'.$_SERVER["PHP_SELF"].'" method="POST" enctype="multipart/form-data">';
112  $texte .= '<input type="hidden" name="token" value="'.newToken().'">';
113  $texte .= '<input type="hidden" name="page_y" value="">';
114  $texte .= '<input type="hidden" name="action" value="setModuleOptions">';
115  $texte .= '<input type="hidden" name="param1" value="EXPEDITION_ADDON_PDF_ODT_PATH">';
116  $texte .= '<table class="nobordernopadding" width="100%">';
117 
118  // List of directories area
119  $texte .= '<tr><td>';
120  $texttitle = $langs->trans("ListOfDirectories");
121  $listofdir = explode(',', preg_replace('/[\r\n]+/', ',', trim($conf->global->EXPEDITION_ADDON_PDF_ODT_PATH)));
122  $listoffiles = array();
123  foreach ($listofdir as $key => $tmpdir) {
124  $tmpdir = trim($tmpdir);
125  $tmpdir = preg_replace('/DOL_DATA_ROOT/', DOL_DATA_ROOT, $tmpdir);
126  if (!$tmpdir) {
127  unset($listofdir[$key]);
128  continue;
129  }
130  if (!is_dir($tmpdir)) {
131  $texttitle .= img_warning($langs->trans("ErrorDirNotFound", $tmpdir), 0);
132  } else {
133  $tmpfiles = dol_dir_list($tmpdir, 'files', 0, '\.(ods|odt)');
134  if (count($tmpfiles)) {
135  $listoffiles = array_merge($listoffiles, $tmpfiles);
136  }
137  }
138  }
139  $texthelp = $langs->trans("ListOfDirectoriesForModelGenODT");
140  $texthelp .= '<br><br><span class="opacitymedium">'.$langs->trans("ExampleOfDirectoriesForModelGen").'</span>';
141  // Add list of substitution keys
142  $texthelp .= '<br>'.$langs->trans("FollowingSubstitutionKeysCanBeUsed").'<br>';
143  $texthelp .= $langs->transnoentitiesnoconv("FullListOnOnlineDocumentation"); // This contains an url, we don't modify it
144 
145  $texte .= $form->textwithpicto($texttitle, $texthelp, 1, 'help', '', 1, 3, $this->name);
146  $texte .= '<div><div style="display: inline-block; min-width: 100px; vertical-align: middle;">';
147  $texte .= '<textarea class="flat" cols="60" name="value1">';
148  $texte .= getDolGlobalString('EXPEDITION_ADDON_PDF_ODT_PATH');
149  $texte .= '</textarea>';
150  $texte .= '</div><div style="display: inline-block; vertical-align: middle;">';
151  $texte .= '<input type="submit" class="button button-edit reposition smallpaddingimp" name="modify" value="'.$langs->trans("Modify").'">';
152  $texte .= '<br></div></div>';
153 
154  // Scan directories
155  $nbofiles = count($listoffiles);
156  if (getDolGlobalString('EXPEDITION_ADDON_PDF_ODT_PATH')) {
157  $texte .= $langs->trans("NumberOfModelFilesFound").': <b>';
158  //$texte.=$nbofiles?'<a id="a_'.get_class($this).'" href="#">':'';
159  $texte .= count($listoffiles);
160  //$texte.=$nbofiles?'</a>':'';
161  $texte .= '</b>';
162  }
163  if ($nbofiles) {
164  $texte .= '<div id="div_'.get_class($this).'" class="hiddenx">';
165  // Show list of found files
166  foreach ($listoffiles as $file) {
167  $texte .= '- '.$file['name'].' <a href="'.DOL_URL_ROOT.'/document.php?modulepart=doctemplates&file=shipments/'.urlencode(basename($file['name'])).'">'.img_picto('', 'listlight').'</a>';
168  $texte .= ' &nbsp; <a class="reposition" href="'.$_SERVER["PHP_SELF"].'?modulepart=doctemplates&keyforuploaddir=EXPEDITION_ADDON_PDF_ODT_PATH&action=deletefile&token='.newToken().'&file='.urlencode(basename($file['name'])).'">'.img_picto('', 'delete').'</a>';
169  $texte .= '<br>';
170  }
171  $texte .= '</div>';
172  }
173  // Add input to upload a new template file.
174  $texte .= '<div>'.$langs->trans("UploadNewTemplate");
175  $maxfilesizearray = getMaxFileSizeArray();
176  $maxmin = $maxfilesizearray['maxmin'];
177  if ($maxmin > 0) {
178  $texte .= '<input type="hidden" name="MAX_FILE_SIZE" value="'.($maxmin * 1024).'">'; // MAX_FILE_SIZE must precede the field type=file
179  }
180  $texte .= ' <input type="file" name="uploadfile">';
181  $texte .= '<input type="hidden" value="EXPEDITION_ADDON_PDF_ODT_PATH" name="keyforuploaddir">';
182  $texte .= '<input type="submit" class="button smallpaddingimp reposition" value="'.dol_escape_htmltag($langs->trans("Upload")).'" name="upload">';
183  $texte .= '</div>';
184  $texte .= '</td>';
185 
186  $texte .= '</tr>';
187 
188  $texte .= '</table>';
189  $texte .= '</form>';
190 
191  return $texte;
192  }
193 
194  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
206  public function write_file($object, $outputlangs, $srctemplatepath, $hidedetails = 0, $hidedesc = 0, $hideref = 0)
207  {
208  // phpcs:enable
209  global $user, $langs, $conf, $mysoc, $hookmanager;
210 
211  if (empty($srctemplatepath)) {
212  dol_syslog("doc_generic_odt::write_file parameter srctemplatepath empty", LOG_WARNING);
213  return -1;
214  }
215 
216  // Add odtgeneration hook
217  if (!is_object($hookmanager)) {
218  include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php';
219  $hookmanager = new HookManager($this->db);
220  }
221  $hookmanager->initHooks(array('odtgeneration'));
222  global $action;
223 
224  if (!is_object($outputlangs)) {
225  $outputlangs = $langs;
226  }
227  $sav_charset_output = $outputlangs->charset_output;
228  $outputlangs->charset_output = 'UTF-8';
229 
230  // Load traductions files required by page
231  $outputlangs->loadLangs(array("main", "dict", "companies", "bills"));
232 
233  if ($conf->expedition->dir_output."/sending") {
234  // If $object is id instead of object
235  if (!is_object($object)) {
236  $id = $object;
237  $object = new Expedition($this->db);
238  $result = $object->fetch($id);
239  if ($result < 0) {
240  dol_print_error($this->db, $object->error);
241  return -1;
242  }
243  }
244 
245  $object->fetch_thirdparty();
246 
247  $dir = $conf->expedition->dir_output."/sending";
248  $objectref = dol_sanitizeFileName($object->ref);
249  if (!preg_match('/specimen/i', $objectref)) {
250  $dir .= "/".$objectref;
251  }
252  $file = $dir."/".$objectref.".odt";
253 
254  if (!file_exists($dir)) {
255  if (dol_mkdir($dir) < 0) {
256  $this->error = $langs->transnoentities("ErrorCanNotCreateDir", $dir);
257  return -1;
258  }
259  }
260 
261  if (file_exists($dir)) {
262  //print "srctemplatepath=".$srctemplatepath; // Src filename
263  $newfile = basename($srctemplatepath);
264  $newfiletmp = preg_replace('/\.od[ts]/i', '', $newfile);
265  $newfiletmp = preg_replace('/template_/i', '', $newfiletmp);
266  $newfiletmp = preg_replace('/modele_/i', '', $newfiletmp);
267  $newfiletmp = $objectref . '_' . $newfiletmp;
268  //$file=$dir.'/'.$newfiletmp.'.'.dol_print_date(dol_now(),'%Y%m%d%H%M%S').'.odt';
269  // Get extension (ods or odt)
270  $newfileformat = substr($newfile, strrpos($newfile, '.') + 1);
271  if (getDolGlobalString('MAIN_DOC_USE_TIMING')) {
272  $format = getDolGlobalString('MAIN_DOC_USE_TIMING');
273  if ($format == '1') {
274  $format = '%Y%m%d%H%M%S';
275  }
276  $filename = $newfiletmp . '-' . dol_print_date(dol_now(), $format) . '.' . $newfileformat;
277  } else {
278  $filename = $newfiletmp . '.' . $newfileformat;
279  }
280  $file = $dir . '/' . $filename;
281  //print "newdir=".$dir;
282  //print "newfile=".$newfile;
283  //print "file=".$file;
284  //print "conf->societe->dir_temp=".$conf->societe->dir_temp;
285 
286  dol_mkdir($conf->expedition->dir_temp);
287  if (!is_writable($conf->expedition->dir_temp)) {
288  $this->error = $langs->transnoentities("ErrorFailedToWriteInTempDirectory", $conf->expedition->dir_temp);
289  dol_syslog('Error in write_file: ' . $this->error, LOG_ERR);
290  return -1;
291  }
292 
293  // If SHIPMENT contact defined on invoice, we use it
294  $usecontact = false;
295  $arrayidcontact = $object->getIdContact('external', 'SHIPPING');
296  if (count($arrayidcontact) > 0) {
297  $usecontact = true;
298  $result = $object->fetch_contact($arrayidcontact[0]);
299  }
300 
301  // Recipient name
302  $contactobject = null;
303  if (!empty($usecontact)) {
304  // We can use the company of contact instead of thirdparty company
305  if ($object->contact->socid != $object->thirdparty->id && (!isset($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT) || getDolGlobalString('MAIN_USE_COMPANY_NAME_OF_CONTACT'))) {
306  $object->contact->fetch_thirdparty();
307  $socobject = $object->contact->thirdparty;
308  $contactobject = $object->contact;
309  } else {
310  $socobject = $object->thirdparty;
311  // if we have a SHIPPING contact and we don't use it as thirdparty recipient we store the contact object for later use
312  $contactobject = $object->contact;
313  }
314  } else {
315  $socobject = $object->thirdparty;
316  }
317 
318  // Make substitution
319  $substitutionarray = array(
320  '__FROM_NAME__' => $this->emetteur->name,
321  '__FROM_EMAIL__' => $this->emetteur->email,
322  '__TOTAL_TTC__' => $object->total_ttc,
323  '__TOTAL_HT__' => $object->total_ht,
324  '__TOTAL_VAT__' => $object->total_tva
325  );
326  complete_substitutions_array($substitutionarray, $langs, $object);
327  // Call the ODTSubstitution hook
328  $parameters = array('file'=>$file, 'object'=>$object, 'outputlangs'=>$outputlangs, 'substitutionarray'=>&$substitutionarray);
329  $reshook = $hookmanager->executeHooks('ODTSubstitution', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
330 
331  // Line of free text
332  $newfreetext = '';
333  $paramfreetext = 'EXPEDITION_FREE_TEXT';
334  if (!empty($conf->global->$paramfreetext)) {
335  $newfreetext = make_substitutions(getDolGlobalString($paramfreetext), $substitutionarray);
336  }
337 
338  // Open and load template
339  require_once ODTPHP_PATH.'odf.php';
340  try {
341  $odfHandler = new Odf(
342  $srctemplatepath,
343  array(
344  'PATH_TO_TMP' => $conf->expedition->dir_temp,
345  'ZIP_PROXY' => 'PclZipProxy', // PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy.
346  'DELIMITER_LEFT' => '{',
347  'DELIMITER_RIGHT' => '}'
348  )
349  );
350  } catch (Exception $e) {
351  $this->error = $e->getMessage();
352  dol_syslog($e->getMessage(), LOG_INFO);
353  return -1;
354  }
355  // After construction $odfHandler->contentXml contains content and
356  // [!-- BEGIN row.lines --]*[!-- END row.lines --] has been replaced by
357  // [!-- BEGIN lines --]*[!-- END lines --]
358  //print html_entity_decode($odfHandler->__toString());
359  //print exit;
360 
361 
362  // Make substitutions into odt of freetext
363  try {
364  $odfHandler->setVars('free_text', $newfreetext, true, 'UTF-8');
365  } catch (OdfException $e) {
366  dol_syslog($e->getMessage(), LOG_INFO);
367  }
368 
369  // Make substitutions into odt of user info
370  $tmparray = $this->get_substitutionarray_user($user, $outputlangs);
371  //var_dump($tmparray); exit;
372  foreach ($tmparray as $key => $value) {
373  try {
374  if (preg_match('/logo$/', $key)) { // Image
375  //var_dump($value);exit;
376  if (file_exists($value)) {
377  $odfHandler->setImage($key, $value);
378  } else {
379  $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8');
380  }
381  } else { // Text
382  $odfHandler->setVars($key, $value, true, 'UTF-8');
383  }
384  } catch (OdfException $e) {
385  dol_syslog($e->getMessage(), LOG_INFO);
386  }
387  }
388  // Make substitutions into odt of mysoc
389  $tmparray = $this->get_substitutionarray_mysoc($mysoc, $outputlangs);
390  //var_dump($tmparray); exit;
391  foreach ($tmparray as $key => $value) {
392  try {
393  if (preg_match('/logo$/', $key)) { // Image
394  //var_dump($value);exit;
395  if (file_exists($value)) {
396  $odfHandler->setImage($key, $value);
397  } else {
398  $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8');
399  }
400  } else { // Text
401  $odfHandler->setVars($key, $value, true, 'UTF-8');
402  }
403  } catch (OdfException $e) {
404  dol_syslog($e->getMessage(), LOG_INFO);
405  }
406  }
407  // Make substitutions into odt of thirdparty
408  if ($socobject->element == 'contact') {
409  $tmparray = $this->get_substitutionarray_contact($socobject, $outputlangs);
410  } else {
411  $tmparray = $this->get_substitutionarray_thirdparty($socobject, $outputlangs);
412  }
413  foreach ($tmparray as $key => $value) {
414  try {
415  if (preg_match('/logo$/', $key)) { // Image
416  if (file_exists($value)) {
417  $odfHandler->setImage($key, $value);
418  } else {
419  $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8');
420  }
421  } else { // Text
422  $odfHandler->setVars($key, $value, true, 'UTF-8');
423  }
424  } catch (OdfException $e) {
425  dol_syslog($e->getMessage(), LOG_INFO);
426  }
427  }
428 
429  if ($usecontact && is_object($contactobject)) {
430  $tmparray = $this->get_substitutionarray_contact($contactobject, $outputlangs, 'contact');
431  foreach ($tmparray as $key => $value) {
432  try {
433  if (preg_match('/logo$/', $key)) { // Image
434  if (file_exists($value)) {
435  $odfHandler->setImage($key, $value);
436  } else {
437  $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8');
438  }
439  } else { // Text
440  $odfHandler->setVars($key, $value, true, 'UTF-8');
441  }
442  } catch (OdfException $e) {
443  dol_syslog($e->getMessage(), LOG_INFO);
444  }
445  }
446  }
447 
448  // Replace tags of object + external modules
449  $tmparray = array_merge($tmparray, $this->get_substitutionarray_shipment($object, $outputlangs));
450  $tmparray = array_merge($tmparray, $this->get_substitutionarray_other($outputlangs));
451 
452  complete_substitutions_array($tmparray, $outputlangs, $object);
453  // Call the ODTSubstitution hook
454  $parameters = array('odfHandler'=>&$odfHandler, 'file'=>$file, 'object'=>$object, 'outputlangs'=>$outputlangs, 'substitutionarray'=>&$tmparray);
455  $reshook = $hookmanager->executeHooks('ODTSubstitution', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
456  foreach ($tmparray as $key => $value) {
457  try {
458  if (preg_match('/logo$/', $key)) { // Image
459  if (file_exists($value)) {
460  $odfHandler->setImage($key, $value);
461  } else {
462  $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8');
463  }
464  } else { // Text
465  $odfHandler->setVars($key, $value, true, 'UTF-8');
466  }
467  } catch (OdfException $e) {
468  dol_syslog($e->getMessage(), LOG_INFO);
469  }
470  }
471  // Replace tags of lines
472  try {
473  $foundtagforlines = 1;
474  try {
475  $listlines = $odfHandler->setSegment('lines');
476  } catch (OdfExceptionSegmentNotFound $e) {
477  // We may arrive here if tags for lines not present into template
478  $foundtagforlines = 0;
479  dol_syslog($e->getMessage(), LOG_INFO);
480  } catch (OdfException $e) {
481  $foundtagforlines = 0;
482  dol_syslog($e->getMessage(), LOG_INFO);
483  }
484  if ($foundtagforlines) {
485  foreach ($object->lines as $line) {
486  $tmparray = $this->get_substitutionarray_lines($line, $outputlangs);
487  complete_substitutions_array($tmparray, $outputlangs, $object, $line, "completesubstitutionarray_lines");
488  // Call the ODTSubstitutionLine hook
489  $parameters = array('odfHandler'=>&$odfHandler, 'file'=>$file, 'object'=>$object, 'outputlangs'=>$outputlangs, 'substitutionarray'=>&$tmparray, 'line'=>$line);
490  $reshook = $hookmanager->executeHooks('ODTSubstitutionLine', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
491  foreach ($tmparray as $key => $val) {
492  try {
493  $listlines->setVars($key, $val, true, 'UTF-8');
494  } catch (OdfException $e) {
495  dol_syslog($e->getMessage(), LOG_INFO);
496  } catch (SegmentException $e) {
497  dol_syslog($e->getMessage(), LOG_INFO);
498  }
499  }
500  $listlines->merge();
501  }
502  $odfHandler->mergeSegment($listlines);
503  }
504  } catch (OdfException $e) {
505  $this->error = $e->getMessage();
506  dol_syslog($this->error, LOG_WARNING);
507  return -1;
508  }
509 
510  // Replace labels translated
511  $tmparray = $outputlangs->get_translations_for_substitutions();
512  foreach ($tmparray as $key => $value) {
513  try {
514  $odfHandler->setVars($key, $value, true, 'UTF-8');
515  } catch (OdfException $e) {
516  dol_syslog($e->getMessage(), LOG_INFO);
517  }
518  }
519 
520  // Call the beforeODTSave hook
521  $parameters = array('odfHandler'=>&$odfHandler, 'file'=>$file, 'object'=>$object, 'outputlangs'=>$outputlangs, 'substitutionarray'=>&$tmparray);
522  $reshook = $hookmanager->executeHooks('beforeODTSave', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
523 
524  // Write new file
525  if (getDolGlobalString('MAIN_ODT_AS_PDF')) {
526  try {
527  $odfHandler->exportAsAttachedPDF($file);
528  } catch (Exception $e) {
529  $this->error = $e->getMessage();
530  dol_syslog($e->getMessage(), LOG_INFO);
531  return -1;
532  }
533  } else {
534  try {
535  $odfHandler->saveToDisk($file);
536  } catch (Exception $e) {
537  $this->error = $e->getMessage();
538  dol_syslog($e->getMessage(), LOG_INFO);
539  return -1;
540  }
541  }
542  $parameters = array('odfHandler'=>&$odfHandler, 'file'=>$file, 'object'=>$object, 'outputlangs'=>$outputlangs, 'substitutionarray'=>&$tmparray);
543  $reshook = $hookmanager->executeHooks('afterODTCreation', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
544 
545  dolChmod($file);
546 
547  $odfHandler = null; // Destroy object
548 
549  $this->result = array('fullpath'=>$file);
550 
551  return 1; // Success
552  } else {
553  $this->error = $langs->transnoentities("ErrorCanNotCreateDir", $dir);
554  return -1;
555  }
556  }
557 
558  return -1;
559  }
560 }
if($user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition: card.php:58
get_substitutionarray_shipment($object, $outputlangs, $array_key='object')
Define array with couple substitution key => substitution value Note that vars into substitutions arr...
get_substitutionarray_mysoc($mysoc, $outputlangs)
Define array with couple substitution key => substitution value.
get_substitutionarray_contact($object, $outputlangs, $array_key='object')
Define array with couple substitution key => substitution value.
get_substitutionarray_other($outputlangs)
Define array with couple substitution key => substitution value.
get_substitutionarray_lines($line, $outputlangs, $linenumber=0)
Define array with couple substitution key => substitution value Note that vars into substitutions arr...
get_substitutionarray_thirdparty($object, $outputlangs, $array_key='company')
Define array with couple substitution key => substitution value For example {company_name},...
get_substitutionarray_user($user, $outputlangs)
Define array with couple substitution key => substitution value.
Class to manage shipments.
Class to manage generation of HTML components Only common components must be here.
Class to manage hooks.
Parent class of sending receipts models.
Class to build documents using ODF templates generator.
info($langs)
Return description of a module.
write_file($object, $outputlangs, $srctemplatepath, $hidedetails=0, $hidedesc=0, $hideref=0)
Function to build a document on disk using the generic odt module.
print *****$script_file(".$version.") pid cd cd cd description as description
Only used if Module[ID]Desc translation string is not found.
dol_dir_list($utf8_path, $types="all", $recursive=0, $filter="", $excludefilter=null, $sortcriteria="name", $sortorder=SORT_ASC, $mode=0, $nohook=0, $relativename="", $donotfollowsymlinks=0, $nbsecondsold=0)
Scan a directory and return a list of files/directories.
Definition: files.lib.php:63
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
dolChmod($filepath, $newmask='')
Change mod of a file.
dol_now($mode='auto')
Return date for now.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
newToken()
Return the value of token currently saved into session with name 'newtoken'.
complete_substitutions_array(&$substitutionarray, $outputlangs, $object=null, $parameters=null, $callfunc="completesubstitutionarray")
Complete the $substitutionarray with more entries coming from external module that had set the "subst...
make_substitutions($text, $substitutionarray, $outputlangs=null, $converttextinhtmlifnecessary=0)
Make substitution into a text string, replacing keys with vals from $substitutionarray (oldval=>newva...
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_mkdir($dir, $dataroot='', $newmask='')
Creation of a directory (this can create recursive subdir)
if(preg_match('/crypted:/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
Definition: repair.php:123
$conf db name
Only used if Module[ID]Name translation string is not found.
Definition: repair.php:126
getMaxFileSizeArray()
Return the max allowed for file upload.