dolibarr  7.0.0-beta
dolibarr_export.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2006-2015 Laurent Destailleur <eldy@users.sourceforge.net>
3  * Copyright (C) 2006-2012 Regis Houssin <regis.houssin@capnetworks.com>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  */
18 
25 require '../../main.inc.php';
26 require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
27 require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
28 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
29 
30 $langs->load("admin");
31 
32 $action=GETPOST('action','alpha');
33 
34 $sortfield = GETPOST('sortfield','alpha');
35 $sortorder = GETPOST('sortorder','alpha');
36 $page = GETPOST('page','int');
37 if (! $sortorder) $sortorder="DESC";
38 if (! $sortfield) $sortfield="date";
39 if ($page < 0) { $page = 0; }
40 $limit = GETPOST('limit')?GETPOST('limit','int'):$conf->liste_limit;
41 $offset = $limit * $page;
42 
43 if (! $user->admin)
45 
46 
47 /*
48  * Actions
49  */
50 
51 if ($action == 'delete')
52 {
53  $file=$conf->admin->dir_output.'/'.GETPOST('urlfile');
54  $ret=dol_delete_file($file, 1);
55  if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs');
56  else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors');
57  $action='';
58 }
59 
60 
61 /*
62  * View
63  */
64 
65 $form=new Form($db);
66 $formfile = new FormFile($db);
67 
68 $label=$db::LABEL;
69 $type=$db->type;
70 //var_dump($db);
71 
72 $help_url='EN:Backups|FR:Sauvegardes|ES:Copias_de_seguridad';
73 llxHeader('','',$help_url);
74 
75 ?>
76 <script type="text/javascript">
77 jQuery(document).ready(function() {
78 
79  function hideoptions () {
80  jQuery("#mysql_options").hide();
81  jQuery("#mysql_nobin_options").hide();
82  jQuery("#postgresql_options").hide();
83  }
84 
85  hideoptions();
86  jQuery("#radio_dump_mysql").click(function() {
87  hideoptions();
88  jQuery("#mysql_options").show();
89  });
90  jQuery("#radio_dump_mysql_nobin").click(function() {
91  hideoptions();
92  jQuery("#mysql_nobin_options").show();
93  });
94  jQuery("#radio_dump_postgresql").click(function() {
95  hideoptions();
96  jQuery("#postgresql_options").show();
97  });
98  jQuery("#select_sql_compat").click(function() {
99  if (jQuery("#select_sql_compat").val() == 'POSTGRESQL')
100  {
101  jQuery("#checkbox_dump_disable-add-locks").prop('checked',true);
102  }
103  });
104 
105  <?php
106  if (in_array($type, array('mysql', 'mysqli'))) print 'jQuery("#radio_dump_mysql").click();';
107  if (in_array($type, array('pgsql'))) print 'jQuery("#radio_dump_postgresql").click();';
108  ?>
109 });
110 </script>
111 <?php
112 
113 print load_fiche_titre($langs->trans("Backup"),'','title_setup');
114 //print_barre_liste($langs->trans("Backup"), '', '', '', '', '', $langs->trans("BackupDesc",DOL_DATA_ROOT), 0, 0, 'title_setup');
115 
116 print '<div class="center">';
117 print $langs->trans("BackupDesc",DOL_DATA_ROOT);
118 print '</div>';
119 print '<br>';
120 
121 ?>
122 
123 <!-- Dump of a server -->
124 <form method="post" action="export.php" name="dump"><input type="hidden"
125  name="token" value="<?php echo $_SESSION['newtoken']; ?>" /> <input
126  type="hidden" name="export_type" value="server" />
127 
128 <fieldset id="fieldsetexport"><legend class="legendforfieldsetstep" style="font-size: 3em">1</legend>
129 
130 <?php
131 print $langs->trans("BackupDesc3",$dolibarr_main_db_name).'<br>';
132 //print $langs->trans("BackupDescY").'<br>';
133 print '<br>';
134 ?>
135 
136 <div id="backupdatabaseleft" class="fichehalfleft" >
137 
138 <?php
139 
140 print load_fiche_titre($title?$title:$langs->trans("BackupDumpWizard"));
141 
142 print '<table width="100%" class="'.($useinecm?'nobordernopadding':'liste').' nohover">';
143 print '<tr class="liste_titre">';
144 print '<td class="liste_titre">';
145 print $langs->trans("DatabaseName").' : <b>'.$dolibarr_main_db_name.'</b><br>';
146 print '</td>';
147 print '</tr>';
148 print '<tr '.$bc[false].'><td style="padding-left: 8px">';
149 ?>
150 <table class="centpercent">
151  <tr>
152  <td class="tdtop">
153 
154  <div id="div_container_exportoptions">
155  <fieldset id="exportoptions"><legend><?php echo $langs->trans("ExportMethod"); ?></legend>
156  <?php
157  if (in_array($type, array('mysql', 'mysqli')))
158  {
159  ?>
160  <div class="formelementrow"><input type="radio" name="what" value="mysql" id="radio_dump_mysql" />
161  <label for="radio_dump_mysql">MySQL Dump (mysqldump)</label>
162  </div>
163  <br>
164  <div class="formelementrow"><input type="radio" name="what" value="mysqlnobin" id="radio_dump_mysql_nobin" />
165  <label for="radio_dump_mysql">MySQL Dump (php) <?php print img_warning($langs->trans('BackupPHPWarning')) ?></label>
166  </div>
167  <?php
168  }
169  else if (in_array($type, array('pgsql')))
170  {
171  ?>
172  <div class="formelementrow"><input type="radio" name="what" value="postgresql" id="radio_dump_postgresql" />
173  <label for="radio_dump_postgresql">PostgreSQL Dump (pg_dump)</label>
174  </div>
175  <?php
176  }
177  else
178  {
179  print 'No method available with database '.$label;
180  }
181  ?>
182  </fieldset>
183  </div>
184 
185  </td>
186  <td class="tdtop">
187 
188 
189  <div id="div_container_sub_exportoptions">
190  <?php
191  if (in_array($type, array('mysql', 'mysqli')))
192  {
193  ?> <!-- Fieldset mysqldump -->
194  <fieldset id="mysql_options"><legend><?php echo $langs->trans("MySqlExportParameters"); ?></legend>
195 
196  <div class="formelementrow"><?php echo $langs->trans("FullPathToMysqldumpCommand");
197  if (empty($conf->global->SYSTEMTOOLS_MYSQLDUMP))
198  {
199  $fullpathofmysqldump=$db->getPathOfDump();
200  }
201  else
202  {
203  $fullpathofmysqldump=$conf->global->SYSTEMTOOLS_MYSQLDUMP;
204  }
205  ?><br>
206  <input type="text" name="mysqldump" style="width: 80%"
207  value="<?php echo $fullpathofmysqldump; ?>" /></div>
208 
209  <br>
210  <fieldset><legend><?php echo $langs->trans("ExportOptions"); ?></legend>
211  <div class="formelementrow"><input type="checkbox"
212  name="use_transaction" value="yes" id="checkbox_use_transaction" /> <label
213  for="checkbox_use_transaction"> <?php echo $langs->trans("UseTransactionnalMode"); ?></label>
214 
215  </div>
216 
217  <?php if (! empty($conf->global->MYSQL_OLD_OPTION_DISABLE_FK)) { ?>
218  <div class="formelementrow"><input type="checkbox" name="disable_fk"
219  value="yes" id="checkbox_disable_fk" checked /> <label
220  for="checkbox_disable_fk"> <?php echo $langs->trans("CommandsToDisableForeignKeysForImport"); ?> <?php print img_info($langs->trans('CommandsToDisableForeignKeysForImportWarning')); ?></label>
221  </div>
222  <?php } ?>
223 
224  <label for="select_sql_compat"> <?php echo $langs->trans("ExportCompatibility"); ?></label>
225 
226  <select name="sql_compat" id="select_sql_compat" class="flat">
227  <option value="NONE" selected>NONE</option>
228  <option value="ANSI">ANSI</option>
229  <option value="DB2">DB2</option>
230  <option value="MAXDB">MAXDB</option>
231  <option value="MYSQL323">MYSQL323</option>
232  <option value="MYSQL40">MYSQL40</option>
233  <option value="MSSQL">MSSQL</option>
234  <option value="ORACLE">ORACLE</option>
235  <option value="POSTGRESQL">POSTGRESQL</option>
236  </select> <br>
237  <!-- <input type="checkbox" name="drop_database" value="yes"
238  id="checkbox_drop_database" /> <label for="checkbox_drop_database"><?php echo $langs->trans("AddDropDatabase"); ?></label>
239  -->
240  </fieldset>
241 
242  <br>
243  <fieldset><legend> <input type="checkbox" name="sql_structure"
244  value="structure" id="checkbox_sql_structure" checked /> <label
245  for="checkbox_sql_structure"> <?php echo $langs->trans('ExportStructure') ?></label> </legend> <input
246  type="checkbox" name="drop"<?php echo ((! isset($_GET["drop"]) && ! isset($_POST["drop"])) || GETPOST('drop'))?' checked':''; ?> id="checkbox_dump_drop" /> <label
247  for="checkbox_dump_drop"><?php echo $langs->trans("AddDropTable"); ?></label><br>
248  </fieldset>
249 
250  <br>
251  <fieldset><legend> <input type="checkbox" name="sql_data" value="data"
252  id="checkbox_sql_data" checked /> <label for="checkbox_sql_data">
253  <?php echo $langs->trans("Datas"); ?></label> </legend> <input
254  type="checkbox" name="showcolumns" value="yes"
255  id="checkbox_dump_showcolumns" checked /> <label
256  for="checkbox_dump_showcolumns"> <?php echo $langs->trans("NameColumn"); ?></label><br>
257 
258  <input type="checkbox" name="extended_ins" value="yes"
259  id="checkbox_dump_extended_ins" checked /> <label
260  for="checkbox_dump_extended_ins"> <?php echo $langs->trans("ExtendedInsert"); ?></label><br>
261 
262  <input type="checkbox" name="disable-add-locks" value="no"
263  id="checkbox_dump_disable-add-locks" /> <label
264  for="checkbox_dump_disable-add-locks"> <?php echo $langs->trans("NoLockBeforeInsert"); ?></label><br>
265 
266  <input type="checkbox" name="delayed" value="yes"
267  id="checkbox_dump_delayed" /> <label for="checkbox_dump_delayed"> <?php echo $langs->trans("DelayedInsert"); ?></label><br>
268 
269  <input type="checkbox" name="sql_ignore" value="yes"
270  id="checkbox_dump_ignore" /> <label for="checkbox_dump_ignore"> <?php echo $langs->trans("IgnoreDuplicateRecords"); ?></label><br>
271 
272  <input type="checkbox" name="hexforbinary" value="yes"
273  id="checkbox_hexforbinary" checked /> <label
274  for="checkbox_hexforbinary"> <?php echo $langs->trans("EncodeBinariesInHexa"); ?></label><br>
275 
276  <input type="checkbox" name="charset_utf8" value="yes"
277  id="checkbox_charset_utf8" checked disabled /> <label
278  for="checkbox_charset_utf8"> <?php echo $langs->trans("UTF8"); ?></label><br>
279 
280  </fieldset>
281  </fieldset>
282 
283  <!-- Fieldset mysql_nobin -->
284  <fieldset id="mysql_nobin_options"><legend><?php echo $langs->trans("MySqlExportParameters"); ?></legend>
285  <fieldset>
286  <legend><?php echo $langs->trans("ExportOptions"); ?></legend>
287  <div class="formelementrow"><input type="checkbox"
288  name="nobin_use_transaction" value="yes" id="checkbox_use_transaction" /> <label
289  for="checkbox_use_transaction"> <?php echo $langs->trans("UseTransactionnalMode"); ?></label>
290 
291  </div>
292  <?php if (! empty($conf->global->MYSQL_OLD_OPTION_DISABLE_FK)) { ?>
293  <div class="formelementrow"><input type="checkbox" name="nobin_disable_fk"
294  value="yes" id="checkbox_disable_fk" checked /> <label
295  for="checkbox_disable_fk"> <?php echo $langs->trans("CommandsToDisableForeignKeysForImport"); ?> <?php print img_info($langs->trans('CommandsToDisableForeignKeysForImportWarning')); ?></label>
296  </div>
297  <?php } ?>
298  </fieldset>
299 
300  <br>
301  <fieldset><legend><?php echo $langs->trans('ExportStructure') ?></legend> <input
302  type="checkbox" name="nobin_drop"<?php echo ((! isset($_GET["nobin_drop"]) && ! isset($_POST["nobin_drop"])) || GETPOST('nobin_drop'))?' checked':''; ?> id="checkbox_dump_drop" /> <label
303  for="checkbox_dump_drop"><?php echo $langs->trans("AddDropTable"); ?></label><br>
304  </fieldset>
305 
306  <br>
307  <fieldset>
308  <legend><?php echo $langs->trans("Datas"); ?></legend>
309 
310  <input type="checkbox" name="nobin_nolocks" value="no"
311  id="checkbox_dump_disable-add-locks" /> <label
312  for="checkbox_dump_disable-add-locks"> <?php echo $langs->trans("NoLockBeforeInsert"); ?></label><br>
313 
314  <input type="checkbox" name="nobin_delayed" value="yes"
315  id="checkbox_dump_delayed" /> <label for="checkbox_dump_delayed"> <?php echo $langs->trans("DelayedInsert"); ?></label><br>
316 
317  <input type="checkbox" name="nobin_sql_ignore" value="yes"
318  id="checkbox_dump_ignore" /> <label for="checkbox_dump_ignore"> <?php echo $langs->trans("IgnoreDuplicateRecords"); ?></label><br>
319 
320  <input type="checkbox" name="nobin_charset_utf8" value="yes"
321  id="checkbox_charset_utf8" checked disabled /> <label
322  for="checkbox_charset_utf8"> <?php echo $langs->trans("UTF8"); ?></label><br>
323 
324  </fieldset>
325  </fieldset>
326 
327  <?php
328  }
329 
330  if (in_array($type, array('pgsql')))
331  {
332  ?> <!-- Fieldset pg_dump -->
333  <fieldset id="postgresql_options"><legend><?php echo $langs->trans("PostgreSqlExportParameters"); ?></legend>
334 
335  <div class="formelementrow"><?php echo $langs->trans("FullPathToPostgreSQLdumpCommand");
336  if (empty($conf->global->SYSTEMTOOLS_POSTGRESQLDUMP))
337  {
338  $fullpathofpgdump=$db->getPathOfDump();
339  }
340  else
341  {
342  $fullpathofpgdump=$conf->global->SYSTEMTOOLS_POSTGRESQLDUMP;
343  }
344  ?><br>
345  <input type="text" name="postgresqldump" style="width: 80%"
346  value="<?php echo $fullpathofpgdump; ?>" /></div>
347 
348 
349  <br>
350  <fieldset><legend><?php echo $langs->trans("ExportOptions"); ?></legend>
351  <label for="select_sql_compat"> <?php echo $langs->trans("ExportCompatibility"); ?></label>
352  <select name="sql_compat" id="select_sql_compat" class="flat">
353  <option value="POSTGRESQL" selected>POSTGRESQL</option>
354  <option value="ANSI">ANSI</option>
355  </select><br>
356  <!-- <input type="checkbox" name="drop_database" value="yes"
357  id="checkbox_drop_database" /> <label for="checkbox_drop_database"><?php echo $langs->trans("AddDropDatabase"); ?></label>
358  -->
359  </fieldset>
360 
361  <br>
362  <fieldset><legend> <input type="checkbox" name="sql_structure"
363  value="structure" id="checkbox_sql_structure" checked /> <label
364  for="checkbox_sql_structure"> <?php echo $langs->trans('ExportStructure') ?></label> </legend></fieldset>
365 
366  <br>
367  <fieldset><legend> <input type="checkbox" name="sql_data" value="data"
368  id="checkbox_sql_data" checked /> <label for="checkbox_sql_data">
369  <?php echo $langs->trans("Datas"); ?></label> </legend> <input
370  type="checkbox" name="showcolumns" value="yes"
371  id="checkbox_dump_showcolumns" checked /> <label
372  for="checkbox_dump_showcolumns"> <?php echo $langs->trans("NameColumn"); ?></label><br>
373 
374  </fieldset>
375  </fieldset>
376  <?php
377  }
378  ?>
379  </div>
380 
381  </td>
382  </tr>
383 </table>
384 
385 
386 <!--<fieldset>
387 <legend><?php echo $langs->trans("Destination"); ?></legend> -->
388 <br>
389 <label for="filename_template"> <?php echo $langs->trans("FileNameToGenerate"); ?></label><br>
390 <input type="text" name="filename_template" style="width: 90%"
391  id="filename_template"
392  value="<?php
393 $prefix='dump';
394 $ext='.sql';
395 if (in_array($type, array('mysql', 'mysqli'))) { $prefix='mysqldump'; $ext='sql'; }
396 //if ($label == 'PostgreSQL') { $prefix='pg_dump'; $ext='dump'; }
397 if (in_array($type, array('pgsql'))) { $prefix='pg_dump'; $ext='sql'; }
398 $file=$prefix.'_'.$dolibarr_main_db_name.'_'.dol_sanitizeFileName(DOL_VERSION).'_'.strftime("%Y%m%d%H%M").'.'.$ext;
399 echo $file;
400 ?>" /> <br>
401 <br>
402 
403 <?php
404 
405 // Define compressions array
406 $compression=array();
407 if (in_array($type, array('mysql', 'mysqli')))
408 {
409  $compression['none'] = array('function' => '', 'id' => 'radio_compression_none', 'label' => $langs->trans("None"));
410  $compression['gz'] = array('function' => 'gzopen', 'id' => 'radio_compression_gzip', 'label' => $langs->trans("Gzip"));
411  // $compression['zip']= array('function' => 'dol_compress', 'id' => 'radio_compression_zip', 'label' => $langs->trans("FormatZip")); // Not open source format. Must implement dol_compress function
412  $compression['bz'] = array('function' => 'bzopen', 'id' => 'radio_compression_bzip', 'label' => $langs->trans("Bzip2"));
413 }
414 else
415 {
416  $compression['none'] = array('function' => '', 'id' => 'radio_compression_none', 'label' => $langs->trans("Default"));
417  $compression['gz'] = array('function' => 'gzopen', 'id' => 'radio_compression_gzip', 'label' => $langs->trans("Gzip"));
418 }
419 
420 // Show compression choices
421 print '<div class="formelementrow">';
422 print "\n";
423 
424 print $langs->trans("Compression").': &nbsp; ';
425 
426 foreach($compression as $key => $val)
427 {
428  if (! $val['function'] || function_exists($val['function'])) // Enabled export format
429  {
430  print '<input type="radio" name="compression" value="'.$key.'" id="'.$val['id'].'" checked>';
431  print ' <label for="'.$val['id'].'">'.$val['label'].'</label>';
432  }
433  else // Disabled export format
434  {
435  print '<input type="radio" name="compression" value="'.$key.'" id="'.$val['id'].'" disabled>';
436  print ' <label for="'.$val['id'].'">'.$val['label'].'</label>';
437  print ' ('.$langs->trans("NotAvailable").')';
438  }
439  print ' &nbsp; &nbsp; ';
440 }
441 
442 print '</div>';
443 print "\n";
444 
445 ?><!--</fieldset>--> <!-- End destination -->
446 
447 
448 <br>
449 <div align="center"><input type="submit" class="button"
450  value="<?php echo $langs->trans("GenerateBackup") ?>" id="buttonGo" /><br>
451 <br>
452 
453 <?php
454 if (! empty($_SESSION["commandbackuplastdone"]))
455 {
456  print '<br><b>'.$langs->trans("RunCommandSummary").':</b><br>'."\n";
457  print '<textarea rows="'.ROWS_2.'" class="centpercent">'.$_SESSION["commandbackuplastdone"].'</textarea><br>'."\n";
458  print '<br>';
459 
460  //print $paramclear;
461 
462  // Now run command and show result
463  print '<b>'.$langs->trans("BackupResult").':</b> ';
464  print $_SESSION["commandbackupresult"];
465 
466  $_SESSION["commandbackuplastdone"]='';
467  $_SESSION["commandbackuptorun"]='';
468  $_SESSION["commandbackupresult"]='';
469 }
470 if (! empty($_SESSION["commandbackuptorun"]))
471 {
472  print '<br><font class="warning">'.$langs->trans("YouMustRunCommandFromCommandLineAfterLoginToUser",$dolibarr_main_db_user,$dolibarr_main_db_user).':</font><br>'."\n";
473  print '<textarea id="commandbackuptoruntext" rows="'.ROWS_2.'" class="centpercent">'.$_SESSION["commandbackuptorun"].'</textarea><br>'."\n";
474  print ajax_autoselect("commandbackuptoruntext", 0);
475  print '<br>';
476 
477  //print $paramclear;
478 
479  $_SESSION["commandbackuplastdone"]='';
480  $_SESSION["commandbackuptorun"]='';
481  $_SESSION["commandbackupresult"]='';
482 }
483 ?>
484 
485 </div> <!-- end div center button -->
486 
487 <?php
488 print '</td></tr>';
489 print '</table>';
490 
491 
492 ?>
493 
494 </div> <!-- end div fichehalfleft -->
495 
496 <div id="backupdatabaseright" class="fichehalfright" style="height:480px; overflow: auto;">
497 <div class="ficheaddleft">
498 
499 <?php
500 $filearray=dol_dir_list($conf->admin->dir_output.'/backup','files',0,'','',$sortfield,(strtolower($sortorder)=='asc'?SORT_ASC:SORT_DESC),1);
501 $result=$formfile->list_of_documents($filearray,null,'systemtools','',1,'backup/',1,0,$langs->trans("NoBackupFileAvailable"),0,$langs->trans("PreviousDumpFiles"));
502 print '<br>';
503 ?>
504 
505 
506 </div>
507 </div>
508 
509 </fieldset>
510 
511 <br>
512 
513 <fieldset><legend class="legendforfieldsetstep" style="font-size: 3em">2</legend>
514 <?php
515 print $langs->trans("BackupDesc2",DOL_DATA_ROOT).'<br>';
516 print $langs->trans("BackupDescX").'<br><br>';
517 ?>
518 </fieldset>
519 
520 
521 
522 </form>
523 <?php
524 
525 llxFooter();
526 
527 $db->close();
llxFooter()
Empty footer.
Definition: wrapper.php:58
setEventMessages($mesg, $mesgs, $style='mesgs')
Set event messages in dol_events session object.
ajax_autoselect($htmlname, $addlink='')
Make content of an input box selected when we click into input field.
Definition: ajax.lib.php:367
if(empty($reshook)) $form
View.
Definition: perms.php:103
dol_dir_list($path, $types="all", $recursive=0, $filter="", $excludefilter=null, $sortcriteria="name", $sortorder=SORT_ASC, $mode=0, $nohook=0, $relativename="")
Scan a directory and return a list of files/directories.
Definition: files.lib.php:58
GETPOST($paramname, $check='none', $method=0, $filter=NULL, $options=NULL, $noreplace=0)
Return value of a param into GET or POST supervariable.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0)
Show a message to say access is forbidden and stop program Calling this function terminate execution ...
Class to manage generation of HTML components Only common components must be here.
img_warning($titlealt= 'default', $moreatt= '')
Show warning logo.
if($_POST["cancel"]==$langs->trans("Cancel")&&!$id) if($action== 'setdatev'&&$user->rights->tax->charges->creer) if($action== 'add'&&$_POST["cancel"]<> $langs->trans("Cancel")) if($action== 'delete') $title
Actions.
Definition: card.php:183
load_fiche_titre($titre, $morehtmlright='', $picto='title_generic.png', $pictoisfullpath=0, $id=0, $morecssontable='', $morehtmlcenter='')
Load a title with picto.
llxHeader()
Empty header.
Definition: wrapper.php:46
Class to offer components to list and upload files.
$conf db name
Only used if Module[ID]Name translation string is not found.
Definition: repair.php:104
print
Draft customers invoices.
Definition: index.php:91
img_info($titlealt= 'default')
Show info logo.
dol_delete_file($file, $disableglob=0, $nophperrors=0, $nohook=0, $object=null)
Remove a file or several files with a mask.
Definition: files.lib.php:1103
type
Definition: viewcat.php:283