dolibarr 22.0.5
doc_generic_asset_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-2025 Frédéric France <frederic.france@free.fr>
8 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 3 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22 * or see https://www.gnu.org/
23 */
24
31require_once DOL_DOCUMENT_ROOT . '/core/modules/asset/modules_asset.php';
32require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
33require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
34require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
35require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
36require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php';
37
38
43{
48 public $emetteur;
49
54 public $phpmin = array(7, 0);
55
59 public $version = 'dolibarr';
60
66 public function __construct($db)
67 {
68 global $langs, $mysoc;
69
70 // Load translation files required by the page
71 $langs->loadLangs(array("main", "companies"));
72
73 $this->db = $db;
74 $this->name = "ODT templates";
75 $this->description = $langs->trans("DocumentModelOdt");
76 $this->scandir = 'ASSET_ASSET_ADDON_PDF_ODT_PATH'; // Name of constant that is used to save list of directories to scan
77
78 // Page size for A4 format
79 $this->type = 'odt';
80 $this->page_largeur = 0;
81 $this->page_hauteur = 0;
82 $this->format = array($this->page_largeur, $this->page_hauteur);
83 $this->marge_gauche = 0;
84 $this->marge_droite = 0;
85 $this->marge_haute = 0;
86 $this->marge_basse = 0;
87
88 $this->option_logo = 1; // Display logo
89 $this->option_tva = 0; // Manage the vat option FACTURE_TVAOPTION
90 $this->option_modereg = 0; // Display payment mode
91 $this->option_condreg = 0; // Display payment terms
92 $this->option_multilang = 1; // Available in several languages
93 $this->option_escompte = 0; // Displays if there has been a discount
94 $this->option_credit_note = 0; // Support credit notes
95 $this->option_freetext = 1; // Support add of a personalised text
96 $this->option_draft_watermark = 0; // Support add of a watermark on drafts
97
98 if ($mysoc === null) {
99 dol_syslog(get_class($this).'::__construct() Global $mysoc should not be null.'. getCallerInfoString(), LOG_ERR);
100 return;
101 }
102 // Get source company
103 $this->emetteur = $mysoc;
104 if (!$this->emetteur->country_code) {
105 $this->emetteur->country_code = substr($langs->defaultlang, -2); // By default if not defined
106 }
107 }
108
109
116 public function info($langs)
117 {
118 global $langs;
119
120 // Load translation files required by the page
121 $langs->loadLangs(array("errors", "companies"));
122
123 $form = new Form($this->db);
124
125 $texte = $this->description.".<br>\n";
126 $texte .= '<form action="'.$_SERVER["PHP_SELF"].'" method="POST" enctype="multipart/form-data">';
127 $texte .= '<input type="hidden" name="token" value="'.newToken().'">';
128 $texte .= '<input type="hidden" name="page_y" value="">';
129 $texte .= '<input type="hidden" name="action" value="setModuleOptions">';
130 $texte .= '<input type="hidden" name="param1" value="ASSET_ASSET_ADDON_PDF_ODT_PATH">';
131 $texte .= '<table class="nobordernopadding centpercent">';
132
133 // List of directories area
134 $texte .= '<tr><td>';
135 $texttitle = $langs->trans("ListOfDirectories");
136 $listofdir = explode(',', preg_replace('/[\r\n]+/', ',', trim(getDolGlobalString('ASSET_ASSET_ADDON_PDF_ODT_PATH'))));
137 $listoffiles = array();
138 foreach ($listofdir as $key => $tmpdir) {
139 $tmpdir = trim($tmpdir);
140 $tmpdir = preg_replace('/DOL_DATA_ROOT/', DOL_DATA_ROOT, $tmpdir);
141 if (!$tmpdir) {
142 unset($listofdir[$key]);
143 continue;
144 }
145 if (!is_dir($tmpdir)) {
146 $texttitle .= img_warning($langs->trans("ErrorDirNotFound", $tmpdir), '');
147 } else {
148 $tmpfiles = dol_dir_list($tmpdir, 'files', 0, '\.(ods|odt)');
149 if (count($tmpfiles)) {
150 $listoffiles = array_merge($listoffiles, $tmpfiles);
151 }
152 }
153 }
154 $texthelp = $langs->trans("ListOfDirectoriesForModelGenODT");
155 $texthelp .= '<br><br><span class="opacitymedium">'.$langs->trans("ExampleOfDirectoriesForModelGen").'</span>';
156 // Add list of substitution keys
157 $texthelp .= '<br>'.$langs->trans("FollowingSubstitutionKeysCanBeUsed").'<br>';
158 $texthelp .= $langs->transnoentitiesnoconv("FullListOnOnlineDocumentation"); // This contains an url, we don't modify it
159
160 if (!getDolGlobalString('MAIN_NO_MULTIDIR_FOR_ODT')) {
161 $texte .= $form->textwithpicto($texttitle, $texthelp, 1, 'help', '', 1, 3, $this->name);
162 $texte .= '<div><div style="display: inline-block; min-width: 100px; vertical-align: middle;">';
163 $texte .= '<textarea class="flat textareafordir" spellcheck="false" cols="60" name="value1">';
164 $texte .= getDolGlobalString('ASSET_ASSET_ADDON_PDF_ODT_PATH');
165 $texte .= '</textarea>';
166 $texte .= '</div><div style="display: inline-block; vertical-align: middle;">';
167 $texte .= '<input type="submit" class="button button-edit reposition smallpaddingimp" name="modify" value="'.dolPrintHTMLForAttribute($langs->trans("Modify")).'">';
168 $texte .= '<br></div></div>';
169 } else {
170 $texte .= '<br>';
171 $texte .= '<input type="hidden" name="value1" value="ASSET_ASSET_ADDON_PDF_ODT_PATH">';
172 }
173
174 // Scan directories
175 $nbofiles = count($listoffiles);
176 if (getDolGlobalString('ASSET_ASSET_ADDON_PDF_ODT_PATH')) {
177 $texte .= $langs->trans("NumberOfModelFilesFound").': <b>';
178 //$texte.=$nbofiles?'<a id="a_'.get_class($this).'" href="#">':'';
179 $texte .= count($listoffiles);
180 //$texte.=$nbofiles?'</a>':'';
181 $texte .= '</b>';
182 }
183
184 if ($nbofiles) {
185 $texte .= '<div id="div_'.get_class($this).'" class="hidden">';
186 // Show list of found files
187 foreach ($listoffiles as $file) {
188 $texte .= '- '.$file['name'].' <a href="'.DOL_URL_ROOT.'/document.php?modulepart=doctemplates&file=asset_asset/'.urlencode(basename($file['name'])).'">'.img_picto('', 'listlight').'</a>';
189 $texte .= ' &nbsp; <a class="reposition" href="'.$_SERVER["PHP_SELF"].'?modulepart=doctemplates&keyforuploaddir=ASSET_ASSET_ADDON_PDF_ODT_PATH&action=deletefile&token='.newToken().'&file='.urlencode(basename($file['name'])).'">'.img_picto('', 'delete').'</a>';
190 $texte .= '<br>';
191 }
192 $texte .= '</div>';
193 }
194
195 // Add input to upload a new template file.
196 $texte .= '<div>'.$langs->trans("UploadNewTemplate");
197 $maxfilesizearray = getMaxFileSizeArray();
198 $maxmin = $maxfilesizearray['maxmin'];
199 if ($maxmin > 0) {
200 $texte .= '<input type="hidden" name="MAX_FILE_SIZE" value="'.($maxmin * 1024).'">'; // MAX_FILE_SIZE must precede the field type=file
201 }
202 $texte .= ' <input type="file" name="uploadfile">';
203 $texte .= '<input type="hidden" value="MYMODULE_MYOBJECT_ADDON_PDF_ODT_PATH" name="keyforuploaddir">';
204 $texte .= '<input type="submit" class="button smallpaddingimp reposition" value="'.dol_escape_htmltag($langs->trans("Upload")).'" name="upload">';
205 $texte .= '</div>';
206
207 $texte .= '</td>';
208
209 $texte .= '</tr>';
210
211 $texte .= '</table>';
212 $texte .= '</form>';
213
214 return $texte;
215 }
216
217 // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
229 public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0)
230 {
231 // phpcs:enable
232 global $user, $langs, $conf, $mysoc, $hookmanager;
233 global $action;
234
235 if (empty($srctemplatepath)) {
236 dol_syslog("doc_generic_odt::write_file parameter srctemplatepath empty", LOG_WARNING);
237 return -1;
238 }
239
240 // Add odtgeneration hook
241 if (!is_object($hookmanager)) {
242 include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php';
243 $hookmanager = new HookManager($this->db);
244 }
245 $hookmanager->initHooks(array('odtgeneration'));
246 global $action;
247
248 if (!is_object($outputlangs)) {
249 $outputlangs = $langs;
250 }
251 $sav_charset_output = $outputlangs->charset_output;
252 $outputlangs->charset_output = 'UTF-8';
253
254 $outputlangs->loadLangs(array("main", "dict", "companies", "bills"));
255
256 if ($conf->asset->dir_output) {
257 // If $object is id instead of object
258 if (!is_object($object)) {
259 $id = $object;
260 $object = new Asset($this->db);
261 $result = $object->fetch($id);
262 if ($result < 0) {
263 dol_print_error($this->db, $object->error);
264 return -1;
265 }
266 }
267
268 $object->fetch_thirdparty();
269
270 $dir = $conf->asset->multidir_output[isset($object->entity) ? $object->entity : 1];
271 $objectref = dol_sanitizeFileName($object->ref);
272 if (!preg_match('/specimen/i', $objectref)) {
273 $dir .= "/".$objectref;
274 }
275 $file = $dir."/".$objectref.".odt";
276
277 if (!file_exists($dir)) {
278 if (dol_mkdir($dir) < 0) {
279 $this->error = $langs->transnoentities("ErrorCanNotCreateDir", $dir);
280 return -1;
281 }
282 }
283
284 if (file_exists($dir)) {
285 //print "srctemplatepath=".$srctemplatepath; // Src filename
286 $newfile = basename($srctemplatepath);
287 $newfiletmp = preg_replace('/\.od[ts]/i', '', $newfile);
288 $newfiletmp = preg_replace('/template_/i', '', $newfiletmp);
289 $newfiletmp = preg_replace('/modele_/i', '', $newfiletmp);
290 $newfiletmp = $objectref.'_'.$newfiletmp;
291 //$file=$dir.'/'.$newfiletmp.'.'.dol_print_date(dol_now(),'%Y%m%d%H%M%S').'.odt';
292 // Get extension (ods or odt)
293 $newfileformat = substr($newfile, strrpos($newfile, '.') + 1);
294 if (getDolGlobalString('MAIN_DOC_USE_TIMING')) {
295 $format = getDolGlobalString('MAIN_DOC_USE_TIMING');
296 if ($format == '1') {
297 $format = '%Y%m%d%H%M%S';
298 }
299 $filename = $newfiletmp.'-'.dol_print_date(dol_now(), $format).'.'.$newfileformat;
300 } else {
301 $filename = $newfiletmp.'.'.$newfileformat;
302 }
303 $file = $dir.'/'.$filename;
304 //print "newdir=".$dir;
305 //print "newfile=".$newfile;
306 //print "file=".$file;
307 //print "conf->societe->dir_temp=".$conf->societe->dir_temp;
308
309 dol_mkdir($conf->asset->dir_temp);
310 if (!is_writable($conf->asset->dir_temp)) {
311 $this->error = $langs->transnoentities("ErrorFailedToWriteInTempDirectory", $conf->asset->dir_temp);
312 dol_syslog('Error in write_file: ' . $this->error, LOG_ERR);
313 return -1;
314 }
315
316 // If CUSTOMER contact defined on object, we use it
317 $usecontact = false;
318 $arrayidcontact = $object->getIdContact('external', 'CUSTOMER');
319 if (count($arrayidcontact) > 0) {
320 $usecontact = true;
321 $result = $object->fetch_contact($arrayidcontact[0]);
322 }
323
324 // Recipient name
325 $contactobject = null;
326 if (!empty($usecontact)) {
327 // We can use the company of contact instead of thirdparty company
328 if ($object->contact->socid != $object->thirdparty->id && (!isset($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT) || getDolGlobalString('MAIN_USE_COMPANY_NAME_OF_CONTACT'))) {
329 $object->contact->fetch_thirdparty();
330 $socobject = $object->contact->thirdparty;
331 $contactobject = $object->contact;
332 } else {
333 $socobject = $object->thirdparty;
334 // if we have a CUSTOMER contact and we don't use it as thirdparty recipient we store the contact object for later use
335 $contactobject = $object->contact;
336 }
337 } else {
338 $socobject = $object->thirdparty;
339 }
340
341 // Make substitution
342 $substitutionarray = array(
343 '__FROM_NAME__' => $this->emetteur->name,
344 '__FROM_EMAIL__' => $this->emetteur->email,
345 '__TOTAL_TTC__' => $object->total_ttc,
346 '__TOTAL_HT__' => $object->total_ht,
347 '__TOTAL_VAT__' => $object->total_tva
348 );
349 complete_substitutions_array($substitutionarray, $langs, $object);
350 // Call the ODTSubstitution hook
351 $parameters = array('file' => $file, 'object' => $object, 'outputlangs' => $outputlangs, 'substitutionarray' => &$substitutionarray);
352 $reshook = $hookmanager->executeHooks('ODTSubstitution', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
353
354 // Line of free text
355 $newfreetext = '';
356 $paramfreetext = 'ORDER_FREE_TEXT';
357 if (getDolGlobalString($paramfreetext)) {
358 $newfreetext = make_substitutions(getDolGlobalString($paramfreetext), $substitutionarray);
359 }
360
361 // Open and load template
362 require_once ODTPHP_PATH.'odf.php';
363 try {
364 $odfHandler = new Odf(
365 $srctemplatepath,
366 array(
367 'PATH_TO_TMP' => $conf->asset->dir_temp,
368 'ZIP_PROXY' => getDolGlobalString('MAIN_ODF_ZIP_PROXY', 'PclZipProxy'), // PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy.
369 'DELIMITER_LEFT' => '{',
370 'DELIMITER_RIGHT' => '}'
371 )
372 );
373 } catch (Exception $e) {
374 $this->error = $e->getMessage();
375 dol_syslog($e->getMessage(), LOG_INFO);
376 return -1;
377 }
378 // After construction $odfHandler->contentXml contains content and
379 // [!-- BEGIN row.lines --]*[!-- END row.lines --] has been replaced by
380 // [!-- BEGIN lines --]*[!-- END lines --]
381
382 // Make substitutions into odt of freetext
383 try {
384 $odfHandler->setVars('free_text', $newfreetext, true, 'UTF-8');
385 } catch (OdfException $e) {
386 dol_syslog($e->getMessage(), LOG_INFO);
387 }
388
389 // Define substitution array
390 $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object);
391 $array_object_from_properties = $this->get_substitutionarray_each_var_object($object, $outputlangs);
392 $array_objet = $this->get_substitutionarray_object($object, $outputlangs);
393 $array_user = $this->get_substitutionarray_user($user, $outputlangs);
394 $array_soc = $this->get_substitutionarray_mysoc($mysoc, $outputlangs);
395 $array_thirdparty = $this->get_substitutionarray_thirdparty($socobject, $outputlangs);
396 $array_other = $this->get_substitutionarray_other($outputlangs);
397 // retrieve contact information for use in object as contact_xxx tags
398 $array_thirdparty_contact = array();
399 if ($usecontact && is_object($contactobject)) {
400 $array_thirdparty_contact = $this->get_substitutionarray_contact($contactobject, $outputlangs, 'contact');
401 }
402
403 $tmparray = array_merge($substitutionarray, $array_object_from_properties, $array_user, $array_soc, $array_thirdparty, $array_objet, $array_other, $array_thirdparty_contact);
404 complete_substitutions_array($tmparray, $outputlangs, $object);
405
406 // Call the ODTSubstitution hook
407 $parameters = array('odfHandler' => &$odfHandler, 'file' => $file, 'object' => $object, 'outputlangs' => $outputlangs, 'substitutionarray' => &$tmparray);
408 $reshook = $hookmanager->executeHooks('ODTSubstitution', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
409
410 // retrieve the constant to apply a ratio for image size or set the ratio to 1
411 if (getDolGlobalString('MAIN_DOC_ODT_IMAGE_RATIO')) {
412 $ratio = floatval(getDolGlobalString('MAIN_DOC_ODT_IMAGE_RATIO'));
413 } else {
414 $ratio = 1;
415 }
416
417 foreach ($tmparray as $key => $value) {
418 try {
419 if (preg_match('/logo$/', $key)) {
420 // Image
421 if (file_exists($value)) {
422 $odfHandler->setImage($key, $value, $ratio);
423 } else {
424 $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8');
425 }
426 } else {
427 // Text
428 $odfHandler->setVars($key, $value, true, 'UTF-8');
429 }
430 } catch (OdfException $e) {
431 dol_syslog($e->getMessage(), LOG_INFO);
432 }
433 }
434 // Replace tags of lines
435 /*
436 $foundtagforlines = 1;
437 try {
438 $listlines = $odfHandler->setSegment('lines');
439 } catch (OdfExceptionSegmentNotFound $e) {
440 // We may arrive here if tags for lines not present into template
441 $foundtagforlines = 0;
442 dol_syslog($e->getMessage(), LOG_INFO);
443 }
444 if ($foundtagforlines) {
445 $linenumber = 0;
446 foreach ($object->lines as $line) {
447 $linenumber++;
448 $tmparray = $this->get_substitutionarray_lines($line, $outputlangs, $linenumber);
449 complete_substitutions_array($tmparray, $outputlangs, $object, $line, "completesubstitutionarray_lines");
450 // Call the ODTSubstitutionLine hook
451 $parameters = array('odfHandler' => &$odfHandler, 'file' => $file, 'object' => $object, 'outputlangs' => $outputlangs, 'substitutionarray' => &$tmparray, 'line' => $line);
452 $reshook = $hookmanager->executeHooks('ODTSubstitutionLine', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
453 foreach ($tmparray as $key => $val) {
454 try {
455 $listlines->setVars($key, $val, true, 'UTF-8');
456 } catch (SegmentException $e) {
457 dol_syslog($e->getMessage(), LOG_INFO);
458 }
459 }
460 $listlines->merge();
461 }
462 try {
463 $odfHandler->mergeSegment($listlines);
464 } catch (OdfException $e) {
465 $this->error = $e->getMessage();
466 dol_syslog($this->error, LOG_WARNING);
467 return -1;
468 }
469 }*/
470
471 // Replace labels translated
472 $tmparray = $outputlangs->get_translations_for_substitutions();
473 foreach ($tmparray as $key => $value) {
474 try {
475 $odfHandler->setVars($key, $value, true, 'UTF-8');
476 } catch (OdfException $e) {
477 dol_syslog($e->getMessage(), LOG_INFO);
478 }
479 }
480
481 // Call the beforeODTSave hook
482
483 $parameters = array('odfHandler' => &$odfHandler, 'file' => $file, 'object' => $object, 'outputlangs' => $outputlangs, 'substitutionarray' => &$tmparray);
484 $reshook = $hookmanager->executeHooks('beforeODTSave', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
485
486 // Write new file
487 if (getDolGlobalString('MAIN_ODT_AS_PDF')) {
488 try {
489 $odfHandler->exportAsAttachedPDF($file);
490 } catch (Exception $e) {
491 $this->error = $e->getMessage();
492 dol_syslog($e->getMessage(), LOG_INFO);
493 return -1;
494 }
495 } else {
496 try {
497 $odfHandler->saveToDisk($file);
498 } catch (Exception $e) {
499 $this->error = $e->getMessage();
500 dol_syslog($e->getMessage(), LOG_INFO);
501 return -1;
502 }
503 }
504
505 $parameters = array('odfHandler' => &$odfHandler, 'file' => $file, 'object' => $object, 'outputlangs' => $outputlangs, 'substitutionarray' => &$tmparray);
506 $reshook = $hookmanager->executeHooks('afterODTCreation', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
507
508 dolChmod($file);
509
510 $odfHandler = null; // Destroy object
511
512 $this->result = array('fullpath' => $file);
513
514 return 1; // Success
515 } else {
516 $this->error = $langs->transnoentities("ErrorCanNotCreateDir", $dir);
517 return -1;
518 }
519 }
520
521 return -1;
522 }
523}
$id
Support class for third parties, contacts, members, users or resources.
Definition account.php:48
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:67
Class for Asset.
get_substitutionarray_each_var_object(&$object, $outputlangs, $recursive=1)
Define array with couple substitution key => substitution value.
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_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 generation of HTML components Only common components must be here.
Class to manage hooks.
Parent class for documents 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 $mode $langs defaultlang(is_numeric($duration_value) ? " delay=". $duration_value :"").(is_numeric($duration_value2) ? " after 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_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
getCallerInfoString()
Get caller info as a string that can be appended to a log message.
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_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0)
Clean a string to use it as a file name.
getDolGlobalString($key, $default='')
Return a 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)
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
Definition member.php:79
if(preg_match('/(crypted|dolcrypt):/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
Definition repair.php:158
$conf db name
Only used if Module[ID]Name translation string is not found.
Definition repair.php:161
getMaxFileSizeArray()
Return the max allowed for file upload.