68 $this->numoffiles = 0;
81 public function showImageToEdit(
string $htmlname,
string $modulepart,
string $dirformainimage,
string $subdirformainimage,
string $fileformainimage)
85 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions.lib.php';
86 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
87 include_once DOL_DOCUMENT_ROOT.
'/core/lib/security.lib.php';
90 $maxwidthsmall = $tmparraysize[
'maxwidthsmall'];
91 $maxheightsmall = $tmparraysize[
'maxheightsmall'];
92 $maxwidthmini = $tmparraysize[
'maxwidthmini'];
93 $maxheightmini = $tmparraysize[
'maxheightmini'];
94 $quality = $tmparraysize[
'quality'];
99 if ($htmlname ==
'logo_squarred') {
106 $maxmin = $maxfilesizearray[
'maxmin'];
112 $out .=
'<div class="centpercent nobordernopadding valignmiddle"><div class="inline-block marginrightonly">';
114 $out .=
'<input type="hidden" name="MAX_FILE_SIZE" value="'.($maxmin * 1024).
'">';
116 $out .=
'<input type="file" class="flat minwidth100 maxwidthinputfileonsmartphone" name="'.$htmlname.
'" id="'.$htmlname.
'" accept="image/*">';
118 if (!empty($fileformainimagesmall)) {
119 $out .=
'<div class="inline-block valignmiddle marginrightonly">';
120 $out .=
'<a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?action=remove'.$htmlname.
'&token='.
newToken().
'">'.
img_delete($langs->trans(
"Delete"),
'',
'marginleftonly').
'</a>';
122 if (file_exists($dirformainimage.
'/'.$subdirformainimage.$fileformainimagesmall)) {
123 $out .=
'<div class="inline-block valignmiddle marginrightonly">';
124 $out .=
'<img id="'.$htmlname.
'" style="'.$max.
'height: '.$imgheight.
'px; '.$max.
'width: '.$imgwidth.
'px;" src="'.DOL_URL_ROOT.
'/viewimage.php?modulepart='.$modulepart.
'&file='.urlencode($subdirformainimage.$fileformainimagesmall).
'">';
126 } elseif (!empty($fileformainimage)) {
128 if (!file_exists($dirformainimage.
'/'.$subdirformainimage.$fileformainimagemini)) {
129 $imgThumbMini =
vignette($dirformainimage.
'/'.$subdirformainimage.$fileformainimage, $maxwidthmini, $maxheightmini,
'_mini', $quality);
131 $imgThumbSmall =
vignette($dirformainimage.
'/'.$subdirformainimage.$fileformainimage, $maxwidthsmall, $maxheightsmall,
'_small', $quality);
132 $out .=
'<div class="inline-block valignmiddle">';
133 $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)).
'">';
136 } elseif (!empty($fileformainimage)) {
137 if (file_exists($dirformainimage.
'/'.$subdirformainimage.$fileformainimage)) {
138 $out .=
'<div class="inline-block valignmiddle">';
139 $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).
'">';
141 $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>';
143 $out .=
'<div class="inline-block valignmiddle">';
144 $out .=
'<img id="'.$htmlname.
'" height="'.$imgheight.
'" src="'.DOL_URL_ROOT.
'/public/theme/common/nophoto.png" title="File has been removed from disk">';
178 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)
181 global
$conf, $langs, $hookmanager;
182 $hookmanager->initHooks(array(
'formfile'));
186 dol_syslog(__METHOD__.
": using 2 for useajax is deprecated and should be not used", LOG_WARNING);
189 if (!empty(
$conf->browser->layout) &&
$conf->browser->layout !=
'classic') {
203 $out =
"\n".
'<!-- Start form attach new file --><div class="formattachnewfile">'.
"\n";
205 if ($nooutput != 2) {
207 $title = $langs->trans(
"AttachANewFile");
209 if ($title !=
'none') {
214 if (empty($usewithoutform)) {
216 $url .= (strpos($url,
'?') ===
false ?
'?' :
'&').
'uploadform=1';
218 $out .=
'<form name="'.$htmlname.
'" id="'.$htmlname.
'" action="'.$url.
'" enctype="multipart/form-data" method="POST">'.
"\n";
220 if (empty($usewithoutform) || $usewithoutform == 2) {
221 $out .=
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
222 $out .=
'<input type="hidden" id="'.$htmlname.
'_section_dir" name="section_dir" value="'.$sectiondir.
'">'.
"\n";
223 $out .=
'<input type="hidden" id="'.$htmlname.
'_section_id" name="section_id" value="'.$sectionid.
'">'.
"\n";
224 $out .=
'<input type="hidden" name="sortfield" value="'.GETPOST(
'sortfield',
'aZ09comma').
'">'.
"\n";
225 $out .=
'<input type="hidden" name="sortorder" value="'.GETPOST(
'sortorder',
'aZ09comma').
'">'.
"\n";
226 $out .=
'<input type="hidden" name="page_y" value="">'.
"\n";
229 $out .=
'<table class="nobordernopadding centpercent">';
232 if (!empty($options)) {
233 $out .=
'<td>'.$options.
'</td>';
236 $out .=
'<td class="valignmiddle nowrap">';
239 $max = $maxfilesizearray[
'max'];
240 $maxmin = $maxfilesizearray[
'maxmin'];
241 $maxphptoshow = $maxfilesizearray[
'maxphptoshow'];
242 $maxphptoshowparam = $maxfilesizearray[
'maxphptoshowparam'];
244 $out .=
'<input type="hidden" name="MAX_FILE_SIZE" value="'.($maxmin * 1024).
'">';
246 $out .=
'<input class="flat minwidth400 maxwidth200onsmartphone" type="file"';
247 $out .= ((
getDolGlobalString(
'MAIN_DISABLE_MULTIPLE_FILEUPLOAD') || $disablemulti) ?
' name="userfile"' :
' name="userfile[]" multiple');
249 $out .= (!empty($accept) ?
' accept="'.$accept.
'"' :
' accept=""');
250 $out .= (!empty($capture) ?
' capture="capture"' :
'');
254 $langs->load(
'link');
255 $out .=
'<span class="nowraponsmartphone"><input style="margin-right: 2px;" type="checkbox" id="overwritefile" name="overwritefile" value="1">';
256 $out .=
'<label for="overwritefile" class="opacitylow paddingleft paddingright">'.$langs->trans(
"OverwriteIfExists").
'</label>';
259 $out .=
'<input type="submit" class="button smallpaddingimp reposition" name="sendit" value="'.$langs->trans(
"Upload").
'"';
265 $out .=
'<input type="submit" class="button small button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
269 if ($perm && empty(
$conf->dol_optimize_smallscreen)) {
270 $langs->load(
'other');
272 $menudolibarrsetupmax = $langs->transnoentitiesnoconv(
"Home").
' - '.$langs->transnoentitiesnoconv(
"Setup").
' - '.$langs->transnoentitiesnoconv(
"Security");
274 $tooltiptext = $langs->trans(
"ThisLimitIsDefinedInSetupAt", $menudolibarrsetupmax, $max, $maxphptoshowparam, $maxphptoshow);
276 $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>';
280 $out .=
info_admin($tooltiptext, 1, 0,
'1',
'classfortooltip');
283 $out .=
' ('.$langs->trans(
"UploadDisabled").
')';
285 $out .=
"</td></tr>";
287 if ($savingdocmask) {
289 $rename =
getDolGlobalString(
'MAIN_DOC_UPLOAD_NOT_RENAME_BY_DEFAULT') ?
'' :
'checked';
292 if (!empty($options)) {
293 $out .=
'<td>'.$options.
'</td>';
295 $out .=
'<td valign="middle" class="nowrap">';
296 $out .=
'<input type="checkbox" '.$rename.
' class="savingdocmask" name="savingdocmask" id="savingdocmask" value="'.
dol_escape_js($savingdocmask).
'"> ';
297 $out .=
'<label class="opacitymedium small" for="savingdocmask">';
298 $out .= $langs->trans(
"SaveUploadedFileWithMask", preg_replace(
'/__file__/', $langs->transnoentitiesnoconv(
"OriginFileName"), $savingdocmask), $langs->transnoentitiesnoconv(
"OriginFileName"));
306 if (empty($usewithoutform)) {
308 if (empty($sectionid)) {
313 $parameters = array(
'socid' => (isset($GLOBALS[
'socid']) ? $GLOBALS[
'socid'] :
''),
'id' => (isset($GLOBALS[
'id']) ? $GLOBALS[
'id'] :
''),
'url' => $url,
'perm' => $perm,
'options' => $options);
315 $res = $hookmanager->executeHooks(
'formattachOptionsUpload', $parameters,
$object);
317 $out =
'<div class="'.($usewithoutform ?
'inline-block valignmiddle' : (($nooutput == 2 ?
'' :
'attacharea ').
'attacharea'.$htmlname)).
'">'.$out.
'</div>';
319 $out .= $hookmanager->resPrint;
321 $out .=
"\n</div><!-- End form class=formattachnewfile -->\n";
328 $out2 .=
"\n".
'<!-- Start form link new url --><div class="formlinknewurl">'.
"\n";
329 $langs->load(
'link');
331 if ($nooutput != 2) {
332 $title = $langs->trans(
"LinkANewFile");
336 if (empty($usewithoutform)) {
337 $out2 .=
'<form name="'.$htmlname.
'_link" id="'.$htmlname.
'_link" action="'.$url.
'" method="POST">'.
"\n";
338 $out2 .=
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
339 $out2 .=
'<input type="hidden" id="'.$htmlname.
'_link_section_dir" name="link_section_dir" value="">'.
"\n";
340 $out2 .=
'<input type="hidden" id="'.$htmlname.
'_link_section_id" name="link_section_id" value="'.$sectionid.
'">'.
"\n";
341 $out2 .=
'<input type="hidden" name="page_y" value="">'.
"\n";
344 $out2 .=
'<div class="valignmiddle">';
345 $out2 .=
'<div class="inline-block" style="padding-right: 10px;">';
347 $out2 .=
'<label for="link">'.$langs->trans(
"URLToLink").
':</label> ';
349 $out2 .=
'<input type="text" name="link" class="flat minwidth400imp" id="link" placeholder="'.dol_escape_htmltag($langs->trans(
"URLToLink")).
'">';
351 $out2 .=
'<div class="inline-block" style="padding-right: 10px;">';
353 $out2 .=
'<label for="label">'.$langs->trans(
"Label").
':</label> ';
355 $out2 .=
'<input type="text" class="flat" name="label" id="label" placeholder="'.dol_escape_htmltag($langs->trans(
"Label")).
'">';
356 $out2 .=
'<input type="hidden" name="objecttype" value="'.$object->element.
'">';
357 $out2 .=
'<input type="hidden" name="objectid" value="'.$object->id.
'">';
359 $out2 .=
'<div class="inline-block" style="padding-right: 10px;">';
360 $out2 .=
'<input type="submit" class="button smallpaddingimp reposition" name="linkit" value="'.$langs->trans(
"ToLink").
'"';
365 if (empty($usewithoutform)) {
366 $out2 .=
'<div class="clearboth"></div>';
367 $out2 .=
'</form><br>';
370 $parameters = array(
'socid' => (isset($GLOBALS[
'socid']) ? $GLOBALS[
'socid'] :
''),
'id' => (isset($GLOBALS[
'id']) ? $GLOBALS[
'id'] :
''),
'url' => $url,
'perm' => $perm,
'options' => $options);
371 $res = $hookmanager->executeHooks(
'formattachOptions', $parameters,
$object);
373 $out2 =
'<div class="'.($usewithoutform ?
'inline-block valignmiddle' : (($nooutput == 2 ?
'' :
'attacharea ').$htmlname)).
'">'.$out2.
'</div>';
375 $out2 .= $hookmanager->resPrint;
377 $out2 .=
"\n</div><!-- End form class=formlinknewurl -->\n";
381 if ($nooutput == 2) {
382 return array(
'formToUploadAFile' => $out,
'formToAddALink' => $out2);
383 } elseif ($nooutput) {
414 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 =
'')
417 $this->numoffiles = 0;
418 print $this->
showdocuments($modulepart, $modulesubdir, $filedir, $urlsource, $genallowed, $delallowed, $modelselected, $allowgenifempty, $forcenomultilang, $iconPDF, $notused, $noform, $param, $title, $buttonlabel, $codelang);
419 return $this->numoffiles;
449 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 =
'')
454 if (!empty($iconPDF)) {
455 dol_syslog(__METHOD__.
": passing iconPDF parameter is deprecated", LOG_WARNING);
458 global $langs,
$conf, $user, $hookmanager;
462 if (is_object($hookmanager)) {
464 'modulepart' => &$modulepart,
465 'modulesubdir' => &$modulesubdir,
466 'filedir' => &$filedir,
467 'urlsource' => &$urlsource,
468 'genallowed' => &$genallowed,
469 'delallowed' => &$delallowed,
470 'modelselected' => &$modelselected,
471 'allowgenifempty' => &$allowgenifempty,
472 'forcenomultilang' => &$forcenomultilang,
473 'noform' => &$noform,
476 'buttonlabel' => &$buttonlabel,
477 'codelang' => &$codelang,
478 'morepicto' => &$morepicto,
479 'hideifempty' => &$hideifempty,
480 'removeaction' => &$removeaction
482 $reshook = $hookmanager->executeHooks(
'showDocuments', $parameters,
$object);
490 return $hookmanager->resPrint;
493 if (!is_object($form)) {
494 $form =
new Form($this->db);
497 include_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
500 if (!empty($iconPDF)) {
505 if (!preg_match(
'/entity\=[0-9]+/', $param)) {
506 $param .= ($param ?
'&' :
'').
'entity='.(empty(
$object->entity) ?
$conf->entity :
$object->entity);
511 if (in_array($modulepart, array(
'contract',
'facture',
'supplier_proposal',
'propal',
'proposal',
'order',
'commande',
'expedition',
'commande_fournisseur',
'expensereport',
'delivery',
'ticket'))) {
512 $printer = ($user->hasRight(
'printing',
'read') && isModEnabled(
'printing'));
515 $hookmanager->initHooks(array(
'formfile'));
518 $file_list = array();
519 if (!empty($filedir)) {
520 $file_list =
dol_dir_list($filedir,
'files', 0,
'',
'(\.meta|_preview.*.*\.png)$',
'date', SORT_DESC);
522 if ($hideifempty && empty($file_list)) {
527 $forname =
'builddoc';
532 $out .=
"\n".
'<!-- Start show_document -->'.
"\n";
535 if (preg_match(
'/massfilesarea_/', $modulepart)) {
536 $out .=
'<div id="show_files"><br></div>'.
"\n";
537 $title = $langs->trans(
"MassFilesArea").
' <a href="" id="togglemassfilesarea" ref="shown">('.$langs->trans(
"Hide").
')</a>';
538 $title .=
'<script nonce="'.getNonce().
'">
539 jQuery(document).ready(function() {
540 jQuery(\'#togglemassfilesarea\').click(function() {
541 if (jQuery(\'#togglemassfilesarea\').attr(\'ref\') == "shown")
543 jQuery(\'#'.$modulepart.
'_table\').hide();
544 jQuery(\'#togglemassfilesarea\').attr("ref", "hidden");
545 jQuery(\'#togglemassfilesarea\').text("('.
dol_escape_js($langs->trans(
"Show")).
')");
549 jQuery(\'#'.$modulepart.
'_table\').show();
550 jQuery(\'#togglemassfilesarea\').attr("ref","shown");
551 jQuery(\'#togglemassfilesarea\').text("('.
dol_escape_js($langs->trans(
"Hide")).
')");
559 $titletoshow = $langs->trans(
"Documents");
560 if (!empty($title)) {
561 $titletoshow = ($title ==
'none' ?
'' : $title);
564 $submodulepart = $modulepart;
567 $tmp = explode(
':', $modulepart);
568 if (!empty($tmp[1])) {
569 $modulepart = $tmp[0];
570 $submodulepart = $tmp[1];
573 $addcolumforpicto = ($delallowed || $printer || $morepicto);
574 $colspan = (4 + ($addcolumforpicto ? 1 : 0));
579 $modellist = array();
581 if ($modulepart ==
'company') {
583 if (is_array($genallowed)) {
584 $modellist = $genallowed;
586 include_once DOL_DOCUMENT_ROOT.
'/core/modules/societe/modules_societe.class.php';
589 } elseif ($modulepart ==
'propal') {
590 if (is_array($genallowed)) {
591 $modellist = $genallowed;
593 include_once DOL_DOCUMENT_ROOT.
'/core/modules/propale/modules_propale.php';
596 } elseif ($modulepart ==
'supplier_proposal') {
597 if (is_array($genallowed)) {
598 $modellist = $genallowed;
600 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_proposal/modules_supplier_proposal.php';
603 } elseif ($modulepart ==
'commande') {
604 if (is_array($genallowed)) {
605 $modellist = $genallowed;
607 include_once DOL_DOCUMENT_ROOT.
'/core/modules/commande/modules_commande.php';
610 } elseif ($modulepart ==
'expedition') {
611 if (is_array($genallowed)) {
612 $modellist = $genallowed;
614 include_once DOL_DOCUMENT_ROOT.
'/core/modules/expedition/modules_expedition.php';
617 } elseif ($modulepart ==
'reception') {
618 if (is_array($genallowed)) {
619 $modellist = $genallowed;
621 include_once DOL_DOCUMENT_ROOT.
'/core/modules/reception/modules_reception.php';
624 } elseif ($modulepart ==
'delivery') {
625 if (is_array($genallowed)) {
626 $modellist = $genallowed;
628 include_once DOL_DOCUMENT_ROOT.
'/core/modules/delivery/modules_delivery.php';
631 } elseif ($modulepart ==
'ficheinter') {
632 if (is_array($genallowed)) {
633 $modellist = $genallowed;
635 include_once DOL_DOCUMENT_ROOT.
'/core/modules/fichinter/modules_fichinter.php';
638 } elseif ($modulepart ==
'facture') {
639 if (is_array($genallowed)) {
640 $modellist = $genallowed;
642 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
645 } elseif ($modulepart ==
'contract') {
647 if (is_array($genallowed)) {
648 $modellist = $genallowed;
650 include_once DOL_DOCUMENT_ROOT.
'/core/modules/contract/modules_contract.php';
653 } elseif ($modulepart ==
'project') {
654 if (is_array($genallowed)) {
655 $modellist = $genallowed;
657 include_once DOL_DOCUMENT_ROOT.
'/core/modules/project/modules_project.php';
660 } elseif ($modulepart ==
'project_task') {
661 if (is_array($genallowed)) {
662 $modellist = $genallowed;
664 include_once DOL_DOCUMENT_ROOT.
'/core/modules/project/task/modules_task.php';
667 } elseif ($modulepart ==
'product') {
668 if (is_array($genallowed)) {
669 $modellist = $genallowed;
671 include_once DOL_DOCUMENT_ROOT.
'/core/modules/product/modules_product.class.php';
674 } elseif ($modulepart ==
'product_batch') {
675 if (is_array($genallowed)) {
676 $modellist = $genallowed;
678 include_once DOL_DOCUMENT_ROOT.
'/core/modules/product_batch/modules_product_batch.class.php';
681 } elseif ($modulepart ==
'stock') {
682 if (is_array($genallowed)) {
683 $modellist = $genallowed;
685 include_once DOL_DOCUMENT_ROOT.
'/core/modules/stock/modules_stock.php';
688 } elseif ($modulepart ==
'hrm') {
689 if (is_array($genallowed)) {
690 $modellist = $genallowed;
692 include_once DOL_DOCUMENT_ROOT.
'/core/modules/hrm/modules_evaluation.php';
695 } elseif ($modulepart ==
'movement') {
696 if (is_array($genallowed)) {
697 $modellist = $genallowed;
699 include_once DOL_DOCUMENT_ROOT.
'/core/modules/movement/modules_movement.php';
702 } elseif ($modulepart ==
'export') {
703 if (is_array($genallowed)) {
704 $modellist = $genallowed;
706 include_once DOL_DOCUMENT_ROOT.
'/core/modules/export/modules_export.php';
708 $modellist = array();
710 } elseif ($modulepart ==
'commande_fournisseur' || $modulepart ==
'supplier_order') {
711 if (is_array($genallowed)) {
712 $modellist = $genallowed;
714 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_order/modules_commandefournisseur.php';
717 } elseif ($modulepart ==
'facture_fournisseur' || $modulepart ==
'supplier_invoice') {
719 if (is_array($genallowed)) {
720 $modellist = $genallowed;
722 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_invoice/modules_facturefournisseur.php';
725 } elseif ($modulepart ==
'supplier_payment') {
726 if (is_array($genallowed)) {
727 $modellist = $genallowed;
729 include_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_payment/modules_supplier_payment.php';
732 } elseif ($modulepart ==
'remisecheque') {
733 if (is_array($genallowed)) {
734 $modellist = $genallowed;
736 include_once DOL_DOCUMENT_ROOT.
'/core/modules/cheque/modules_chequereceipts.php';
739 } elseif ($modulepart ==
'donation') {
740 if (is_array($genallowed)) {
741 $modellist = $genallowed;
743 include_once DOL_DOCUMENT_ROOT.
'/core/modules/dons/modules_don.php';
746 } elseif ($modulepart ==
'member') {
747 if (is_array($genallowed)) {
748 $modellist = $genallowed;
750 include_once DOL_DOCUMENT_ROOT.
'/core/modules/member/modules_cards.php';
753 } elseif ($modulepart ==
'agenda' || $modulepart ==
'actions') {
754 if (is_array($genallowed)) {
755 $modellist = $genallowed;
757 include_once DOL_DOCUMENT_ROOT.
'/core/modules/action/modules_action.php';
760 } elseif ($modulepart ==
'expensereport') {
761 if (is_array($genallowed)) {
762 $modellist = $genallowed;
764 include_once DOL_DOCUMENT_ROOT.
'/core/modules/expensereport/modules_expensereport.php';
767 } elseif ($modulepart ==
'unpaid') {
769 } elseif ($modulepart ==
'user') {
770 if (is_array($genallowed)) {
771 $modellist = $genallowed;
773 include_once DOL_DOCUMENT_ROOT.
'/core/modules/user/modules_user.class.php';
776 } elseif ($modulepart ==
'usergroup') {
777 if (is_array($genallowed)) {
778 $modellist = $genallowed;
780 include_once DOL_DOCUMENT_ROOT.
'/core/modules/usergroup/modules_usergroup.class.php';
785 $file =
dol_buildpath(
'/core/modules/'.$modulepart.
'/modules_'.strtolower($submodulepart).
'.php', 0);
786 if (file_exists($file)) {
787 $res = include_once $file;
790 $file =
dol_buildpath(
'/'.$modulepart.
'/core/modules/'.$modulepart.
'/modules_'.strtolower($submodulepart).
'.php', 0);
791 $res = include_once $file;
794 $class =
'ModelePDF'.ucfirst($submodulepart);
796 if (class_exists($class)) {
797 $modellist = call_user_func($class.
'::liste_modeles', $this->db);
799 dol_print_error($this->db,
"Bad value for modulepart '".$modulepart.
"' in showdocuments (class ".$class.
" for Doc generation not found)");
807 if (empty($buttonlabel)) {
808 $buttonlabel = $langs->trans(
'Generate');
811 if (
$conf->browser->layout ==
'phone') {
812 $urlsource .=
'#'.$forname.
'_form';
814 if (empty($noform)) {
815 $out .=
'<form action="'.$urlsource.
'" id="'.$forname.
'_form" method="post">';
817 $out .=
'<input type="hidden" name="action" value="builddoc">';
818 $out .=
'<input type="hidden" name="page_y" value="">';
819 $out .=
'<input type="hidden" name="token" value="'.newToken().
'">';
824 $out .=
'<div class="div-table-responsive-no-min">';
825 $out .=
'<table class="liste formdoc noborder centpercent">';
827 $out .=
'<tr class="liste_titre">';
828 $addcolumforpicto = ($delallowed || $printer || $morepicto);
829 $colspan = (4 + ($addcolumforpicto ? 1 : 0));
832 $out .=
'<th colspan="'.$colspan.
'" class="formdoc liste_titre maxwidthonsmartphone center">';
835 if (!empty($modellist)) {
837 $out .=
'<span class="hideonsmartphone">'.$langs->trans(
'Model').
' </span>';
838 if (is_array($modellist) && count($modellist) == 1) {
839 $arraykeys = array_keys($modellist);
840 $modelselected = $arraykeys[0];
842 $morecss =
'minwidth75 maxwidth200';
843 if (
$conf->browser->layout ==
'phone') {
844 $morecss =
'maxwidth100';
846 $out .= $form->selectarray(
'model', $modellist, $modelselected, $showempty, 0, 0,
'', 0, 0, 0,
'', $morecss, 1,
'', 0, 0);
847 if (
$conf->use_javascript_ajax) {
850 $out .= $form->textwithpicto(
'', $tooltipontemplatecombo, 1,
'help',
'marginrightonly', 0, 3,
'', 0);
852 $out .=
'<div class="float">'.$langs->trans(
"Files").
'</div>';
856 if (($allowgenifempty || (is_array($modellist) && count($modellist) > 0)) &&
getDolGlobalInt(
'MAIN_MULTILANGS') && !$forcenomultilang && (!empty($modellist) || $showempty)) {
857 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formadmin.class.php';
859 $defaultlang = ($codelang && $codelang !=
'auto') ? $codelang : $langs->getDefaultLang();
860 $morecss =
'maxwidth150';
861 if (
$conf->browser->layout ==
'phone') {
862 $morecss =
'maxwidth100';
864 $out .= $formadmin->select_language($defaultlang,
'lang_id', 0, array(), 0, 0, 0, $morecss);
870 $genbutton =
'<input class="button buttongen reposition nomargintop nomarginbottom" id="'.$forname.
'_generatebutton" name="'.$forname.
'_generatebutton"';
871 $genbutton .=
' type="submit" value="'.$buttonlabel.
'"';
872 if (!$allowgenifempty && !is_array($modellist) && empty($modellist)) {
873 $genbutton .=
' disabled';
876 if ($allowgenifempty && !is_array($modellist) && empty($modellist) && empty(
$conf->dol_no_mouse_hover) && $modulepart !=
'unpaid') {
877 $langs->load(
"errors");
878 $genbutton .=
' '.img_warning($langs->transnoentitiesnoconv(
"WarningNoDocumentModelActivated"));
883 if (!$allowgenifempty && !is_array($modellist) && empty($modellist) && empty(
$conf->dol_no_mouse_hover) && $modulepart !=
'unpaid') {
886 if (empty($modellist) && !$showempty && $modulepart !=
'unpaid') {
892 if (!empty($hookmanager->hooks[
'formfile'])) {
893 foreach ($hookmanager->hooks[
'formfile'] as $module) {
894 if (method_exists($module,
'formBuilddocLineOptions')) {
903 $parameters = array(
'colspan' => ($colspan + $colspanmore),
'socid' => (isset($GLOBALS[
'socid']) ? $GLOBALS[
'socid'] :
''),
'id' => (isset($GLOBALS[
'id']) ? $GLOBALS[
'id'] :
''),
'modulepart' => $modulepart);
904 if (is_object($hookmanager)) {
905 $reshook = $hookmanager->executeHooks(
'formBuilddocOptions', $parameters, $GLOBALS[
'object']);
906 $out .= $hookmanager->resPrint;
911 if (!empty($filedir)) {
912 $link_list = array();
914 require_once DOL_DOCUMENT_ROOT.
'/core/class/link.class.php';
915 $link =
new Link($this->db);
916 $sortfield = $sortorder =
'';
917 $res = $link->fetchAll($link_list,
$object->element,
$object->id, $sortfield, $sortorder);
920 $out .=
'<!-- html.formfile::showdocuments -->'.
"\n";
923 if ((!empty($file_list) || !empty($link_list) || preg_match(
'/^massfilesarea/', $modulepart))
926 $out .=
'<div class="titre">'.$titletoshow.
'</div>'.
"\n";
927 $out .=
'<div class="div-table-responsive-no-min">';
928 $out .=
'<table class="noborder centpercent" id="'.$modulepart.
'_table">'.
"\n";
932 if (is_array($file_list)) {
933 '@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';
937 $relativedir = preg_replace(
'/^'.preg_quote(DOL_DATA_ROOT,
'/').
'/',
'', $filedir);
938 $relativedir = preg_replace(
'/^[\\/]/',
'', $relativedir);
944 '@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';
947 if (!empty($sortfield) && !empty($sortorder)) {
952 '@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';
954 require_once DOL_DOCUMENT_ROOT .
'/ecm/class/ecmfiles.class.php';
957 foreach ($file_list as $file) {
960 if (!empty($file[
'rowid']) && $user->hasRight(
'ecm',
'read')) {
964 $ecmfile->fetch($file[
'rowid']);
971 $relativepath = (string) $file[
"name"];
973 $relativepath = (string) $modulesubdir.
"/".$file[
"name"];
975 if ($modulepart ==
'export') {
976 $relativepath = (string) $file[
"name"];
979 $out .=
'<tr class="oddeven'.((!$genallowed && $i == 1) ?
' trfirstline' :
'').
'">';
981 $documenturl =
getDolGlobalString(
'DOL_URL_ROOT_DOCUMENT_PHP', DOL_URL_ROOT.
'/document.php');
984 $imgpreview = $this->
showPreview($file, $modulepart, $relativepath, 0, $param);
985 $out .=
'<td class="minwidth200 tdoverflowmax300">';
987 $out .=
'<span class="spanoverflow widthcentpercentminusx valignmiddle">';
989 $out .=
'<span class="spanoverflow">';
995 if (is_object($ecmfile)) {
996 $out .= $ecmfile->getNomUrl(1, $modulepart, 0, 0,
' documentdownload');
999 $out .=
'<a class="documentdownload paddingright" ';
1001 $out .=
'target="_blank" ';
1003 $out .=
'href="'.$documenturl.
'?modulepart='.$modulepart.
'&file='.urlencode($relativepath).($param ?
'&'.$param :
'').
'"';
1005 if (preg_match(
'/text/', $mime)) {
1006 $out .=
' target="_blank" rel="noopener noreferrer"';
1008 $out .=
' title="'.dol_escape_htmltag($file[
"name"]).
'"';
1010 $out .=
img_mime($file[
"name"], $langs->trans(
"File").
': '.$file[
"name"]);
1015 $out .=
'</span>'.
"\n";
1017 $out .= $imgpreview;
1023 $size = (!empty($file[
'size']) ? $file[
'size'] :
dol_filesize($filedir.
"/".$file[
"name"]));
1024 $out .=
'<td class="nowraponall right" title="'.dolPrintHTML($size.
' '.$langs->trans(
"Bytes")).
'">'.
dol_print_size($size, 1, 1).
'</td>';
1027 $date = (!empty($file[
'date']) ? $file[
'date'] :
dol_filemtime($filedir.
"/".$file[
"name"]));
1028 $out .=
'<td class="nowrap right">'.dol_print_date($date,
'dayhour',
'tzuser').
'</td>';
1031 $out .=
'<td class="nowraponall">';
1032 if (!empty($file[
'share'])) {
1034 $urlwithouturlroot = preg_replace(
'/'.preg_quote(DOL_URL_ROOT,
'/').
'$/i',
'', trim(
$dolibarr_main_url_root));
1035 $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT;
1041 if (!empty($file[
'share'])) {
1042 $paramlink .= ($paramlink ?
'&' :
'').
'hashp='.$file[
'share'];
1044 if ($forcedownload) {
1045 $paramlink .= ($paramlink ?
'&' :
'').
'attachment=1';
1048 $fulllink = $urlwithroot.
'/document.php'.($paramlink ?
'?'.$paramlink :
'');
1050 $out .=
'<a href="'.$fulllink.
'" target="_blank" rel="noopener">'.
img_picto($langs->trans(
"FileSharedViaALink"),
'globe').
'</a> ';
1051 $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).
'">';
1059 if ($delallowed || $printer || $morepicto) {
1060 $out .=
'<td class="right nowraponall">';
1062 $tmpurlsource = preg_replace(
'/#[a-zA-Z0-9_]*$/',
'', $urlsource);
1063 $out .=
'<a class="reposition" href="'.$tmpurlsource.((strpos($tmpurlsource,
'?') ===
false) ?
'?' :
'&').
'action='.urlencode($removeaction).
'&token='.
newToken().
'&file='.urlencode($relativepath);
1064 $out .= ($param ?
'&'.$param :
'');
1067 $out .=
'">'.img_picto($langs->trans(
"Delete"),
'delete').
'</a>';
1070 $out .=
'<a class="marginleftonly reposition" href="'.$urlsource.(strpos($urlsource,
'?') ?
'&' :
'?').
'action=print_file&token='.
newToken().
'&printer='.urlencode($modulepart).
'&file='.urlencode($relativepath);
1071 $out .= ($param ?
'&'.$param :
'');
1072 $out .=
'">'.img_picto($langs->trans(
"PrintFile", $relativepath),
'printer.png').
'</a>';
1075 $morepicto = preg_replace(
'/__FILENAMEURLENCODED__/', urlencode($relativepath), $morepicto);
1081 if (is_object($hookmanager)) {
1082 $addcolumforpicto = ($delallowed || $printer || $morepicto);
1083 $colspan = (4 + ($addcolumforpicto ? 1 : 0));
1085 $parameters = array(
'colspan' => ($colspan + $colspanmore),
'socid' => (isset($GLOBALS[
'socid']) ? $GLOBALS[
'socid'] :
''),
'id' => (isset($GLOBALS[
'id']) ? $GLOBALS[
'id'] :
''),
'modulepart' => $modulepart,
'relativepath' => $relativepath);
1086 $res = $hookmanager->executeHooks(
'formBuilddocLineOptions', $parameters, $file);
1088 $out .= $hookmanager->resPrint;
1091 $out = $hookmanager->resPrint;
1096 $this->numoffiles++;
1099 if (is_array($link_list)) {
1102 foreach ($link_list as $file) {
1103 $out .=
'<tr class="oddeven">';
1104 $out .=
'<td colspan="'.$colspan.
'" class="maxwidhtonsmartphone">';
1105 $out .=
'<a data-ajax="false" href="'.$file->url.
'" target="_blank" rel="noopener noreferrer">';
1106 $out .= $file->label;
1109 $out .=
'<td class="right">';
1113 $out .=
'<td></td>';
1114 if ($delallowed || $printer || $morepicto) {
1115 $out .=
'<td></td>';
1117 $out .=
'</tr>'.
"\n";
1119 $this->numoffiles++;
1122 if (count($file_list) == 0 && count($link_list) == 0 && $headershown) {
1123 $out .=
'<tr><td colspan="'.(3 + ($addcolumforpicto ? 1 : 0)).
'"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td></tr>'.
"\n";
1129 $out .=
"</table>\n";
1132 if (empty($noform)) {
1133 $out .=
'</form>'.
"\n";
1137 $out .=
'<!-- End show_document -->'.
"\n";
1140 jQuery(document).ready(function() {
1141 var selectedValue = $(".selectformat").val();
1143 if (selectedValue === "excel2007" || selectedValue === "tsv") {
1144 $(".forhide").prop("disabled", true).hide();
1146 $(".forhide").prop("disabled", false).show();
1167 public function getDocumentsLink($modulepart, $modulesubdir, $filedir, $filter =
'', $morecss =
'valignmiddle', $allfiles = 0)
1169 global
$conf, $langs;
1171 include_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
1174 $this->infofiles = array(
'nboffiles' => 0,
'extensions' => array(),
'files' => array());
1179 if (isModEnabled(
'multicompany')) {
1181 preg_match(
'/\/([0-9]+)\/[^\/]+\/'.preg_quote($modulesubdir,
'/').
'$/', $filedir, $regs);
1182 $entity = ((!empty($regs[1]) && $regs[1] > 1) ? $regs[1] : 1);
1187 $filterforfilesearch =
'^'.preg_quote(basename($modulesubdir),
'/');
1189 $filterforfilesearch =
'^'.preg_quote(basename($modulesubdir),
'/').
'\.';
1191 $file_list =
dol_dir_list($filedir,
'files', 0, $filterforfilesearch,
'\.meta$|\.png$');
1195 $out .=
'<!-- html.formfile::getDocumentsLink -->'.
"\n";
1196 if (!empty($file_list)) {
1197 $out =
'<dl class="dropdown inline-block">
1198 <dt><a data-ajax="false" href="#" onClick="return false;">'.img_picto(
'',
'listlight',
'', 0, 0, 0,
'', $morecss).
'</a></dt>
1199 <dd><div class="multichoicedoc" style="position:absolute;left:100px;" ><ul class="ulselectedfields">';
1205 foreach ($file_list as $file) {
1207 if ($filter && !preg_match(
'/'.$filter.
'/i', $file[
"name"])) {
1213 $relativepath = $file[
"name"];
1214 if ($modulesubdir) {
1215 $relativepath = (string) $modulesubdir.
"/".$file[
"name"];
1218 if ($modulepart ==
'donation') {
1219 $relativepath = (string)
get_exdir($modulesubdir, 2, 0, 0,
null,
'donation').$file[
"name"];
1221 if ($modulepart ==
'export') {
1222 $relativepath = (string) $file[
"name"];
1225 $this->infofiles[
'nboffiles']++;
1226 $this->infofiles[
'files'][] = $file[
'fullname'];
1227 $ext = (string) pathinfo($file[
'name'], PATHINFO_EXTENSION);
1228 if (!array_key_exists($ext, $this->infofiles[
'extensions'])) {
1229 $this->infofiles[
'extensions'][$ext] = 1;
1231 $this->infofiles[
'extensions'][$ext]++;
1235 if (!empty(
$conf->use_javascript_ajax) && (
$conf->browser->layout !=
'phone')) {
1237 if ($tmparray && $tmparray[
'url']) {
1238 $tmpout .=
'<li><a href="'.$tmparray[
'url'].
'"'.($tmparray[
'css'] ?
' class="'.$tmparray[
'css'].
'"' :
'').($tmparray[
'mime'] ?
' mime="'.$tmparray[
'mime'].
'"' :
'').($tmparray[
'target'] ?
' target="'.$tmparray[
'target'].
'"' :
'').
'>';
1240 $tmpout .=
img_picto(
'',
'search-plus',
'class="paddingright"');
1241 $tmpout .= $langs->trans(
"Preview").
' '.$ext.
'</a></li>';
1246 $tmpout .=
'<li class="nowrap"><a class="pictopreview nowrap" ';
1248 $tmpout .=
'target="_blank" ';
1250 $tmpout .=
'href="'.DOL_URL_ROOT.
'/document.php?modulepart='.$modulepart.
'&entity='.$entity.
'&file='.urlencode($relativepath).
'"';
1252 if (preg_match(
'/text/', $mime)) {
1253 $tmpout .=
' target="_blank" rel="noopener noreferrer"';
1256 $tmpout .=
img_mime($relativepath, $file[
"name"]);
1257 $tmpout .= $langs->trans(
"Download").
' '.$ext;
1258 $tmpout .=
'</a></li>'.
"\n";
1261 $out .=
'</ul></div></dd>
1310 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())
1313 global $user,
$conf, $langs, $hookmanager, $form;
1314 global $sortfield, $sortorder;
1317 if ($disablecrop == -1) {
1320 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'))) {
1326 if (empty($relativepath)) {
1329 $relativepath = (
$object->id).
'/';
1330 } elseif (!empty(
$object->element) &&
$object->element ==
'invoice_supplier') {
1332 } elseif (!empty(
$object->element) &&
$object->element ==
'project_task') {
1333 $relativepath =
'Call_not_supported_._Call_function_using_a_defined_relative_path_.';
1337 if (
getDolGlobalInt(
'PRODUCT_USE_OLD_PATH_FOR_PHOTO') && isset($filearray[0]) && $filearray[0][
'level1name'] ==
'photos') {
1338 $relativepath = preg_replace(
'/^.*\/produit\//',
'', $filearray[0][
'path']).
'/';
1344 $relativedir = preg_replace(
'/^'.preg_quote(DOL_DATA_ROOT,
'/').
'/',
'', $upload_dir);
1345 $relativedir = preg_replace(
'/^[\\/]/',
'', $relativedir);
1352 $hookmanager->initHooks(array(
'formfile'));
1353 $parameters = array(
1354 'filearray' => $filearray,
1355 'modulepart' => $modulepart,
1357 'forcedownload' => $forcedownload,
1358 'relativepath' => $relativepath,
1359 'relativedir' => $relativedir,
1360 'permtodelete' => $permonobject,
1361 'useinecm' => $useinecm,
1362 'textifempty' => $textifempty,
1363 'maxlength' => $maxlength,
1368 $reshook = $hookmanager->executeHooks(
'showFilesList', $parameters,
$object);
1370 if (!empty($reshook)) {
1373 if (!is_object($form)) {
1374 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.form.class.php';
1375 $form =
new Form($this->db);
1378 if (!preg_match(
'/&id=/', $param) && isset(
$object->id)) {
1379 $param .=
'&id='.$object->id;
1381 $relativepathwihtoutslashend = preg_replace(
'/\/$/',
'', $relativepath);
1382 if ($relativepathwihtoutslashend) {
1383 $param .=
'&file='.urlencode($relativepathwihtoutslashend);
1386 if ($permtoeditline < 0) {
1387 $permtoeditline = 0;
1388 if (in_array($modulepart, array(
'product',
'produit',
'service'))) {
1389 '@phan-var-force Product $object';
1391 $permtoeditline = 1;
1394 $permtoeditline = 1;
1399 $permtoeditline = 0;
1403 $url = $_SERVER[
"PHP_SELF"];
1408 $morehtmlright =
'';
1409 if (!empty($moreoptions[
'showhideaddbutton']) &&
$conf->use_javascript_ajax) {
1410 $tmpurlforbutton =
'javascript:console.log("open add file form");jQuery(".divattachnewfile").toggle(); if (!jQuery(".divattachnewfile").is(":hidden")) { jQuery(".divattachnewfile input[type=\'file\']").first().click();}void(0);';
1411 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'New'),
'',
'fa fa-plus-circle', $tmpurlforbutton,
'', $permtoeditline);
1414 if ((empty($useinecm) || $useinecm == 3 || $useinecm == 6) && $title !=
'none') {
1415 print
load_fiche_titre($title ? $title : $langs->trans(
"AttachedFiles"), $morehtmlright,
'file-upload', 0,
'',
'table-list-of-attached-files');
1417 if (!empty($moreoptions) && $moreoptions[
'afteruploadtitle']) {
1418 print
'<div class="divattachnewfile'.((!empty($moreoptions[
'showhideaddbutton']) &&
$conf->use_javascript_ajax) ?
' hidden' :
'').
'">'.$moreoptions[
'afteruploadtitle'].
'</div>';
1422 print
'<!-- html.formfile::list_of_documents -->'.
"\n";
1423 if (
GETPOST(
'action',
'aZ09') ==
'editfile' && $permtoeditline) {
1424 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?'.$param.
'" method="POST">';
1425 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1426 print
'<input type="hidden" name="action" value="renamefile">';
1427 print
'<input type="hidden" name="id" value="'.(is_object(
$object) ?
$object->id :
'').
'">';
1428 print
'<input type="hidden" name="modulepart" value="'.$modulepart.
'">';
1431 print
'<div class="div-table-responsive-no-min"'.($moreattrondiv ?
' '.$moreattrondiv :
'').
'>';
1432 print
'<table id="tablelines" class="centpercent liste noborder nobottom">'.
"\n";
1434 if (!empty($addfilterfields)) {
1435 print
'<tr class="liste_titre nodrag nodrop">';
1436 print
'<td><input type="search_doc_ref" value="'.dol_escape_htmltag(
GETPOST(
'search_doc_ref',
'alpha')).
'"></td>';
1439 if (empty($useinecm) || $useinecm == 4 || $useinecm == 5 || $useinecm == 6) {
1444 if (empty($disablemove) && count($filearray) > 1) {
1453 '@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';
1456 if ($sortfield && $sortorder) {
1457 $filearray =
dol_sort_array($filearray, $sortfield, $sortorder, 1);
1461 print
'<tr class="liste_titre nodrag nodrop">';
1469 if (empty($useinecm) || $useinecm == 4 || $useinecm == 5 || $useinecm == 6) {
1476 if (empty($disablemove) && count($filearray) > 1) {
1482 $nboffiles = count($filearray);
1483 if ($nboffiles > 0) {
1484 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
1490 $parametersByDefault = array(
1491 'modulepart' => $modulepart,
1492 'relativepath' => $relativepath,
1493 'permtoedit' => $permtoeditline,
1494 'permonobject' => $permonobject,
1496 foreach ($filearray as $key => $file) {
1497 if ($file[
'name'] !=
'.' && $file[
'name'] !=
'..' && !preg_match(
'/\.meta$/i', $file[
'name'])) {
1498 if (array_key_exists(
'rowid', $filearray[$key]) && $filearray[$key][
'rowid'] > 0) {
1499 $lastrowid = $filearray[$key][
'rowid'];
1504 $modulepart = ($file[
'modulepart'] ?? $parametersByDefault[
'modulepart']);
1505 $relativepath = ($file[
'relativepath'] ?? $parametersByDefault[
'relativepath']);
1506 $permtoeditline = ($file[
'permtoedit'] ?? $parametersByDefault[
'permtoedit']);
1507 $permonobject = ($file[
'permonobject'] ?? $parametersByDefault[
'permonobject']);
1510 if (empty($relativepath) || empty($modulepart)) {
1511 $filepath = $file[
'level1name'].
'/'.$file[
'name'];
1513 $filepath = $relativepath.$file[
'name'];
1515 if (empty($modulepart)) {
1516 $modulepart = basename(dirname($file[
'path']));
1518 if (empty($relativepath)) {
1519 $relativepath = preg_replace(
'/\/(.+)/',
'', $filepath) .
'/';
1524 print
'<!-- Line list_of_documents '.$key.
' relativepath = '.$relativepath.
' -->'.
"\n";
1527 print
'<!-- In database: position='.(array_key_exists(
'position', $filearray[$key]) ? $filearray[$key][
'position'] : 0).
' -->'.
"\n";
1528 print
'<tr class="oddeven" id="row-'.((array_key_exists(
'rowid', $filearray[$key]) && $filearray[$key][
'rowid'] > 0) ? $filearray[$key][
'rowid'] :
'AFTER'.$lastrowid.
'POS'.($i + 1)).
'">';
1532 print
'<td class="minwidth200imp tdoverflowmax500" title="'.dolPrintHTMLForAttribute($file[
'name']).
'">';
1536 print
'<a class="paddingright valignmiddle" ';
1538 print
'target="_blank" ';
1540 print
'href="'.DOL_URL_ROOT.
'/document.php?modulepart='.$modulepart;
1541 if ($forcedownload) {
1542 print
'&attachment=1';
1544 if (!empty(
$object->entity)) {
1545 print
'&entity='.$object->entity;
1547 print
'&file='.urlencode($filepath);
1549 print
img_mime($file[
'name'], $file[
'name'].
' ('.
dol_print_size($file[
'size'], 0, 0).
')',
'inline-block valignmiddle paddingright');
1550 if ($showrelpart == 1) {
1551 print $relativepath;
1557 if (
GETPOST(
'action',
'aZ09') ==
'editfile' && $file[
'name'] == basename(
GETPOST(
'urlfile',
'alpha')) && dirname($filepath) == dirname(
GETPOST(
'urlfile',
'alpha'))) {
1559 $section_dir = dirname(
GETPOST(
'urlfile',
'alpha'));
1560 if (!preg_match(
'/\/$/', $section_dir)) {
1561 $section_dir .=
'/';
1563 print
'<input type="hidden" name="section_dir" value="'.$section_dir.
'">';
1564 print
'<input type="hidden" name="renamefilefrom" value="'.dol_escape_htmltag($file[
'name']).
'">';
1565 print
'<input type="text" name="renamefileto" class="centpercentminusx" value="'.dol_escape_htmltag($file[
'name']).
'">';
1568 $filenametoshow = preg_replace(
'/\.noexe$/',
'', $file[
'name']);
1582 print
'<td class="right nowraponall">';
1583 if ($sizetoshow == $sizetoshowbytes) {
1586 print $form->textwithpicto($sizetoshow, $sizetoshowbytes, -1);
1591 print
'<td class="center nowraponall">'.dol_print_date($file[
'date'],
"dayhour",
"tzuser").
'</td>';
1594 if (empty($useinecm) || $useinecm == 4 || $useinecm == 5 || $useinecm == 6) {
1595 $fileinfo = pathinfo($file[
'name']);
1596 print
'<td class="center">';
1598 if ($useinecm == 5 || $useinecm == 6) {
1611 $urlforhref =
getAdvancedPreviewUrl($modulepart, $relativepath.$fileinfo[
'filename'].
'.'.strtolower($fileinfo[
'extension']), 1,
'&entity='.(empty(
$object->entity) ?
$conf->entity :
$object->entity));
1612 if (empty($urlforhref)) {
1613 $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']));
1614 print
'<a href="'.$urlforhref.
'" class="aphoto" target="_blank" rel="noopener noreferrer">';
1616 print
'<a href="'.$urlforhref[
'url'].
'" class="'.$urlforhref[
'css'].
'" target="'.$urlforhref[
'target'].
'" mime="'.$urlforhref[
'mime'].
'">';
1618 print
'<img class="photo maxwidth200 shadow valignmiddle"';
1619 if ($useinecm == 4 || $useinecm == 5 || $useinecm == 6) {
1620 print
' height="20"';
1623 print
' style="max-height: 24px"';
1625 print
' src="'.DOL_URL_ROOT.
'/viewimage.php?modulepart='.urlencode($modulepart).
'&entity='.(empty(
$object->entity) ?
$conf->entity :
$object->entity).
'&file='.urlencode($relativepath.$smallfile);
1626 if (!empty($filearray[$key][
'date'])) {
1627 print
'&cache='.urlencode((
string) $filearray[$key][
'date']);
1629 print
'" title="">';
1636 print
'<td class="center minwidth100 nowraponsmartphone">';
1637 if ($relativedir && $filearray[$key][
'rowid'] > 0) {
1639 print
'<label for="idshareenabled'.$key.
'">'.$langs->trans(
"FileSharedViaALink").
'</label> ';
1640 print
'<input class="inline-block" type="checkbox" id="idshareenabled'.$key.
'" name="shareenabled"'.($file[
'share'] ?
' checked="checked"' :
'').
' /> ';
1642 if ($file[
'share']) {
1644 $urlwithouturlroot = preg_replace(
'/'.preg_quote(DOL_URL_ROOT,
'/').
'$/i',
'', trim(
$dolibarr_main_url_root));
1645 $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT;
1651 if (!empty($file[
'share'])) {
1652 $paramlink .= ($paramlink ?
'&' :
'').
'hashp='.$file[
'share'];
1654 if ($forcedownload) {
1655 $paramlink .= ($paramlink ?
'&' :
'').
'attachment=1';
1658 $fulllink = $urlwithroot.
'/document.php'.($paramlink ?
'?'.$paramlink :
'');
1660 print
'<!-- shared link -->';
1661 print
'<a href="'.$fulllink.
'" target="_blank" rel="noopener">'.
img_picto($langs->trans(
"FileSharedViaALink"),
'globe').
'</a> ';
1662 print
'<input type="text" class="centpercentminusx minwidth50imp nopadding small" id="downloadlink'.$filearray[$key][
'rowid'].
'" name="downloadexternallink" title="'.
dol_escape_htmltag($langs->trans(
"FileSharedViaALink")).
'" value="'.
dol_escape_htmltag($fulllink).
'">';
1674 print
'<td class="valignmiddle right actionbuttons nowraponall"><!-- action on files -->';
1675 if ($useinecm == 1 || $useinecm == 5) {
1677 $newparam = preg_replace(
'/&file=.*$/',
'', $param);
1678 $backtopage = DOL_URL_ROOT.
'/ecm/index.php?§ion_dir='.urlencode($relativepath).$newparam;
1679 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>';
1682 if (empty($useinecm) || $useinecm == 2 || $useinecm == 3 || $useinecm == 6) {
1683 $newmodulepart = $modulepart;
1684 if (in_array($modulepart, array(
'product',
'produit',
'service'))) {
1685 $newmodulepart =
'produit|service';
1688 if ($permtoeditline) {
1689 $moreparaminurl =
'';
1691 $moreparaminurl .=
'&id='.$object->id;
1692 } elseif (
GETPOST(
'website',
'alpha')) {
1693 $moreparaminurl .=
'&website='.GETPOST(
'website',
'alpha');
1696 if ($modulepart ==
'medias' && !
GETPOST(
'website')) {
1697 $moreparaminurl .=
'&backtourl='.urlencode(DOL_URL_ROOT.
'/ecm/index_medias.php?file_manager=1&modulepart='.$modulepart.
'§ion_dir='.$relativepath);
1700 if (!preg_match(
'/\.webp$/i', $file[
'name'])) {
1701 if ($modulepart ==
'medias' && !
GETPOST(
'website')) {
1702 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>';
1703 } elseif ($modulepart ==
'medias' &&
GETPOST(
'website')) {
1704 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>';
1710 if ($permtoeditline) {
1712 $moreparaminurl =
'';
1714 $moreparaminurl .=
'&id='.$object->id;
1715 } elseif (
GETPOST(
'website',
'alpha')) {
1716 $moreparaminurl .=
'&website='.GETPOST(
'website',
'alpha');
1719 if ($modulepart ==
'medias' && !
GETPOST(
'website')) {
1720 $moreparaminurl .=
'&backtourl='.urlencode(DOL_URL_ROOT.
'/ecm/index_medias.php?file_manager=1&modulepart='.$modulepart.
'§ion_dir='.$relativepath);
1723 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>';
1727 if ($permtoeditline) {
1728 $paramsectiondir = (in_array($modulepart, array(
'medias',
'ecm')) ?
'§ion_dir='.urlencode($relativepath) :
'');
1729 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>';
1733 if ($permonobject) {
1735 if (!empty(
$conf->dol_use_jmobile)) {
1738 if (empty(
$conf->use_javascript_ajax)) {
1745 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>';
1749 if (empty($disablemove) && count($filearray) > 1) {
1750 if ($nboffiles > 1 &&
$conf->browser->layout !=
'phone') {
1751 print
'<td class="linecolmove tdlineupdown center">';
1753 print
'<a class="lineupdown" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=up&rowid='.
$object->id.
'">'.
img_up(
'default', 0,
'imgupforline').
'</a>';
1755 if ($i < ($nboffiles - 1)) {
1756 print
'<a class="lineupdown" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=down&rowid='.
$object->id.
'">'.
img_down(
'default', 0,
'imgdownforline').
'</a>';
1760 print
'<td'.(($conf->browser->layout !=
'phone') ?
' class="linecolmove tdlineupdown center"' :
' class="linecolmove center"').
'>';
1765 print
'<td class="right">';
1766 print
'<input type="hidden" name="ecmfileid" value="'.(empty($filearray[$key][
'rowid']) ?
'' : $filearray[$key][
'rowid']).
'">';
1767 print
'<input type="submit" class="button button-save smallpaddingimp" name="renamefilesave" value="'.dol_escape_htmltag($langs->trans(
"Save")).
'">';
1768 print
'<input type="submit" class="button button-cancel smallpaddingimp" name="cancel" value="'.dol_escape_htmltag($langs->trans(
"Cancel")).
'">';
1770 if (empty($disablemove) && count($filearray) > 1) {
1771 print
'<td class="right"></td>';
1779 if ($nboffiles == 0) {
1781 if (empty($disablemove) && count($filearray) > 1) {
1784 print
'<tr class="oddeven"><td colspan="'.$colspan.
'">';
1785 if (empty($textifempty)) {
1786 print
'<span class="opacitymedium">'.$langs->trans(
"NoFileFound").
'</span>';
1788 print
'<span class="opacitymedium">'.$textifempty.
'</span>';
1796 if ($nboflines > 1 && is_object(
$object)) {
1797 if (!empty(
$conf->use_javascript_ajax) && $permtoeditline) {
1798 $table_element_line =
'ecm_files';
1799 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
1805 if (
GETPOST(
'action',
'aZ09') ==
'editfile' && $permtoeditline) {
1833 public function list_of_autoecmfiles($upload_dir, $filearray, $modulepart, $param, $forcedownload = 0, $relativepath =
'', $permissiontodelete = 1, $useinecm = 0, $textifempty =
'', $maxlength = 0, $url =
'', $addfilterfields = 0)
1836 global
$conf, $langs, $hookmanager, $form;
1837 global $sortfield, $sortorder;
1838 global $search_doc_ref;
1841 dol_syslog(get_class($this).
'::list_of_autoecmfiles upload_dir='.$upload_dir.
' modulepart='.$modulepart);
1844 if (empty($useinecm) || $useinecm == 6) {
1848 $url = $_SERVER[
"PHP_SELF"];
1851 if (!empty($addfilterfields)) {
1852 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'">';
1853 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1854 print
'<input type="hidden" name="module" value="'.$modulepart.
'">';
1857 print
'<div class="div-table-responsive-no-min">';
1858 print
'<table class="noborder centpercent">'.
"\n";
1860 if (!empty($addfilterfields)) {
1861 print
'<tr class="liste_titre nodrag nodrop">';
1863 print
'<td class="liste_titre"></td>';
1865 print
'<td class="liste_titre"><input type="text" class="maxwidth100onsmartphone" name="search_doc_ref" value="'.dol_escape_htmltag($search_doc_ref).
'"></td>';
1867 print
'<td class="liste_titre"></td>';
1869 print
'<td class="liste_titre"></td>';
1871 print
'<td class="liste_titre right">';
1872 $searchpicto = $form->showFilterButtons();
1878 print
'<tr class="liste_titre">';
1879 $sortref =
"fullname";
1880 if ($modulepart ==
'invoice_supplier') {
1881 $sortref =
'level1name';
1891 $object_instance =
null;
1892 if ($modulepart ==
'company') {
1893 include_once DOL_DOCUMENT_ROOT.
'/societe/class/societe.class.php';
1894 $object_instance =
new Societe($this->db);
1895 } elseif ($modulepart ==
'invoice') {
1896 include_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
1897 $object_instance =
new Facture($this->db);
1898 } elseif ($modulepart ==
'invoice_supplier') {
1899 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
1901 } elseif ($modulepart ==
'propal') {
1902 include_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
1903 $object_instance =
new Propal($this->db);
1904 } elseif ($modulepart ==
'supplier_proposal') {
1905 include_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
1907 } elseif ($modulepart ==
'order') {
1908 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
1909 $object_instance =
new Commande($this->db);
1910 } elseif ($modulepart ==
'order_supplier') {
1911 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
1913 } elseif ($modulepart ==
'contract') {
1914 include_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
1915 $object_instance =
new Contrat($this->db);
1916 } elseif ($modulepart ==
'product') {
1917 include_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
1918 $object_instance =
new Product($this->db);
1919 } elseif ($modulepart ==
'tax') {
1920 include_once DOL_DOCUMENT_ROOT.
'/compta/sociales/class/chargesociales.class.php';
1922 } elseif ($modulepart ==
'tax-vat') {
1923 include_once DOL_DOCUMENT_ROOT.
'/compta/tva/class/tva.class.php';
1924 $object_instance =
new Tva($this->db);
1925 } elseif ($modulepart ==
'salaries') {
1926 include_once DOL_DOCUMENT_ROOT.
'/salaries/class/salary.class.php';
1927 $object_instance =
new Salary($this->db);
1928 } elseif ($modulepart ==
'project') {
1929 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
1930 $object_instance =
new Project($this->db);
1931 } elseif ($modulepart ==
'project_task') {
1932 include_once DOL_DOCUMENT_ROOT.
'/projet/class/task.class.php';
1933 $object_instance =
new Task($this->db);
1934 } elseif ($modulepart ==
'fichinter') {
1935 include_once DOL_DOCUMENT_ROOT.
'/fichinter/class/fichinter.class.php';
1936 $object_instance =
new Fichinter($this->db);
1937 } elseif ($modulepart ==
'user') {
1938 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
1939 $object_instance =
new User($this->db);
1940 } elseif ($modulepart ==
'expensereport') {
1941 include_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
1943 } elseif ($modulepart ==
'holiday') {
1944 include_once DOL_DOCUMENT_ROOT.
'/holiday/class/holiday.class.php';
1945 $object_instance =
new Holiday($this->db);
1946 } elseif ($modulepart ==
'recruitment-recruitmentcandidature') {
1947 include_once DOL_DOCUMENT_ROOT.
'/recruitment/class/recruitmentcandidature.class.php';
1949 } elseif ($modulepart ==
'banque') {
1950 include_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
1951 $object_instance =
new Account($this->db);
1952 } elseif ($modulepart ==
'bank-statement') {
1954 $object_instance =
null;
1955 } elseif ($modulepart ==
'chequereceipt') {
1956 include_once DOL_DOCUMENT_ROOT.
'/compta/paiement/cheque/class/remisecheque.class.php';
1958 } elseif ($modulepart ==
'mrp-mo') {
1959 include_once DOL_DOCUMENT_ROOT.
'/mrp/class/mo.class.php';
1960 $object_instance =
new Mo($this->db);
1962 $parameters = array(
'modulepart' => $modulepart);
1963 $reshook = $hookmanager->executeHooks(
'addSectionECMAuto', $parameters);
1964 if ($reshook > 0 && is_array($hookmanager->resArray) && count($hookmanager->resArray) > 0) {
1965 if (array_key_exists(
'classpath', $hookmanager->resArray) && !empty($hookmanager->resArray[
'classpath'])) {
1967 if (array_key_exists(
'classname', $hookmanager->resArray) && !empty($hookmanager->resArray[
'classname'])) {
1968 $tmpclassname = $hookmanager->resArray[
'classname'];
1969 if (is_string($tmpclassname) && class_exists($tmpclassname)) {
1970 $object_instance =
new $tmpclassname($this->db);
1981 $relativepathfromroot = preg_replace(
'/'.preg_quote(DOL_DATA_ROOT.
'/',
'/').
'/',
'', $upload_dir);
1982 if ($relativepathfromroot) {
1984 '@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';
1987 if ($sortfield && $sortorder) {
1988 $filearray =
dol_sort_array($filearray, $sortfield, $sortorder, 1);
1994 foreach ($filearray as $key => $file) {
1995 if (!is_dir($file[
'name'])
1996 && $file[
'name'] !=
'.'
1997 && $file[
'name'] !=
'..'
1998 && $file[
'name'] !=
'CVS'
1999 && !preg_match(
'/\.meta$/i', $file[
'name'])) {
2001 $relativefile = preg_replace(
'/'.preg_quote($upload_dir.
'/',
'/').
'/',
'', $file[
'fullname']);
2009 if ($modulepart ==
'company' || $modulepart ==
'tax' || $modulepart ==
'tax-vat' || $modulepart ==
'salaries') {
2010 preg_match(
'/(\d+)\/[^\/]+$/', $relativefile, $reg);
2011 $id = (isset($reg[1]) ? $reg[1] :
'');
2012 } elseif ($modulepart ==
'invoice_supplier') {
2013 preg_match(
'/([^\/]+)\/[^\/]+$/', $relativefile, $reg);
2014 $ref = (isset($reg[1]) ? $reg[1] :
'');
2015 if (is_numeric($ref)) {
2019 } elseif ($modulepart ==
'user') {
2021 preg_match(
'/(.*)\/[^\/]+$/', $relativefile, $reg);
2022 $id = (isset($reg[1]) ? $reg[1] :
'');
2023 } elseif ($modulepart ==
'project_task') {
2025 $reg = explode(
"/", $relativefile);
2026 $ref = (isset($reg[1]) ? $reg[1] :
'');
2027 } elseif (in_array($modulepart, array(
2030 'supplier_proposal',
2039 'recruitment-recruitmentcandidature',
2044 preg_match(
'/(.*)\/[^\/]+$/', $relativefile, $reg);
2045 $ref = (isset($reg[1]) ? $reg[1] :
'');
2047 $parameters = array(
'modulepart' => $modulepart,
'fileinfo' => $file);
2048 $reshook = $hookmanager->executeHooks(
'addSectionECMAuto', $parameters);
2049 if ($reshook > 0 && is_array($hookmanager->resArray) && count($hookmanager->resArray) > 0) {
2050 if (array_key_exists(
'ref', $hookmanager->resArray) && !empty($hookmanager->resArray[
'ref'])) {
2051 $ref = $hookmanager->resArray[
'ref'];
2053 if (array_key_exists(
'id', $hookmanager->resArray) && !empty($hookmanager->resArray[
'id'])) {
2054 $id = $hookmanager->resArray[
'id'];
2060 if (!
$id && !$ref) {
2065 if (!empty(
$conf->cache[
'modulepartobject'][$modulepart.
'_'.
$id.
'_'.$ref])) {
2071 if (is_object($object_instance)) {
2072 $object_instance->id = 0;
2073 $object_instance->ref =
'';
2075 $result = $object_instance->fetch(
$id);
2077 if (!($result = $object_instance->fetch(0, $ref))) {
2083 $result = $object_instance->fetchOneLike($ref);
2090 $conf->cache[
'modulepartobject'][$modulepart.
'_'.
$id.
'_'.$ref] = clone $object_instance;
2094 $conf->cache[
'modulepartobject'][$modulepart.
'_'.
$id.
'_'.$ref] =
'notfound';
2095 unset($filearray[$key]);
2099 if ($found <= 0 || !is_object(
$conf->cache[
'modulepartobject'][$modulepart.
'_'.
$id.
'_'.$ref])) {
2103 print
'<!-- Line list_of_autoecmfiles key='.$key.
' -->'.
"\n";
2104 print
'<tr class="oddeven">';
2106 print
'<td class="tdoverflowmax150">';
2107 if ($found > 0 && is_object(
$conf->cache[
'modulepartobject'][$modulepart.
'_'.
$id.
'_'.$ref])) {
2108 $tmpobject =
$conf->cache[
'modulepartobject'][$modulepart.
'_'.
$id.
'_'.$ref];
2110 print $tmpobject->getNomUrl(1,
'document');
2115 print $langs->trans(
"ObjectDeleted", (
$id ?
$id : $ref));
2133 print
'target="_blank" ';
2135 print
'href="'.DOL_URL_ROOT.
'/document.php?modulepart='.urlencode($modulepart);
2136 if ($forcedownload) {
2137 print
'&attachment=1';
2139 print
'&file='.urlencode($relativefile).
'">';
2146 print $this->
showPreview($file, $modulepart, $file[
'relativename']);
2153 print
'<td class="right nowraponall">';
2154 if ($sizetoshow == $sizetoshowbytes) {
2157 print $form->textwithpicto($sizetoshow, $sizetoshowbytes, -1);
2162 print
'<td class="center">'.dol_print_date($file[
'date'],
"dayhour").
'</td>';
2165 print
'<td class="right">';
2166 if (!empty($file[
'share'])) {
2168 $urlwithouturlroot = preg_replace(
'/'.preg_quote(DOL_URL_ROOT,
'/').
'$/i',
'', trim(
$dolibarr_main_url_root));
2169 $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT;
2175 if (!empty($file[
'share'])) {
2176 $paramlink .= ($paramlink ?
'&' :
'').
'hashp='.$file[
'share'];
2178 if ($forcedownload) {
2179 $paramlink .= ($paramlink ?
'&' :
'').
'attachment=1';
2182 $fulllink = $urlwithroot.
'/document.php'.($paramlink ?
'?'.$paramlink :
'');
2184 print
'<!-- shared link -->';
2185 print
img_picto($langs->trans(
"FileSharedViaALink"),
'globe').
' ';
2186 print
'<input type="text" class="quatrevingtpercent width100 nopadding nopadding small" id="downloadlink" name="downloadexternallink" value="'.dol_escape_htmltag($fulllink).
'">';
2200 if (count($filearray) == 0) {
2201 print
'<tr class="oddeven"><td colspan="5">';
2202 if (empty($textifempty)) {
2203 print
'<span class="opacitymedium">'.$langs->trans(
"NoFileFound").
'</span>';
2205 print
'<span class="opacitymedium">'.$textifempty.
'</span>';
2212 if (!empty($addfilterfields)) {
2215 return count($filearray);
2231 public function listOfLinks(
$object, $permissiontodelete = 1, $action =
null, $selected =
null, $param =
'', $htmlname =
'formaddlink', $moreoptions = array())
2233 global
$conf, $langs;
2234 global $sortfield, $sortorder;
2236 $langs->load(
"link");
2238 require_once DOL_DOCUMENT_ROOT.
'/core/class/link.class.php';
2239 $link =
new Link($this->db);
2241 if ($sortfield ==
"name") {
2242 $sortfield =
"label";
2243 } elseif ($sortfield ==
"date") {
2244 $sortfield =
"datea";
2248 $res = $link->fetchAll($links,
$object->element,
$object->id, $sortfield, $sortorder);
2249 $param .= (isset(
$object->id) && !preg_match(
'/&id='.
$object->id.
'/i', $param) ?
'&id='.$object->id :
'');
2251 $permissiontoedit = $permissiontodelete;
2253 print
'<!-- listOfLinks -->'.
"\n";
2255 $morehtmlright =
'';
2256 if (!empty($moreoptions[
'showhideaddbutton']) &&
$conf->use_javascript_ajax) {
2257 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'New'),
'',
'fa fa-plus-circle',
'javascript:console.log("open addlink form"); jQuery(".divlinkfile").toggle(); void(0);',
'', $permissiontoedit);
2261 print
load_fiche_titre($langs->trans(
"LinkedFiles"), $morehtmlright,
'link', 0,
'',
'table-list-of-links');
2263 if (!empty($moreoptions) && $moreoptions[
'afterlinktitle']) {
2264 print
'<div class="divlinkfile'.((!empty($moreoptions[
'showhideaddbutton']) &&
$conf->use_javascript_ajax) ?
' hidden' :
'').
'">'.$moreoptions[
'afterlinktitle'].
'</div>';
2267 print
'<form action="'.$_SERVER[
'PHP_SELF'].($param ?
'?'.$param :
'').
'" id="'.$htmlname.
'" method="POST">';
2268 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2270 print
'<table class="liste noborder nobottom centpercent">';
2271 print
'<tr class="liste_titre">';
2273 $langs->trans(
"Links"),
2274 $_SERVER[
'PHP_SELF'],
2295 $langs->trans(
"Date"),
2296 $_SERVER[
'PHP_SELF'],
2307 $_SERVER[
'PHP_SELF'],
2319 $nboflinks = count($links);
2320 if ($nboflinks > 0) {
2321 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
2323 foreach ($links as $key => $link) {
2324 print
'<tr class="oddeven">';
2326 if ($action ==
'update' && (
int) $selected === (
int) $link->id && $permissiontoedit) {
2328 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
2329 print
'<input type="hidden" name="linkid" value="'.$link->id.
'">';
2330 print
'<input type="hidden" name="action" value="confirm_updateline">';
2331 print $langs->trans(
'Link').
': <input type="text" name="link" value="'.$link->url.
'">';
2334 print $langs->trans(
'Label').
': <input type="text" name="label" value="'.
dol_escape_htmltag($link->label).
'">';
2336 print
'<td class="center">'.dol_print_date(
dol_now(),
"dayhour",
"tzuser").
'</td>';
2337 print
'<td class="right">';
2338 print
'<label for="idshareenabled'.$key.
'">'.$langs->trans(
"LinkSharedViaALink").
'</label> ';
2339 print
'<input class="inline-block" type="checkbox" id="idshareenabled'.$key.
'" name="shareenabled"'.($link->share ?
' checked="checked"' :
'').
' /> ';
2341 print
'<td class="right">';
2342 print
'<input type="submit" class="button button-save" name="save" value="'.dol_escape_htmltag($langs->trans(
"Save")).
'">';
2343 print
'<input type="submit" class="button button-cancel" name="cancel" value="'.dol_escape_htmltag($langs->trans(
"Cancel")).
'">';
2348 print
'<a data-ajax="false" href="'.$link->url.
'" target="_blank" rel="noopener noreferrer">';
2352 print
'<td class="right"></td>';
2353 print
'<td class="center">'.dol_print_date($link->datea,
"dayhour",
"tzuser").
'</td>';
2354 print
'<td class="center">';
2357 $urlwithouturlroot = preg_replace(
'/' . preg_quote(DOL_URL_ROOT,
'/') .
'$/i',
'', trim(
$dolibarr_main_url_root));
2358 $urlwithroot = $urlwithouturlroot . DOL_URL_ROOT;
2359 $fulllink = $urlwithroot.
'/document.php?type=link&hashp=' . $link->share;
2361 print
'<a href="'.$fulllink.
'" target="_blank" rel="noopener">'.
img_picto($langs->trans(
"FileSharedViaALink"),
'globe').
'</a> ';
2362 print
'<input type="text" class="centpercentminusx minwidth200imp nopadding small" id="downloadlink'.$link->id.
'" name="downloadexternallink" title="'.
dol_escape_htmltag($langs->trans(
"LinkSharedViaALink")).
'" value="'.
dol_escape_htmltag($fulllink).
'">';
2365 print
'<td class="right">';
2366 print
'<a href="'.$_SERVER[
'PHP_SELF'].
'?action=update&linkid='.$link->id.$param.
'&token='.
newToken().
'" class="editfilelink editfielda reposition" >'.
img_edit().
'</a>';
2367 if ($permissiontodelete) {
2368 print
' <a class="deletefilelink reposition" href="'.$_SERVER[
'PHP_SELF'].
'?action=deletelink&token='.
newToken().
'&linkid='.((int) $link->id).$param.
'">'.
img_delete().
'</a>';
2376 if ($nboflinks == 0) {
2377 print
'<tr class="oddeven"><td colspan="5">';
2378 print
'<span class="opacitymedium">'.$langs->trans(
"NoLinkFound").
'</span>';
2399 public function showPreview($file, $modulepart, $relativepath, $ruleforpicto = 0, $param =
'')
2401 global $langs,
$conf;
2404 if (
$conf->browser->layout !=
'phone' && !empty(
$conf->use_javascript_ajax)) {
2406 if (count($urladvancedpreview)) {
2407 $out .=
'<a class="pictopreview '.$urladvancedpreview[
'css'].
'" href="'.$urladvancedpreview[
'url'].
'"'.(empty($urladvancedpreview[
'mime']) ?
'' :
' mime="'.$urladvancedpreview[
'mime'].
'"').
' '.(empty($urladvancedpreview[
'target']) ?
'' :
' target="'.$urladvancedpreview[
'target'].
'"').
'>';
2409 if (empty($ruleforpicto)) {
2410 $out .=
img_picto(
'',
'search-plus',
'class="pictofixedwidth"');
2412 $out .=
img_mime($relativepath, $langs->trans(
'Preview').
' '.$file[
'name'],
'pictofixedwidth');
2416 if ($ruleforpicto < 0) {
2417 $out .=
img_picto(
'',
'generic',
'', 0, 0, 0,
'',
'paddingright pictofixedwidth');
$id
Support class for third parties, contacts, members, users or resources.
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
global $dolibarr_main_url_root
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.
completeFileArrayWithDatabaseInfo(&$filearray, $relativedir, $object=null)
Complete $filearray with data from database.
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.
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.
print_liste_field_titre($name, $file="", $field="", $begin="", $param="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
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.
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'.
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_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.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0)
Clean a string to use it as a file name.
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.