57 $this->numoffiles = 0;
86 public function form_attach_new_file($url, $title =
'', $addcancel = 0, $sectionid = 0, $perm = 1, $size = 50, $object =
'', $options =
'', $useajax = 1, $savingdocmask =
'', $linkfiles = 1, $htmlname =
'formuserfile', $accept =
'', $sectiondir =
'', $usewithoutform = 0, $capture = 0, $disablemulti = 0, $nooutput = 0)
89 global $conf, $langs, $hookmanager;
90 $hookmanager->initHooks(array(
'formfile'));
94 dol_syslog(__METHOD__.
": using 2 for useajax is deprecated and should be not used", LOG_WARNING);
97 if (!empty($conf->browser->layout) && $conf->browser->layout !=
'classic') {
101 if ((!empty($conf->global->MAIN_USE_JQUERY_FILEUPLOAD) && $useajax) || ($useajax == 2)) {
108 return 'Feature too bugged so removed';
111 if (!$perm && !empty($conf->global->MAIN_BUTTON_HIDE_UNAUTHORIZED)) {
119 $out =
"\n\n".
'<!-- Start form attach new file --><div class="formattachnewfile">'.
"\n";
122 $title = $langs->trans(
"AttachANewFile");
124 if ($title !=
'none') {
128 if (empty($usewithoutform)) {
130 $url .= (strpos($url,
'?') ===
false ?
'?' :
'&').
'uploadform=1';
132 $out .=
'<form name="'.$htmlname.
'" id="'.$htmlname.
'" action="'.$url.
'" enctype="multipart/form-data" method="POST">'.
"\n";
134 if (empty($usewithoutform) || $usewithoutform == 2) {
135 $out .=
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
136 $out .=
'<input type="hidden" id="'.$htmlname.
'_section_dir" name="section_dir" value="'.$sectiondir.
'">'.
"\n";
137 $out .=
'<input type="hidden" id="'.$htmlname.
'_section_id" name="section_id" value="'.$sectionid.
'">'.
"\n";
138 $out .=
'<input type="hidden" name="sortfield" value="'.GETPOST(
'sortfield',
'aZ09comma').
'">'.
"\n";
139 $out .=
'<input type="hidden" name="sortorder" value="'.GETPOST(
'sortorder',
'aZ09comma').
'">'.
"\n";
140 $out .=
'<input type="hidden" name="page_y" value="">'.
"\n";
143 $out .=
'<table class="nobordernopadding centpercent">';
146 if (!empty($options)) {
147 $out .=
'<td>'.$options.
'</td>';
150 $out .=
'<td class="valignmiddle nowrap">';
153 $max = $maxfilesizearray[
'max'];
154 $maxmin = $maxfilesizearray[
'maxmin'];
155 $maxphptoshow = $maxfilesizearray[
'maxphptoshow'];
156 $maxphptoshowparam = $maxfilesizearray[
'maxphptoshowparam'];
158 $out .=
'<input type="hidden" name="MAX_FILE_SIZE" value="'.($maxmin * 1024).
'">';
160 $out .=
'<input class="flat minwidth400 maxwidth200onsmartphone" type="file"';
161 $out .= ((!empty($conf->global->MAIN_DISABLE_MULTIPLE_FILEUPLOAD) || $disablemulti) ?
' name="userfile"' :
' name="userfile[]" multiple');
162 $out .= (empty($conf->global->MAIN_UPLOAD_DOC) || empty($perm) ?
' disabled' :
'');
163 $out .= (!empty($accept) ?
' accept="'.$accept.
'"' :
' accept=""');
164 $out .= (!empty($capture) ?
' capture="capture"' :
'');
168 $langs->load(
'link');
169 $out .=
'<span class="nowraponsmartphone"><input style="margin-right: 2px;" type="checkbox" id="overwritefile" name="overwritefile" value="1"><label for="overwritefile">'.$langs->trans(
"OverwriteIfExists").
'</label></span>';
171 $out .=
'<input type="submit" class="button small reposition" name="sendit" value="'.$langs->trans(
"Upload").
'"';
172 $out .= (empty($conf->global->MAIN_UPLOAD_DOC) || empty($perm) ?
' disabled' :
'');
177 $out .=
'<input type="submit" class="button small button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
180 if (!empty($conf->global->MAIN_UPLOAD_DOC)) {
182 $menudolibarrsetupmax = $langs->transnoentitiesnoconv(
"Home").
' - '.$langs->transnoentitiesnoconv(
"Setup").
' - '.$langs->transnoentitiesnoconv(
"Security");
183 $langs->load(
'other');
185 $out .=
info_admin($langs->trans(
"ThisLimitIsDefinedInSetupAt", $menudolibarrsetupmax, $max, $maxphptoshowparam, $maxphptoshow), 1);
188 $out .=
' ('.$langs->trans(
"UploadDisabled").
')';
190 $out .=
"</td></tr>";
192 if ($savingdocmask) {
194 $rename = (empty($conf->global->MAIN_DOC_UPLOAD_NOT_RENAME_BY_DEFAULT) ?
'checked' :
'');
197 if (!empty($options)) {
198 $out .=
'<td>'.$options.
'</td>';
200 $out .=
'<td valign="middle" class="nowrap">';
201 $out .=
'<input type="checkbox" '.$rename.
' class="savingdocmask" name="savingdocmask" id="savingdocmask" value="'.
dol_escape_js($savingdocmask).
'"> ';
202 $out .=
'<label class="opacitymedium small" for="savingdocmask">';
203 $out .= $langs->trans(
"SaveUploadedFileWithMask", preg_replace(
'/__file__/', $langs->transnoentitiesnoconv(
"OriginFileName"), $savingdocmask), $langs->transnoentitiesnoconv(
"OriginFileName"));
211 if (empty($usewithoutform)) {
213 if (empty($sectionid)) {
218 $out .=
"\n</div><!-- End form attach new file -->\n";
221 $out .=
"\n".
'<!-- Start form link new url --><div class="formlinknewurl">'.
"\n";
222 $langs->load(
'link');
223 $title = $langs->trans(
"LinkANewFile");
226 if (empty($usewithoutform)) {
227 $out .=
'<form name="'.$htmlname.
'_link" id="'.$htmlname.
'_link" action="'.$url.
'" method="POST">'.
"\n";
228 $out .=
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
229 $out .=
'<input type="hidden" id="'.$htmlname.
'_link_section_dir" name="link_section_dir" value="">'.
"\n";
230 $out .=
'<input type="hidden" id="'.$htmlname.
'_link_section_id" name="link_section_id" value="'.$sectionid.
'">'.
"\n";
231 $out .=
'<input type="hidden" name="page_y" value="">'.
"\n";
234 $out .=
'<div class="valignmiddle">';
235 $out .=
'<div class="inline-block" style="padding-right: 10px;">';
236 if (!empty($conf->global->OPTIMIZEFORTEXTBROWSER)) {
237 $out .=
'<label for="link">'.$langs->trans(
"URLToLink").
':</label> ';
239 $out .=
'<input type="text" name="link" class="flat minwidth400imp" id="link" placeholder="'.dol_escape_htmltag($langs->trans(
"URLToLink")).
'">';
241 $out .=
'<div class="inline-block" style="padding-right: 10px;">';
242 if (!empty($conf->global->OPTIMIZEFORTEXTBROWSER)) {
243 $out .=
'<label for="label">'.$langs->trans(
"Label").
':</label> ';
245 $out .=
'<input type="text" class="flat" name="label" id="label" placeholder="'.dol_escape_htmltag($langs->trans(
"Label")).
'">';
246 $out .=
'<input type="hidden" name="objecttype" value="'.$object->element.
'">';
247 $out .=
'<input type="hidden" name="objectid" value="'.$object->id.
'">';
249 $out .=
'<div class="inline-block" style="padding-right: 10px;">';
250 $out .=
'<input type="submit" class="button small reposition" name="linkit" value="'.$langs->trans(
"ToLink").
'"';
251 $out .= (empty($conf->global->MAIN_UPLOAD_DOC) || empty($perm) ?
' disabled' :
'');
255 if (empty($usewithoutform)) {
256 $out .=
'<div class="clearboth"></div>';
257 $out .=
'</form><br>';
260 $out .=
"\n</div><!-- End form link new url -->\n";
263 $parameters = array(
'socid'=>(isset($GLOBALS[
'socid']) ? $GLOBALS[
'socid'] :
''),
'id'=>(isset($GLOBALS[
'id']) ? $GLOBALS[
'id'] :
''),
'url'=>$url,
'perm'=>$perm,
'options'=>$options);
264 $res = $hookmanager->executeHooks(
'formattachOptions', $parameters, $object);
266 $out =
'<div class="'.($usewithoutform ?
'inline-block valignmiddle' :
'attacharea attacharea'.$htmlname).
'">'.$out.
'</div>';
268 $out .= $hookmanager->resPrint;
302 public function show_documents($modulepart, $modulesubdir, $filedir, $urlsource, $genallowed, $delallowed = 0, $modelselected =
'', $allowgenifempty = 1, $forcenomultilang = 0, $iconPDF = 0, $notused = 0, $noform = 0, $param =
'', $title =
'', $buttonlabel =
'', $codelang =
'')
305 $this->numoffiles = 0;
306 print $this->
showdocuments($modulepart, $modulesubdir, $filedir, $urlsource, $genallowed, $delallowed, $modelselected, $allowgenifempty, $forcenomultilang, $iconPDF, $notused, $noform, $param, $title, $buttonlabel, $codelang);
307 return $this->numoffiles;
337 public function showdocuments($modulepart, $modulesubdir, $filedir, $urlsource, $genallowed, $delallowed = 0, $modelselected =
'', $allowgenifempty = 1, $forcenomultilang = 0, $iconPDF = 0, $notused = 0, $noform = 0, $param =
'', $title =
'', $buttonlabel =
'', $codelang =
'', $morepicto =
'', $object =
null, $hideifempty = 0, $removeaction =
'remove_file', $tooltipontemplatecombo =
'')
339 global $dolibarr_main_url_root;
342 if (!empty($iconPDF)) {
343 dol_syslog(__METHOD__.
": passing iconPDF parameter is deprecated", LOG_WARNING);
346 global $langs, $conf, $user, $hookmanager;
350 if (is_object($hookmanager)) {
352 'modulepart'=>&$modulepart,
353 'modulesubdir'=>&$modulesubdir,
354 'filedir'=>&$filedir,
355 'urlsource'=>&$urlsource,
356 'genallowed'=>&$genallowed,
357 'delallowed'=>&$delallowed,
358 'modelselected'=>&$modelselected,
359 'allowgenifempty'=>&$allowgenifempty,
360 'forcenomultilang'=>&$forcenomultilang,
364 'buttonlabel'=>&$buttonlabel,
365 'codelang'=>&$codelang,
366 'morepicto'=>&$morepicto,
367 'hideifempty'=>&$hideifempty,
368 'removeaction'=>&$removeaction
370 $reshook = $hookmanager->executeHooks(
'showDocuments', $parameters, $object);
378 return $hookmanager->resPrint;
381 if (!is_object(
$form)) {
385 include_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
388 if (!empty($iconPDF)) {
393 if (!preg_match(
'/entity\=[0-9]+/', $param)) {
394 $param .= ($param ?
'&' :
'').
'entity='.(!empty($object->entity) ? $object->entity : $conf->entity);
399 if (in_array($modulepart, array(
'contract',
'facture',
'supplier_proposal',
'propal',
'proposal',
'order',
'commande',
'expedition',
'commande_fournisseur',
'expensereport',
'delivery',
'ticket'))) {
400 $printer = (!empty($user->rights->printing->read) && !empty($conf->printing->enabled)) ?
true:
false;
403 $hookmanager->initHooks(array(
'formfile'));
407 if (!empty($filedir)) {
408 $file_list =
dol_dir_list($filedir,
'files', 0,
'',
'(\.meta|_preview.*.*\.png)$',
'date', SORT_DESC);
410 if ($hideifempty && empty($file_list)) {
415 $forname =
'builddoc';
420 $out .=
"\n".
'<!-- Start show_document -->'.
"\n";
423 if (preg_match(
'/massfilesarea_/', $modulepart)) {
424 $out .=
'<div id="show_files"><br></div>'.
"\n";
425 $title = $langs->trans(
"MassFilesArea").
' <a href="" id="togglemassfilesarea" ref="shown">('.$langs->trans(
"Hide").
')</a>';
427 jQuery(document).ready(function() {
428 jQuery(\'#togglemassfilesarea\').click(function() {
429 if (jQuery(\'#togglemassfilesarea\').attr(\'ref\') == "shown")
431 jQuery(\'#'.$modulepart.
'_table\').hide();
432 jQuery(\'#togglemassfilesarea\').attr("ref", "hidden");
433 jQuery(\'#togglemassfilesarea\').text("('.
dol_escape_js($langs->trans(
"Show")).
')");
437 jQuery(\'#'.$modulepart.
'_table\').show();
438 jQuery(\'#togglemassfilesarea\').attr("ref","shown");
439 jQuery(\'#togglemassfilesarea\').text("('.
dol_escape_js($langs->trans(
"Hide")).
')");
447 $titletoshow = $langs->trans(
"Documents");
448 if (!empty($title)) {
449 $titletoshow = ($title ==
'none' ?
'' : $title);
454 $modellist = array();
456 if ($modulepart ==
'company') {
458 if (is_array($genallowed)) {
459 $modellist = $genallowed;
461 include_once DOL_DOCUMENT_ROOT.
'/core/modules/societe/modules_societe.class.php';
464 } elseif ($modulepart ==
'propal') {
465 if (is_array($genallowed)) {
466 $modellist = $genallowed;
468 include_once DOL_DOCUMENT_ROOT.
'/core/modules/propale/modules_propale.php';
471 } elseif ($modulepart ==
'supplier_proposal') {
472 if (is_array($genallowed)) {
473 $modellist = $genallowed;
475 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_proposal/modules_supplier_proposal.php';
478 } elseif ($modulepart ==
'commande') {
479 if (is_array($genallowed)) {
480 $modellist = $genallowed;
482 include_once DOL_DOCUMENT_ROOT.
'/core/modules/commande/modules_commande.php';
485 } elseif ($modulepart ==
'expedition') {
486 if (is_array($genallowed)) {
487 $modellist = $genallowed;
489 include_once DOL_DOCUMENT_ROOT.
'/core/modules/expedition/modules_expedition.php';
490 $modellist = ModelePDFExpedition::liste_modeles($this->
db);
492 } elseif ($modulepart ==
'reception') {
493 if (is_array($genallowed)) {
494 $modellist = $genallowed;
496 include_once DOL_DOCUMENT_ROOT.
'/core/modules/reception/modules_reception.php';
499 } elseif ($modulepart ==
'delivery') {
500 if (is_array($genallowed)) {
501 $modellist = $genallowed;
503 include_once DOL_DOCUMENT_ROOT.
'/core/modules/delivery/modules_delivery.php';
506 } elseif ($modulepart ==
'ficheinter') {
507 if (is_array($genallowed)) {
508 $modellist = $genallowed;
510 include_once DOL_DOCUMENT_ROOT.
'/core/modules/fichinter/modules_fichinter.php';
513 } elseif ($modulepart ==
'facture') {
514 if (is_array($genallowed)) {
515 $modellist = $genallowed;
517 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
520 } elseif ($modulepart ==
'contract') {
522 if (is_array($genallowed)) {
523 $modellist = $genallowed;
525 include_once DOL_DOCUMENT_ROOT.
'/core/modules/contract/modules_contract.php';
528 } elseif ($modulepart ==
'project') {
529 if (is_array($genallowed)) {
530 $modellist = $genallowed;
532 include_once DOL_DOCUMENT_ROOT.
'/core/modules/project/modules_project.php';
535 } elseif ($modulepart ==
'project_task') {
536 if (is_array($genallowed)) {
537 $modellist = $genallowed;
539 include_once DOL_DOCUMENT_ROOT.
'/core/modules/project/task/modules_task.php';
542 } elseif ($modulepart ==
'product') {
543 if (is_array($genallowed)) {
544 $modellist = $genallowed;
546 include_once DOL_DOCUMENT_ROOT.
'/core/modules/product/modules_product.class.php';
549 } elseif ($modulepart ==
'product_batch') {
550 if (is_array($genallowed)) {
551 $modellist = $genallowed;
553 include_once DOL_DOCUMENT_ROOT.
'/core/modules/product_batch/modules_product_batch.class.php';
556 } elseif ($modulepart ==
'stock') {
557 if (is_array($genallowed)) {
558 $modellist = $genallowed;
560 include_once DOL_DOCUMENT_ROOT.
'/core/modules/stock/modules_stock.php';
563 } elseif ($modulepart ==
'movement') {
564 if (is_array($genallowed)) {
565 $modellist = $genallowed;
567 include_once DOL_DOCUMENT_ROOT.
'/core/modules/stock/modules_movement.php';
570 } elseif ($modulepart ==
'export') {
571 if (is_array($genallowed)) {
572 $modellist = $genallowed;
574 include_once DOL_DOCUMENT_ROOT.
'/core/modules/export/modules_export.php';
575 $modellist = ModeleExports::liste_modeles($this->
db);
577 } elseif ($modulepart ==
'commande_fournisseur' || $modulepart ==
'supplier_order') {
578 if (is_array($genallowed)) {
579 $modellist = $genallowed;
581 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_order/modules_commandefournisseur.php';
584 } elseif ($modulepart ==
'facture_fournisseur' || $modulepart ==
'supplier_invoice') {
586 if (is_array($genallowed)) {
587 $modellist = $genallowed;
589 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_invoice/modules_facturefournisseur.php';
592 } elseif ($modulepart ==
'supplier_payment') {
593 if (is_array($genallowed)) {
594 $modellist = $genallowed;
596 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_payment/modules_supplier_payment.php';
599 } elseif ($modulepart ==
'remisecheque') {
600 if (is_array($genallowed)) {
601 $modellist = $genallowed;
603 include_once DOL_DOCUMENT_ROOT.
'/core/modules/cheque/modules_chequereceipts.php';
606 } elseif ($modulepart ==
'donation') {
607 if (is_array($genallowed)) {
608 $modellist = $genallowed;
610 include_once DOL_DOCUMENT_ROOT.
'/core/modules/dons/modules_don.php';
613 } elseif ($modulepart ==
'member') {
614 if (is_array($genallowed)) {
615 $modellist = $genallowed;
617 include_once DOL_DOCUMENT_ROOT.
'/core/modules/member/modules_cards.php';
620 } elseif ($modulepart ==
'agenda' || $modulepart ==
'actions') {
621 if (is_array($genallowed)) {
622 $modellist = $genallowed;
624 include_once DOL_DOCUMENT_ROOT.
'/core/modules/action/modules_action.php';
627 } elseif ($modulepart ==
'expensereport') {
628 if (is_array($genallowed)) {
629 $modellist = $genallowed;
631 include_once DOL_DOCUMENT_ROOT.
'/core/modules/expensereport/modules_expensereport.php';
634 } elseif ($modulepart ==
'unpaid') {
636 } elseif ($modulepart ==
'user') {
637 if (is_array($genallowed)) {
638 $modellist = $genallowed;
640 include_once DOL_DOCUMENT_ROOT.
'/core/modules/user/modules_user.class.php';
643 } elseif ($modulepart ==
'usergroup') {
644 if (is_array($genallowed)) {
645 $modellist = $genallowed;
647 include_once DOL_DOCUMENT_ROOT.
'/core/modules/usergroup/modules_usergroup.class.php';
651 $submodulepart = $modulepart;
654 $tmp = explode(
':', $modulepart);
655 if (!empty($tmp[1])) {
656 $modulepart = $tmp[0];
657 $submodulepart = $tmp[1];
661 $file =
dol_buildpath(
'/core/modules/'.$modulepart.
'/modules_'.strtolower($submodulepart).
'.php', 0);
662 if (file_exists($file)) {
663 $res = include_once $file;
666 $file =
dol_buildpath(
'/'.$modulepart.
'/core/modules/'.$modulepart.
'/modules_'.strtolower($submodulepart).
'.php', 0);
667 $res = include_once $file;
670 $class =
'ModelePDF'.ucfirst($submodulepart);
672 if (class_exists($class)) {
673 $modellist = call_user_func($class.
'::liste_modeles', $this->db);
675 dol_print_error($this->
db,
"Bad value for modulepart '".$modulepart.
"' in showdocuments (class ".$class.
" for Doc generation not found)");
683 if (empty($buttonlabel)) {
684 $buttonlabel = $langs->trans(
'Generate');
687 if ($conf->browser->layout ==
'phone') {
688 $urlsource .=
'#'.$forname.
'_form';
690 if (empty($noform)) {
691 $out .=
'<form action="'.$urlsource.
'" id="'.$forname.
'_form" method="post">';
693 $out .=
'<input type="hidden" name="action" value="builddoc">';
694 $out .=
'<input type="hidden" name="page_y" value="">';
695 $out .=
'<input type="hidden" name="token" value="'.newToken().
'">';
698 $out .=
'<div class="div-table-responsive-no-min">';
699 $out .=
'<table class="liste formdoc noborder centpercent">';
701 $out .=
'<tr class="liste_titre">';
703 $addcolumforpicto = ($delallowed || $printer || $morepicto);
704 $colspan = (4 + ($addcolumforpicto ? 1 : 0));
707 $out .=
'<th colspan="'.$colspan.
'" class="formdoc liste_titre maxwidthonsmartphone center">';
710 if (!empty($modellist)) {
712 $out .=
'<span class="hideonsmartphone">'.$langs->trans(
'Model').
' </span>';
713 if (is_array($modellist) && count($modellist) == 1) {
714 $arraykeys = array_keys($modellist);
715 $modelselected = $arraykeys[0];
717 $morecss =
'minwidth75 maxwidth200';
718 if ($conf->browser->layout ==
'phone') {
719 $morecss =
'maxwidth100';
721 $out .=
$form->selectarray(
'model', $modellist, $modelselected, $showempty, 0, 0,
'', 0, 0, 0,
'', $morecss);
722 if ($conf->use_javascript_ajax) {
725 $out .=
$form->textwithpicto(
'', $tooltipontemplatecombo, 1,
'help',
'marginrightonly', 0, 3,
'', 0);
727 $out .=
'<div class="float">'.$langs->trans(
"Files").
'</div>';
731 if (($allowgenifempty || (is_array($modellist) && count($modellist) > 0)) &&
getDolGlobalInt(
'MAIN_MULTILANGS') && !$forcenomultilang && (!empty($modellist) || $showempty)) {
732 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formadmin.class.php';
734 $defaultlang = ($codelang && $codelang !=
'auto') ? $codelang : $langs->getDefaultLang();
735 $morecss =
'maxwidth150';
736 if ($conf->browser->layout ==
'phone') {
737 $morecss =
'maxwidth100';
739 $out .= $formadmin->select_language($defaultlang,
'lang_id', 0,
null, 0, 0, 0, $morecss);
745 $genbutton =
'<input class="button buttongen reposition nomargintop nomarginbottom" id="'.$forname.
'_generatebutton" name="'.$forname.
'_generatebutton"';
746 $genbutton .=
' type="submit" value="'.$buttonlabel.
'"';
747 if (!$allowgenifempty && !is_array($modellist) && empty($modellist)) {
748 $genbutton .=
' disabled';
751 if ($allowgenifempty && !is_array($modellist) && empty($modellist) && empty($conf->dol_no_mouse_hover) && $modulepart !=
'unpaid') {
752 $langs->load(
"errors");
753 $genbutton .=
' '.img_warning($langs->transnoentitiesnoconv(
"WarningNoDocumentModelActivated"));
755 if (!$allowgenifempty && !is_array($modellist) && empty($modellist) && empty($conf->dol_no_mouse_hover) && $modulepart !=
'unpaid') {
758 if (empty($modellist) && !$showempty && $modulepart !=
'unpaid') {
764 if (!empty($hookmanager->hooks[
'formfile'])) {
765 foreach ($hookmanager->hooks[
'formfile'] as $module) {
766 if (method_exists($module,
'formBuilddocLineOptions')) {
775 $parameters = array(
'colspan'=>($colspan + $colspanmore),
'socid'=>(isset($GLOBALS[
'socid']) ? $GLOBALS[
'socid'] :
''),
'id'=>(isset($GLOBALS[
'id']) ? $GLOBALS[
'id'] :
''),
'modulepart'=>$modulepart);
776 if (is_object($hookmanager)) {
777 $reshook = $hookmanager->executeHooks(
'formBuilddocOptions', $parameters, $GLOBALS[
'object']);
778 $out .= $hookmanager->resPrint;
783 if (!empty($filedir)) {
784 $link_list = array();
785 if (is_object($object)) {
786 require_once DOL_DOCUMENT_ROOT.
'/core/class/link.class.php';
787 $link =
new Link($this->
db);
788 $sortfield = $sortorder =
null;
789 $res = $link->fetchAll($link_list, $object->element, $object->id, $sortfield, $sortorder);
792 $out .=
'<!-- html.formfile::showdocuments -->'.
"\n";
795 if ((!empty($file_list) || !empty($link_list) || preg_match(
'/^massfilesarea/', $modulepart))
798 $out .=
'<div class="titre">'.$titletoshow.
'</div>'.
"\n";
799 $out .=
'<div class="div-table-responsive-no-min">';
800 $out .=
'<table class="noborder centpercent" id="'.$modulepart.
'_table">'.
"\n";
804 if (is_array($file_list)) {
808 $relativedir = preg_replace(
'/^'.preg_quote(DOL_DATA_ROOT,
'/').
'/',
'', $filedir);
809 $relativedir = preg_replace(
'/^[\\/]/',
'', $relativedir);
817 if (!empty($sortfield) && !empty($sortorder)) {
822 foreach ($file_list as $file) {
824 $relativepath = $file[
"name"];
826 $relativepath = $modulesubdir.
"/".$file[
"name"];
828 if ($modulepart ==
'export') {
829 $relativepath = $file[
"name"];
832 $out .=
'<tr class="oddeven">';
834 $documenturl = DOL_URL_ROOT.
'/document.php';
835 if (isset($conf->global->DOL_URL_ROOT_DOCUMENT_PHP)) {
836 $documenturl = $conf->global->DOL_URL_ROOT_DOCUMENT_PHP;
840 $imgpreview = $this->
showPreview($file, $modulepart, $relativepath, 0, $param);
842 $out .=
'<td class="minwidth200 tdoverflowmax300">';
844 $out .=
'<span class="spanoverflow widthcentpercentminusx valignmiddle">';
846 $out .=
'<span class="spanoverflow">';
848 $out .=
'<a class="documentdownload paddingright" href="'.$documenturl.
'?modulepart='.$modulepart.
'&file='.urlencode($relativepath).($param ?
'&'.$param :
'').
'"';
851 if (preg_match(
'/text/', $mime)) {
852 $out .=
' target="_blank" rel="noopener noreferrer"';
854 $out .=
' title="'.dol_escape_htmltag($file[
"name"]).
'"';
856 $out .=
img_mime($file[
"name"], $langs->trans(
"File").
': '.$file[
"name"]);
859 $out .=
'</span>'.
"\n";
864 $size = (!empty($file[
'size']) ? $file[
'size'] :
dol_filesize($filedir.
"/".$file[
"name"]));
865 $out .=
'<td class="nowraponall right">'.dol_print_size($size, 1, 1).
'</td>';
868 $date = (!empty($file[
'date']) ? $file[
'date'] :
dol_filemtime($filedir.
"/".$file[
"name"]));
869 $out .=
'<td class="nowrap right">'.dol_print_date($date,
'dayhour',
'tzuser').
'</td>';
872 $out .=
'<td class="nowraponall">';
873 if (!empty($file[
'share'])) {
875 $urlwithouturlroot = preg_replace(
'/'.preg_quote(DOL_URL_ROOT,
'/').
'$/i',
'', trim($dolibarr_main_url_root));
876 $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT;
882 if (!empty($file[
'share'])) {
883 $paramlink .= ($paramlink ?
'&' :
'').
'hashp='.$file[
'share'];
885 if ($forcedownload) {
886 $paramlink .= ($paramlink ?
'&' :
'').
'attachment=1';
889 $fulllink = $urlwithroot.
'/document.php'.($paramlink ?
'?'.$paramlink :
'');
891 $out .=
'<a href="'.$fulllink.
'" target="_blank" rel="noopener">'.
img_picto($langs->trans(
"FileSharedViaALink"),
'globe').
'</a> ';
892 $out .=
'<input type="text" class="quatrevingtpercentminusx width75 nopadding small" id="downloadlink'.$file[
'rowid'].
'" name="downloadexternallink" title="'.
dol_escape_htmltag($langs->trans(
"FileSharedViaALink")).
'" value="'.
dol_escape_htmltag($fulllink).
'">';
900 if ($delallowed || $printer || $morepicto) {
901 $out .=
'<td class="right nowraponall">';
903 $tmpurlsource = preg_replace(
'/#[a-zA-Z0-9_]*$/',
'', $urlsource);
904 $out .=
'<a class="reposition" href="'.$tmpurlsource.((strpos($tmpurlsource,
'?') ===
false) ?
'?' :
'&').
'action='.urlencode($removeaction).
'&token='.
newToken().
'&file='.urlencode($relativepath);
905 $out .= ($param ?
'&'.$param :
'');
908 $out .=
'">'.img_picto($langs->trans(
"Delete"),
'delete').
'</a>';
911 $out .=
'<a class="marginleftonly reposition" href="'.$urlsource.(strpos($urlsource,
'?') ?
'&' :
'?').
'action=print_file&token='.
newToken().
'&printer='.urlencode($modulepart).
'&file='.urlencode($relativepath);
912 $out .= ($param ?
'&'.$param :
'');
913 $out .=
'">'.img_picto($langs->trans(
"PrintFile", $relativepath),
'printer.png').
'</a>';
916 $morepicto = preg_replace(
'/__FILENAMEURLENCODED__/', urlencode($relativepath), $morepicto);
922 if (is_object($hookmanager)) {
923 $parameters = array(
'colspan'=>($colspan + $colspanmore),
'socid'=>(isset($GLOBALS[
'socid']) ? $GLOBALS[
'socid'] :
''),
'id'=>(isset($GLOBALS[
'id']) ? $GLOBALS[
'id'] :
''),
'modulepart'=>$modulepart,
'relativepath'=>$relativepath);
924 $res = $hookmanager->executeHooks(
'formBuilddocLineOptions', $parameters, $file);
926 $out .= $hookmanager->resPrint;
929 $out = $hookmanager->resPrint;
937 if (is_array($link_list)) {
940 foreach ($link_list as $file) {
941 $out .=
'<tr class="oddeven">';
942 $out .=
'<td colspan="'.$colspan.
'" class="maxwidhtonsmartphone">';
943 $out .=
'<a data-ajax="false" href="'.$file->url.
'" target="_blank" rel="noopener noreferrer">';
944 $out .= $file->label;
947 $out .=
'<td class="right">';
952 if ($delallowed || $printer || $morepicto) {
955 $out .=
'</tr>'.
"\n";
960 if (count($file_list) == 0 && count($link_list) == 0 && $headershown) {
961 $out .=
'<tr><td colspan="'.(3 + ($addcolumforpicto ? 1 : 0)).
'"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td></tr>'.
"\n";
967 $out .=
"</table>\n";
970 if (empty($noform)) {
971 $out .=
'</form>'.
"\n";
975 $out .=
'<!-- End show_document -->'.
"\n";
993 public function getDocumentsLink($modulepart, $modulesubdir, $filedir, $filter =
'', $morecss =
'valignmiddle', $allfiles = 0)
995 global $conf, $langs;
997 include_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
1000 $this->infofiles = array(
'nboffiles'=>0,
'extensions'=>array(),
'files'=>array());
1007 preg_match(
'/\/([0-9]+)\/[^\/]+\/'.preg_quote($modulesubdir,
'/').
'$/', $filedir, $regs);
1008 $entity = ((!empty($regs[1]) && $regs[1] > 1) ? $regs[1] : 1);
1012 if ($allfiles || !empty($conf->global->MAIN_SHOW_ALL_FILES_ON_DOCUMENT_TOOLTIP)) {
1013 $filterforfilesearch =
'^'.preg_quote(basename($modulesubdir),
'/');
1015 $filterforfilesearch =
'^'.preg_quote(basename($modulesubdir),
'/').
'\.';
1017 $file_list =
dol_dir_list($filedir,
'files', 0, $filterforfilesearch,
'\.meta$|\.png$');
1021 $out .=
'<!-- html.formfile::getDocumentsLink -->'.
"\n";
1022 if (!empty($file_list)) {
1023 $out =
'<dl class="dropdown inline-block">
1024 <dt><a data-ajax="false" href="#" onClick="return false;">'.img_picto(
'',
'listlight',
'', 0, 0, 0,
'', $morecss).
'</a></dt>
1025 <dd><div class="multichoicedoc" style="position:absolute;left:100px;" ><ul class="ulselectedfields">';
1031 foreach ($file_list as $file) {
1033 if ($filter && !preg_match(
'/'.$filter.
'/i', $file[
"name"])) {
1039 $relativepath = $file[
"name"];
1040 if ($modulesubdir) {
1041 $relativepath = $modulesubdir.
"/".$file[
"name"];
1044 if ($modulepart ==
'donation') {
1045 $relativepath =
get_exdir($modulesubdir, 2, 0, 0,
null,
'donation').$file[
"name"];
1047 if ($modulepart ==
'export') {
1048 $relativepath = $file[
"name"];
1051 $this->infofiles[
'nboffiles']++;
1052 $this->infofiles[
'files'][] = $file[
'fullname'];
1053 $ext = pathinfo($file[
"name"], PATHINFO_EXTENSION);
1054 if (empty($this->infofiles[$ext])) {
1055 $this->infofiles[
'extensions'][$ext] = 1;
1057 $this->infofiles[
'extensions'][$ext]++;
1061 if (!empty($conf->use_javascript_ajax) && ($conf->browser->layout !=
'phone')) {
1063 if ($tmparray && $tmparray[
'url']) {
1064 $tmpout .=
'<li><a href="'.$tmparray[
'url'].
'"'.($tmparray[
'css'] ?
' class="'.$tmparray[
'css'].
'"' :
'').($tmparray[
'mime'] ?
' mime="'.$tmparray[
'mime'].
'"' :
'').($tmparray[
'target'] ?
' target="'.$tmparray[
'target'].
'"' :
'').
'>';
1066 $tmpout .=
'<i class="fa fa-search-plus paddingright" style="color: gray"></i>';
1067 $tmpout .= $langs->trans(
"Preview").
' '.$ext.
'</a></li>';
1072 $tmpout .=
'<li class="nowrap"><a class="pictopreview nowrap" href="'.DOL_URL_ROOT.
'/document.php?modulepart='.$modulepart.
'&entity='.$entity.
'&file='.urlencode($relativepath).
'"';
1074 if (preg_match(
'/text/', $mime)) {
1075 $tmpout .=
' target="_blank" rel="noopener noreferrer"';
1078 $tmpout .=
img_mime($relativepath, $file[
"name"]);
1079 $tmpout .= $langs->trans(
"Download").
' '.$ext;
1080 $tmpout .=
'</a></li>'.
"\n";
1083 $out .=
'</ul></div></dd>
1132 public function list_of_documents($filearray, $object, $modulepart, $param =
'', $forcedownload = 0, $relativepath =
'', $permonobject = 1, $useinecm = 0, $textifempty =
'', $maxlength = 0, $title =
'', $url =
'', $showrelpart = 0, $permtoeditline = -1, $upload_dir =
'', $sortfield =
'', $sortorder =
'ASC', $disablemove = 1, $addfilterfields = 0, $disablecrop = -1, $moreattrondiv =
'')
1135 global $user, $conf, $langs, $hookmanager,
$form;
1136 global $sortfield, $sortorder, $maxheightmini;
1137 global $dolibarr_main_url_root;
1139 if ($disablecrop == -1) {
1142 if (in_array($modulepart, array(
'bank',
'bom',
'expensereport',
'facture',
'facture_fournisseur',
'holiday',
'medias',
'member',
'mrp',
'project',
'product',
'produit',
'propal',
'service',
'societe',
'tax',
'tax-vat',
'ticket',
'user'))) {
1148 if (empty($relativepath)) {
1150 if (!empty($object->element) && $object->element ==
'invoice_supplier') {
1151 $relativepath =
get_exdir($object->id, 2, 0, 0, $object,
'invoice_supplier').$relativepath;
1153 if (!empty($object->element) && $object->element ==
'project_task') {
1154 $relativepath =
'Call_not_supported_._Call_function_using_a_defined_relative_path_.';
1158 if (
getDolGlobalInt(
'PRODUCT_USE_OLD_PATH_FOR_PHOTO') && $filearray[0][
'level1name'] ==
'photos') {
1159 $relativepath = preg_replace(
'/^.*\/produit\//',
'', $filearray[0][
'path']).
'/';
1165 $relativedir = preg_replace(
'/^'.preg_quote(DOL_DATA_ROOT,
'/').
'/',
'', $upload_dir);
1166 $relativedir = preg_replace(
'/^[\\/]/',
'', $relativedir);
1171 $hookmanager->initHooks(array(
'formfile'));
1172 $parameters = array(
1173 'filearray' => $filearray,
1174 'modulepart'=> $modulepart,
1176 'forcedownload' => $forcedownload,
1177 'relativepath' => $relativepath,
1178 'relativedir' => $relativedir,
1179 'permtodelete' => $permonobject,
1180 'useinecm' => $useinecm,
1181 'textifempty' => $textifempty,
1182 'maxlength' => $maxlength,
1186 $reshook = $hookmanager->executeHooks(
'showFilesList', $parameters, $object);
1188 if (!empty($reshook)) {
1191 if (!is_object(
$form)) {
1192 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.form.class.php';
1196 if (!preg_match(
'/&id=/', $param) && isset($object->id)) {
1197 $param .=
'&id='.$object->id;
1199 $relativepathwihtoutslashend = preg_replace(
'/\/$/',
'', $relativepath);
1200 if ($relativepathwihtoutslashend) {
1201 $param .=
'&file='.urlencode($relativepathwihtoutslashend);
1204 if ($permtoeditline < 0) {
1205 $permtoeditline = 0;
1206 if (in_array($modulepart, array(
'product',
'produit',
'service'))) {
1208 $permtoeditline = 1;
1211 $permtoeditline = 1;
1215 if (empty($conf->global->MAIN_UPLOAD_DOC)) {
1216 $permtoeditline = 0;
1221 if ((empty($useinecm) || $useinecm == 6) && $title !=
'none') {
1222 print
load_fiche_titre($title ? $title : $langs->trans(
"AttachedFiles"),
'',
'file-upload', 0,
'',
'table-list-of-attached-files');
1225 $url = $_SERVER[
"PHP_SELF"];
1228 print
'<!-- html.formfile::list_of_documents -->'.
"\n";
1229 if (
GETPOST(
'action',
'aZ09') ==
'editfile' && $permtoeditline) {
1230 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?'.$param.
'" method="POST">';
1231 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1232 print
'<input type="hidden" name="action" value="renamefile">';
1233 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
1234 print
'<input type="hidden" name="modulepart" value="'.$modulepart.
'">';
1237 print
'<div class="div-table-responsive-no-min"'.($moreattrondiv ?
' '.$moreattrondiv :
'').
'>';
1238 print
'<table id="tablelines" class="centpercent liste noborder nobottom">'.
"\n";
1240 if (!empty($addfilterfields)) {
1241 print
'<tr class="liste_titre nodrag nodrop">';
1242 print
'<td><input type="search_doc_ref" value="'.dol_escape_htmltag(
GETPOST(
'search_doc_ref',
'alpha')).
'"></td>';
1245 if (empty($useinecm) || $useinecm == 4 || $useinecm == 5 || $useinecm == 6) {
1250 if (empty($disablemove) && count($filearray) > 1) {
1261 if ($sortfield && $sortorder) {
1266 print
'<tr class="liste_titre nodrag nodrop">';
1271 if (empty($useinecm) || $useinecm == 4 || $useinecm == 5 || $useinecm == 6) {
1278 if (empty($disablemove) && count($filearray) > 1) {
1283 $nboffiles = count($filearray);
1284 if ($nboffiles > 0) {
1285 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
1291 foreach ($filearray as $key => $file) {
1292 if ($file[
'name'] !=
'.'
1293 && $file[
'name'] !=
'..'
1294 && !preg_match(
'/\.meta$/i', $file[
'name'])) {
1295 if (array_key_exists(
'rowid', $filearray[$key]) && $filearray[$key][
'rowid'] > 0) {
1296 $lastrowid = $filearray[$key][
'rowid'];
1298 $filepath = $relativepath.$file[
'name'];
1302 print
'<!-- Line list_of_documents '.$key.
' relativepath = '.$relativepath.
' -->'.
"\n";
1305 print
'<!-- In database: position='.(array_key_exists(
'position', $filearray[$key]) ? $filearray[$key][
'position'] : 0).
' -->'.
"\n";
1306 print
'<tr class="oddeven" id="row-'.((array_key_exists(
'rowid', $filearray[$key]) && $filearray[$key][
'rowid'] > 0) ? $filearray[$key][
'rowid'] :
'AFTER'.$lastrowid.
'POS'.($i + 1)).
'">';
1310 print
'<td class="minwith200 tdoverflowmax500">';
1314 print
'<a class="paddingright valignmiddle" href="'.DOL_URL_ROOT.
'/document.php?modulepart='.$modulepart;
1315 if ($forcedownload) {
1316 print
'&attachment=1';
1318 if (!empty($object->entity)) {
1319 print
'&entity='.$object->entity;
1321 print
'&file='.urlencode($filepath);
1323 print
img_mime($file[
'name'], $file[
'name'].
' ('.
dol_print_size($file[
'size'], 0, 0).
')',
'inline-block valignmiddle paddingright');
1324 if ($showrelpart == 1) {
1325 print $relativepath;
1328 if (
GETPOST(
'action',
'aZ09') ==
'editfile' && $file[
'name'] == basename(
GETPOST(
'urlfile',
'alpha'))) {
1330 $section_dir = dirname(
GETPOST(
'urlfile',
'alpha'));
1331 if (!preg_match(
'/\/$/', $section_dir)) {
1332 $section_dir .=
'/';
1334 print
'<input type="hidden" name="section_dir" value="'.$section_dir.
'">';
1335 print
'<input type="hidden" name="renamefilefrom" value="'.dol_escape_htmltag($file[
'name']).
'">';
1336 print
'<input type="text" name="renamefileto" class="quatrevingtpercent" value="'.dol_escape_htmltag($file[
'name']).
'">';
1339 $filenametoshow = preg_replace(
'/\.noexe$/',
'', $file[
'name']);
1345 print $this->
showPreview($file, $modulepart, $filepath, 0,
'&entity='.(!empty($object->entity) ? $object->entity : $conf->entity));
1353 print
'<td class="right nowraponall">';
1354 if ($sizetoshow == $sizetoshowbytes) {
1357 print
$form->textwithpicto($sizetoshow, $sizetoshowbytes, -1);
1362 print
'<td class="center nowraponall">'.dol_print_date($file[
'date'],
"dayhour",
"tzuser").
'</td>';
1365 if (empty($useinecm) || $useinecm == 4 || $useinecm == 5 || $useinecm == 6) {
1366 $fileinfo = pathinfo($file[
'name']);
1367 print
'<td class="center">';
1369 if ($useinecm == 5 || $useinecm == 6) {
1379 $urlforhref =
getAdvancedPreviewUrl($modulepart, $relativepath.$fileinfo[
'filename'].
'.'.strtolower($fileinfo[
'extension']), 1,
'&entity='.(!empty($object->entity) ? $object->entity : $conf->entity));
1380 if (empty($urlforhref)) {
1381 $urlforhref = DOL_URL_ROOT.
'/viewimage.php?modulepart='.$modulepart.
'&entity='.(!empty($object->entity) ? $object->entity : $conf->entity).
'&file='.urlencode($relativepath.$fileinfo[
'filename'].
'.'.strtolower($fileinfo[
'extension']));
1382 print
'<a href="'.$urlforhref.
'" class="aphoto" target="_blank" rel="noopener noreferrer">';
1384 print
'<a href="'.$urlforhref[
'url'].
'" class="'.$urlforhref[
'css'].
'" target="'.$urlforhref[
'target'].
'" mime="'.$urlforhref[
'mime'].
'">';
1386 print
'<img class="photo maxwidth200 shadow valignmiddle" height="'.(($useinecm == 4 || $useinecm == 5 || $useinecm == 6) ?
'20' : $maxheightmini).
'" src="'.DOL_URL_ROOT.
'/viewimage.php?modulepart='.$modulepart.
'&entity='.(!empty($object->entity) ? $object->entity : $conf->entity).
'&file='.urlencode($relativepath.$smallfile).
'" title="">';
1395 print
'<td class="center">';
1396 if ($relativedir && $filearray[$key][
'rowid'] > 0) {
1398 print
'<label for="idshareenabled'.$key.
'">'.$langs->trans(
"FileSharedViaALink").
'</label> ';
1399 print
'<input class="inline-block" type="checkbox" id="idshareenabled'.$key.
'" name="shareenabled"'.($file[
'share'] ?
' checked="checked"' :
'').
' /> ';
1401 if ($file[
'share']) {
1403 $urlwithouturlroot = preg_replace(
'/'.preg_quote(DOL_URL_ROOT,
'/').
'$/i',
'', trim($dolibarr_main_url_root));
1404 $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT;
1410 if (!empty($file[
'share'])) {
1411 $paramlink .= ($paramlink ?
'&' :
'').
'hashp='.$file[
'share'];
1413 if ($forcedownload) {
1414 $paramlink .= ($paramlink ?
'&' :
'').
'attachment=1';
1417 $fulllink = $urlwithroot.
'/document.php'.($paramlink ?
'?'.$paramlink :
'');
1419 print
'<a href="'.$fulllink.
'" target="_blank" rel="noopener">'.
img_picto($langs->trans(
"FileSharedViaALink"),
'globe').
'</a> ';
1420 print
'<input type="text" class="quatrevingtpercent minwidth200imp nopadding small" id="downloadlink'.$filearray[$key][
'rowid'].
'" name="downloadexternallink" title="'.
dol_escape_htmltag($langs->trans(
"FileSharedViaALink")).
'" value="'.
dol_escape_htmltag($fulllink).
'">';
1432 print
'<td class="valignmiddle right actionbuttons nowraponall"><!-- action on files -->';
1433 if ($useinecm == 1 || $useinecm == 5) {
1435 $newparam = preg_replace(
'/&file=.*$/',
'', $param);
1436 $backtopage = DOL_URL_ROOT.
'/ecm/index.php?§ion_dir='.urlencode($relativepath).$newparam;
1437 print
'<a class="editfielda editfilelink" href="'.DOL_URL_ROOT.
'/ecm/file_card.php?urlfile='.urlencode($file[
'name']).$param.
'&backtopage='.urlencode($backtopage).
'" rel="'.urlencode($file[
'name']).
'">'.
img_edit(
'default', 0,
'class="paddingrightonly"').
'</a>';
1440 if (empty($useinecm) || $useinecm == 2 || $useinecm == 6) {
1441 $newmodulepart = $modulepart;
1442 if (in_array($modulepart, array(
'product',
'produit',
'service'))) {
1443 $newmodulepart =
'produit|service';
1447 if ($permtoeditline) {
1449 $moreparaminurl =
'';
1450 if (!empty($object->id) && $object->id > 0) {
1451 $moreparaminurl .=
'&id='.$object->id;
1452 } elseif (
GETPOST(
'website',
'alpha')) {
1453 $moreparaminurl .=
'&website='.GETPOST(
'website',
'alpha');
1456 if ($modulepart ==
'medias' && !
GETPOST(
'website')) {
1457 $moreparaminurl .=
'&backtourl='.urlencode(DOL_URL_ROOT.
'/ecm/index_medias.php?file_manager=1&modulepart='.$modulepart.
'§ion_dir='.$relativepath);
1460 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/core/photos_resize.php?modulepart='.urlencode($newmodulepart).$moreparaminurl.
'&file='.urlencode($relativepath.$fileinfo[
'filename'].
'.'.strtolower($fileinfo[
'extension'])).
'" title="'.
dol_escape_htmltag($langs->trans(
"ResizeOrCrop")).
'">'.
img_picto($langs->trans(
"ResizeOrCrop"),
'resize',
'class="paddingrightonly"').
'</a>';
1464 if ($permtoeditline) {
1465 $paramsectiondir = (in_array($modulepart, array(
'medias',
'ecm')) ?
'§ion_dir='.urlencode($relativepath) :
'');
1466 print
'<a class="editfielda reposition editfilelink" href="'.(($useinecm == 1 || $useinecm == 5) ?
'#' : ($url.
'?action=editfile&token='.
newToken().
'&urlfile='.urlencode($filepath).$paramsectiondir.$param)).
'" rel="'.$filepath.
'">'.
img_edit(
'default', 0,
'class="paddingrightonly"').
'</a>';
1470 if ($permonobject) {
1472 if (!empty($conf->dol_use_jmobile)) {
1475 if (empty($conf->use_javascript_ajax)) {
1478 if (!empty($conf->global->MAIN_ECM_DISABLE_JS)) {
1481 print
'<a href="'.((($useinecm && $useinecm != 6) && $useajax) ?
'#' : ($url.
'?action=deletefile&token='.
newToken().
'&urlfile='.urlencode($filepath).$param)).
'" class="reposition deletefilelink" rel="'.$filepath.
'">'.
img_delete().
'</a>';
1485 if (empty($disablemove) && count($filearray) > 1) {
1486 if ($nboffiles > 1 && $conf->browser->layout !=
'phone') {
1487 print
'<td class="linecolmove tdlineupdown center">';
1489 print
'<a class="lineupdown" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=up&rowid='.$object->id.
'">'.
img_up(
'default', 0,
'imgupforline').
'</a>';
1491 if ($i < ($nboffiles - 1)) {
1492 print
'<a class="lineupdown" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=down&rowid='.$object->id.
'">'.
img_down(
'default', 0,
'imgdownforline').
'</a>';
1496 print
'<td'.(($conf->browser->layout !=
'phone') ?
' class="linecolmove tdlineupdown center"' :
' class="linecolmove center"').
'>';
1501 print
'<td class="right">';
1502 print
'<input type="hidden" name="ecmfileid" value="'.$filearray[$key][
'rowid'].
'">';
1503 print
'<input type="submit" class="button button-save smallpaddingimp" name="renamefilesave" value="'.dol_escape_htmltag($langs->trans(
"Save")).
'">';
1504 print
'<input type="submit" class="button button-cancel smallpaddingimp" name="cancel" value="'.dol_escape_htmltag($langs->trans(
"Cancel")).
'">';
1506 if (empty($disablemove) && count($filearray) > 1) {
1507 print
'<td class="right"></td>';
1515 if ($nboffiles == 0) {
1517 if (empty($disablemove) && count($filearray) > 1) {
1520 print
'<tr class="oddeven"><td colspan="'.$colspan.
'">';
1521 if (empty($textifempty)) {
1522 print
'<span class="opacitymedium">'.$langs->trans(
"NoFileFound").
'</span>';
1524 print
'<span class="opacitymedium">'.$textifempty.
'</span>';
1532 if ($nboflines > 1 && is_object($object)) {
1533 if (!empty($conf->use_javascript_ajax) && $permtoeditline) {
1534 $table_element_line =
'ecm_files';
1535 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
1541 if (
GETPOST(
'action',
'aZ09') ==
'editfile' && $permtoeditline) {
1569 public function list_of_autoecmfiles($upload_dir, $filearray, $modulepart, $param, $forcedownload = 0, $relativepath =
'', $permissiontodelete = 1, $useinecm = 0, $textifempty =
'', $maxlength = 0, $url =
'', $addfilterfields = 0)
1572 global $user, $conf, $langs, $hookmanager,
$form;
1573 global $sortfield, $sortorder;
1574 global $search_doc_ref;
1575 global $dolibarr_main_url_root;
1577 dol_syslog(get_class($this).
'::list_of_autoecmfiles upload_dir='.$upload_dir.
' modulepart='.$modulepart);
1580 if (empty($useinecm) || $useinecm == 6) {
1584 $url = $_SERVER[
"PHP_SELF"];
1587 if (!empty($addfilterfields)) {
1588 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'">';
1589 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1590 print
'<input type="hidden" name="module" value="'.$modulepart.
'">';
1593 print
'<div class="div-table-responsive-no-min">';
1594 print
'<table width="100%" class="noborder">'.
"\n";
1596 if (!empty($addfilterfields)) {
1597 print
'<tr class="liste_titre nodrag nodrop">';
1598 print
'<td class="liste_titre"></td>';
1599 print
'<td class="liste_titre"><input type="text" class="maxwidth100onsmartphone" name="search_doc_ref" value="'.dol_escape_htmltag($search_doc_ref).
'"></td>';
1600 print
'<td class="liste_titre"></td>';
1601 print
'<td class="liste_titre"></td>';
1603 print
'<td class="liste_titre right">';
1604 $searchpicto =
$form->showFilterButtons();
1610 print
'<tr class="liste_titre">';
1611 $sortref =
"fullname";
1612 if ($modulepart ==
'invoice_supplier') {
1613 $sortref =
'level1name';
1623 $object_instance =
null;
1624 if ($modulepart ==
'company') {
1625 include_once DOL_DOCUMENT_ROOT.
'/societe/class/societe.class.php';
1626 $object_instance =
new Societe($this->
db);
1627 } elseif ($modulepart ==
'invoice') {
1628 include_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
1629 $object_instance =
new Facture($this->
db);
1630 } elseif ($modulepart ==
'invoice_supplier') {
1631 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
1633 } elseif ($modulepart ==
'propal') {
1634 include_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
1635 $object_instance =
new Propal($this->
db);
1636 } elseif ($modulepart ==
'supplier_proposal') {
1637 include_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
1639 } elseif ($modulepart ==
'order') {
1640 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
1642 } elseif ($modulepart ==
'order_supplier') {
1643 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
1645 } elseif ($modulepart ==
'contract') {
1646 include_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
1647 $object_instance =
new Contrat($this->
db);
1648 } elseif ($modulepart ==
'product') {
1649 include_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
1650 $object_instance =
new Product($this->
db);
1651 } elseif ($modulepart ==
'tax') {
1652 include_once DOL_DOCUMENT_ROOT.
'/compta/sociales/class/chargesociales.class.php';
1654 } elseif ($modulepart ==
'tax-vat') {
1655 include_once DOL_DOCUMENT_ROOT.
'/compta/tva/class/tva.class.php';
1656 $object_instance =
new Tva($this->
db);
1657 } elseif ($modulepart ==
'salaries') {
1658 include_once DOL_DOCUMENT_ROOT.
'/salaries/class/salary.class.php';
1659 $object_instance =
new Salary($this->
db);
1660 } elseif ($modulepart ==
'project') {
1661 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
1662 $object_instance =
new Project($this->
db);
1663 } elseif ($modulepart ==
'project_task') {
1664 include_once DOL_DOCUMENT_ROOT.
'/projet/class/task.class.php';
1665 $object_instance =
new Task($this->
db);
1666 } elseif ($modulepart ==
'fichinter') {
1667 include_once DOL_DOCUMENT_ROOT.
'/fichinter/class/fichinter.class.php';
1669 } elseif ($modulepart ==
'user') {
1670 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
1671 $object_instance =
new User($this->
db);
1672 } elseif ($modulepart ==
'expensereport') {
1673 include_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
1675 } elseif ($modulepart ==
'holiday') {
1676 include_once DOL_DOCUMENT_ROOT.
'/holiday/class/holiday.class.php';
1677 $object_instance =
new Holiday($this->
db);
1678 } elseif ($modulepart ==
'recruitment-recruitmentcandidature') {
1679 include_once DOL_DOCUMENT_ROOT.
'/recruitment/class/recruitmentcandidature.class.php';
1681 } elseif ($modulepart ==
'banque') {
1682 include_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
1683 $object_instance =
new Account($this->
db);
1684 } elseif ($modulepart ==
'chequereceipt') {
1685 include_once DOL_DOCUMENT_ROOT.
'/compta/paiement/cheque/class/remisecheque.class.php';
1687 } elseif ($modulepart ==
'mrp-mo') {
1688 include_once DOL_DOCUMENT_ROOT.
'/mrp/class/mo.class.php';
1689 $object_instance =
new Mo($this->
db);
1691 $parameters = array(
'modulepart'=>$modulepart);
1692 $reshook = $hookmanager->executeHooks(
'addSectionECMAuto', $parameters);
1693 if ($reshook > 0 && is_array($hookmanager->resArray) && count($hookmanager->resArray) > 0) {
1694 if (array_key_exists(
'classpath', $hookmanager->resArray) && !empty($hookmanager->resArray[
'classpath'])) {
1696 if (array_key_exists(
'classname', $hookmanager->resArray) && !empty($hookmanager->resArray[
'classname'])) {
1697 if (class_exists($hookmanager->resArray[
'classname'])) {
1698 $tmpclassname = $hookmanager->resArray[
'classname'];
1699 $object_instance =
new $tmpclassname($this->
db);
1710 $relativepathfromroot = preg_replace(
'/'.preg_quote(DOL_DATA_ROOT.
'/',
'/').
'/',
'', $upload_dir);
1711 if ($relativepathfromroot) {
1715 if ($sortfield && $sortorder) {
1716 $filearray =
dol_sort_array($filearray, $sortfield, $sortorder, 1);
1722 foreach ($filearray as $key => $file) {
1723 if (!is_dir($file[
'name'])
1724 && $file[
'name'] !=
'.'
1725 && $file[
'name'] !=
'..'
1726 && $file[
'name'] !=
'CVS'
1727 && !preg_match(
'/\.meta$/i', $file[
'name'])) {
1729 $relativefile = preg_replace(
'/'.preg_quote($upload_dir.
'/',
'/').
'/',
'', $file[
'fullname']);
1737 if ($modulepart ==
'company' || $modulepart ==
'tax' || $modulepart ==
'tax-vat' || $modulepart ==
'salaries') {
1738 preg_match(
'/(\d+)\/[^\/]+$/', $relativefile, $reg);
1739 $id = (isset($reg[1]) ? $reg[1] :
'');
1740 } elseif ($modulepart ==
'invoice_supplier') {
1741 preg_match(
'/([^\/]+)\/[^\/]+$/', $relativefile, $reg);
1742 $ref = (isset($reg[1]) ? $reg[1] :
'');
1743 if (is_numeric($ref)) {
1747 } elseif ($modulepart ==
'user') {
1749 preg_match(
'/(.*)\/[^\/]+$/', $relativefile, $reg);
1750 $id = (isset($reg[1]) ? $reg[1] :
'');
1751 } elseif ($modulepart ==
'project_task') {
1753 $reg = explode(
"/", $relativefile);
1754 $ref = (isset($reg[1]) ? $reg[1] :
'');
1755 } elseif (in_array($modulepart, array(
1758 'supplier_proposal',
1767 'recruitment-recruitmentcandidature',
1772 preg_match(
'/(.*)\/[^\/]+$/', $relativefile, $reg);
1773 $ref = (isset($reg[1]) ? $reg[1] :
'');
1775 $parameters = array(
'modulepart'=>$modulepart,
'fileinfo'=>$file);
1776 $reshook = $hookmanager->executeHooks(
'addSectionECMAuto', $parameters);
1777 if ($reshook > 0 && is_array($hookmanager->resArray) && count($hookmanager->resArray) > 0) {
1778 if (array_key_exists(
'ref', $hookmanager->resArray) && !empty($hookmanager->resArray[
'ref'])) {
1779 $ref = $hookmanager->resArray[
'ref'];
1781 if (array_key_exists(
'id', $hookmanager->resArray) && !empty($hookmanager->resArray[
'id'])) {
1782 $id = $hookmanager->resArray[
'id'];
1788 if (!$id && !$ref) {
1793 if (!empty($this->cache_objects[$modulepart.
'_'.$id.
'_'.$ref])) {
1799 if (is_object($object_instance)) {
1800 $object_instance->id = 0;
1801 $object_instance->ref =
'';
1803 $result = $object_instance->fetch($id);
1805 if (!($result = $object_instance->fetch(
'', $ref))) {
1811 $result = $object_instance->fetchOneLike($ref);
1818 $this->cache_objects[$modulepart.
'_'.$id.
'_'.$ref] = clone $object_instance;
1822 $this->cache_objects[$modulepart.
'_'.$id.
'_'.$ref] =
'notfound';
1823 unset($filearray[$key]);
1827 if ($found <= 0 || !is_object($this->cache_objects[$modulepart.
'_'.$id.
'_'.$ref])) {
1831 print
'<!-- Line list_of_autoecmfiles key='.$key.
' -->'.
"\n";
1832 print
'<tr class="oddeven">';
1834 if ($found > 0 && is_object($this->cache_objects[$modulepart.
'_'.$id.
'_'.$ref])) {
1835 $tmpobject = $this->cache_objects[$modulepart.
'_'.$id.
'_'.$ref];
1837 print $tmpobject->getNomUrl(1,
'document');
1842 print $langs->trans(
"ObjectDeleted", ($id ? $id : $ref));
1858 print
'<a href="'.DOL_URL_ROOT.
'/document.php?modulepart='.urlencode($modulepart);
1859 if ($forcedownload) {
1860 print
'&attachment=1';
1862 print
'&file='.urlencode($relativefile).
'">';
1864 print
dol_trunc($file[
'name'], $maxlength,
'middle');
1869 print $this->
showPreview($file, $modulepart, $file[
'relativename']);
1876 print
'<td class="right nowraponall">';
1877 if ($sizetoshow == $sizetoshowbytes) {
1880 print
$form->textwithpicto($sizetoshow, $sizetoshowbytes, -1);
1885 print
'<td class="center">'.dol_print_date($file[
'date'],
"dayhour").
'</td>';
1888 print
'<td class="right">';
1889 if (!empty($file[
'share'])) {
1891 $urlwithouturlroot = preg_replace(
'/'.preg_quote(DOL_URL_ROOT,
'/').
'$/i',
'', trim($dolibarr_main_url_root));
1892 $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT;
1898 if (!empty($file[
'share'])) {
1899 $paramlink .= ($paramlink ?
'&' :
'').
'hashp='.$file[
'share'];
1901 if ($forcedownload) {
1902 $paramlink .= ($paramlink ?
'&' :
'').
'attachment=1';
1905 $fulllink = $urlwithroot.
'/document.php'.($paramlink ?
'?'.$paramlink :
'');
1907 print
img_picto($langs->trans(
"FileSharedViaALink"),
'globe').
' ';
1908 print
'<input type="text" class="quatrevingtpercent width100 nopadding nopadding small" id="downloadlink" name="downloadexternallink" value="'.dol_escape_htmltag($fulllink).
'">';
1922 if (count($filearray) == 0) {
1923 print
'<tr class="oddeven"><td colspan="5">';
1924 if (empty($textifempty)) {
1925 print
'<span class="opacitymedium">'.$langs->trans(
"NoFileFound").
'</span>';
1927 print
'<span class="opacitymedium">'.$textifempty.
'</span>';
1934 if (!empty($addfilterfields)) {
1950 public function listOfLinks($object, $permissiontodelete = 1, $action =
null, $selected =
null, $param =
'')
1952 global $user, $conf, $langs, $user;
1953 global $sortfield, $sortorder;
1955 $langs->load(
"link");
1957 require_once DOL_DOCUMENT_ROOT.
'/core/class/link.class.php';
1958 $link =
new Link($this->
db);
1960 if ($sortfield ==
"name") {
1961 $sortfield =
"label";
1962 } elseif ($sortfield ==
"date") {
1963 $sortfield =
"datea";
1967 $res = $link->fetchAll($links, $object->element, $object->id, $sortfield, $sortorder);
1968 $param .= (isset($object->id) ?
'&id='.$object->id :
'');
1970 print
'<!-- listOfLinks -->'.
"\n";
1973 print
load_fiche_titre($langs->trans(
"LinkedFiles"),
'',
'link', 0,
'',
'table-list-of-links');
1975 print
'<form action="'.$_SERVER[
'PHP_SELF'].($param ?
'?'.$param :
'').
'" method="POST">';
1976 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1978 print
'<table class="liste noborder nobottom centpercent">';
1979 print
'<tr class="liste_titre">';
1981 $langs->trans(
"Links"),
1982 $_SERVER[
'PHP_SELF'],
2003 $langs->trans(
"Date"),
2004 $_SERVER[
'PHP_SELF'],
2015 $_SERVER[
'PHP_SELF'],
2026 $nboflinks = count($links);
2027 if ($nboflinks > 0) {
2028 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
2031 foreach ($links as $link) {
2032 print
'<tr class="oddeven">';
2034 if ($action ==
'update' && $selected === $link->id) {
2036 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
2037 print
'<input type="hidden" name="linkid" value="'.$link->id.
'">';
2038 print
'<input type="hidden" name="action" value="confirm_updateline">';
2039 print $langs->trans(
'Link').
': <input type="text" name="link" value="'.$link->url.
'">';
2042 print $langs->trans(
'Label').
': <input type="text" name="label" value="'.
dol_escape_htmltag($link->label).
'">';
2044 print
'<td class="center">'.dol_print_date(
dol_now(),
"dayhour",
"tzuser").
'</td>';
2045 print
'<td class="right"></td>';
2046 print
'<td class="right">';
2047 print
'<input type="submit" class="button button-save" name="save" value="'.dol_escape_htmltag($langs->trans(
"Save")).
'">';
2048 print
'<input type="submit" class="button button-cancel" name="cancel" value="'.dol_escape_htmltag($langs->trans(
"Cancel")).
'">';
2053 print
'<a data-ajax="false" href="'.$link->url.
'" target="_blank" rel="noopener noreferrer">';
2057 print
'<td class="right"></td>';
2058 print
'<td class="center">'.dol_print_date($link->datea,
"dayhour",
"tzuser").
'</td>';
2059 print
'<td class="center"></td>';
2060 print
'<td class="right">';
2061 print
'<a href="'.$_SERVER[
'PHP_SELF'].
'?action=update&linkid='.$link->id.$param.
'&token='.
newToken().
'" class="editfilelink editfielda reposition" >'.
img_edit().
'</a>';
2062 if ($permissiontodelete) {
2063 print
' <a class="deletefilelink reposition" href="'.$_SERVER[
'PHP_SELF'].
'?action=deletelink&token='.
newToken().
'&linkid='.((int) $link->id).$param.
'">'.
img_delete().
'</a>';
2071 if ($nboflinks == 0) {
2072 print
'<tr class="oddeven"><td colspan="5">';
2073 print
'<span class="opacitymedium">'.$langs->trans(
"NoLinkFound").
'</span>';
2094 public function showPreview($file, $modulepart, $relativepath, $ruleforpicto = 0, $param =
'')
2096 global $langs, $conf;
2099 if ($conf->browser->layout !=
'phone' && !empty($conf->use_javascript_ajax)) {
2101 if (count($urladvancedpreview)) {
2102 $out .=
'<a class="pictopreview '.$urladvancedpreview[
'css'].
'" href="'.$urladvancedpreview[
'url'].
'"'.(empty($urladvancedpreview[
'mime']) ?
'' :
' mime="'.$urladvancedpreview[
'mime'].
'"').
' '.(empty($urladvancedpreview[
'target']) ?
'' :
' target="'.$urladvancedpreview[
'target'].
'"').
'>';
2104 if (empty($ruleforpicto)) {
2106 $out .=
'<span class="fa fa-search-plus pictofixedwidth" style="color: gray"></span>';
2108 $out .=
img_mime($relativepath, $langs->trans(
'Preview').
' '.$file[
'name'],
'pictofixedwidth');
2112 if ($ruleforpicto < 0) {
2113 $out .=
img_picto(
'',
'generic',
'',
false, 0, 0,
'',
'paddingright pictofixedwidth');
ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $forcefocus=0, $widthTypeOfAutocomplete='resolve', $idforemptyvalue='-1', $morecss='')
Convert a html select field into an ajax combobox.
Class to manage bank accounts.
Classe permettant la gestion des paiements des charges La tva collectee n'est calculee que sur les fa...
Class to manage predefined suppliers products.
Class to manage customers orders.
Class to manage contracts.
Class to manage Trips and Expenses.
Class to manage suppliers invoices.
Class to manage invoices.
Class to manage interventions.
Class of the module paid holiday.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active models generation.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($dbs, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation models.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation models.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation models.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($dbs, $maxfilenamelength=0)
Return list of active generation modules.
Class to manage products or services.
const TYPE_PRODUCT
Regular product.
const TYPE_SERVICE
Service.
Class to manage projects.
Class to manage proposals.
Class for RecruitmentCandidature.
Class to manage cheque delivery receipts.
Class to manage salary payments.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage price ask supplier.
Put here description of your class.
Class to manage Dolibarr users.
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
dol_filemtime($pathoffile)
Return time of a file.
dol_filesize($pathoffile)
Return size of a file.
dol_is_file($pathoffile)
Return if path is a file.
dol_dir_list($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.
completeFileArrayWithDatabaseInfo(&$filearray, $relativedir)
Complete $filearray with data from database.
dol_print_size($size, $shortvalue=0, $shortunit=0)
Return string with formated size.
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
dol_mimetype($file, $default='application/octet-stream', $mode=0)
Return MIME type of a file from its name with extension.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='')
Set event messages in dol_events session object.
img_down($titlealt='default', $selected=0, $moreclass='')
Show down arrow logo.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
if(!function_exists('dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
dol_now($mode='auto')
Return date for now.
img_mime($file, $titlealt='', $morecss='')
Show MIME img of a file.
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
dol_escape_js($stringtoescape, $mode=0, $noescapebackslashn=0)
Returns text escaped for inclusion into javascript code.
ajax_autoselect($htmlname, $addlink='', $textonlink='Link')
Make content of an input box selected when we click into input field.
dol_sort_array(&$array, $index, $order='asc', $natsort=0, $case_sensitive=0, $keepindex=0)
Advanced sort array by second index function, which produces ascending (default) or descending output...
newToken()
Return the value of token currently saved into session with name 'newtoken'.
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
getImageFileNameForSize($file, $extName, $extImgTarget='')
Return the filename of file to get the thumbs.
getAdvancedPreviewUrl($modulepart, $relativepath, $alldata=0, $param='')
Return URL we can use for advanced preview links.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='')
Show information for admin users or standard users.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '…' if string larger than length.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo editer/modifier fiche.
img_up($titlealt='default', $selected=0, $moreclass='')
Show top arrow logo.
get_exdir($num, $level, $alpha, $withoutslash, $object, $modulepart='')
Return a path to have a the directory according to object where files are stored.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
image_format_supported($file, $acceptsvg=0)
Return if a filename is file name of a supported image format.
getMaxFileSizeArray()
Return the max allowed for file upload.
$conf db
API class for accounts.