* Copyright (C) 2024 Frédéric France * Copyright (C) 2024 MDW * * This file is a modified version of datepicker.php from phpBSM to fix some * bugs, to add new features and to dramatically increase speed. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * \file htdocs/core/upload_page.php * \brief Page to show a generic upload file feature */ require_once '../main.inc.php'; /** * @var Conf $conf * @var DoliDB $db * @var HookManager $hookmanager * @var Translate $langs * @var User $user */ require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; if (GETPOST('lang', 'aZ09')) { $langs->setDefaultLang(GETPOST('lang', 'aZ09')); // If language was forced on URL by the main.inc.php } $langs->loadLangs(array("main", "other")); $action = GETPOST('action', 'aZ09'); $modulepart = GETPOST('modulepart', 'aZ09'); $upload_dir = $conf->admin->dir_temp.'/import'; // Delete the temporary files that are used when uploading files dol_delete_file($upload_dir.'/upload_page-by'.$user->id.'-*'); $error = 0; /* * Actions */ if (getDolGlobalString('MAIN_USE_TOP_MENU_IMPORT_FILE') && !is_numeric(getDolGlobalString('MAIN_USE_TOP_MENU_IMPORT_FILE'))) { $urlforuploadpage = getDolGlobalString('MAIN_USE_TOP_MENU_IMPORT_FILE'); header("Location: ".$urlforuploadpage); exit(1); } if ($action == 'uploadfile') { // Test on permission not required here. Done later if (!$modulepart) { // Should not happen print 'Error, modulepart param is empty'; exit(1); } $arrayobject = getElementProperties($modulepart); $module = $arrayobject['module']; $element = $arrayobject['element']; $dir_output = $arrayobject['dir_output']; $dir_temp = $arrayobject['dir_temp']; $permlevel1 = 'read'; $permlevel2 = ''; $fileprefix = 'unknown'; if (in_array($modulepart, array('fournisseur', 'invoice_supplier'))) { $permlevel1 = 'facture'; $permlevel2 = 'read'; $fileprefix = 'upload_page-by'.$user->id.'-'.$modulepart.'-'.(GETPOSTINT('socid') > 0 ? GETPOSTINT('socid') : 0).'-'.(GETPOSTINT('search_prodid') > 0 ? GETPOSTINT('search_prodid') : 0); } elseif ($modulepart == 'expensereport') { $fileprefix = 'upload_page-by'.$user->id.'-'.$modulepart.'-'.(GETPOSTINT('userexpensereportid') > 0 ? GETPOSTINT('userexpensereportid') : 0).'-'.(GETPOSTINT('search_prodid') > 0 ? GETPOSTINT('search_prodid') : 0); } elseif ($modulepart == 'salaries') { $fileprefix = 'upload_page-by'.$user->id.'-'.$modulepart.'-'.(GETPOSTINT('usersalaryid') > 0 ? GETPOSTINT('usersalaryid') : 0); } if ($permlevel2) { $permissiontoadd = $user->hasRight($module, $permlevel1, $permlevel2); // Used by actions_linkedfiles } else { $permissiontoadd = $user->hasRight($module, $permlevel1); // Used by actions_linkedfiles } $forceFullTextIndexation = '0'; // Used by actions_linkedfiles if (!empty($_FILES['userfile']['name'])) { $_FILES['userfile']['name'] = $fileprefix.'-'.$_FILES['userfile']['name']; include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; // @phpstan-ignore-next-line $error may have been modified by actions_linkedfiles.inc.php if (!$error) { header("Location: ".DOL_URL_ROOT.'/core/upload_page2.php?file='.urlencode($fileprefix)); exit; } } } /* * View */ $form = new Form($db); // Important: Following code is to avoid page request by browser and PHP CPU at each Dolibarr page access. /* if (empty($dolibarr_nocache) && GETPOSTINT('cache')) { header('Cache-Control: max-age='.GETPOSTINT('cache').', public'); // For a .php, we must set an Expires to avoid to have it forced to an expired value by the web server header('Expires: '.gmdate('D, d M Y H:i:s', dol_now('gmt') + GETPOSTINT('cache')).' GMT'); // HTTP/1.0 header('Pragma: token=public'); } else { // HTTP/1.0 header('Cache-Control: no-cache'); } */ $title = $langs->trans("UploadFile"); $help_url = ''; $arrayofjs = array(); $arrayofcss = array(); llxHeader('', $title, $help_url, '', 0, 0, $arrayofjs, $arrayofcss, '', 'mod-upload page-card'); print load_fiche_titre('', '', '', 0, '', '', '

'.img_picto('', 'upload').' '.$title.'

'); // Instantiate hooks of thirdparty module $hookmanager->initHooks(array('uploadform')); // Define $uploadform $uploadform = ''; $uploadform = '
'; // Form to upload a supplier invoice if (isModEnabled('supplier_invoice')) { $langs->load("bills"); $uploadform .= '
'.img_picto('', 'bill', 'class="fa-2x"').'
'.$langs->trans("SupplierInvoice").'

'; $uploadform .= img_picto('', 'company', 'class="pictofixedwidth"'); $uploadform .= $form->select_company(GETPOSTINT('socid'), 'socid', '(statut:=:0)', $langs->transnoentitiesnoconv("Supplier"), 0, 0, array(), 0, 'maxwidth200 disableautoopen'); $uploadform .= '
'; $prodid = GETPOSTINT('prodid'); $prodtext = $langs->trans("RefOrLabel"); //$uploadform .= $form->select_produits_fournisseurs(0, $prodid, 'prodid', '', 0, 0, 1, 2, $prodtext, 0, array(), GETPOSTINT('socid'), '1', 0, 'maxwidth200 disableautoopen', 0, '', null, 1); $uploadform .= img_picto('', 'product', 'class="pictofixedwidth"'); $uploadform .= $form->select_produits_fournisseurs(0, $prodid, 'prodid', '', '', array(), 1, 1, 'maxwidth200 disableautoopen', $prodtext, 1); $uploadform .= '
'; $uploadform .= '
'.$langs->trans("OrClickToSelectAFile").'...
'; } // Form to upload an expense report if (isModEnabled('expensereport')) { $langs->load("expensereport"); $uploadform .= '
'.img_picto('', 'expensereport', 'class="fa-2x"').'
'.$langs->trans("ExpenseReport").'

'; $uploadform .= img_picto('', 'user', 'class="pictofixedwidth"'); //$uploadform .= ''; $uploadform .= $form->select_dolusers(GETPOSTINT('userexpensereportid') > 0 ? GETPOSTINT('userexpensereportid') : $user->id, 'userexpensereportid', $langs->transnoentitiesnoconv("User"), null, 0, 'hierarchyme', '', '', 0, 0, '', 0, '', 'maxwidth200 disableautoopen', 1); //$uploadform .= ''; $uploadform .= '
'; $uploadform .= '
'.$langs->trans("OrClickToSelectAFile").'...
'; } // Form to upload a salary document if (isModEnabled('salaries')) { $langs->load("salaries"); $uploadform .= '
'.img_picto('', 'salary', 'class="fa-2x"').'
'.$langs->trans("UserPaySlip").'

'; $uploadform .= img_picto('', 'user', 'class="pictofixedwidth"'); //$uploadform .= ''; $uploadform .= $form->select_dolusers(GETPOSTINT('usersalaryid') > 0 ? GETPOSTINT('usersalaryid') : $user->id, 'usersalaryid', $langs->transnoentitiesnoconv("Employee"), null, 0, 'hierarchyme', '', '', 0, 0, '', 0, '', 'maxwidth200 disableautoopen', 1); //$uploadform .= ''; $uploadform .= '
'; $uploadform .= '
'.$langs->trans("OrClickToSelectAFile").'...
'; } $uploadform .= '
'; // Execute hook printSearchForm $parameters = array('uploadform' => $uploadform); $reshook = $hookmanager->executeHooks('printUploadForm', $parameters); // Note that $action and $object may have been modified by some hooks if (empty($reshook)) { $uploadform .= $hookmanager->resPrint; } else { $uploadform = $hookmanager->resPrint; } $uploadform .= '
'; // Show all forms print "\n"; print "\n"; print '
'; print ''; print ''; print ''; print ''; print ''; print '
'; print ''; print '
'."\n"; //print ''; print $uploadform; $accept = '.pdf,image/*'; $disablemulti = 1; $perm = 1; $capture = 1; $maxfilesizearray = getMaxFileSizeArray(); $max = $maxfilesizearray['max']; $maxmin = $maxfilesizearray['maxmin']; $maxphptoshow = $maxfilesizearray['maxphptoshow']; $maxphptoshowparam = $maxfilesizearray['maxphptoshowparam']; $out = ''; if ($maxmin > 0) { $out .= ''; // MAX_FILE_SIZE must precede the field type=file } $out .= ' $(document).ready(function() { jQuery('#supplierinvoice:not(.disableautoopen)').on('click', function(event) { console.log('Click on link supplierinvoice to open input file'); console.log(event); if (!event.target.closest('.disableautoopen')) { $('#modulepart').val('invoice_supplier'); $('#fileInput').click(); } }); jQuery('#userexpensereport:not(.disableautoopen)').on('click', function(event) { console.log('Click on link userexpensereport to open input file'); console.log(event); if (!event.target.closest('.disableautoopen')) { $('#modulepart').val('expensereport'); $('#fileInput').click(); } }); jQuery('#userpayroll:not(.disableautoopen)').on('click', function(event) { console.log('Click on link userpayroll to open input file'); console.log(event); if (!event.target.closest('.disableautoopen')) { $('#modulepart').val('salaries'); $('#fileInput').click(); } }); jQuery('#fileInput').on('change', function(event) { console.log(event); console.log('A file was selected, we submit the form'); $('#uploadform').submit(); }); }); "; print '
'."\n"; print '
'; print '
'; print "\n\n"; // End of page llxFooter(); $db->close();