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)) {
382 $form =
new Form($this->db);
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>';
426 $title .=
'<script nonce="'.getNonce().
'">
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 $submodulepart = $modulepart;
455 $tmp = explode(
':', $modulepart);
456 if (!empty($tmp[1])) {
457 $modulepart = $tmp[0];
458 $submodulepart = $tmp[1];
461 $addcolumforpicto = ($delallowed || $printer || $morepicto);
462 $colspan = (4 + ($addcolumforpicto ? 1 : 0));
467 $modellist = array();
469 if ($modulepart ==
'company') {
471 if (is_array($genallowed)) {
472 $modellist = $genallowed;
474 include_once DOL_DOCUMENT_ROOT.
'/core/modules/societe/modules_societe.class.php';
477 } elseif ($modulepart ==
'propal') {
478 if (is_array($genallowed)) {
479 $modellist = $genallowed;
481 include_once DOL_DOCUMENT_ROOT.
'/core/modules/propale/modules_propale.php';
484 } elseif ($modulepart ==
'supplier_proposal') {
485 if (is_array($genallowed)) {
486 $modellist = $genallowed;
488 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_proposal/modules_supplier_proposal.php';
491 } elseif ($modulepart ==
'commande') {
492 if (is_array($genallowed)) {
493 $modellist = $genallowed;
495 include_once DOL_DOCUMENT_ROOT.
'/core/modules/commande/modules_commande.php';
498 } elseif ($modulepart ==
'expedition') {
499 if (is_array($genallowed)) {
500 $modellist = $genallowed;
502 include_once DOL_DOCUMENT_ROOT.
'/core/modules/expedition/modules_expedition.php';
505 } elseif ($modulepart ==
'reception') {
506 if (is_array($genallowed)) {
507 $modellist = $genallowed;
509 include_once DOL_DOCUMENT_ROOT.
'/core/modules/reception/modules_reception.php';
512 } elseif ($modulepart ==
'delivery') {
513 if (is_array($genallowed)) {
514 $modellist = $genallowed;
516 include_once DOL_DOCUMENT_ROOT.
'/core/modules/delivery/modules_delivery.php';
519 } elseif ($modulepart ==
'ficheinter') {
520 if (is_array($genallowed)) {
521 $modellist = $genallowed;
523 include_once DOL_DOCUMENT_ROOT.
'/core/modules/fichinter/modules_fichinter.php';
526 } elseif ($modulepart ==
'facture') {
527 if (is_array($genallowed)) {
528 $modellist = $genallowed;
530 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
533 } elseif ($modulepart ==
'contract') {
535 if (is_array($genallowed)) {
536 $modellist = $genallowed;
538 include_once DOL_DOCUMENT_ROOT.
'/core/modules/contract/modules_contract.php';
541 } elseif ($modulepart ==
'project') {
542 if (is_array($genallowed)) {
543 $modellist = $genallowed;
545 include_once DOL_DOCUMENT_ROOT.
'/core/modules/project/modules_project.php';
548 } elseif ($modulepart ==
'project_task') {
549 if (is_array($genallowed)) {
550 $modellist = $genallowed;
552 include_once DOL_DOCUMENT_ROOT.
'/core/modules/project/task/modules_task.php';
555 } elseif ($modulepart ==
'product') {
556 if (is_array($genallowed)) {
557 $modellist = $genallowed;
559 include_once DOL_DOCUMENT_ROOT.
'/core/modules/product/modules_product.class.php';
562 } elseif ($modulepart ==
'product_batch') {
563 if (is_array($genallowed)) {
564 $modellist = $genallowed;
566 include_once DOL_DOCUMENT_ROOT.
'/core/modules/product_batch/modules_product_batch.class.php';
569 } elseif ($modulepart ==
'stock') {
570 if (is_array($genallowed)) {
571 $modellist = $genallowed;
573 include_once DOL_DOCUMENT_ROOT.
'/core/modules/stock/modules_stock.php';
576 } elseif ($modulepart ==
'movement') {
577 if (is_array($genallowed)) {
578 $modellist = $genallowed;
580 include_once DOL_DOCUMENT_ROOT.
'/core/modules/stock/modules_movement.php';
583 } elseif ($modulepart ==
'export') {
584 if (is_array($genallowed)) {
585 $modellist = $genallowed;
587 include_once DOL_DOCUMENT_ROOT.
'/core/modules/export/modules_export.php';
588 $modellist = ModeleExports::liste_modeles($this->db);
590 } elseif ($modulepart ==
'commande_fournisseur' || $modulepart ==
'supplier_order') {
591 if (is_array($genallowed)) {
592 $modellist = $genallowed;
594 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_order/modules_commandefournisseur.php';
597 } elseif ($modulepart ==
'facture_fournisseur' || $modulepart ==
'supplier_invoice') {
599 if (is_array($genallowed)) {
600 $modellist = $genallowed;
602 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_invoice/modules_facturefournisseur.php';
605 } elseif ($modulepart ==
'supplier_payment') {
606 if (is_array($genallowed)) {
607 $modellist = $genallowed;
609 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_payment/modules_supplier_payment.php';
612 } elseif ($modulepart ==
'remisecheque') {
613 if (is_array($genallowed)) {
614 $modellist = $genallowed;
616 include_once DOL_DOCUMENT_ROOT.
'/core/modules/cheque/modules_chequereceipts.php';
619 } elseif ($modulepart ==
'donation') {
620 if (is_array($genallowed)) {
621 $modellist = $genallowed;
623 include_once DOL_DOCUMENT_ROOT.
'/core/modules/dons/modules_don.php';
626 } elseif ($modulepart ==
'member') {
627 if (is_array($genallowed)) {
628 $modellist = $genallowed;
630 include_once DOL_DOCUMENT_ROOT.
'/core/modules/member/modules_cards.php';
633 } elseif ($modulepart ==
'agenda' || $modulepart ==
'actions') {
634 if (is_array($genallowed)) {
635 $modellist = $genallowed;
637 include_once DOL_DOCUMENT_ROOT.
'/core/modules/action/modules_action.php';
640 } elseif ($modulepart ==
'expensereport') {
641 if (is_array($genallowed)) {
642 $modellist = $genallowed;
644 include_once DOL_DOCUMENT_ROOT.
'/core/modules/expensereport/modules_expensereport.php';
647 } elseif ($modulepart ==
'unpaid') {
649 } elseif ($modulepart ==
'user') {
650 if (is_array($genallowed)) {
651 $modellist = $genallowed;
653 include_once DOL_DOCUMENT_ROOT.
'/core/modules/user/modules_user.class.php';
656 } elseif ($modulepart ==
'usergroup') {
657 if (is_array($genallowed)) {
658 $modellist = $genallowed;
660 include_once DOL_DOCUMENT_ROOT.
'/core/modules/usergroup/modules_usergroup.class.php';
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());
1008 if (isModEnabled(
'multicompany')) {
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';
1196 $form =
new Form($this->db);
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';
1449 if ($permtoeditline) {
1450 $moreparaminurl =
'';
1451 if (!empty($object->id) && $object->id > 0) {
1452 $moreparaminurl .=
'&id='.$object->id;
1453 } elseif (
GETPOST(
'website',
'alpha')) {
1454 $moreparaminurl .=
'&website='.GETPOST(
'website',
'alpha');
1457 if ($modulepart ==
'medias' && !
GETPOST(
'website')) {
1458 $moreparaminurl .=
'&backtourl='.urlencode(DOL_URL_ROOT.
'/ecm/index_medias.php?file_manager=1&modulepart='.$modulepart.
'§ion_dir='.$relativepath);
1461 if (!preg_match(
'/\.webp$/i', $file[
'name'])) {
1462 if ($modulepart ==
'medias' && !
GETPOST(
'website')) {
1463 print
'<a href="'.DOL_URL_ROOT.
'/ecm/index_medias.php?action=confirmconvertimgwebp&token='.newToken().
'§ion_dir='.urlencode($relativepath).
'&filetoregenerate='.urlencode($fileinfo[
'basename']).
'&module='.$modulepart.$param.$moreparaminurl.
'" title="'.
dol_escape_htmltag($langs->trans(
"GenerateChosenImgWebp")).
'">'.
img_picto(
'',
'images',
'class="flip marginrightonly"').
'</a>';
1464 } elseif ($modulepart ==
'medias' &&
GETPOST(
'website')) {
1465 print
'<a href="'.DOL_URL_ROOT.
'/website/index.php?action=confirmconvertimgwebp&token='.newToken().
'§ion_dir='.urlencode($relativepath).
'&filetoregenerate='.urlencode($fileinfo[
'basename']).
'&module='.$modulepart.$param.$moreparaminurl.
'" title="'.
dol_escape_htmltag($langs->trans(
"GenerateChosenImgWebp")).
'">'.
img_picto(
'',
'images',
'class="flip marginrightonly"').
'</a>';
1471 if ($permtoeditline) {
1473 $moreparaminurl =
'';
1474 if (!empty($object->id) && $object->id > 0) {
1475 $moreparaminurl .=
'&id='.$object->id;
1476 } elseif (
GETPOST(
'website',
'alpha')) {
1477 $moreparaminurl .=
'&website='.GETPOST(
'website',
'alpha');
1480 if ($modulepart ==
'medias' && !
GETPOST(
'website')) {
1481 $moreparaminurl .=
'&backtourl='.urlencode(DOL_URL_ROOT.
'/ecm/index_medias.php?file_manager=1&modulepart='.$modulepart.
'§ion_dir='.$relativepath);
1484 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>';
1488 if ($permtoeditline) {
1489 $paramsectiondir = (in_array($modulepart, array(
'medias',
'ecm')) ?
'§ion_dir='.urlencode($relativepath) :
'');
1490 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>';
1494 if ($permonobject) {
1496 if (!empty($conf->dol_use_jmobile)) {
1499 if (empty($conf->use_javascript_ajax)) {
1502 if (!empty($conf->global->MAIN_ECM_DISABLE_JS)) {
1505 print
'<a href="'.((($useinecm && $useinecm != 6) && $useajax) ?
'#' : ($url.
'?action=deletefile&token='.newToken().
'&urlfile='.urlencode($filepath).$param)).
'" class="reposition deletefilelink" rel="'.$filepath.
'">'.
img_delete().
'</a>';
1509 if (empty($disablemove) && count($filearray) > 1) {
1510 if ($nboffiles > 1 && $conf->browser->layout !=
'phone') {
1511 print
'<td class="linecolmove tdlineupdown center">';
1513 print
'<a class="lineupdown" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=up&rowid='.$object->id.
'">'.
img_up(
'default', 0,
'imgupforline').
'</a>';
1515 if ($i < ($nboffiles - 1)) {
1516 print
'<a class="lineupdown" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=down&rowid='.$object->id.
'">'.
img_down(
'default', 0,
'imgdownforline').
'</a>';
1520 print
'<td'.(($conf->browser->layout !=
'phone') ?
' class="linecolmove tdlineupdown center"' :
' class="linecolmove center"').
'>';
1525 print
'<td class="right">';
1526 print
'<input type="hidden" name="ecmfileid" value="'.$filearray[$key][
'rowid'].
'">';
1527 print
'<input type="submit" class="button button-save smallpaddingimp" name="renamefilesave" value="'.dol_escape_htmltag($langs->trans(
"Save")).
'">';
1528 print
'<input type="submit" class="button button-cancel smallpaddingimp" name="cancel" value="'.dol_escape_htmltag($langs->trans(
"Cancel")).
'">';
1530 if (empty($disablemove) && count($filearray) > 1) {
1531 print
'<td class="right"></td>';
1539 if ($nboffiles == 0) {
1541 if (empty($disablemove) && count($filearray) > 1) {
1544 print
'<tr class="oddeven"><td colspan="'.$colspan.
'">';
1545 if (empty($textifempty)) {
1546 print
'<span class="opacitymedium">'.$langs->trans(
"NoFileFound").
'</span>';
1548 print
'<span class="opacitymedium">'.$textifempty.
'</span>';
1556 if ($nboflines > 1 && is_object($object)) {
1557 if (!empty($conf->use_javascript_ajax) && $permtoeditline) {
1558 $table_element_line =
'ecm_files';
1559 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
1565 if (
GETPOST(
'action',
'aZ09') ==
'editfile' && $permtoeditline) {
1593 public function list_of_autoecmfiles($upload_dir, $filearray, $modulepart, $param, $forcedownload = 0, $relativepath =
'', $permissiontodelete = 1, $useinecm = 0, $textifempty =
'', $maxlength = 0, $url =
'', $addfilterfields = 0)
1596 global $user, $conf, $langs, $hookmanager, $form;
1597 global $sortfield, $sortorder;
1598 global $search_doc_ref;
1599 global $dolibarr_main_url_root;
1601 dol_syslog(get_class($this).
'::list_of_autoecmfiles upload_dir='.$upload_dir.
' modulepart='.$modulepart);
1604 if (empty($useinecm) || $useinecm == 6) {
1608 $url = $_SERVER[
"PHP_SELF"];
1611 if (!empty($addfilterfields)) {
1612 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'">';
1613 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1614 print
'<input type="hidden" name="module" value="'.$modulepart.
'">';
1617 print
'<div class="div-table-responsive-no-min">';
1618 print
'<table width="100%" class="noborder">'.
"\n";
1620 if (!empty($addfilterfields)) {
1621 print
'<tr class="liste_titre nodrag nodrop">';
1622 print
'<td class="liste_titre"></td>';
1623 print
'<td class="liste_titre"><input type="text" class="maxwidth100onsmartphone" name="search_doc_ref" value="'.dol_escape_htmltag($search_doc_ref).
'"></td>';
1624 print
'<td class="liste_titre"></td>';
1625 print
'<td class="liste_titre"></td>';
1627 print
'<td class="liste_titre right">';
1628 $searchpicto = $form->showFilterButtons();
1634 print
'<tr class="liste_titre">';
1635 $sortref =
"fullname";
1636 if ($modulepart ==
'invoice_supplier') {
1637 $sortref =
'level1name';
1647 $object_instance =
null;
1648 if ($modulepart ==
'company') {
1649 include_once DOL_DOCUMENT_ROOT.
'/societe/class/societe.class.php';
1650 $object_instance =
new Societe($this->db);
1651 } elseif ($modulepart ==
'invoice') {
1652 include_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
1653 $object_instance =
new Facture($this->db);
1654 } elseif ($modulepart ==
'invoice_supplier') {
1655 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
1657 } elseif ($modulepart ==
'propal') {
1658 include_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
1659 $object_instance =
new Propal($this->db);
1660 } elseif ($modulepart ==
'supplier_proposal') {
1661 include_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
1663 } elseif ($modulepart ==
'order') {
1664 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
1665 $object_instance =
new Commande($this->db);
1666 } elseif ($modulepart ==
'order_supplier') {
1667 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
1669 } elseif ($modulepart ==
'contract') {
1670 include_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
1671 $object_instance =
new Contrat($this->db);
1672 } elseif ($modulepart ==
'product') {
1673 include_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
1674 $object_instance =
new Product($this->db);
1675 } elseif ($modulepart ==
'tax') {
1676 include_once DOL_DOCUMENT_ROOT.
'/compta/sociales/class/chargesociales.class.php';
1678 } elseif ($modulepart ==
'tax-vat') {
1679 include_once DOL_DOCUMENT_ROOT.
'/compta/tva/class/tva.class.php';
1680 $object_instance =
new Tva($this->db);
1681 } elseif ($modulepart ==
'salaries') {
1682 include_once DOL_DOCUMENT_ROOT.
'/salaries/class/salary.class.php';
1683 $object_instance =
new Salary($this->db);
1684 } elseif ($modulepart ==
'project') {
1685 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
1686 $object_instance =
new Project($this->db);
1687 } elseif ($modulepart ==
'project_task') {
1688 include_once DOL_DOCUMENT_ROOT.
'/projet/class/task.class.php';
1689 $object_instance =
new Task($this->db);
1690 } elseif ($modulepart ==
'fichinter') {
1691 include_once DOL_DOCUMENT_ROOT.
'/fichinter/class/fichinter.class.php';
1692 $object_instance =
new Fichinter($this->db);
1693 } elseif ($modulepart ==
'user') {
1694 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
1695 $object_instance =
new User($this->db);
1696 } elseif ($modulepart ==
'expensereport') {
1697 include_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
1699 } elseif ($modulepart ==
'holiday') {
1700 include_once DOL_DOCUMENT_ROOT.
'/holiday/class/holiday.class.php';
1701 $object_instance =
new Holiday($this->db);
1702 } elseif ($modulepart ==
'recruitment-recruitmentcandidature') {
1703 include_once DOL_DOCUMENT_ROOT.
'/recruitment/class/recruitmentcandidature.class.php';
1705 } elseif ($modulepart ==
'banque') {
1706 include_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
1707 $object_instance =
new Account($this->db);
1708 } elseif ($modulepart ==
'chequereceipt') {
1709 include_once DOL_DOCUMENT_ROOT.
'/compta/paiement/cheque/class/remisecheque.class.php';
1711 } elseif ($modulepart ==
'mrp-mo') {
1712 include_once DOL_DOCUMENT_ROOT.
'/mrp/class/mo.class.php';
1713 $object_instance =
new Mo($this->db);
1715 $parameters = array(
'modulepart'=>$modulepart);
1716 $reshook = $hookmanager->executeHooks(
'addSectionECMAuto', $parameters);
1717 if ($reshook > 0 && is_array($hookmanager->resArray) && count($hookmanager->resArray) > 0) {
1718 if (array_key_exists(
'classpath', $hookmanager->resArray) && !empty($hookmanager->resArray[
'classpath'])) {
1720 if (array_key_exists(
'classname', $hookmanager->resArray) && !empty($hookmanager->resArray[
'classname'])) {
1721 if (class_exists($hookmanager->resArray[
'classname'])) {
1722 $tmpclassname = $hookmanager->resArray[
'classname'];
1723 $object_instance =
new $tmpclassname($this->db);
1734 $relativepathfromroot = preg_replace(
'/'.preg_quote(DOL_DATA_ROOT.
'/',
'/').
'/',
'', $upload_dir);
1735 if ($relativepathfromroot) {
1739 if ($sortfield && $sortorder) {
1740 $filearray =
dol_sort_array($filearray, $sortfield, $sortorder, 1);
1746 foreach ($filearray as $key => $file) {
1747 if (!is_dir($file[
'name'])
1748 && $file[
'name'] !=
'.'
1749 && $file[
'name'] !=
'..'
1750 && $file[
'name'] !=
'CVS'
1751 && !preg_match(
'/\.meta$/i', $file[
'name'])) {
1753 $relativefile = preg_replace(
'/'.preg_quote($upload_dir.
'/',
'/').
'/',
'', $file[
'fullname']);
1761 if ($modulepart ==
'company' || $modulepart ==
'tax' || $modulepart ==
'tax-vat' || $modulepart ==
'salaries') {
1762 preg_match(
'/(\d+)\/[^\/]+$/', $relativefile, $reg);
1763 $id = (isset($reg[1]) ? $reg[1] :
'');
1764 } elseif ($modulepart ==
'invoice_supplier') {
1765 preg_match(
'/([^\/]+)\/[^\/]+$/', $relativefile, $reg);
1766 $ref = (isset($reg[1]) ? $reg[1] :
'');
1767 if (is_numeric($ref)) {
1771 } elseif ($modulepart ==
'user') {
1773 preg_match(
'/(.*)\/[^\/]+$/', $relativefile, $reg);
1774 $id = (isset($reg[1]) ? $reg[1] :
'');
1775 } elseif ($modulepart ==
'project_task') {
1777 $reg = explode(
"/", $relativefile);
1778 $ref = (isset($reg[1]) ? $reg[1] :
'');
1779 } elseif (in_array($modulepart, array(
1782 'supplier_proposal',
1791 'recruitment-recruitmentcandidature',
1796 preg_match(
'/(.*)\/[^\/]+$/', $relativefile, $reg);
1797 $ref = (isset($reg[1]) ? $reg[1] :
'');
1799 $parameters = array(
'modulepart'=>$modulepart,
'fileinfo'=>$file);
1800 $reshook = $hookmanager->executeHooks(
'addSectionECMAuto', $parameters);
1801 if ($reshook > 0 && is_array($hookmanager->resArray) && count($hookmanager->resArray) > 0) {
1802 if (array_key_exists(
'ref', $hookmanager->resArray) && !empty($hookmanager->resArray[
'ref'])) {
1803 $ref = $hookmanager->resArray[
'ref'];
1805 if (array_key_exists(
'id', $hookmanager->resArray) && !empty($hookmanager->resArray[
'id'])) {
1806 $id = $hookmanager->resArray[
'id'];
1812 if (!$id && !$ref) {
1817 if (!empty($this->cache_objects[$modulepart.
'_'.$id.
'_'.$ref])) {
1823 if (is_object($object_instance)) {
1824 $object_instance->id = 0;
1825 $object_instance->ref =
'';
1827 $result = $object_instance->fetch($id);
1829 if (!($result = $object_instance->fetch(
'', $ref))) {
1835 $result = $object_instance->fetchOneLike($ref);
1842 $this->cache_objects[$modulepart.
'_'.$id.
'_'.$ref] = clone $object_instance;
1846 $this->cache_objects[$modulepart.
'_'.$id.
'_'.$ref] =
'notfound';
1847 unset($filearray[$key]);
1851 if ($found <= 0 || !is_object($this->cache_objects[$modulepart.
'_'.$id.
'_'.$ref])) {
1855 print
'<!-- Line list_of_autoecmfiles key='.$key.
' -->'.
"\n";
1856 print
'<tr class="oddeven">';
1858 if ($found > 0 && is_object($this->cache_objects[$modulepart.
'_'.$id.
'_'.$ref])) {
1859 $tmpobject = $this->cache_objects[$modulepart.
'_'.$id.
'_'.$ref];
1861 print $tmpobject->getNomUrl(1,
'document');
1866 print $langs->trans(
"ObjectDeleted", ($id ? $id : $ref));
1882 print
'<a href="'.DOL_URL_ROOT.
'/document.php?modulepart='.urlencode($modulepart);
1883 if ($forcedownload) {
1884 print
'&attachment=1';
1886 print
'&file='.urlencode($relativefile).
'">';
1888 print
dol_trunc($file[
'name'], $maxlength,
'middle');
1893 print $this->
showPreview($file, $modulepart, $file[
'relativename']);
1900 print
'<td class="right nowraponall">';
1901 if ($sizetoshow == $sizetoshowbytes) {
1904 print $form->textwithpicto($sizetoshow, $sizetoshowbytes, -1);
1909 print
'<td class="center">'.dol_print_date($file[
'date'],
"dayhour").
'</td>';
1912 print
'<td class="right">';
1913 if (!empty($file[
'share'])) {
1915 $urlwithouturlroot = preg_replace(
'/'.preg_quote(DOL_URL_ROOT,
'/').
'$/i',
'', trim($dolibarr_main_url_root));
1916 $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT;
1922 if (!empty($file[
'share'])) {
1923 $paramlink .= ($paramlink ?
'&' :
'').
'hashp='.$file[
'share'];
1925 if ($forcedownload) {
1926 $paramlink .= ($paramlink ?
'&' :
'').
'attachment=1';
1929 $fulllink = $urlwithroot.
'/document.php'.($paramlink ?
'?'.$paramlink :
'');
1931 print
img_picto($langs->trans(
"FileSharedViaALink"),
'globe').
' ';
1932 print
'<input type="text" class="quatrevingtpercent width100 nopadding nopadding small" id="downloadlink" name="downloadexternallink" value="'.dol_escape_htmltag($fulllink).
'">';
1946 if (count($filearray) == 0) {
1947 print
'<tr class="oddeven"><td colspan="5">';
1948 if (empty($textifempty)) {
1949 print
'<span class="opacitymedium">'.$langs->trans(
"NoFileFound").
'</span>';
1951 print
'<span class="opacitymedium">'.$textifempty.
'</span>';
1958 if (!empty($addfilterfields)) {
1961 return count($filearray);
1975 public function listOfLinks($object, $permissiontodelete = 1, $action =
null, $selected =
null, $param =
'')
1977 global $user, $conf, $langs, $user;
1978 global $sortfield, $sortorder;
1980 $langs->load(
"link");
1982 require_once DOL_DOCUMENT_ROOT.
'/core/class/link.class.php';
1983 $link =
new Link($this->db);
1985 if ($sortfield ==
"name") {
1986 $sortfield =
"label";
1987 } elseif ($sortfield ==
"date") {
1988 $sortfield =
"datea";
1992 $res = $link->fetchAll($links, $object->element, $object->id, $sortfield, $sortorder);
1993 $param .= (isset($object->id) ?
'&id='.$object->id :
'');
1995 print
'<!-- listOfLinks -->'.
"\n";
1998 print
load_fiche_titre($langs->trans(
"LinkedFiles"),
'',
'link', 0,
'',
'table-list-of-links');
2000 print
'<form action="'.$_SERVER[
'PHP_SELF'].($param ?
'?'.$param :
'').
'" method="POST">';
2001 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2003 print
'<table class="liste noborder nobottom centpercent">';
2004 print
'<tr class="liste_titre">';
2006 $langs->trans(
"Links"),
2007 $_SERVER[
'PHP_SELF'],
2028 $langs->trans(
"Date"),
2029 $_SERVER[
'PHP_SELF'],
2040 $_SERVER[
'PHP_SELF'],
2051 $nboflinks = count($links);
2052 if ($nboflinks > 0) {
2053 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
2056 foreach ($links as $link) {
2057 print
'<tr class="oddeven">';
2059 if ($action ==
'update' && $selected === $link->id) {
2061 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
2062 print
'<input type="hidden" name="linkid" value="'.$link->id.
'">';
2063 print
'<input type="hidden" name="action" value="confirm_updateline">';
2064 print $langs->trans(
'Link').
': <input type="text" name="link" value="'.$link->url.
'">';
2067 print $langs->trans(
'Label').
': <input type="text" name="label" value="'.
dol_escape_htmltag($link->label).
'">';
2069 print
'<td class="center">'.dol_print_date(
dol_now(),
"dayhour",
"tzuser").
'</td>';
2070 print
'<td class="right"></td>';
2071 print
'<td class="right">';
2072 print
'<input type="submit" class="button button-save" name="save" value="'.dol_escape_htmltag($langs->trans(
"Save")).
'">';
2073 print
'<input type="submit" class="button button-cancel" name="cancel" value="'.dol_escape_htmltag($langs->trans(
"Cancel")).
'">';
2078 print
'<a data-ajax="false" href="'.$link->url.
'" target="_blank" rel="noopener noreferrer">';
2082 print
'<td class="right"></td>';
2083 print
'<td class="center">'.dol_print_date($link->datea,
"dayhour",
"tzuser").
'</td>';
2084 print
'<td class="center"></td>';
2085 print
'<td class="right">';
2086 print
'<a href="'.$_SERVER[
'PHP_SELF'].
'?action=update&linkid='.$link->id.$param.
'&token='.newToken().
'" class="editfilelink editfielda reposition" >'.
img_edit().
'</a>';
2087 if ($permissiontodelete) {
2088 print
' <a class="deletefilelink reposition" href="'.$_SERVER[
'PHP_SELF'].
'?action=deletelink&token='.newToken().
'&linkid='.((int) $link->id).$param.
'">'.
img_delete().
'</a>';
2096 if ($nboflinks == 0) {
2097 print
'<tr class="oddeven"><td colspan="5">';
2098 print
'<span class="opacitymedium">'.$langs->trans(
"NoLinkFound").
'</span>';
2119 public function showPreview($file, $modulepart, $relativepath, $ruleforpicto = 0, $param =
'')
2121 global $langs, $conf;
2124 if ($conf->browser->layout !=
'phone' && !empty($conf->use_javascript_ajax)) {
2126 if (count($urladvancedpreview)) {
2127 $out .=
'<a class="pictopreview '.$urladvancedpreview[
'css'].
'" href="'.$urladvancedpreview[
'url'].
'"'.(empty($urladvancedpreview[
'mime']) ?
'' :
' mime="'.$urladvancedpreview[
'mime'].
'"').
' '.(empty($urladvancedpreview[
'target']) ?
'' :
' target="'.$urladvancedpreview[
'target'].
'"').
'>';
2129 if (empty($ruleforpicto)) {
2131 $out .=
'<span class="fa fa-search-plus pictofixedwidth" style="color: gray"></span>';
2133 $out .=
img_mime($relativepath, $langs->trans(
'Preview').
' '.$file[
'name'],
'pictofixedwidth');
2137 if ($ruleforpicto < 0) {
2138 $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 models.
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.
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_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
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).
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...
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
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.
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.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
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.