67 $this->numoffiles = 0;
80 public function showImageToEdit(
string $htmlname,
string $modulepart,
string $dirformainimage,
string $subdirformainimage,
string $fileformainimage)
84 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions.lib.php';
85 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
86 include_once DOL_DOCUMENT_ROOT.
'/core/lib/security.lib.php';
89 $maxwidthsmall = $tmparraysize[
'maxwidthsmall'];
90 $maxheightsmall = $tmparraysize[
'maxheightsmall'];
91 $maxwidthmini = $tmparraysize[
'maxwidthmini'];
92 $maxheightmini = $tmparraysize[
'maxheightmini'];
93 $quality = $tmparraysize[
'quality'];
98 if ($htmlname ==
'logo_squarred') {
105 $maxmin = $maxfilesizearray[
'maxmin'];
111 $out .=
'<div class="centpercent nobordernopadding valignmiddle"><div class="inline-block marginrightonly">';
113 $out .=
'<input type="hidden" name="MAX_FILE_SIZE" value="'.($maxmin * 1024).
'">';
115 $out .=
'<input type="file" class="flat minwidth100 maxwidthinputfileonsmartphone" name="'.$htmlname.
'" id="'.$htmlname.
'" accept="image/*">';
117 if (!empty($fileformainimagesmall)) {
118 $out .=
'<div class="inline-block valignmiddle marginrightonly">';
119 $out .=
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?action=remove'.$htmlname.
'&token='.
newToken().
'">'.
img_delete($langs->trans(
"Delete"),
'',
'marginleftonly').
'</a>';
121 if (file_exists($dirformainimage.
'/'.$subdirformainimage.
'thumbs/'.$fileformainimagesmall)) {
122 $out .=
'<div class="inline-block valignmiddle marginrightonly">';
123 $out .=
'<img id="'.$htmlname.
'" style="'.$max.
'height: '.$imgheight.
'px; '.$max.
'width: '.$imgwidth.
'px;" src="'.DOL_URL_ROOT.
'/viewimage.php?modulepart='.$modulepart.
'&file='.urlencode($subdirformainimage.
'thumbs/'.$fileformainimagesmall).
'">';
125 } elseif (!empty($fileformainimage)) {
127 if (!file_exists($dirformainimage.
'/'.$subdirformainimage.
'thumbs/'.$fileformainimagemini)) {
128 $imgThumbMini =
vignette($dirformainimage.
'/'.$subdirformainimage.$fileformainimage, $maxwidthmini, $maxheightmini,
'_mini', $quality);
130 $imgThumbSmall =
vignette($dirformainimage.
'/'.$subdirformainimage.$fileformainimage, $maxwidthmini, $maxheightmini,
'_small', $quality);
131 $out .=
'<div class="inline-block valignmiddle">';
132 $out .=
'<img id="'.$htmlname.
'" style="'.$max.
'height: '.$imgheight.
'px; '.$max.
'width: '.$imgwidth.
'px;" src="'.DOL_URL_ROOT.
'/viewimage.php?modulepart='.$modulepart.
'&file='.urlencode($subdirformainimage.
'thumbs/'.basename($imgThumbSmall)).
'">';
135 } elseif (!empty($fileformainimage)) {
136 if (file_exists($dirformainimage.
'/'.$subdirformainimage.$fileformainimage)) {
137 $out .=
'<div class="inline-block valignmiddle">';
138 $out .=
'<img id="'.$htmlname.
'" style="'.$max.
'height: '.$imgheight.
'px; '.$max.
'width: '.$imgwidth.
'px;" src="'.DOL_URL_ROOT.
'/viewimage.php?modulepart='.$modulepart.
'&file='.urlencode($subdirformainimage.$fileformainimage).
'">';
140 $out .=
'<div class="inline-block valignmiddle marginrightonly"><a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?action=remove'.$htmlname.
'&token='.
newToken().
'">'.
img_delete($langs->trans(
"Delete"),
'',
'marginleftonly').
'</a></div>';
142 $out .=
'<div class="inline-block valignmiddle">';
143 $out .=
'<img id="'.$htmlname.
'" height="'.$imgheight.
'" src="'.DOL_URL_ROOT.
'/public/theme/common/nophoto.png" title="File has been removed from disk">';
177 public function form_attach_new_file($url, $title =
'', $addcancel = 0, $sectionid = 0, $perm = 1, $size = 50,
$object =
null, $options =
'', $useajax = 1, $savingdocmask =
'', $linkfiles = 1, $htmlname =
'formuserfile', $accept =
'', $sectiondir =
'', $usewithoutform = 0, $capture = 0, $disablemulti = 0, $nooutput = 0)
180 global
$conf, $langs, $hookmanager;
181 $hookmanager->initHooks(array(
'formfile'));
185 dol_syslog(__METHOD__.
": using 2 for useajax is deprecated and should be not used", LOG_WARNING);
188 if (!empty(
$conf->browser->layout) &&
$conf->browser->layout !=
'classic') {
202 $out =
"\n".
'<!-- Start form attach new file --><div class="formattachnewfile">'.
"\n";
204 if ($nooutput != 2) {
206 $title = $langs->trans(
"AttachANewFile");
208 if ($title !=
'none') {
213 if (empty($usewithoutform)) {
215 $url .= (strpos($url,
'?') ===
false ?
'?' :
'&').
'uploadform=1';
217 $out .=
'<form name="'.$htmlname.
'" id="'.$htmlname.
'" action="'.$url.
'" enctype="multipart/form-data" method="POST">'.
"\n";
219 if (empty($usewithoutform) || $usewithoutform == 2) {
220 $out .=
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
221 $out .=
'<input type="hidden" id="'.$htmlname.
'_section_dir" name="section_dir" value="'.$sectiondir.
'">'.
"\n";
222 $out .=
'<input type="hidden" id="'.$htmlname.
'_section_id" name="section_id" value="'.$sectionid.
'">'.
"\n";
223 $out .=
'<input type="hidden" name="sortfield" value="'.GETPOST(
'sortfield',
'aZ09comma').
'">'.
"\n";
224 $out .=
'<input type="hidden" name="sortorder" value="'.GETPOST(
'sortorder',
'aZ09comma').
'">'.
"\n";
225 $out .=
'<input type="hidden" name="page_y" value="">'.
"\n";
228 $out .=
'<table class="nobordernopadding centpercent">';
231 if (!empty($options)) {
232 $out .=
'<td>'.$options.
'</td>';
235 $out .=
'<td class="valignmiddle nowrap">';
238 $max = $maxfilesizearray[
'max'];
239 $maxmin = $maxfilesizearray[
'maxmin'];
240 $maxphptoshow = $maxfilesizearray[
'maxphptoshow'];
241 $maxphptoshowparam = $maxfilesizearray[
'maxphptoshowparam'];
243 $out .=
'<input type="hidden" name="MAX_FILE_SIZE" value="'.($maxmin * 1024).
'">';
245 $out .=
'<input class="flat minwidth400 maxwidth200onsmartphone" type="file"';
246 $out .= ((
getDolGlobalString(
'MAIN_DISABLE_MULTIPLE_FILEUPLOAD') || $disablemulti) ?
' name="userfile"' :
' name="userfile[]" multiple');
248 $out .= (!empty($accept) ?
' accept="'.$accept.
'"' :
' accept=""');
249 $out .= (!empty($capture) ?
' capture="capture"' :
'');
253 $langs->load(
'link');
254 $out .=
'<span class="nowraponsmartphone"><input style="margin-right: 2px;" type="checkbox" id="overwritefile" name="overwritefile" value="1">';
255 $out .=
'<label for="overwritefile" class="opacitylow paddingright">'.$langs->trans(
"OverwriteIfExists").
'</label>';
258 $out .=
'<input type="submit" class="button small reposition" name="sendit" value="'.$langs->trans(
"Upload").
'"';
264 $out .=
'<input type="submit" class="button small button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
268 if ($perm && empty(
$conf->dol_optimize_smallscreen)) {
269 $langs->load(
'other');
271 $menudolibarrsetupmax = $langs->transnoentitiesnoconv(
"Home").
' - '.$langs->transnoentitiesnoconv(
"Setup").
' - '.$langs->transnoentitiesnoconv(
"Security");
273 $tooltiptext = $langs->trans(
"ThisLimitIsDefinedInSetupAt", $menudolibarrsetupmax, $max, $maxphptoshowparam, $maxphptoshow);
275 $tooltiptext .=
'<br><br>Option to extract the file content in text to save it in database is ON <span class="opacitymedium">('.getDolGlobalString(
'MAIN_SAVE_FILE_CONTENT_AS_TEXT').
')</span>';
279 $out .=
info_admin($tooltiptext, 1, 0,
'1',
'classfortooltip');
282 $out .=
' ('.$langs->trans(
"UploadDisabled").
')';
284 $out .=
"</td></tr>";
286 if ($savingdocmask) {
288 $rename =
getDolGlobalString(
'MAIN_DOC_UPLOAD_NOT_RENAME_BY_DEFAULT') ?
'' :
'checked';
291 if (!empty($options)) {
292 $out .=
'<td>'.$options.
'</td>';
294 $out .=
'<td valign="middle" class="nowrap">';
295 $out .=
'<input type="checkbox" '.$rename.
' class="savingdocmask" name="savingdocmask" id="savingdocmask" value="'.
dol_escape_js($savingdocmask).
'"> ';
296 $out .=
'<label class="opacitymedium small" for="savingdocmask">';
297 $out .= $langs->trans(
"SaveUploadedFileWithMask", preg_replace(
'/__file__/', $langs->transnoentitiesnoconv(
"OriginFileName"), $savingdocmask), $langs->transnoentitiesnoconv(
"OriginFileName"));
305 if (empty($usewithoutform)) {
307 if (empty($sectionid)) {
312 $parameters = array(
'socid' => (isset($GLOBALS[
'socid']) ? $GLOBALS[
'socid'] :
''),
'id' => (isset($GLOBALS[
'id']) ? $GLOBALS[
'id'] :
''),
'url' => $url,
'perm' => $perm,
'options' => $options);
313 $res = $hookmanager->executeHooks(
'formattachOptionsUpload', $parameters,
$object);
315 $out =
'<div class="'.($usewithoutform ?
'inline-block valignmiddle' : (($nooutput == 2 ?
'' :
'attacharea ').
'attacharea'.$htmlname)).
'">'.$out.
'</div>';
317 $out .= $hookmanager->resPrint;
319 $out .=
"\n</div><!-- End form class=formattachnewfile -->\n";
326 $out2 .=
"\n".
'<!-- Start form link new url --><div class="formlinknewurl">'.
"\n";
327 $langs->load(
'link');
329 if ($nooutput != 2) {
330 $title = $langs->trans(
"LinkANewFile");
334 if (empty($usewithoutform)) {
335 $out2 .=
'<form name="'.$htmlname.
'_link" id="'.$htmlname.
'_link" action="'.$url.
'" method="POST">'.
"\n";
336 $out2 .=
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
337 $out2 .=
'<input type="hidden" id="'.$htmlname.
'_link_section_dir" name="link_section_dir" value="">'.
"\n";
338 $out2 .=
'<input type="hidden" id="'.$htmlname.
'_link_section_id" name="link_section_id" value="'.$sectionid.
'">'.
"\n";
339 $out2 .=
'<input type="hidden" name="page_y" value="">'.
"\n";
342 $out2 .=
'<div class="valignmiddle">';
343 $out2 .=
'<div class="inline-block" style="padding-right: 10px;">';
345 $out2 .=
'<label for="link">'.$langs->trans(
"URLToLink").
':</label> ';
347 $out2 .=
'<input type="text" name="link" class="flat minwidth400imp" id="link" placeholder="'.dol_escape_htmltag($langs->trans(
"URLToLink")).
'">';
349 $out2 .=
'<div class="inline-block" style="padding-right: 10px;">';
351 $out2 .=
'<label for="label">'.$langs->trans(
"Label").
':</label> ';
353 $out2 .=
'<input type="text" class="flat" name="label" id="label" placeholder="'.dol_escape_htmltag($langs->trans(
"Label")).
'">';
354 $out2 .=
'<input type="hidden" name="objecttype" value="'.$object->element.
'">';
355 $out2 .=
'<input type="hidden" name="objectid" value="'.$object->id.
'">';
357 $out2 .=
'<div class="inline-block" style="padding-right: 10px;">';
358 $out2 .=
'<input type="submit" class="button small reposition" name="linkit" value="'.$langs->trans(
"ToLink").
'"';
363 if (empty($usewithoutform)) {
364 $out2 .=
'<div class="clearboth"></div>';
365 $out2 .=
'</form><br>';
368 $parameters = array(
'socid' => (isset($GLOBALS[
'socid']) ? $GLOBALS[
'socid'] :
''),
'id' => (isset($GLOBALS[
'id']) ? $GLOBALS[
'id'] :
''),
'url' => $url,
'perm' => $perm,
'options' => $options);
369 $res = $hookmanager->executeHooks(
'formattachOptions', $parameters,
$object);
371 $out2 =
'<div class="'.($usewithoutform ?
'inline-block valignmiddle' : (($nooutput == 2 ?
'' :
'attacharea ').$htmlname)).
'">'.$out2.
'</div>';
373 $out2 .= $hookmanager->resPrint;
375 $out2 .=
"\n</div><!-- End form class=formlinknewurl -->\n";
379 if ($nooutput == 2) {
380 return array(
'formToUploadAFile' => $out,
'formToAddALink' => $out2);
381 } elseif ($nooutput) {
412 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 =
'')
415 $this->numoffiles = 0;
416 print $this->
showdocuments($modulepart, $modulesubdir, $filedir, $urlsource, $genallowed, $delallowed, $modelselected, $allowgenifempty, $forcenomultilang, $iconPDF, $notused, $noform, $param, $title, $buttonlabel, $codelang);
417 return $this->numoffiles;
447 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 =
'')
449 global $dolibarr_main_url_root;
452 if (!empty($iconPDF)) {
453 dol_syslog(__METHOD__.
": passing iconPDF parameter is deprecated", LOG_WARNING);
456 global $langs,
$conf, $user, $hookmanager;
460 if (is_object($hookmanager)) {
462 'modulepart' => &$modulepart,
463 'modulesubdir' => &$modulesubdir,
464 'filedir' => &$filedir,
465 'urlsource' => &$urlsource,
466 'genallowed' => &$genallowed,
467 'delallowed' => &$delallowed,
468 'modelselected' => &$modelselected,
469 'allowgenifempty' => &$allowgenifempty,
470 'forcenomultilang' => &$forcenomultilang,
471 'noform' => &$noform,
474 'buttonlabel' => &$buttonlabel,
475 'codelang' => &$codelang,
476 'morepicto' => &$morepicto,
477 'hideifempty' => &$hideifempty,
478 'removeaction' => &$removeaction
480 $reshook = $hookmanager->executeHooks(
'showDocuments', $parameters,
$object);
488 return $hookmanager->resPrint;
491 if (!is_object($form)) {
492 $form =
new Form($this->db);
495 include_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
498 if (!empty($iconPDF)) {
503 if (!preg_match(
'/entity\=[0-9]+/', $param)) {
504 $param .= ($param ?
'&' :
'').
'entity='.(empty(
$object->entity) ?
$conf->entity :
$object->entity);
509 if (in_array($modulepart, array(
'contract',
'facture',
'supplier_proposal',
'propal',
'proposal',
'order',
'commande',
'expedition',
'commande_fournisseur',
'expensereport',
'delivery',
'ticket'))) {
510 $printer = ($user->hasRight(
'printing',
'read') && isModEnabled(
'printing'));
513 $hookmanager->initHooks(array(
'formfile'));
516 $file_list = array();
517 if (!empty($filedir)) {
518 $file_list =
dol_dir_list($filedir,
'files', 0,
'',
'(\.meta|_preview.*.*\.png)$',
'date', SORT_DESC);
520 if ($hideifempty && empty($file_list)) {
525 $forname =
'builddoc';
530 $out .=
"\n".
'<!-- Start show_document -->'.
"\n";
533 if (preg_match(
'/massfilesarea_/', $modulepart)) {
534 $out .=
'<div id="show_files"><br></div>'.
"\n";
535 $title = $langs->trans(
"MassFilesArea").
' <a href="" id="togglemassfilesarea" ref="shown">('.$langs->trans(
"Hide").
')</a>';
536 $title .=
'<script nonce="'.getNonce().
'">
537 jQuery(document).ready(function() {
538 jQuery(\'#togglemassfilesarea\').click(function() {
539 if (jQuery(\'#togglemassfilesarea\').attr(\'ref\') == "shown")
541 jQuery(\'#'.$modulepart.
'_table\').hide();
542 jQuery(\'#togglemassfilesarea\').attr("ref", "hidden");
543 jQuery(\'#togglemassfilesarea\').text("('.
dol_escape_js($langs->trans(
"Show")).
')");
547 jQuery(\'#'.$modulepart.
'_table\').show();
548 jQuery(\'#togglemassfilesarea\').attr("ref","shown");
549 jQuery(\'#togglemassfilesarea\').text("('.
dol_escape_js($langs->trans(
"Hide")).
')");
557 $titletoshow = $langs->trans(
"Documents");
558 if (!empty($title)) {
559 $titletoshow = ($title ==
'none' ?
'' : $title);
562 $submodulepart = $modulepart;
565 $tmp = explode(
':', $modulepart);
566 if (!empty($tmp[1])) {
567 $modulepart = $tmp[0];
568 $submodulepart = $tmp[1];
571 $addcolumforpicto = ($delallowed || $printer || $morepicto);
572 $colspan = (4 + ($addcolumforpicto ? 1 : 0));
577 $modellist = array();
579 if ($modulepart ==
'company') {
581 if (is_array($genallowed)) {
582 $modellist = $genallowed;
584 include_once DOL_DOCUMENT_ROOT.
'/core/modules/societe/modules_societe.class.php';
587 } elseif ($modulepart ==
'propal') {
588 if (is_array($genallowed)) {
589 $modellist = $genallowed;
591 include_once DOL_DOCUMENT_ROOT.
'/core/modules/propale/modules_propale.php';
594 } elseif ($modulepart ==
'supplier_proposal') {
595 if (is_array($genallowed)) {
596 $modellist = $genallowed;
598 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_proposal/modules_supplier_proposal.php';
601 } elseif ($modulepart ==
'commande') {
602 if (is_array($genallowed)) {
603 $modellist = $genallowed;
605 include_once DOL_DOCUMENT_ROOT.
'/core/modules/commande/modules_commande.php';
608 } elseif ($modulepart ==
'expedition') {
609 if (is_array($genallowed)) {
610 $modellist = $genallowed;
612 include_once DOL_DOCUMENT_ROOT.
'/core/modules/expedition/modules_expedition.php';
615 } elseif ($modulepart ==
'reception') {
616 if (is_array($genallowed)) {
617 $modellist = $genallowed;
619 include_once DOL_DOCUMENT_ROOT.
'/core/modules/reception/modules_reception.php';
622 } elseif ($modulepart ==
'delivery') {
623 if (is_array($genallowed)) {
624 $modellist = $genallowed;
626 include_once DOL_DOCUMENT_ROOT.
'/core/modules/delivery/modules_delivery.php';
629 } elseif ($modulepart ==
'ficheinter') {
630 if (is_array($genallowed)) {
631 $modellist = $genallowed;
633 include_once DOL_DOCUMENT_ROOT.
'/core/modules/fichinter/modules_fichinter.php';
636 } elseif ($modulepart ==
'facture') {
637 if (is_array($genallowed)) {
638 $modellist = $genallowed;
640 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
643 } elseif ($modulepart ==
'contract') {
645 if (is_array($genallowed)) {
646 $modellist = $genallowed;
648 include_once DOL_DOCUMENT_ROOT.
'/core/modules/contract/modules_contract.php';
651 } elseif ($modulepart ==
'project') {
652 if (is_array($genallowed)) {
653 $modellist = $genallowed;
655 include_once DOL_DOCUMENT_ROOT.
'/core/modules/project/modules_project.php';
658 } elseif ($modulepart ==
'project_task') {
659 if (is_array($genallowed)) {
660 $modellist = $genallowed;
662 include_once DOL_DOCUMENT_ROOT.
'/core/modules/project/task/modules_task.php';
665 } elseif ($modulepart ==
'product') {
666 if (is_array($genallowed)) {
667 $modellist = $genallowed;
669 include_once DOL_DOCUMENT_ROOT.
'/core/modules/product/modules_product.class.php';
672 } elseif ($modulepart ==
'product_batch') {
673 if (is_array($genallowed)) {
674 $modellist = $genallowed;
676 include_once DOL_DOCUMENT_ROOT.
'/core/modules/product_batch/modules_product_batch.class.php';
679 } elseif ($modulepart ==
'stock') {
680 if (is_array($genallowed)) {
681 $modellist = $genallowed;
683 include_once DOL_DOCUMENT_ROOT.
'/core/modules/stock/modules_stock.php';
686 } elseif ($modulepart ==
'hrm') {
687 if (is_array($genallowed)) {
688 $modellist = $genallowed;
690 include_once DOL_DOCUMENT_ROOT.
'/core/modules/hrm/modules_evaluation.php';
693 } elseif ($modulepart ==
'movement') {
694 if (is_array($genallowed)) {
695 $modellist = $genallowed;
697 include_once DOL_DOCUMENT_ROOT.
'/core/modules/movement/modules_movement.php';
700 } elseif ($modulepart ==
'export') {
701 if (is_array($genallowed)) {
702 $modellist = $genallowed;
704 include_once DOL_DOCUMENT_ROOT.
'/core/modules/export/modules_export.php';
706 $modellist = array();
708 } elseif ($modulepart ==
'commande_fournisseur' || $modulepart ==
'supplier_order') {
709 if (is_array($genallowed)) {
710 $modellist = $genallowed;
712 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_order/modules_commandefournisseur.php';
715 } elseif ($modulepart ==
'facture_fournisseur' || $modulepart ==
'supplier_invoice') {
717 if (is_array($genallowed)) {
718 $modellist = $genallowed;
720 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_invoice/modules_facturefournisseur.php';
723 } elseif ($modulepart ==
'supplier_payment') {
724 if (is_array($genallowed)) {
725 $modellist = $genallowed;
727 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_payment/modules_supplier_payment.php';
730 } elseif ($modulepart ==
'remisecheque') {
731 if (is_array($genallowed)) {
732 $modellist = $genallowed;
734 include_once DOL_DOCUMENT_ROOT.
'/core/modules/cheque/modules_chequereceipts.php';
737 } elseif ($modulepart ==
'donation') {
738 if (is_array($genallowed)) {
739 $modellist = $genallowed;
741 include_once DOL_DOCUMENT_ROOT.
'/core/modules/dons/modules_don.php';
744 } elseif ($modulepart ==
'member') {
745 if (is_array($genallowed)) {
746 $modellist = $genallowed;
748 include_once DOL_DOCUMENT_ROOT.
'/core/modules/member/modules_cards.php';
751 } elseif ($modulepart ==
'agenda' || $modulepart ==
'actions') {
752 if (is_array($genallowed)) {
753 $modellist = $genallowed;
755 include_once DOL_DOCUMENT_ROOT.
'/core/modules/action/modules_action.php';
758 } elseif ($modulepart ==
'expensereport') {
759 if (is_array($genallowed)) {
760 $modellist = $genallowed;
762 include_once DOL_DOCUMENT_ROOT.
'/core/modules/expensereport/modules_expensereport.php';
765 } elseif ($modulepart ==
'unpaid') {
767 } elseif ($modulepart ==
'user') {
768 if (is_array($genallowed)) {
769 $modellist = $genallowed;
771 include_once DOL_DOCUMENT_ROOT.
'/core/modules/user/modules_user.class.php';
774 } elseif ($modulepart ==
'usergroup') {
775 if (is_array($genallowed)) {
776 $modellist = $genallowed;
778 include_once DOL_DOCUMENT_ROOT.
'/core/modules/usergroup/modules_usergroup.class.php';
783 $file =
dol_buildpath(
'/core/modules/'.$modulepart.
'/modules_'.strtolower($submodulepart).
'.php', 0);
784 if (file_exists($file)) {
785 $res = include_once $file;
788 $file =
dol_buildpath(
'/'.$modulepart.
'/core/modules/'.$modulepart.
'/modules_'.strtolower($submodulepart).
'.php', 0);
789 $res = include_once $file;
792 $class =
'ModelePDF'.ucfirst($submodulepart);
794 if (class_exists($class)) {
795 $modellist = call_user_func($class.
'::liste_modeles', $this->db);
797 dol_print_error($this->db,
"Bad value for modulepart '".$modulepart.
"' in showdocuments (class ".$class.
" for Doc generation not found)");
805 if (empty($buttonlabel)) {
806 $buttonlabel = $langs->trans(
'Generate');
809 if (
$conf->browser->layout ==
'phone') {
810 $urlsource .=
'#'.$forname.
'_form';
812 if (empty($noform)) {
813 $out .=
'<form action="'.$urlsource.
'" id="'.$forname.
'_form" method="post">';
815 $out .=
'<input type="hidden" name="action" value="builddoc">';
816 $out .=
'<input type="hidden" name="page_y" value="">';
817 $out .=
'<input type="hidden" name="token" value="'.newToken().
'">';
820 $out .=
'<div class="div-table-responsive-no-min">';
821 $out .=
'<table class="liste formdoc noborder centpercent">';
823 $out .=
'<tr class="liste_titre">';
824 $addcolumforpicto = ($delallowed || $printer || $morepicto);
825 $colspan = (4 + ($addcolumforpicto ? 1 : 0));
828 $out .=
'<th colspan="'.$colspan.
'" class="formdoc liste_titre maxwidthonsmartphone center">';
831 if (!empty($modellist)) {
833 $out .=
'<span class="hideonsmartphone">'.$langs->trans(
'Model').
' </span>';
834 if (is_array($modellist) && count($modellist) == 1) {
835 $arraykeys = array_keys($modellist);
836 $modelselected = $arraykeys[0];
838 $morecss =
'minwidth75 maxwidth200';
839 if (
$conf->browser->layout ==
'phone') {
840 $morecss =
'maxwidth100';
842 $out .= $form->selectarray(
'model', $modellist, $modelselected, $showempty, 0, 0,
'', 0, 0, 0,
'', $morecss, 1,
'', 0, 0);
843 if (
$conf->use_javascript_ajax) {
846 $out .= $form->textwithpicto(
'', $tooltipontemplatecombo, 1,
'help',
'marginrightonly', 0, 3,
'', 0);
848 $out .=
'<div class="float">'.$langs->trans(
"Files").
'</div>';
852 if (($allowgenifempty || (is_array($modellist) && count($modellist) > 0)) &&
getDolGlobalInt(
'MAIN_MULTILANGS') && !$forcenomultilang && (!empty($modellist) || $showempty)) {
853 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formadmin.class.php';
855 $defaultlang = ($codelang && $codelang !=
'auto') ? $codelang : $langs->getDefaultLang();
856 $morecss =
'maxwidth150';
857 if (
$conf->browser->layout ==
'phone') {
858 $morecss =
'maxwidth100';
860 $out .= $formadmin->select_language($defaultlang,
'lang_id', 0, array(), 0, 0, 0, $morecss);
866 $genbutton =
'<input class="button buttongen reposition nomargintop nomarginbottom" id="'.$forname.
'_generatebutton" name="'.$forname.
'_generatebutton"';
867 $genbutton .=
' type="submit" value="'.$buttonlabel.
'"';
868 if (!$allowgenifempty && !is_array($modellist) && empty($modellist)) {
869 $genbutton .=
' disabled';
872 if ($allowgenifempty && !is_array($modellist) && empty($modellist) && empty(
$conf->dol_no_mouse_hover) && $modulepart !=
'unpaid') {
873 $langs->load(
"errors");
874 $genbutton .=
' '.img_warning($langs->transnoentitiesnoconv(
"WarningNoDocumentModelActivated"));
876 if (!$allowgenifempty && !is_array($modellist) && empty($modellist) && empty(
$conf->dol_no_mouse_hover) && $modulepart !=
'unpaid') {
879 if (empty($modellist) && !$showempty && $modulepart !=
'unpaid') {
885 if (!empty($hookmanager->hooks[
'formfile'])) {
886 foreach ($hookmanager->hooks[
'formfile'] as $module) {
887 if (method_exists($module,
'formBuilddocLineOptions')) {
896 $parameters = array(
'colspan' => ($colspan + $colspanmore),
'socid' => (isset($GLOBALS[
'socid']) ? $GLOBALS[
'socid'] :
''),
'id' => (isset($GLOBALS[
'id']) ? $GLOBALS[
'id'] :
''),
'modulepart' => $modulepart);
897 if (is_object($hookmanager)) {
898 $reshook = $hookmanager->executeHooks(
'formBuilddocOptions', $parameters, $GLOBALS[
'object']);
899 $out .= $hookmanager->resPrint;
904 if (!empty($filedir)) {
905 $link_list = array();
907 require_once DOL_DOCUMENT_ROOT.
'/core/class/link.class.php';
908 $link =
new Link($this->db);
909 $sortfield = $sortorder =
'';
910 $res = $link->fetchAll($link_list,
$object->element,
$object->id, $sortfield, $sortorder);
913 $out .=
'<!-- html.formfile::showdocuments -->'.
"\n";
916 if ((!empty($file_list) || !empty($link_list) || preg_match(
'/^massfilesarea/', $modulepart))
919 $out .=
'<div class="titre">'.$titletoshow.
'</div>'.
"\n";
920 $out .=
'<div class="div-table-responsive-no-min">';
921 $out .=
'<table class="noborder centpercent" id="'.$modulepart.
'_table">'.
"\n";
925 if (is_array($file_list)) {
926 '@phan-var-force array<array{name:string,path:string,level1name:string,relativename:string,fullname:string,date:string,size:int,perm:int,type:string}> $file_list';
930 $relativedir = preg_replace(
'/^'.preg_quote(DOL_DATA_ROOT,
'/').
'/',
'', $filedir);
931 $relativedir = preg_replace(
'/^[\\/]/',
'', $relativedir);
937 '@phan-var-force array<array{name:string,path:string,level1name:string,relativename:string,fullname:string,date:string,size:int,perm:int,type:string,position_name:string,cover:string,keywords:string,acl:string,rowid:int,label:string,share:string}> $file_list';
940 if (!empty($sortfield) && !empty($sortorder)) {
945 require_once DOL_DOCUMENT_ROOT .
'/ecm/class/ecmfiles.class.php';
948 foreach ($file_list as $file) {
951 if (!empty($file[
'rowid'])) {
953 $ecmfile->fetch($file[
'rowid']);
959 $relativepath = (string) $file[
"name"];
961 $relativepath = (string) $modulesubdir.
"/".$file[
"name"];
963 if ($modulepart ==
'export') {
964 $relativepath = (string) $file[
"name"];
967 $out .=
'<tr class="oddeven'.((!$genallowed && $i == 1) ?
' trfirstline' :
'').
'">';
969 $documenturl = DOL_URL_ROOT.
'/document.php';
970 if (isset(
$conf->global->DOL_URL_ROOT_DOCUMENT_PHP)) {
975 $imgpreview = $this->
showPreview($file, $modulepart, $relativepath, 0, $param);
977 $out .=
'<td class="minwidth200 tdoverflowmax300">';
979 $out .=
'<span class="spanoverflow widthcentpercentminusx valignmiddle">';
981 $out .=
'<span class="spanoverflow">';
983 if (is_object($ecmfile)) {
984 $out .= $ecmfile->getNomUrl(1, $modulepart, 0, 0,
' documentdownload');
986 $out .=
'<a class="documentdownload paddingright" ';
988 $out .=
'target="_blank" ';
990 $out .=
'href="'.$documenturl.
'?modulepart='.$modulepart.
'&file='.urlencode($relativepath).($param ?
'&'.$param :
'').
'"';
993 if (preg_match(
'/text/', $mime)) {
994 $out .=
' target="_blank" rel="noopener noreferrer"';
996 $out .=
' title="'.dol_escape_htmltag($file[
"name"]).
'"';
998 $out .=
img_mime($file[
"name"], $langs->trans(
"File").
': '.$file[
"name"]);
1002 $out .=
'</span>'.
"\n";
1003 $out .= $imgpreview;
1007 $size = (!empty($file[
'size']) ? $file[
'size'] :
dol_filesize($filedir.
"/".$file[
"name"]));
1008 $out .=
'<td class="nowraponall right" title="'.dolPrintHTML($size.
' '.$langs->trans(
"Bytes")).
'">'.
dol_print_size($size, 1, 1).
'</td>';
1011 $date = (!empty($file[
'date']) ? $file[
'date'] :
dol_filemtime($filedir.
"/".$file[
"name"]));
1012 $out .=
'<td class="nowrap right">'.dol_print_date($date,
'dayhour',
'tzuser').
'</td>';
1015 $out .=
'<td class="nowraponall">';
1016 if (!empty($file[
'share'])) {
1018 $urlwithouturlroot = preg_replace(
'/'.preg_quote(DOL_URL_ROOT,
'/').
'$/i',
'', trim($dolibarr_main_url_root));
1019 $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT;
1025 if (!empty($file[
'share'])) {
1026 $paramlink .= ($paramlink ?
'&' :
'').
'hashp='.$file[
'share'];
1028 if ($forcedownload) {
1029 $paramlink .= ($paramlink ?
'&' :
'').
'attachment=1';
1032 $fulllink = $urlwithroot.
'/document.php'.($paramlink ?
'?'.$paramlink :
'');
1034 $out .=
'<a href="'.$fulllink.
'" target="_blank" rel="noopener">'.
img_picto($langs->trans(
"FileSharedViaALink"),
'globe').
'</a> ';
1035 $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).
'">';
1043 if ($delallowed || $printer || $morepicto) {
1044 $out .=
'<td class="right nowraponall">';
1046 $tmpurlsource = preg_replace(
'/#[a-zA-Z0-9_]*$/',
'', $urlsource);
1047 $out .=
'<a class="reposition" href="'.$tmpurlsource.((strpos($tmpurlsource,
'?') ===
false) ?
'?' :
'&').
'action='.urlencode($removeaction).
'&token='.
newToken().
'&file='.urlencode($relativepath);
1048 $out .= ($param ?
'&'.$param :
'');
1051 $out .=
'">'.img_picto($langs->trans(
"Delete"),
'delete').
'</a>';
1054 $out .=
'<a class="marginleftonly reposition" href="'.$urlsource.(strpos($urlsource,
'?') ?
'&' :
'?').
'action=print_file&token='.
newToken().
'&printer='.urlencode($modulepart).
'&file='.urlencode($relativepath);
1055 $out .= ($param ?
'&'.$param :
'');
1056 $out .=
'">'.img_picto($langs->trans(
"PrintFile", $relativepath),
'printer.png').
'</a>';
1059 $morepicto = preg_replace(
'/__FILENAMEURLENCODED__/', urlencode($relativepath), $morepicto);
1065 if (is_object($hookmanager)) {
1066 $addcolumforpicto = ($delallowed || $printer || $morepicto);
1067 $colspan = (4 + ($addcolumforpicto ? 1 : 0));
1069 $parameters = array(
'colspan' => ($colspan + $colspanmore),
'socid' => (isset($GLOBALS[
'socid']) ? $GLOBALS[
'socid'] :
''),
'id' => (isset($GLOBALS[
'id']) ? $GLOBALS[
'id'] :
''),
'modulepart' => $modulepart,
'relativepath' => $relativepath);
1070 $res = $hookmanager->executeHooks(
'formBuilddocLineOptions', $parameters, $file);
1072 $out .= $hookmanager->resPrint;
1075 $out = $hookmanager->resPrint;
1080 $this->numoffiles++;
1083 if (is_array($link_list)) {
1086 foreach ($link_list as $file) {
1087 $out .=
'<tr class="oddeven">';
1088 $out .=
'<td colspan="'.$colspan.
'" class="maxwidhtonsmartphone">';
1089 $out .=
'<a data-ajax="false" href="'.$file->url.
'" target="_blank" rel="noopener noreferrer">';
1090 $out .= $file->label;
1093 $out .=
'<td class="right">';
1097 $out .=
'<td></td>';
1098 if ($delallowed || $printer || $morepicto) {
1099 $out .=
'<td></td>';
1101 $out .=
'</tr>'.
"\n";
1103 $this->numoffiles++;
1106 if (count($file_list) == 0 && count($link_list) == 0 && $headershown) {
1107 $out .=
'<tr><td colspan="'.(3 + ($addcolumforpicto ? 1 : 0)).
'"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td></tr>'.
"\n";
1113 $out .=
"</table>\n";
1116 if (empty($noform)) {
1117 $out .=
'</form>'.
"\n";
1121 $out .=
'<!-- End show_document -->'.
"\n";
1124 jQuery(document).ready(function() {
1125 var selectedValue = $(".selectformat").val();
1127 if (selectedValue === "excel2007" || selectedValue === "tsv") {
1128 $(".forhide").prop("disabled", true).hide();
1130 $(".forhide").prop("disabled", false).show();
1151 public function getDocumentsLink($modulepart, $modulesubdir, $filedir, $filter =
'', $morecss =
'valignmiddle', $allfiles = 0)
1153 global
$conf, $langs;
1155 include_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
1158 $this->infofiles = array(
'nboffiles' => 0,
'extensions' => array(),
'files' => array());
1163 if (isModEnabled(
'multicompany')) {
1165 preg_match(
'/\/([0-9]+)\/[^\/]+\/'.preg_quote($modulesubdir,
'/').
'$/', $filedir, $regs);
1166 $entity = ((!empty($regs[1]) && $regs[1] > 1) ? $regs[1] : 1);
1171 $filterforfilesearch =
'^'.preg_quote(basename($modulesubdir),
'/');
1173 $filterforfilesearch =
'^'.preg_quote(basename($modulesubdir),
'/').
'\.';
1175 $file_list =
dol_dir_list($filedir,
'files', 0, $filterforfilesearch,
'\.meta$|\.png$');
1179 $out .=
'<!-- html.formfile::getDocumentsLink -->'.
"\n";
1180 if (!empty($file_list)) {
1181 $out =
'<dl class="dropdown inline-block">
1182 <dt><a data-ajax="false" href="#" onClick="return false;">'.img_picto(
'',
'listlight',
'', 0, 0, 0,
'', $morecss).
'</a></dt>
1183 <dd><div class="multichoicedoc" style="position:absolute;left:100px;" ><ul class="ulselectedfields">';
1189 foreach ($file_list as $file) {
1191 if ($filter && !preg_match(
'/'.$filter.
'/i', $file[
"name"])) {
1197 $relativepath = $file[
"name"];
1198 if ($modulesubdir) {
1199 $relativepath = (string) $modulesubdir.
"/".$file[
"name"];
1202 if ($modulepart ==
'donation') {
1203 $relativepath = (string)
get_exdir($modulesubdir, 2, 0, 0,
null,
'donation').$file[
"name"];
1205 if ($modulepart ==
'export') {
1206 $relativepath = (string) $file[
"name"];
1209 $this->infofiles[
'nboffiles']++;
1210 $this->infofiles[
'files'][] = $file[
'fullname'];
1211 $ext = (string) pathinfo($file[
'name'], PATHINFO_EXTENSION);
1212 if (!array_key_exists($ext, $this->infofiles[
'extensions'])) {
1213 $this->infofiles[
'extensions'][$ext] = 1;
1215 $this->infofiles[
'extensions'][$ext]++;
1219 if (!empty(
$conf->use_javascript_ajax) && (
$conf->browser->layout !=
'phone')) {
1221 if ($tmparray && $tmparray[
'url']) {
1222 $tmpout .=
'<li><a href="'.$tmparray[
'url'].
'"'.($tmparray[
'css'] ?
' class="'.$tmparray[
'css'].
'"' :
'').($tmparray[
'mime'] ?
' mime="'.$tmparray[
'mime'].
'"' :
'').($tmparray[
'target'] ?
' target="'.$tmparray[
'target'].
'"' :
'').
'>';
1224 $tmpout .=
'<i class="fa fa-search-plus paddingright" style="color: gray"></i>';
1225 $tmpout .= $langs->trans(
"Preview").
' '.$ext.
'</a></li>';
1230 $tmpout .=
'<li class="nowrap"><a class="pictopreview nowrap" ';
1232 $tmpout .=
'target="_blank" ';
1234 $tmpout .=
'href="'.DOL_URL_ROOT.
'/document.php?modulepart='.$modulepart.
'&entity='.$entity.
'&file='.urlencode($relativepath).
'"';
1236 if (preg_match(
'/text/', $mime)) {
1237 $tmpout .=
' target="_blank" rel="noopener noreferrer"';
1240 $tmpout .=
img_mime($relativepath, $file[
"name"]);
1241 $tmpout .= $langs->trans(
"Download").
' '.$ext;
1242 $tmpout .=
'</a></li>'.
"\n";
1245 $out .=
'</ul></div></dd>
1294 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 =
'', $moreoptions = array())
1297 global $user,
$conf, $langs, $hookmanager, $form;
1298 global $sortfield, $sortorder;
1299 global $dolibarr_main_url_root;
1301 if ($disablecrop == -1) {
1304 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'))) {
1310 if (empty($relativepath)) {
1312 if (!empty(
$object->element) &&
$object->element ==
'invoice_supplier') {
1315 if (!empty(
$object->element) &&
$object->element ==
'project_task') {
1316 $relativepath =
'Call_not_supported_._Call_function_using_a_defined_relative_path_.';
1320 if (
getDolGlobalInt(
'PRODUCT_USE_OLD_PATH_FOR_PHOTO') && isset($filearray[0]) && $filearray[0][
'level1name'] ==
'photos') {
1321 $relativepath = preg_replace(
'/^.*\/produit\//',
'', $filearray[0][
'path']).
'/';
1327 $relativedir = preg_replace(
'/^'.preg_quote(DOL_DATA_ROOT,
'/').
'/',
'', $upload_dir);
1328 $relativedir = preg_replace(
'/^[\\/]/',
'', $relativedir);
1334 $hookmanager->initHooks(array(
'formfile'));
1335 $parameters = array(
1336 'filearray' => $filearray,
1337 'modulepart' => $modulepart,
1339 'forcedownload' => $forcedownload,
1340 'relativepath' => $relativepath,
1341 'relativedir' => $relativedir,
1342 'permtodelete' => $permonobject,
1343 'useinecm' => $useinecm,
1344 'textifempty' => $textifempty,
1345 'maxlength' => $maxlength,
1349 $reshook = $hookmanager->executeHooks(
'showFilesList', $parameters,
$object);
1351 if (!empty($reshook)) {
1354 if (!is_object($form)) {
1355 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.form.class.php';
1356 $form =
new Form($this->db);
1359 if (!preg_match(
'/&id=/', $param) && isset(
$object->id)) {
1360 $param .=
'&id='.$object->id;
1362 $relativepathwihtoutslashend = preg_replace(
'/\/$/',
'', $relativepath);
1363 if ($relativepathwihtoutslashend) {
1364 $param .=
'&file='.urlencode($relativepathwihtoutslashend);
1367 if ($permtoeditline < 0) {
1368 $permtoeditline = 0;
1369 if (in_array($modulepart, array(
'product',
'produit',
'service'))) {
1371 $permtoeditline = 1;
1374 $permtoeditline = 1;
1379 $permtoeditline = 0;
1383 $url = $_SERVER[
"PHP_SELF"];
1388 $morehtmlright =
'';
1389 if (!empty($moreoptions[
'showhideaddbutton']) &&
$conf->use_javascript_ajax) {
1390 $tmpurlforbutton =
'javascript:console.log("open add file form");jQuery(".divattachnewfile").toggle(); if (!jQuery(".divattachnewfile").is(":hidden")) { jQuery("input[type=\'file\']").click();}void(0);';
1391 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'New'),
'',
'fa fa-plus-circle', $tmpurlforbutton,
'', $permtoeditline);
1394 if ((empty($useinecm) || $useinecm == 3 || $useinecm == 6) && $title !=
'none') {
1395 print
load_fiche_titre($title ? $title : $langs->trans(
"AttachedFiles"), $morehtmlright,
'file-upload', 0,
'',
'table-list-of-attached-files');
1397 if (!empty($moreoptions) && $moreoptions[
'afteruploadtitle']) {
1398 print
'<div class="divattachnewfile'.((!empty($moreoptions[
'showhideaddbutton']) &&
$conf->use_javascript_ajax) ?
' hidden' :
'').
'">'.$moreoptions[
'afteruploadtitle'].
'</div>';
1402 print
'<!-- html.formfile::list_of_documents -->'.
"\n";
1403 if (
GETPOST(
'action',
'aZ09') ==
'editfile' && $permtoeditline) {
1404 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?'.$param.
'" method="POST">';
1405 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1406 print
'<input type="hidden" name="action" value="renamefile">';
1407 print
'<input type="hidden" name="id" value="'.(is_object(
$object) ?
$object->id :
'').
'">';
1408 print
'<input type="hidden" name="modulepart" value="'.$modulepart.
'">';
1411 print
'<div class="div-table-responsive-no-min"'.($moreattrondiv ?
' '.$moreattrondiv :
'').
'>';
1412 print
'<table id="tablelines" class="centpercent liste noborder nobottom">'.
"\n";
1414 if (!empty($addfilterfields)) {
1415 print
'<tr class="liste_titre nodrag nodrop">';
1416 print
'<td><input type="search_doc_ref" value="'.dol_escape_htmltag(
GETPOST(
'search_doc_ref',
'alpha')).
'"></td>';
1419 if (empty($useinecm) || $useinecm == 4 || $useinecm == 5 || $useinecm == 6) {
1424 if (empty($disablemove) && count($filearray) > 1) {
1433 '@phan-var-force array<array{name:string,path:string,level1name:string,relativename:string,fullname:string,date:string,size:int,perm:int,type:string,position_name:string,cover:string,keywords:string,acl:string,rowid:int,label:string,share:string}> $filearray';
1436 if ($sortfield && $sortorder) {
1441 print
'<tr class="liste_titre nodrag nodrop">';
1446 if (empty($useinecm) || $useinecm == 4 || $useinecm == 5 || $useinecm == 6) {
1453 if (empty($disablemove) && count($filearray) > 1) {
1458 $nboffiles = count($filearray);
1459 if ($nboffiles > 0) {
1460 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
1466 $parametersByDefault = array(
1467 'modulepart' => $modulepart,
1468 'relativepath' => $relativepath,
1469 'permtoedit' => $permtoeditline,
1470 'permonobject' => $permonobject,
1472 foreach ($filearray as $key => $file) {
1473 if ($file[
'name'] !=
'.' && $file[
'name'] !=
'..' && !preg_match(
'/\.meta$/i', $file[
'name'])) {
1474 if (array_key_exists(
'rowid', $filearray[$key]) && $filearray[$key][
'rowid'] > 0) {
1475 $lastrowid = $filearray[$key][
'rowid'];
1480 $modulepart = ($file[
'modulepart'] ?? $parametersByDefault[
'modulepart']);
1481 $relativepath = ($file[
'relativepath'] ?? $parametersByDefault[
'relativepath']);
1482 $permtoeditline = ($file[
'permtoedit'] ?? $parametersByDefault[
'permtoedit']);
1483 $permonobject = ($file[
'permonobject'] ?? $parametersByDefault[
'permonobject']);
1486 if (empty($relativepath) || empty($modulepart)) {
1487 $filepath = $file[
'level1name'].
'/'.$file[
'name'];
1489 $filepath = $relativepath.$file[
'name'];
1491 if (empty($modulepart)) {
1492 $modulepart = basename(dirname($file[
'path']));
1494 if (empty($relativepath)) {
1495 $relativepath = preg_replace(
'/\/(.+)/',
'', $filepath) .
'/';
1500 print
'<!-- Line list_of_documents '.$key.
' relativepath = '.$relativepath.
' -->'.
"\n";
1503 print
'<!-- In database: position='.(array_key_exists(
'position', $filearray[$key]) ? $filearray[$key][
'position'] : 0).
' -->'.
"\n";
1504 print
'<tr class="oddeven" id="row-'.((array_key_exists(
'rowid', $filearray[$key]) && $filearray[$key][
'rowid'] > 0) ? $filearray[$key][
'rowid'] :
'AFTER'.$lastrowid.
'POS'.($i + 1)).
'">';
1508 print
'<td class="minwidth200 tdoverflowmax500" title="'.dolPrintHTMLForAttribute($file[
'name']).
'">';
1512 print
'<a class="paddingright valignmiddle" ';
1514 print
'target="_blank" ';
1516 print
'href="'.DOL_URL_ROOT.
'/document.php?modulepart='.$modulepart;
1517 if ($forcedownload) {
1518 print
'&attachment=1';
1520 if (!empty(
$object->entity)) {
1521 print
'&entity='.$object->entity;
1523 print
'&file='.urlencode($filepath);
1525 print
img_mime($file[
'name'], $file[
'name'].
' ('.
dol_print_size($file[
'size'], 0, 0).
')',
'inline-block valignmiddle paddingright');
1526 if ($showrelpart == 1) {
1527 print $relativepath;
1533 if (
GETPOST(
'action',
'aZ09') ==
'editfile' && $file[
'name'] == basename(
GETPOST(
'urlfile',
'alpha')) && dirname($filepath) == dirname(
GETPOST(
'urlfile',
'alpha'))) {
1535 $section_dir = dirname(
GETPOST(
'urlfile',
'alpha'));
1536 if (!preg_match(
'/\/$/', $section_dir)) {
1537 $section_dir .=
'/';
1539 print
'<input type="hidden" name="section_dir" value="'.$section_dir.
'">';
1540 print
'<input type="hidden" name="renamefilefrom" value="'.dol_escape_htmltag($file[
'name']).
'">';
1541 print
'<input type="text" name="renamefileto" class="quatrevingtpercent" value="'.dol_escape_htmltag($file[
'name']).
'">';
1544 $filenametoshow = preg_replace(
'/\.noexe$/',
'', $file[
'name']);
1558 print
'<td class="right nowraponall">';
1559 if ($sizetoshow == $sizetoshowbytes) {
1562 print $form->textwithpicto($sizetoshow, $sizetoshowbytes, -1);
1567 print
'<td class="center nowraponall">'.dol_print_date($file[
'date'],
"dayhour",
"tzuser").
'</td>';
1570 if (empty($useinecm) || $useinecm == 4 || $useinecm == 5 || $useinecm == 6) {
1571 $fileinfo = pathinfo($file[
'name']);
1572 print
'<td class="center">';
1574 if ($useinecm == 5 || $useinecm == 6) {
1588 $urlforhref =
getAdvancedPreviewUrl($modulepart, $relativepath.$fileinfo[
'filename'].
'.'.strtolower($fileinfo[
'extension']), 1,
'&entity='.(empty(
$object->entity) ?
$conf->entity :
$object->entity));
1589 if (empty($urlforhref)) {
1590 $urlforhref = DOL_URL_ROOT.
'/viewimage.php?modulepart='.urlencode($modulepart).
'&entity='.(empty(
$object->entity) ?
$conf->entity :
$object->entity).
'&file='.urlencode($relativepath.$fileinfo[
'filename'].
'.'.strtolower($fileinfo[
'extension']));
1591 print
'<a href="'.$urlforhref.
'" class="aphoto" target="_blank" rel="noopener noreferrer">';
1593 print
'<a href="'.$urlforhref[
'url'].
'" class="'.$urlforhref[
'css'].
'" target="'.$urlforhref[
'target'].
'" mime="'.$urlforhref[
'mime'].
'">';
1595 print
'<img class="photo maxwidth200 shadow valignmiddle"';
1596 if ($useinecm == 4 || $useinecm == 5 || $useinecm == 6) {
1597 print
' height="20"';
1600 print
' style="max-height: 24px"';
1602 print
' src="'.DOL_URL_ROOT.
'/viewimage.php?modulepart='.urlencode($modulepart).
'&entity='.(empty(
$object->entity) ?
$conf->entity :
$object->entity).
'&file='.urlencode($relativepath.$smallfile);
1603 if (!empty($filearray[$key][
'date'])) {
1604 print
'&cache='.urlencode((
string) $filearray[$key][
'date']);
1606 print
'" title="">';
1613 print
'<td class="center">';
1614 if ($relativedir && $filearray[$key][
'rowid'] > 0) {
1616 print
'<label for="idshareenabled'.$key.
'">'.$langs->trans(
"FileSharedViaALink").
'</label> ';
1617 print
'<input class="inline-block" type="checkbox" id="idshareenabled'.$key.
'" name="shareenabled"'.($file[
'share'] ?
' checked="checked"' :
'').
' /> ';
1619 if ($file[
'share']) {
1621 $urlwithouturlroot = preg_replace(
'/'.preg_quote(DOL_URL_ROOT,
'/').
'$/i',
'', trim($dolibarr_main_url_root));
1622 $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT;
1628 if (!empty($file[
'share'])) {
1629 $paramlink .= ($paramlink ?
'&' :
'').
'hashp='.$file[
'share'];
1631 if ($forcedownload) {
1632 $paramlink .= ($paramlink ?
'&' :
'').
'attachment=1';
1635 $fulllink = $urlwithroot.
'/document.php'.($paramlink ?
'?'.$paramlink :
'');
1637 print
'<a href="'.$fulllink.
'" target="_blank" rel="noopener">'.
img_picto($langs->trans(
"FileSharedViaALink"),
'globe').
'</a> ';
1638 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).
'">';
1650 print
'<td class="valignmiddle right actionbuttons nowraponall"><!-- action on files -->';
1651 if ($useinecm == 1 || $useinecm == 5) {
1653 $newparam = preg_replace(
'/&file=.*$/',
'', $param);
1654 $backtopage = DOL_URL_ROOT.
'/ecm/index.php?§ion_dir='.urlencode($relativepath).$newparam;
1655 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>';
1658 if (empty($useinecm) || $useinecm == 2 || $useinecm == 3 || $useinecm == 6) {
1659 $newmodulepart = $modulepart;
1660 if (in_array($modulepart, array(
'product',
'produit',
'service'))) {
1661 $newmodulepart =
'produit|service';
1664 if ($permtoeditline) {
1665 $moreparaminurl =
'';
1667 $moreparaminurl .=
'&id='.$object->id;
1668 } elseif (
GETPOST(
'website',
'alpha')) {
1669 $moreparaminurl .=
'&website='.GETPOST(
'website',
'alpha');
1672 if ($modulepart ==
'medias' && !
GETPOST(
'website')) {
1673 $moreparaminurl .=
'&backtourl='.urlencode(DOL_URL_ROOT.
'/ecm/index_medias.php?file_manager=1&modulepart='.$modulepart.
'§ion_dir='.$relativepath);
1676 if (!preg_match(
'/\.webp$/i', $file[
'name'])) {
1677 if ($modulepart ==
'medias' && !
GETPOST(
'website')) {
1678 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>';
1679 } elseif ($modulepart ==
'medias' &&
GETPOST(
'website')) {
1680 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>';
1686 if ($permtoeditline) {
1688 $moreparaminurl =
'';
1690 $moreparaminurl .=
'&id='.$object->id;
1691 } elseif (
GETPOST(
'website',
'alpha')) {
1692 $moreparaminurl .=
'&website='.GETPOST(
'website',
'alpha');
1695 if ($modulepart ==
'medias' && !
GETPOST(
'website')) {
1696 $moreparaminurl .=
'&backtourl='.urlencode(DOL_URL_ROOT.
'/ecm/index_medias.php?file_manager=1&modulepart='.$modulepart.
'§ion_dir='.$relativepath);
1699 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>';
1703 if ($permtoeditline) {
1704 $paramsectiondir = (in_array($modulepart, array(
'medias',
'ecm')) ?
'§ion_dir='.urlencode($relativepath) :
'');
1705 print
'<a class="editfielda reposition editfilelink paddingright marginleftonly" href="'.(($useinecm == 1 || $useinecm == 5) ?
'#' : ($url.
'?action=editfile&token='.
newToken().
'&urlfile='.urlencode($filepath).$paramsectiondir.$param)).
'" rel="'.$filepath.
'">'.
img_edit(
'default', 0,
'class="paddingrightonly"').
'</a>';
1709 if ($permonobject) {
1711 if (!empty(
$conf->dol_use_jmobile)) {
1714 if (empty(
$conf->use_javascript_ajax)) {
1721 print
'<a href="'.((($useinecm && $useinecm != 3 && $useinecm != 6) && $useajax) ?
'#' : ($url.
'?action=deletefile&token='.
newToken().
'&urlfile='.urlencode($filepath).$param)).
'" class="reposition deletefilelink paddingright marginleftonly" rel="'.$filepath.
'">'.
img_delete().
'</a>';
1725 if (empty($disablemove) && count($filearray) > 1) {
1726 if ($nboffiles > 1 &&
$conf->browser->layout !=
'phone') {
1727 print
'<td class="linecolmove tdlineupdown center">';
1729 print
'<a class="lineupdown" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=up&rowid='.
$object->id.
'">'.
img_up(
'default', 0,
'imgupforline').
'</a>';
1731 if ($i < ($nboffiles - 1)) {
1732 print
'<a class="lineupdown" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=down&rowid='.
$object->id.
'">'.
img_down(
'default', 0,
'imgdownforline').
'</a>';
1736 print
'<td'.(($conf->browser->layout !=
'phone') ?
' class="linecolmove tdlineupdown center"' :
' class="linecolmove center"').
'>';
1741 print
'<td class="right">';
1742 print
'<input type="hidden" name="ecmfileid" value="'.(empty($filearray[$key][
'rowid']) ?
'' : $filearray[$key][
'rowid']).
'">';
1743 print
'<input type="submit" class="button button-save smallpaddingimp" name="renamefilesave" value="'.dol_escape_htmltag($langs->trans(
"Save")).
'">';
1744 print
'<input type="submit" class="button button-cancel smallpaddingimp" name="cancel" value="'.dol_escape_htmltag($langs->trans(
"Cancel")).
'">';
1746 if (empty($disablemove) && count($filearray) > 1) {
1747 print
'<td class="right"></td>';
1755 if ($nboffiles == 0) {
1757 if (empty($disablemove) && count($filearray) > 1) {
1760 print
'<tr class="oddeven"><td colspan="'.$colspan.
'">';
1761 if (empty($textifempty)) {
1762 print
'<span class="opacitymedium">'.$langs->trans(
"NoFileFound").
'</span>';
1764 print
'<span class="opacitymedium">'.$textifempty.
'</span>';
1772 if ($nboflines > 1 && is_object(
$object)) {
1773 if (!empty(
$conf->use_javascript_ajax) && $permtoeditline) {
1774 $table_element_line =
'ecm_files';
1775 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
1781 if (
GETPOST(
'action',
'aZ09') ==
'editfile' && $permtoeditline) {
1809 public function list_of_autoecmfiles($upload_dir, $filearray, $modulepart, $param, $forcedownload = 0, $relativepath =
'', $permissiontodelete = 1, $useinecm = 0, $textifempty =
'', $maxlength = 0, $url =
'', $addfilterfields = 0)
1812 global
$conf, $langs, $hookmanager, $form;
1813 global $sortfield, $sortorder;
1814 global $search_doc_ref;
1815 global $dolibarr_main_url_root;
1817 dol_syslog(get_class($this).
'::list_of_autoecmfiles upload_dir='.$upload_dir.
' modulepart='.$modulepart);
1820 if (empty($useinecm) || $useinecm == 6) {
1824 $url = $_SERVER[
"PHP_SELF"];
1827 if (!empty($addfilterfields)) {
1828 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'">';
1829 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1830 print
'<input type="hidden" name="module" value="'.$modulepart.
'">';
1833 print
'<div class="div-table-responsive-no-min">';
1834 print
'<table width="100%" class="noborder">'.
"\n";
1836 if (!empty($addfilterfields)) {
1837 print
'<tr class="liste_titre nodrag nodrop">';
1838 print
'<td class="liste_titre"></td>';
1839 print
'<td class="liste_titre"><input type="text" class="maxwidth100onsmartphone" name="search_doc_ref" value="'.dol_escape_htmltag($search_doc_ref).
'"></td>';
1840 print
'<td class="liste_titre"></td>';
1841 print
'<td class="liste_titre"></td>';
1843 print
'<td class="liste_titre right">';
1844 $searchpicto = $form->showFilterButtons();
1850 print
'<tr class="liste_titre">';
1851 $sortref =
"fullname";
1852 if ($modulepart ==
'invoice_supplier') {
1853 $sortref =
'level1name';
1863 $object_instance =
null;
1864 if ($modulepart ==
'company') {
1865 include_once DOL_DOCUMENT_ROOT.
'/societe/class/societe.class.php';
1866 $object_instance =
new Societe($this->db);
1867 } elseif ($modulepart ==
'invoice') {
1868 include_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
1869 $object_instance =
new Facture($this->db);
1870 } elseif ($modulepart ==
'invoice_supplier') {
1871 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
1873 } elseif ($modulepart ==
'propal') {
1874 include_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
1875 $object_instance =
new Propal($this->db);
1876 } elseif ($modulepart ==
'supplier_proposal') {
1877 include_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
1879 } elseif ($modulepart ==
'order') {
1880 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
1881 $object_instance =
new Commande($this->db);
1882 } elseif ($modulepart ==
'order_supplier') {
1883 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
1885 } elseif ($modulepart ==
'contract') {
1886 include_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
1887 $object_instance =
new Contrat($this->db);
1888 } elseif ($modulepart ==
'product') {
1889 include_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
1890 $object_instance =
new Product($this->db);
1891 } elseif ($modulepart ==
'tax') {
1892 include_once DOL_DOCUMENT_ROOT.
'/compta/sociales/class/chargesociales.class.php';
1894 } elseif ($modulepart ==
'tax-vat') {
1895 include_once DOL_DOCUMENT_ROOT.
'/compta/tva/class/tva.class.php';
1896 $object_instance =
new Tva($this->db);
1897 } elseif ($modulepart ==
'salaries') {
1898 include_once DOL_DOCUMENT_ROOT.
'/salaries/class/salary.class.php';
1899 $object_instance =
new Salary($this->db);
1900 } elseif ($modulepart ==
'project') {
1901 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
1902 $object_instance =
new Project($this->db);
1903 } elseif ($modulepart ==
'project_task') {
1904 include_once DOL_DOCUMENT_ROOT.
'/projet/class/task.class.php';
1905 $object_instance =
new Task($this->db);
1906 } elseif ($modulepart ==
'fichinter') {
1907 include_once DOL_DOCUMENT_ROOT.
'/fichinter/class/fichinter.class.php';
1908 $object_instance =
new Fichinter($this->db);
1909 } elseif ($modulepart ==
'user') {
1910 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
1911 $object_instance =
new User($this->db);
1912 } elseif ($modulepart ==
'expensereport') {
1913 include_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
1915 } elseif ($modulepart ==
'holiday') {
1916 include_once DOL_DOCUMENT_ROOT.
'/holiday/class/holiday.class.php';
1917 $object_instance =
new Holiday($this->db);
1918 } elseif ($modulepart ==
'recruitment-recruitmentcandidature') {
1919 include_once DOL_DOCUMENT_ROOT.
'/recruitment/class/recruitmentcandidature.class.php';
1921 } elseif ($modulepart ==
'banque') {
1922 include_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
1923 $object_instance =
new Account($this->db);
1924 } elseif ($modulepart ==
'chequereceipt') {
1925 include_once DOL_DOCUMENT_ROOT.
'/compta/paiement/cheque/class/remisecheque.class.php';
1927 } elseif ($modulepart ==
'mrp-mo') {
1928 include_once DOL_DOCUMENT_ROOT.
'/mrp/class/mo.class.php';
1929 $object_instance =
new Mo($this->db);
1931 $parameters = array(
'modulepart' => $modulepart);
1932 $reshook = $hookmanager->executeHooks(
'addSectionECMAuto', $parameters);
1933 if ($reshook > 0 && is_array($hookmanager->resArray) && count($hookmanager->resArray) > 0) {
1934 if (array_key_exists(
'classpath', $hookmanager->resArray) && !empty($hookmanager->resArray[
'classpath'])) {
1936 if (array_key_exists(
'classname', $hookmanager->resArray) && !empty($hookmanager->resArray[
'classname'])) {
1937 $tmpclassname = $hookmanager->resArray[
'classname'];
1938 if (is_string($tmpclassname) && class_exists($tmpclassname)) {
1939 $object_instance =
new $tmpclassname($this->db);
1950 $relativepathfromroot = preg_replace(
'/'.preg_quote(DOL_DATA_ROOT.
'/',
'/').
'/',
'', $upload_dir);
1951 if ($relativepathfromroot) {
1953 '@phan-var-force array<array{name:string,path:string,level1name:string,relativename:string,fullname:string,date:string,size:int,perm:int,type:string,position_name:string,cover:string,keywords:string,acl:string,rowid:int,label:string,share:string}> $filearray';
1956 if ($sortfield && $sortorder) {
1957 $filearray =
dol_sort_array($filearray, $sortfield, $sortorder, 1);
1963 foreach ($filearray as $key => $file) {
1964 if (!is_dir($file[
'name'])
1965 && $file[
'name'] !=
'.'
1966 && $file[
'name'] !=
'..'
1967 && $file[
'name'] !=
'CVS'
1968 && !preg_match(
'/\.meta$/i', $file[
'name'])) {
1970 $relativefile = preg_replace(
'/'.preg_quote($upload_dir.
'/',
'/').
'/',
'', $file[
'fullname']);
1978 if ($modulepart ==
'company' || $modulepart ==
'tax' || $modulepart ==
'tax-vat' || $modulepart ==
'salaries') {
1979 preg_match(
'/(\d+)\/[^\/]+$/', $relativefile, $reg);
1980 $id = (isset($reg[1]) ? $reg[1] :
'');
1981 } elseif ($modulepart ==
'invoice_supplier') {
1982 preg_match(
'/([^\/]+)\/[^\/]+$/', $relativefile, $reg);
1983 $ref = (isset($reg[1]) ? $reg[1] :
'');
1984 if (is_numeric($ref)) {
1988 } elseif ($modulepart ==
'user') {
1990 preg_match(
'/(.*)\/[^\/]+$/', $relativefile, $reg);
1991 $id = (isset($reg[1]) ? $reg[1] :
'');
1992 } elseif ($modulepart ==
'project_task') {
1994 $reg = explode(
"/", $relativefile);
1995 $ref = (isset($reg[1]) ? $reg[1] :
'');
1996 } elseif (in_array($modulepart, array(
1999 'supplier_proposal',
2008 'recruitment-recruitmentcandidature',
2013 preg_match(
'/(.*)\/[^\/]+$/', $relativefile, $reg);
2014 $ref = (isset($reg[1]) ? $reg[1] :
'');
2016 $parameters = array(
'modulepart' => $modulepart,
'fileinfo' => $file);
2017 $reshook = $hookmanager->executeHooks(
'addSectionECMAuto', $parameters);
2018 if ($reshook > 0 && is_array($hookmanager->resArray) && count($hookmanager->resArray) > 0) {
2019 if (array_key_exists(
'ref', $hookmanager->resArray) && !empty($hookmanager->resArray[
'ref'])) {
2020 $ref = $hookmanager->resArray[
'ref'];
2022 if (array_key_exists(
'id', $hookmanager->resArray) && !empty($hookmanager->resArray[
'id'])) {
2023 $id = $hookmanager->resArray[
'id'];
2029 if (!
$id && !$ref) {
2034 if (!empty(
$conf->cache[
'modulepartobject'][$modulepart.
'_'.
$id.
'_'.$ref])) {
2040 if (is_object($object_instance)) {
2041 $object_instance->id = 0;
2042 $object_instance->ref =
'';
2044 $result = $object_instance->fetch(
$id);
2046 if (!($result = $object_instance->fetch(0, $ref))) {
2052 $result = $object_instance->fetchOneLike($ref);
2059 $conf->cache[
'modulepartobject'][$modulepart.
'_'.
$id.
'_'.$ref] = clone $object_instance;
2063 $conf->cache[
'modulepartobject'][$modulepart.
'_'.
$id.
'_'.$ref] =
'notfound';
2064 unset($filearray[$key]);
2068 if ($found <= 0 || !is_object(
$conf->cache[
'modulepartobject'][$modulepart.
'_'.
$id.
'_'.$ref])) {
2072 print
'<!-- Line list_of_autoecmfiles key='.$key.
' -->'.
"\n";
2073 print
'<tr class="oddeven">';
2075 if ($found > 0 && is_object(
$conf->cache[
'modulepartobject'][$modulepart.
'_'.
$id.
'_'.$ref])) {
2076 $tmpobject =
$conf->cache[
'modulepartobject'][$modulepart.
'_'.
$id.
'_'.$ref];
2078 print $tmpobject->getNomUrl(1,
'document');
2083 print $langs->trans(
"ObjectDeleted", (
$id ?
$id : $ref));
2101 print
'target="_blank" ';
2103 print
'href="'.DOL_URL_ROOT.
'/document.php?modulepart='.urlencode($modulepart);
2104 if ($forcedownload) {
2105 print
'&attachment=1';
2107 print
'&file='.urlencode($relativefile).
'">';
2114 print $this->
showPreview($file, $modulepart, $file[
'relativename']);
2121 print
'<td class="right nowraponall">';
2122 if ($sizetoshow == $sizetoshowbytes) {
2125 print $form->textwithpicto($sizetoshow, $sizetoshowbytes, -1);
2130 print
'<td class="center">'.dol_print_date($file[
'date'],
"dayhour").
'</td>';
2133 print
'<td class="right">';
2134 if (!empty($file[
'share'])) {
2136 $urlwithouturlroot = preg_replace(
'/'.preg_quote(DOL_URL_ROOT,
'/').
'$/i',
'', trim($dolibarr_main_url_root));
2137 $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT;
2143 if (!empty($file[
'share'])) {
2144 $paramlink .= ($paramlink ?
'&' :
'').
'hashp='.$file[
'share'];
2146 if ($forcedownload) {
2147 $paramlink .= ($paramlink ?
'&' :
'').
'attachment=1';
2150 $fulllink = $urlwithroot.
'/document.php'.($paramlink ?
'?'.$paramlink :
'');
2152 print
img_picto($langs->trans(
"FileSharedViaALink"),
'globe').
' ';
2153 print
'<input type="text" class="quatrevingtpercent width100 nopadding nopadding small" id="downloadlink" name="downloadexternallink" value="'.dol_escape_htmltag($fulllink).
'">';
2167 if (count($filearray) == 0) {
2168 print
'<tr class="oddeven"><td colspan="5">';
2169 if (empty($textifempty)) {
2170 print
'<span class="opacitymedium">'.$langs->trans(
"NoFileFound").
'</span>';
2172 print
'<span class="opacitymedium">'.$textifempty.
'</span>';
2179 if (!empty($addfilterfields)) {
2182 return count($filearray);
2198 public function listOfLinks(
$object, $permissiontodelete = 1, $action =
null, $selected =
null, $param =
'', $htmlname =
'formaddlink', $moreoptions = array())
2200 global
$conf, $langs;
2201 global $sortfield, $sortorder;
2203 $langs->load(
"link");
2205 require_once DOL_DOCUMENT_ROOT.
'/core/class/link.class.php';
2206 $link =
new Link($this->db);
2208 if ($sortfield ==
"name") {
2209 $sortfield =
"label";
2210 } elseif ($sortfield ==
"date") {
2211 $sortfield =
"datea";
2215 $res = $link->fetchAll($links,
$object->element,
$object->id, $sortfield, $sortorder);
2216 $param .= (isset(
$object->id) ?
'&id='.$object->id :
'');
2218 $permissiontoedit = $permissiontodelete;
2220 print
'<!-- listOfLinks -->'.
"\n";
2222 $morehtmlright =
'';
2223 if (!empty($moreoptions[
'showhideaddbutton']) &&
$conf->use_javascript_ajax) {
2224 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'New'),
'',
'fa fa-plus-circle',
'javascript:console.log("open addlink form"); jQuery(".divlinkfile").toggle(); void(0);',
'', $permissiontoedit);
2228 print
load_fiche_titre($langs->trans(
"LinkedFiles"), $morehtmlright,
'link', 0,
'',
'table-list-of-links');
2230 if (!empty($moreoptions) && $moreoptions[
'afterlinktitle']) {
2231 print
'<div class="divlinkfile'.((!empty($moreoptions[
'showhideaddbutton']) &&
$conf->use_javascript_ajax) ?
' hidden' :
'').
'">'.$moreoptions[
'afterlinktitle'].
'</div>';
2234 print
'<form action="'.$_SERVER[
'PHP_SELF'].($param ?
'?'.$param :
'').
'" id="'.$htmlname.
'" method="POST">';
2235 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2237 print
'<table class="liste noborder nobottom centpercent">';
2238 print
'<tr class="liste_titre">';
2240 $langs->trans(
"Links"),
2241 $_SERVER[
'PHP_SELF'],
2262 $langs->trans(
"Date"),
2263 $_SERVER[
'PHP_SELF'],
2274 $_SERVER[
'PHP_SELF'],
2285 $nboflinks = count($links);
2286 if ($nboflinks > 0) {
2287 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
2289 foreach ($links as $link) {
2290 print
'<tr class="oddeven">';
2292 if ($action ==
'update' && $selected === (
int) $link->id && $permissiontoedit) {
2294 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
2295 print
'<input type="hidden" name="linkid" value="'.$link->id.
'">';
2296 print
'<input type="hidden" name="action" value="confirm_updateline">';
2297 print $langs->trans(
'Link').
': <input type="text" name="link" value="'.$link->url.
'">';
2300 print $langs->trans(
'Label').
': <input type="text" name="label" value="'.
dol_escape_htmltag($link->label).
'">';
2302 print
'<td class="center">'.dol_print_date(
dol_now(),
"dayhour",
"tzuser").
'</td>';
2303 print
'<td class="right"></td>';
2304 print
'<td class="right">';
2305 print
'<input type="submit" class="button button-save" name="save" value="'.dol_escape_htmltag($langs->trans(
"Save")).
'">';
2306 print
'<input type="submit" class="button button-cancel" name="cancel" value="'.dol_escape_htmltag($langs->trans(
"Cancel")).
'">';
2311 print
'<a data-ajax="false" href="'.$link->url.
'" target="_blank" rel="noopener noreferrer">';
2315 print
'<td class="right"></td>';
2316 print
'<td class="center">'.dol_print_date($link->datea,
"dayhour",
"tzuser").
'</td>';
2317 print
'<td class="center"></td>';
2318 print
'<td class="right">';
2319 print
'<a href="'.$_SERVER[
'PHP_SELF'].
'?action=update&linkid='.$link->id.$param.
'&token='.
newToken().
'" class="editfilelink editfielda reposition" >'.
img_edit().
'</a>';
2320 if ($permissiontodelete) {
2321 print
' <a class="deletefilelink reposition" href="'.$_SERVER[
'PHP_SELF'].
'?action=deletelink&token='.
newToken().
'&linkid='.((int) $link->id).$param.
'">'.
img_delete().
'</a>';
2329 if ($nboflinks == 0) {
2330 print
'<tr class="oddeven"><td colspan="5">';
2331 print
'<span class="opacitymedium">'.$langs->trans(
"NoLinkFound").
'</span>';
2352 public function showPreview($file, $modulepart, $relativepath, $ruleforpicto = 0, $param =
'')
2354 global $langs,
$conf;
2357 if (
$conf->browser->layout !=
'phone' && !empty(
$conf->use_javascript_ajax)) {
2359 if (count($urladvancedpreview)) {
2360 $out .=
'<a class="pictopreview '.$urladvancedpreview[
'css'].
'" href="'.$urladvancedpreview[
'url'].
'"'.(empty($urladvancedpreview[
'mime']) ?
'' :
' mime="'.$urladvancedpreview[
'mime'].
'"').
' '.(empty($urladvancedpreview[
'target']) ?
'' :
' target="'.$urladvancedpreview[
'target'].
'"').
'>';
2362 if (empty($ruleforpicto)) {
2364 $out .=
'<span class="fa fa-search-plus pictofixedwidth" style="color: gray"></span>';
2366 $out .=
img_mime($relativepath, $langs->trans(
'Preview').
' '.$file[
'name'],
'pictofixedwidth');
2370 if ($ruleforpicto < 0) {
2371 $out .=
img_picto(
'',
'generic',
'', 0, 0, 0,
'',
'paddingright pictofixedwidth');
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
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.
Class for managing the social charges.
Class to manage predefined suppliers products.
Class to manage customers orders.
Class to manage ECM files.
Class to manage Trips and Expenses.
Class to manage suppliers invoices.
Class to manage invoices.
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 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($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($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.
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.
Class to manage VAT - Value-added tax (also known in French as TVA - Taxe sur la valeur ajoutée)
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($utf8_path, $types="all", $recursive=0, $filter="", $excludefilter=null, $sortcriteria="name", $sortorder=SORT_ASC, $mode=0, $nohook=0, $relativename="", $donotfollowsymlinks=0, $nbsecondsold=0)
Scan a directory and return a list of files/directories.
completeFileArrayWithDatabaseInfo(&$filearray, $relativedir)
Complete $filearray with data from database.
dol_print_size($size, $shortvalue=0, $shortunit=0)
Return string with formatted size.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
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.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
img_down($titlealt='default', $selected=0, $moreclass='')
Show down arrow logo.
dol_now($mode='auto')
Return date for now.
img_mime($file, $titlealt='', $morecss='')
Show MIME img of a file.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
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_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_sort_array(&$array, $index, $order='asc', $natsort=0, $case_sensitive=0, $keepindex=0)
Advanced sort array by the value of a given key, which produces ascending (default) or descending out...
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
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.
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_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
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.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify 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...
vignette($file, $maxWidth=160, $maxHeight=120, $extName='_small', $quality=50, $outdir='thumbs', $targetformat=0)
Create a thumbnail from an image file (Supported extensions are gif, jpg, png and bmp).
if(!defined( 'IMAGETYPE_WEBP')) getDefaultImageSizes()
Return default values for image sizes.
image_format_supported($file, $acceptsvg=0)
Return if a filename is file name of a supported image format.
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
getMaxFileSizeArray()
Return the max allowed for file upload.