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);
452 $addcolumforpicto = ($delallowed || $printer || $morepicto);
453 $colspan = (4 + ($addcolumforpicto ? 1 : 0));
458 $modellist = array();
460 if ($modulepart ==
'company') {
462 if (is_array($genallowed)) {
463 $modellist = $genallowed;
465 include_once DOL_DOCUMENT_ROOT.
'/core/modules/societe/modules_societe.class.php';
468 } elseif ($modulepart ==
'propal') {
469 if (is_array($genallowed)) {
470 $modellist = $genallowed;
472 include_once DOL_DOCUMENT_ROOT.
'/core/modules/propale/modules_propale.php';
475 } elseif ($modulepart ==
'supplier_proposal') {
476 if (is_array($genallowed)) {
477 $modellist = $genallowed;
479 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_proposal/modules_supplier_proposal.php';
482 } elseif ($modulepart ==
'commande') {
483 if (is_array($genallowed)) {
484 $modellist = $genallowed;
486 include_once DOL_DOCUMENT_ROOT.
'/core/modules/commande/modules_commande.php';
489 } elseif ($modulepart ==
'expedition') {
490 if (is_array($genallowed)) {
491 $modellist = $genallowed;
493 include_once DOL_DOCUMENT_ROOT.
'/core/modules/expedition/modules_expedition.php';
494 $modellist = ModelePDFExpedition::liste_modeles($this->
db);
496 } elseif ($modulepart ==
'reception') {
497 if (is_array($genallowed)) {
498 $modellist = $genallowed;
500 include_once DOL_DOCUMENT_ROOT.
'/core/modules/reception/modules_reception.php';
503 } elseif ($modulepart ==
'delivery') {
504 if (is_array($genallowed)) {
505 $modellist = $genallowed;
507 include_once DOL_DOCUMENT_ROOT.
'/core/modules/delivery/modules_delivery.php';
510 } elseif ($modulepart ==
'ficheinter') {
511 if (is_array($genallowed)) {
512 $modellist = $genallowed;
514 include_once DOL_DOCUMENT_ROOT.
'/core/modules/fichinter/modules_fichinter.php';
517 } elseif ($modulepart ==
'facture') {
518 if (is_array($genallowed)) {
519 $modellist = $genallowed;
521 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
524 } elseif ($modulepart ==
'contract') {
526 if (is_array($genallowed)) {
527 $modellist = $genallowed;
529 include_once DOL_DOCUMENT_ROOT.
'/core/modules/contract/modules_contract.php';
532 } elseif ($modulepart ==
'project') {
533 if (is_array($genallowed)) {
534 $modellist = $genallowed;
536 include_once DOL_DOCUMENT_ROOT.
'/core/modules/project/modules_project.php';
539 } elseif ($modulepart ==
'project_task') {
540 if (is_array($genallowed)) {
541 $modellist = $genallowed;
543 include_once DOL_DOCUMENT_ROOT.
'/core/modules/project/task/modules_task.php';
546 } elseif ($modulepart ==
'product') {
547 if (is_array($genallowed)) {
548 $modellist = $genallowed;
550 include_once DOL_DOCUMENT_ROOT.
'/core/modules/product/modules_product.class.php';
553 } elseif ($modulepart ==
'product_batch') {
554 if (is_array($genallowed)) {
555 $modellist = $genallowed;
557 include_once DOL_DOCUMENT_ROOT.
'/core/modules/product_batch/modules_product_batch.class.php';
560 } elseif ($modulepart ==
'stock') {
561 if (is_array($genallowed)) {
562 $modellist = $genallowed;
564 include_once DOL_DOCUMENT_ROOT.
'/core/modules/stock/modules_stock.php';
567 } elseif ($modulepart ==
'movement') {
568 if (is_array($genallowed)) {
569 $modellist = $genallowed;
571 include_once DOL_DOCUMENT_ROOT.
'/core/modules/stock/modules_movement.php';
574 } elseif ($modulepart ==
'export') {
575 if (is_array($genallowed)) {
576 $modellist = $genallowed;
578 include_once DOL_DOCUMENT_ROOT.
'/core/modules/export/modules_export.php';
581 } elseif ($modulepart ==
'commande_fournisseur' || $modulepart ==
'supplier_order') {
582 if (is_array($genallowed)) {
583 $modellist = $genallowed;
585 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_order/modules_commandefournisseur.php';
588 } elseif ($modulepart ==
'facture_fournisseur' || $modulepart ==
'supplier_invoice') {
590 if (is_array($genallowed)) {
591 $modellist = $genallowed;
593 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_invoice/modules_facturefournisseur.php';
596 } elseif ($modulepart ==
'supplier_payment') {
597 if (is_array($genallowed)) {
598 $modellist = $genallowed;
600 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_payment/modules_supplier_payment.php';
603 } elseif ($modulepart ==
'remisecheque') {
604 if (is_array($genallowed)) {
605 $modellist = $genallowed;
607 include_once DOL_DOCUMENT_ROOT.
'/core/modules/cheque/modules_chequereceipts.php';
610 } elseif ($modulepart ==
'donation') {
611 if (is_array($genallowed)) {
612 $modellist = $genallowed;
614 include_once DOL_DOCUMENT_ROOT.
'/core/modules/dons/modules_don.php';
617 } elseif ($modulepart ==
'member') {
618 if (is_array($genallowed)) {
619 $modellist = $genallowed;
621 include_once DOL_DOCUMENT_ROOT.
'/core/modules/member/modules_cards.php';
624 } elseif ($modulepart ==
'agenda' || $modulepart ==
'actions') {
625 if (is_array($genallowed)) {
626 $modellist = $genallowed;
628 include_once DOL_DOCUMENT_ROOT.
'/core/modules/action/modules_action.php';
631 } elseif ($modulepart ==
'expensereport') {
632 if (is_array($genallowed)) {
633 $modellist = $genallowed;
635 include_once DOL_DOCUMENT_ROOT.
'/core/modules/expensereport/modules_expensereport.php';
638 } elseif ($modulepart ==
'unpaid') {
640 } elseif ($modulepart ==
'user') {
641 if (is_array($genallowed)) {
642 $modellist = $genallowed;
644 include_once DOL_DOCUMENT_ROOT.
'/core/modules/user/modules_user.class.php';
647 } elseif ($modulepart ==
'usergroup') {
648 if (is_array($genallowed)) {
649 $modellist = $genallowed;
651 include_once DOL_DOCUMENT_ROOT.
'/core/modules/usergroup/modules_usergroup.class.php';
655 $submodulepart = $modulepart;
658 $tmp = explode(
':', $modulepart);
659 if (!empty($tmp[1])) {
660 $modulepart = $tmp[0];
661 $submodulepart = $tmp[1];
665 $file =
dol_buildpath(
'/core/modules/'.$modulepart.
'/modules_'.strtolower($submodulepart).
'.php', 0);
666 if (file_exists($file)) {
667 $res = include_once $file;
670 $file =
dol_buildpath(
'/'.$modulepart.
'/core/modules/'.$modulepart.
'/modules_'.strtolower($submodulepart).
'.php', 0);
671 $res = include_once $file;
674 $class =
'ModelePDF'.ucfirst($submodulepart);
676 if (class_exists($class)) {
677 $modellist = call_user_func($class.
'::liste_modeles', $this->db);
679 dol_print_error($this->
db,
"Bad value for modulepart '".$modulepart.
"' in showdocuments (class ".$class.
" for Doc generation not found)");
687 if (empty($buttonlabel)) {
688 $buttonlabel = $langs->trans(
'Generate');
691 if ($conf->browser->layout ==
'phone') {
692 $urlsource .=
'#'.$forname.
'_form';
694 if (empty($noform)) {
695 $out .=
'<form action="'.$urlsource.
'" id="'.$forname.
'_form" method="post">';
697 $out .=
'<input type="hidden" name="action" value="builddoc">';
698 $out .=
'<input type="hidden" name="page_y" value="">';
699 $out .=
'<input type="hidden" name="token" value="'.newToken().
'">';
702 $out .=
'<div class="div-table-responsive-no-min">';
703 $out .=
'<table class="liste formdoc noborder centpercent">';
705 $out .=
'<tr class="liste_titre">';
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 $addcolumforpicto = ($delallowed || $printer || $morepicto);
924 $colspan = (4 + ($addcolumforpicto ? 1 : 0));
926 $parameters = array(
'colspan'=>($colspan + $colspanmore),
'socid'=>(isset($GLOBALS[
'socid']) ? $GLOBALS[
'socid'] :
''),
'id'=>(isset($GLOBALS[
'id']) ? $GLOBALS[
'id'] :
''),
'modulepart'=>$modulepart,
'relativepath'=>$relativepath);
927 $res = $hookmanager->executeHooks(
'formBuilddocLineOptions', $parameters, $file);
929 $out .= $hookmanager->resPrint;
932 $out = $hookmanager->resPrint;
940 if (is_array($link_list)) {
943 foreach ($link_list as $file) {
944 $out .=
'<tr class="oddeven">';
945 $out .=
'<td colspan="'.$colspan.
'" class="maxwidhtonsmartphone">';
946 $out .=
'<a data-ajax="false" href="'.$file->url.
'" target="_blank" rel="noopener noreferrer">';
947 $out .= $file->label;
950 $out .=
'<td class="right">';
955 if ($delallowed || $printer || $morepicto) {
958 $out .=
'</tr>'.
"\n";
963 if (count($file_list) == 0 && count($link_list) == 0 && $headershown) {
964 $out .=
'<tr><td colspan="'.(3 + ($addcolumforpicto ? 1 : 0)).
'"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td></tr>'.
"\n";
970 $out .=
"</table>\n";
973 if (empty($noform)) {
974 $out .=
'</form>'.
"\n";
978 $out .=
'<!-- End show_document -->'.
"\n";
996 public function getDocumentsLink($modulepart, $modulesubdir, $filedir, $filter =
'', $morecss =
'valignmiddle', $allfiles = 0)
998 global $conf, $langs;
1000 include_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
1003 $this->infofiles = array(
'nboffiles'=>0,
'extensions'=>array(),
'files'=>array());
1010 preg_match(
'/\/([0-9]+)\/[^\/]+\/'.preg_quote($modulesubdir,
'/').
'$/', $filedir, $regs);
1011 $entity = ((!empty($regs[1]) && $regs[1] > 1) ? $regs[1] : 1);
1015 if ($allfiles || !empty($conf->global->MAIN_SHOW_ALL_FILES_ON_DOCUMENT_TOOLTIP)) {
1016 $filterforfilesearch =
'^'.preg_quote(basename($modulesubdir),
'/');
1018 $filterforfilesearch =
'^'.preg_quote(basename($modulesubdir),
'/').
'\.';
1020 $file_list =
dol_dir_list($filedir,
'files', 0, $filterforfilesearch,
'\.meta$|\.png$');
1024 $out .=
'<!-- html.formfile::getDocumentsLink -->'.
"\n";
1025 if (!empty($file_list)) {
1026 $out =
'<dl class="dropdown inline-block">
1027 <dt><a data-ajax="false" href="#" onClick="return false;">'.img_picto(
'',
'listlight',
'', 0, 0, 0,
'', $morecss).
'</a></dt>
1028 <dd><div class="multichoicedoc" style="position:absolute;left:100px;" ><ul class="ulselectedfields">';
1034 foreach ($file_list as $file) {
1036 if ($filter && !preg_match(
'/'.$filter.
'/i', $file[
"name"])) {
1042 $relativepath = $file[
"name"];
1043 if ($modulesubdir) {
1044 $relativepath = $modulesubdir.
"/".$file[
"name"];
1047 if ($modulepart ==
'donation') {
1048 $relativepath =
get_exdir($modulesubdir, 2, 0, 0,
null,
'donation').$file[
"name"];
1050 if ($modulepart ==
'export') {
1051 $relativepath = $file[
"name"];
1054 $this->infofiles[
'nboffiles']++;
1055 $this->infofiles[
'files'][] = $file[
'fullname'];
1056 $ext = pathinfo($file[
"name"], PATHINFO_EXTENSION);
1057 if (empty($this->infofiles[$ext])) {
1058 $this->infofiles[
'extensions'][$ext] = 1;
1060 $this->infofiles[
'extensions'][$ext]++;
1064 if (!empty($conf->use_javascript_ajax) && ($conf->browser->layout !=
'phone')) {
1066 if ($tmparray && $tmparray[
'url']) {
1067 $tmpout .=
'<li><a href="'.$tmparray[
'url'].
'"'.($tmparray[
'css'] ?
' class="'.$tmparray[
'css'].
'"' :
'').($tmparray[
'mime'] ?
' mime="'.$tmparray[
'mime'].
'"' :
'').($tmparray[
'target'] ?
' target="'.$tmparray[
'target'].
'"' :
'').
'>';
1069 $tmpout .=
'<i class="fa fa-search-plus paddingright" style="color: gray"></i>';
1070 $tmpout .= $langs->trans(
"Preview").
' '.$ext.
'</a></li>';
1075 $tmpout .=
'<li class="nowrap"><a class="pictopreview nowrap" href="'.DOL_URL_ROOT.
'/document.php?modulepart='.$modulepart.
'&entity='.$entity.
'&file='.urlencode($relativepath).
'"';
1077 if (preg_match(
'/text/', $mime)) {
1078 $tmpout .=
' target="_blank" rel="noopener noreferrer"';
1081 $tmpout .=
img_mime($relativepath, $file[
"name"]);
1082 $tmpout .= $langs->trans(
"Download").
' '.$ext;
1083 $tmpout .=
'</a></li>'.
"\n";
1086 $out .=
'</ul></div></dd>
1135 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 =
'')
1138 global $user, $conf, $langs, $hookmanager,
$form;
1139 global $sortfield, $sortorder, $maxheightmini;
1140 global $dolibarr_main_url_root;
1142 if ($disablecrop == -1) {
1145 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'))) {
1151 if (empty($relativepath)) {
1153 if (!empty($object->element) && $object->element ==
'invoice_supplier') {
1154 $relativepath =
get_exdir($object->id, 2, 0, 0, $object,
'invoice_supplier').$relativepath;
1156 if (!empty($object->element) && $object->element ==
'project_task') {
1157 $relativepath =
'Call_not_supported_._Call_function_using_a_defined_relative_path_.';
1161 if (
getDolGlobalInt(
'PRODUCT_USE_OLD_PATH_FOR_PHOTO') && $filearray[0][
'level1name'] ==
'photos') {
1162 $relativepath = preg_replace(
'/^.*\/produit\//',
'', $filearray[0][
'path']).
'/';
1168 $relativedir = preg_replace(
'/^'.preg_quote(DOL_DATA_ROOT,
'/').
'/',
'', $upload_dir);
1169 $relativedir = preg_replace(
'/^[\\/]/',
'', $relativedir);
1174 $hookmanager->initHooks(array(
'formfile'));
1175 $parameters = array(
1176 'filearray' => $filearray,
1177 'modulepart'=> $modulepart,
1179 'forcedownload' => $forcedownload,
1180 'relativepath' => $relativepath,
1181 'relativedir' => $relativedir,
1182 'permtodelete' => $permonobject,
1183 'useinecm' => $useinecm,
1184 'textifempty' => $textifempty,
1185 'maxlength' => $maxlength,
1189 $reshook = $hookmanager->executeHooks(
'showFilesList', $parameters, $object);
1191 if (!empty($reshook)) {
1194 if (!is_object(
$form)) {
1195 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.form.class.php';
1199 if (!preg_match(
'/&id=/', $param) && isset($object->id)) {
1200 $param .=
'&id='.$object->id;
1202 $relativepathwihtoutslashend = preg_replace(
'/\/$/',
'', $relativepath);
1203 if ($relativepathwihtoutslashend) {
1204 $param .=
'&file='.urlencode($relativepathwihtoutslashend);
1207 if ($permtoeditline < 0) {
1208 $permtoeditline = 0;
1209 if (in_array($modulepart, array(
'product',
'produit',
'service'))) {
1211 $permtoeditline = 1;
1214 $permtoeditline = 1;
1218 if (empty($conf->global->MAIN_UPLOAD_DOC)) {
1219 $permtoeditline = 0;
1224 if ((empty($useinecm) || $useinecm == 6) && $title !=
'none') {
1225 print
load_fiche_titre($title ? $title : $langs->trans(
"AttachedFiles"),
'',
'file-upload', 0,
'',
'table-list-of-attached-files');
1228 $url = $_SERVER[
"PHP_SELF"];
1231 print
'<!-- html.formfile::list_of_documents -->'.
"\n";
1232 if (
GETPOST(
'action',
'aZ09') ==
'editfile' && $permtoeditline) {
1233 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?'.$param.
'" method="POST">';
1234 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1235 print
'<input type="hidden" name="action" value="renamefile">';
1236 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
1237 print
'<input type="hidden" name="modulepart" value="'.$modulepart.
'">';
1240 print
'<div class="div-table-responsive-no-min"'.($moreattrondiv ?
' '.$moreattrondiv :
'').
'>';
1241 print
'<table id="tablelines" class="centpercent liste noborder nobottom">'.
"\n";
1243 if (!empty($addfilterfields)) {
1244 print
'<tr class="liste_titre nodrag nodrop">';
1245 print
'<td><input type="search_doc_ref" value="'.dol_escape_htmltag(
GETPOST(
'search_doc_ref',
'alpha')).
'"></td>';
1248 if (empty($useinecm) || $useinecm == 4 || $useinecm == 5 || $useinecm == 6) {
1253 if (empty($disablemove) && count($filearray) > 1) {
1264 if ($sortfield && $sortorder) {
1269 print
'<tr class="liste_titre nodrag nodrop">';
1274 if (empty($useinecm) || $useinecm == 4 || $useinecm == 5 || $useinecm == 6) {
1281 if (empty($disablemove) && count($filearray) > 1) {
1286 $nboffiles = count($filearray);
1287 if ($nboffiles > 0) {
1288 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
1294 foreach ($filearray as $key => $file) {
1295 if ($file[
'name'] !=
'.'
1296 && $file[
'name'] !=
'..'
1297 && !preg_match(
'/\.meta$/i', $file[
'name'])) {
1298 if (array_key_exists(
'rowid', $filearray[$key]) && $filearray[$key][
'rowid'] > 0) {
1299 $lastrowid = $filearray[$key][
'rowid'];
1301 $filepath = $relativepath.$file[
'name'];
1305 print
'<!-- Line list_of_documents '.$key.
' relativepath = '.$relativepath.
' -->'.
"\n";
1308 print
'<!-- In database: position='.(array_key_exists(
'position', $filearray[$key]) ? $filearray[$key][
'position'] : 0).
' -->'.
"\n";
1309 print
'<tr class="oddeven" id="row-'.((array_key_exists(
'rowid', $filearray[$key]) && $filearray[$key][
'rowid'] > 0) ? $filearray[$key][
'rowid'] :
'AFTER'.$lastrowid.
'POS'.($i + 1)).
'">';
1313 print
'<td class="minwith200 tdoverflowmax500">';
1317 print
'<a class="paddingright valignmiddle" href="'.DOL_URL_ROOT.
'/document.php?modulepart='.$modulepart;
1318 if ($forcedownload) {
1319 print
'&attachment=1';
1321 if (!empty($object->entity)) {
1322 print
'&entity='.$object->entity;
1324 print
'&file='.urlencode($filepath);
1326 print
img_mime($file[
'name'], $file[
'name'].
' ('.
dol_print_size($file[
'size'], 0, 0).
')',
'inline-block valignmiddle paddingright');
1327 if ($showrelpart == 1) {
1328 print $relativepath;
1331 if (
GETPOST(
'action',
'aZ09') ==
'editfile' && $file[
'name'] == basename(
GETPOST(
'urlfile',
'alpha'))) {
1333 $section_dir = dirname(
GETPOST(
'urlfile',
'alpha'));
1334 if (!preg_match(
'/\/$/', $section_dir)) {
1335 $section_dir .=
'/';
1337 print
'<input type="hidden" name="section_dir" value="'.$section_dir.
'">';
1338 print
'<input type="hidden" name="renamefilefrom" value="'.dol_escape_htmltag($file[
'name']).
'">';
1339 print
'<input type="text" name="renamefileto" class="quatrevingtpercent" value="'.dol_escape_htmltag($file[
'name']).
'">';
1342 $filenametoshow = preg_replace(
'/\.noexe$/',
'', $file[
'name']);
1348 print $this->
showPreview($file, $modulepart, $filepath, 0,
'&entity='.(!empty($object->entity) ? $object->entity : $conf->entity));
1356 print
'<td class="right nowraponall">';
1357 if ($sizetoshow == $sizetoshowbytes) {
1360 print
$form->textwithpicto($sizetoshow, $sizetoshowbytes, -1);
1365 print
'<td class="center nowraponall">'.dol_print_date($file[
'date'],
"dayhour",
"tzuser").
'</td>';
1368 if (empty($useinecm) || $useinecm == 4 || $useinecm == 5 || $useinecm == 6) {
1369 $fileinfo = pathinfo($file[
'name']);
1370 print
'<td class="center">';
1372 if ($useinecm == 5 || $useinecm == 6) {
1382 $urlforhref =
getAdvancedPreviewUrl($modulepart, $relativepath.$fileinfo[
'filename'].
'.'.strtolower($fileinfo[
'extension']), 1,
'&entity='.(!empty($object->entity) ? $object->entity : $conf->entity));
1383 if (empty($urlforhref)) {
1384 $urlforhref = DOL_URL_ROOT.
'/viewimage.php?modulepart='.$modulepart.
'&entity='.(!empty($object->entity) ? $object->entity : $conf->entity).
'&file='.urlencode($relativepath.$fileinfo[
'filename'].
'.'.strtolower($fileinfo[
'extension']));
1385 print
'<a href="'.$urlforhref.
'" class="aphoto" target="_blank" rel="noopener noreferrer">';
1387 print
'<a href="'.$urlforhref[
'url'].
'" class="'.$urlforhref[
'css'].
'" target="'.$urlforhref[
'target'].
'" mime="'.$urlforhref[
'mime'].
'">';
1389 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="">';
1398 print
'<td class="center">';
1399 if ($relativedir && $filearray[$key][
'rowid'] > 0) {
1401 print
'<label for="idshareenabled'.$key.
'">'.$langs->trans(
"FileSharedViaALink").
'</label> ';
1402 print
'<input class="inline-block" type="checkbox" id="idshareenabled'.$key.
'" name="shareenabled"'.($file[
'share'] ?
' checked="checked"' :
'').
' /> ';
1404 if ($file[
'share']) {
1406 $urlwithouturlroot = preg_replace(
'/'.preg_quote(DOL_URL_ROOT,
'/').
'$/i',
'', trim($dolibarr_main_url_root));
1407 $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT;
1413 if (!empty($file[
'share'])) {
1414 $paramlink .= ($paramlink ?
'&' :
'').
'hashp='.$file[
'share'];
1416 if ($forcedownload) {
1417 $paramlink .= ($paramlink ?
'&' :
'').
'attachment=1';
1420 $fulllink = $urlwithroot.
'/document.php'.($paramlink ?
'?'.$paramlink :
'');
1422 print
'<a href="'.$fulllink.
'" target="_blank" rel="noopener">'.
img_picto($langs->trans(
"FileSharedViaALink"),
'globe').
'</a> ';
1423 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).
'">';
1435 print
'<td class="valignmiddle right actionbuttons nowraponall"><!-- action on files -->';
1436 if ($useinecm == 1 || $useinecm == 5) {
1438 $newparam = preg_replace(
'/&file=.*$/',
'', $param);
1439 $backtopage = DOL_URL_ROOT.
'/ecm/index.php?§ion_dir='.urlencode($relativepath).$newparam;
1440 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>';
1443 if (empty($useinecm) || $useinecm == 2 || $useinecm == 6) {
1444 $newmodulepart = $modulepart;
1445 if (in_array($modulepart, array(
'product',
'produit',
'service'))) {
1446 $newmodulepart =
'produit|service';
1450 if ($permtoeditline) {
1452 $moreparaminurl =
'';
1453 if (!empty($object->id) && $object->id > 0) {
1454 $moreparaminurl .=
'&id='.$object->id;
1455 } elseif (
GETPOST(
'website',
'alpha')) {
1456 $moreparaminurl .=
'&website='.GETPOST(
'website',
'alpha');
1459 if ($modulepart ==
'medias' && !
GETPOST(
'website')) {
1460 $moreparaminurl .=
'&backtourl='.urlencode(DOL_URL_ROOT.
'/ecm/index_medias.php?file_manager=1&modulepart='.$modulepart.
'§ion_dir='.$relativepath);
1463 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>';
1467 if ($permtoeditline) {
1468 $paramsectiondir = (in_array($modulepart, array(
'medias',
'ecm')) ?
'§ion_dir='.urlencode($relativepath) :
'');
1469 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>';
1473 if ($permonobject) {
1475 if (!empty($conf->dol_use_jmobile)) {
1478 if (empty($conf->use_javascript_ajax)) {
1481 if (!empty($conf->global->MAIN_ECM_DISABLE_JS)) {
1484 print
'<a href="'.((($useinecm && $useinecm != 6) && $useajax) ?
'#' : ($url.
'?action=deletefile&token='.
newToken().
'&urlfile='.urlencode($filepath).$param)).
'" class="reposition deletefilelink" rel="'.$filepath.
'">'.
img_delete().
'</a>';
1488 if (empty($disablemove) && count($filearray) > 1) {
1489 if ($nboffiles > 1 && $conf->browser->layout !=
'phone') {
1490 print
'<td class="linecolmove tdlineupdown center">';
1492 print
'<a class="lineupdown" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=up&rowid='.$object->id.
'">'.
img_up(
'default', 0,
'imgupforline').
'</a>';
1494 if ($i < ($nboffiles - 1)) {
1495 print
'<a class="lineupdown" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=down&rowid='.$object->id.
'">'.
img_down(
'default', 0,
'imgdownforline').
'</a>';
1499 print
'<td'.(($conf->browser->layout !=
'phone') ?
' class="linecolmove tdlineupdown center"' :
' class="linecolmove center"').
'>';
1504 print
'<td class="right">';
1505 print
'<input type="hidden" name="ecmfileid" value="'.$filearray[$key][
'rowid'].
'">';
1506 print
'<input type="submit" class="button button-save smallpaddingimp" name="renamefilesave" value="'.dol_escape_htmltag($langs->trans(
"Save")).
'">';
1507 print
'<input type="submit" class="button button-cancel smallpaddingimp" name="cancel" value="'.dol_escape_htmltag($langs->trans(
"Cancel")).
'">';
1509 if (empty($disablemove) && count($filearray) > 1) {
1510 print
'<td class="right"></td>';
1518 if ($nboffiles == 0) {
1520 if (empty($disablemove) && count($filearray) > 1) {
1523 print
'<tr class="oddeven"><td colspan="'.$colspan.
'">';
1524 if (empty($textifempty)) {
1525 print
'<span class="opacitymedium">'.$langs->trans(
"NoFileFound").
'</span>';
1527 print
'<span class="opacitymedium">'.$textifempty.
'</span>';
1535 if ($nboflines > 1 && is_object($object)) {
1536 if (!empty($conf->use_javascript_ajax) && $permtoeditline) {
1537 $table_element_line =
'ecm_files';
1538 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
1544 if (
GETPOST(
'action',
'aZ09') ==
'editfile' && $permtoeditline) {
1572 public function list_of_autoecmfiles($upload_dir, $filearray, $modulepart, $param, $forcedownload = 0, $relativepath =
'', $permissiontodelete = 1, $useinecm = 0, $textifempty =
'', $maxlength = 0, $url =
'', $addfilterfields = 0)
1575 global $user, $conf, $langs, $hookmanager,
$form;
1576 global $sortfield, $sortorder;
1577 global $search_doc_ref;
1578 global $dolibarr_main_url_root;
1580 dol_syslog(get_class($this).
'::list_of_autoecmfiles upload_dir='.$upload_dir.
' modulepart='.$modulepart);
1583 if (empty($useinecm) || $useinecm == 6) {
1587 $url = $_SERVER[
"PHP_SELF"];
1590 if (!empty($addfilterfields)) {
1591 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'">';
1592 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1593 print
'<input type="hidden" name="module" value="'.$modulepart.
'">';
1596 print
'<div class="div-table-responsive-no-min">';
1597 print
'<table width="100%" class="noborder">'.
"\n";
1599 if (!empty($addfilterfields)) {
1600 print
'<tr class="liste_titre nodrag nodrop">';
1601 print
'<td class="liste_titre"></td>';
1602 print
'<td class="liste_titre"><input type="text" class="maxwidth100onsmartphone" name="search_doc_ref" value="'.dol_escape_htmltag($search_doc_ref).
'"></td>';
1603 print
'<td class="liste_titre"></td>';
1604 print
'<td class="liste_titre"></td>';
1606 print
'<td class="liste_titre right">';
1607 $searchpicto =
$form->showFilterButtons();
1613 print
'<tr class="liste_titre">';
1614 $sortref =
"fullname";
1615 if ($modulepart ==
'invoice_supplier') {
1616 $sortref =
'level1name';
1626 $object_instance =
null;
1627 if ($modulepart ==
'company') {
1628 include_once DOL_DOCUMENT_ROOT.
'/societe/class/societe.class.php';
1629 $object_instance =
new Societe($this->
db);
1630 } elseif ($modulepart ==
'invoice') {
1631 include_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
1632 $object_instance =
new Facture($this->
db);
1633 } elseif ($modulepart ==
'invoice_supplier') {
1634 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
1636 } elseif ($modulepart ==
'propal') {
1637 include_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
1638 $object_instance =
new Propal($this->
db);
1639 } elseif ($modulepart ==
'supplier_proposal') {
1640 include_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
1642 } elseif ($modulepart ==
'order') {
1643 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
1645 } elseif ($modulepart ==
'order_supplier') {
1646 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
1648 } elseif ($modulepart ==
'contract') {
1649 include_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
1650 $object_instance =
new Contrat($this->
db);
1651 } elseif ($modulepart ==
'product') {
1652 include_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
1653 $object_instance =
new Product($this->
db);
1654 } elseif ($modulepart ==
'tax') {
1655 include_once DOL_DOCUMENT_ROOT.
'/compta/sociales/class/chargesociales.class.php';
1657 } elseif ($modulepart ==
'tax-vat') {
1658 include_once DOL_DOCUMENT_ROOT.
'/compta/tva/class/tva.class.php';
1659 $object_instance =
new Tva($this->
db);
1660 } elseif ($modulepart ==
'salaries') {
1661 include_once DOL_DOCUMENT_ROOT.
'/salaries/class/salary.class.php';
1662 $object_instance =
new Salary($this->
db);
1663 } elseif ($modulepart ==
'project') {
1664 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
1665 $object_instance =
new Project($this->
db);
1666 } elseif ($modulepart ==
'project_task') {
1667 include_once DOL_DOCUMENT_ROOT.
'/projet/class/task.class.php';
1668 $object_instance =
new Task($this->
db);
1669 } elseif ($modulepart ==
'fichinter') {
1670 include_once DOL_DOCUMENT_ROOT.
'/fichinter/class/fichinter.class.php';
1672 } elseif ($modulepart ==
'user') {
1673 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
1674 $object_instance =
new User($this->
db);
1675 } elseif ($modulepart ==
'expensereport') {
1676 include_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
1678 } elseif ($modulepart ==
'holiday') {
1679 include_once DOL_DOCUMENT_ROOT.
'/holiday/class/holiday.class.php';
1680 $object_instance =
new Holiday($this->
db);
1681 } elseif ($modulepart ==
'recruitment-recruitmentcandidature') {
1682 include_once DOL_DOCUMENT_ROOT.
'/recruitment/class/recruitmentcandidature.class.php';
1684 } elseif ($modulepart ==
'banque') {
1685 include_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
1686 $object_instance =
new Account($this->
db);
1687 } elseif ($modulepart ==
'chequereceipt') {
1688 include_once DOL_DOCUMENT_ROOT.
'/compta/paiement/cheque/class/remisecheque.class.php';
1690 } elseif ($modulepart ==
'mrp-mo') {
1691 include_once DOL_DOCUMENT_ROOT.
'/mrp/class/mo.class.php';
1692 $object_instance =
new Mo($this->
db);
1694 $parameters = array(
'modulepart'=>$modulepart);
1695 $reshook = $hookmanager->executeHooks(
'addSectionECMAuto', $parameters);
1696 if ($reshook > 0 && is_array($hookmanager->resArray) && count($hookmanager->resArray) > 0) {
1697 if (array_key_exists(
'classpath', $hookmanager->resArray) && !empty($hookmanager->resArray[
'classpath'])) {
1699 if (array_key_exists(
'classname', $hookmanager->resArray) && !empty($hookmanager->resArray[
'classname'])) {
1700 if (class_exists($hookmanager->resArray[
'classname'])) {
1701 $tmpclassname = $hookmanager->resArray[
'classname'];
1702 $object_instance =
new $tmpclassname($this->
db);
1713 $relativepathfromroot = preg_replace(
'/'.preg_quote(DOL_DATA_ROOT.
'/',
'/').
'/',
'', $upload_dir);
1714 if ($relativepathfromroot) {
1718 if ($sortfield && $sortorder) {
1719 $filearray =
dol_sort_array($filearray, $sortfield, $sortorder, 1);
1725 foreach ($filearray as $key => $file) {
1726 if (!is_dir($file[
'name'])
1727 && $file[
'name'] !=
'.'
1728 && $file[
'name'] !=
'..'
1729 && $file[
'name'] !=
'CVS'
1730 && !preg_match(
'/\.meta$/i', $file[
'name'])) {
1732 $relativefile = preg_replace(
'/'.preg_quote($upload_dir.
'/',
'/').
'/',
'', $file[
'fullname']);
1740 if ($modulepart ==
'company' || $modulepart ==
'tax' || $modulepart ==
'tax-vat' || $modulepart ==
'salaries') {
1741 preg_match(
'/(\d+)\/[^\/]+$/', $relativefile, $reg);
1742 $id = (isset($reg[1]) ? $reg[1] :
'');
1743 } elseif ($modulepart ==
'invoice_supplier') {
1744 preg_match(
'/([^\/]+)\/[^\/]+$/', $relativefile, $reg);
1745 $ref = (isset($reg[1]) ? $reg[1] :
'');
1746 if (is_numeric($ref)) {
1750 } elseif ($modulepart ==
'user') {
1752 preg_match(
'/(.*)\/[^\/]+$/', $relativefile, $reg);
1753 $id = (isset($reg[1]) ? $reg[1] :
'');
1754 } elseif ($modulepart ==
'project_task') {
1756 $reg = explode(
"/", $relativefile);
1757 $ref = (isset($reg[1]) ? $reg[1] :
'');
1758 } elseif (in_array($modulepart, array(
1761 'supplier_proposal',
1770 'recruitment-recruitmentcandidature',
1775 preg_match(
'/(.*)\/[^\/]+$/', $relativefile, $reg);
1776 $ref = (isset($reg[1]) ? $reg[1] :
'');
1778 $parameters = array(
'modulepart'=>$modulepart,
'fileinfo'=>$file);
1779 $reshook = $hookmanager->executeHooks(
'addSectionECMAuto', $parameters);
1780 if ($reshook > 0 && is_array($hookmanager->resArray) && count($hookmanager->resArray) > 0) {
1781 if (array_key_exists(
'ref', $hookmanager->resArray) && !empty($hookmanager->resArray[
'ref'])) {
1782 $ref = $hookmanager->resArray[
'ref'];
1784 if (array_key_exists(
'id', $hookmanager->resArray) && !empty($hookmanager->resArray[
'id'])) {
1785 $id = $hookmanager->resArray[
'id'];
1791 if (!$id && !$ref) {
1796 if (!empty($this->cache_objects[$modulepart.
'_'.$id.
'_'.$ref])) {
1802 if (is_object($object_instance)) {
1803 $object_instance->id = 0;
1804 $object_instance->ref =
'';
1806 $result = $object_instance->fetch($id);
1808 if (!($result = $object_instance->fetch(
'', $ref))) {
1814 $result = $object_instance->fetchOneLike($ref);
1821 $this->cache_objects[$modulepart.
'_'.$id.
'_'.$ref] = clone $object_instance;
1825 $this->cache_objects[$modulepart.
'_'.$id.
'_'.$ref] =
'notfound';
1826 unset($filearray[$key]);
1830 if ($found <= 0 || !is_object($this->cache_objects[$modulepart.
'_'.$id.
'_'.$ref])) {
1834 print
'<!-- Line list_of_autoecmfiles key='.$key.
' -->'.
"\n";
1835 print
'<tr class="oddeven">';
1837 if ($found > 0 && is_object($this->cache_objects[$modulepart.
'_'.$id.
'_'.$ref])) {
1838 $tmpobject = $this->cache_objects[$modulepart.
'_'.$id.
'_'.$ref];
1840 print $tmpobject->getNomUrl(1,
'document');
1845 print $langs->trans(
"ObjectDeleted", ($id ? $id : $ref));
1861 print
'<a href="'.DOL_URL_ROOT.
'/document.php?modulepart='.urlencode($modulepart);
1862 if ($forcedownload) {
1863 print
'&attachment=1';
1865 print
'&file='.urlencode($relativefile).
'">';
1867 print
dol_trunc($file[
'name'], $maxlength,
'middle');
1872 print $this->
showPreview($file, $modulepart, $file[
'relativename']);
1879 print
'<td class="right nowraponall">';
1880 if ($sizetoshow == $sizetoshowbytes) {
1883 print
$form->textwithpicto($sizetoshow, $sizetoshowbytes, -1);
1888 print
'<td class="center">'.dol_print_date($file[
'date'],
"dayhour").
'</td>';
1891 print
'<td class="right">';
1892 if (!empty($file[
'share'])) {
1894 $urlwithouturlroot = preg_replace(
'/'.preg_quote(DOL_URL_ROOT,
'/').
'$/i',
'', trim($dolibarr_main_url_root));
1895 $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT;
1901 if (!empty($file[
'share'])) {
1902 $paramlink .= ($paramlink ?
'&' :
'').
'hashp='.$file[
'share'];
1904 if ($forcedownload) {
1905 $paramlink .= ($paramlink ?
'&' :
'').
'attachment=1';
1908 $fulllink = $urlwithroot.
'/document.php'.($paramlink ?
'?'.$paramlink :
'');
1910 print
img_picto($langs->trans(
"FileSharedViaALink"),
'globe').
' ';
1911 print
'<input type="text" class="quatrevingtpercent width100 nopadding nopadding small" id="downloadlink" name="downloadexternallink" value="'.dol_escape_htmltag($fulllink).
'">';
1925 if (count($filearray) == 0) {
1926 print
'<tr class="oddeven"><td colspan="5">';
1927 if (empty($textifempty)) {
1928 print
'<span class="opacitymedium">'.$langs->trans(
"NoFileFound").
'</span>';
1930 print
'<span class="opacitymedium">'.$textifempty.
'</span>';
1937 if (!empty($addfilterfields)) {
1953 public function listOfLinks($object, $permissiontodelete = 1, $action =
null, $selected =
null, $param =
'')
1955 global $user, $conf, $langs, $user;
1956 global $sortfield, $sortorder;
1958 $langs->load(
"link");
1960 require_once DOL_DOCUMENT_ROOT.
'/core/class/link.class.php';
1961 $link =
new Link($this->
db);
1963 if ($sortfield ==
"name") {
1964 $sortfield =
"label";
1965 } elseif ($sortfield ==
"date") {
1966 $sortfield =
"datea";
1970 $res = $link->fetchAll($links, $object->element, $object->id, $sortfield, $sortorder);
1971 $param .= (isset($object->id) ?
'&id='.$object->id :
'');
1973 print
'<!-- listOfLinks -->'.
"\n";
1976 print
load_fiche_titre($langs->trans(
"LinkedFiles"),
'',
'link', 0,
'',
'table-list-of-links');
1978 print
'<form action="'.$_SERVER[
'PHP_SELF'].($param ?
'?'.$param :
'').
'" method="POST">';
1979 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1981 print
'<table class="liste noborder nobottom centpercent">';
1982 print
'<tr class="liste_titre">';
1984 $langs->trans(
"Links"),
1985 $_SERVER[
'PHP_SELF'],
2006 $langs->trans(
"Date"),
2007 $_SERVER[
'PHP_SELF'],
2018 $_SERVER[
'PHP_SELF'],
2029 $nboflinks = count($links);
2030 if ($nboflinks > 0) {
2031 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
2034 foreach ($links as $link) {
2035 print
'<tr class="oddeven">';
2037 if ($action ==
'update' && $selected === $link->id) {
2039 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
2040 print
'<input type="hidden" name="linkid" value="'.$link->id.
'">';
2041 print
'<input type="hidden" name="action" value="confirm_updateline">';
2042 print $langs->trans(
'Link').
': <input type="text" name="link" value="'.$link->url.
'">';
2045 print $langs->trans(
'Label').
': <input type="text" name="label" value="'.
dol_escape_htmltag($link->label).
'">';
2047 print
'<td class="center">'.dol_print_date(
dol_now(),
"dayhour",
"tzuser").
'</td>';
2048 print
'<td class="right"></td>';
2049 print
'<td class="right">';
2050 print
'<input type="submit" class="button button-save" name="save" value="'.dol_escape_htmltag($langs->trans(
"Save")).
'">';
2051 print
'<input type="submit" class="button button-cancel" name="cancel" value="'.dol_escape_htmltag($langs->trans(
"Cancel")).
'">';
2056 print
'<a data-ajax="false" href="'.$link->url.
'" target="_blank" rel="noopener noreferrer">';
2060 print
'<td class="right"></td>';
2061 print
'<td class="center">'.dol_print_date($link->datea,
"dayhour",
"tzuser").
'</td>';
2062 print
'<td class="center"></td>';
2063 print
'<td class="right">';
2064 print
'<a href="'.$_SERVER[
'PHP_SELF'].
'?action=update&linkid='.$link->id.$param.
'&token='.
newToken().
'" class="editfilelink editfielda reposition" >'.
img_edit().
'</a>';
2065 if ($permissiontodelete) {
2066 print
' <a class="deletefilelink reposition" href="'.$_SERVER[
'PHP_SELF'].
'?action=deletelink&token='.
newToken().
'&linkid='.((int) $link->id).$param.
'">'.
img_delete().
'</a>';
2074 if ($nboflinks == 0) {
2075 print
'<tr class="oddeven"><td colspan="5">';
2076 print
'<span class="opacitymedium">'.$langs->trans(
"NoLinkFound").
'</span>';
2097 public function showPreview($file, $modulepart, $relativepath, $ruleforpicto = 0, $param =
'')
2099 global $langs, $conf;
2102 if ($conf->browser->layout !=
'phone' && !empty($conf->use_javascript_ajax)) {
2104 if (count($urladvancedpreview)) {
2105 $out .=
'<a class="pictopreview '.$urladvancedpreview[
'css'].
'" href="'.$urladvancedpreview[
'url'].
'"'.(empty($urladvancedpreview[
'mime']) ?
'' :
' mime="'.$urladvancedpreview[
'mime'].
'"').
' '.(empty($urladvancedpreview[
'target']) ?
'' :
' target="'.$urladvancedpreview[
'target'].
'"').
'>';
2107 if (empty($ruleforpicto)) {
2109 $out .=
'<span class="fa fa-search-plus pictofixedwidth" style="color: gray"></span>';
2111 $out .=
img_mime($relativepath, $langs->trans(
'Preview').
' '.$file[
'name'],
'pictofixedwidth');
2115 if ($ruleforpicto < 0) {
2116 $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.
liste_modeles($db, $maxfilenamelength=0)
Load into memory list of available export format.
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.