diff --git a/htdocs/core/ajax/ajaxdirpreview.php b/htdocs/core/ajax/ajaxdirpreview.php index 51f053c9eda..cf4bf9f79bc 100644 --- a/htdocs/core/ajax/ajaxdirpreview.php +++ b/htdocs/core/ajax/ajaxdirpreview.php @@ -233,6 +233,7 @@ if ($type == 'directory') { 'holiday', 'recruitment-recruitmentcandidature', 'banque', + 'bank-statement', 'chequereceipt', 'mrp-mo' ); @@ -286,6 +287,8 @@ if ($type == 'directory') { $upload_dir = $conf->recruitment->dir_output.'/recruitmentcandidature'; } elseif ($module == 'banque') { $upload_dir = $conf->bank->dir_output; + } elseif ($module == 'bank-statement') { + $upload_dir = $conf->bank->dir_output.'/*/statement'; } elseif ($module == 'chequereceipt') { $upload_dir = $conf->bank->dir_output.'/checkdeposits'; } elseif ($module == 'mrp-mo') { @@ -300,7 +303,7 @@ if ($type == 'directory') { // Automatic list if (in_array($module, $automodules)) { - $param .= '&module='.$module; + $param .= '&module='.urlencode($module); if (isset($search_doc_ref) && $search_doc_ref != '') { $param .= '&search_doc_ref='.urlencode($search_doc_ref); } @@ -309,6 +312,7 @@ if ($type == 'directory') { $filter = preg_quote((string) $search_doc_ref, '/'); $filearray = dol_dir_list($upload_dir, "files", 1, $filter, $excludefiles, $sortfield, $sorting, 1); + //var_dump($filearray); // To allow external users,we must restrict $filearray to entries the user is a thirdparty. // This can be done by filtering on entries found into llx_ecm diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 54b63b884d3..85cedff7d47 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -1837,7 +1837,7 @@ class FormFile } print '
'; - print ''."\n"; + print '
'."\n"; if (!empty($addfilterfields)) { print ''; @@ -1927,6 +1927,9 @@ class FormFile } elseif ($modulepart == 'banque') { include_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; $object_instance = new Account($this->db); + } elseif ($modulepart == 'bank-statement') { + //include_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; + $object_instance = null; } elseif ($modulepart == 'chequereceipt') { include_once DOL_DOCUMENT_ROOT.'/compta/paiement/cheque/class/remisecheque.class.php'; $object_instance = new RemiseCheque($this->db); @@ -2050,8 +2053,8 @@ class FormFile $result = $object_instance->fetch($id); } else { if (!($result = $object_instance->fetch(0, $ref))) { - //fetchOneLike looks for objects with wildcards in its reference. - //It is useful for those masks who get underscores instead of their actual symbols (because the _ had replaced all forbidden chars into filename) + // fetchOneLike looks for objects with wildcards in its reference. + // It is useful for those masks who get underscores instead of their actual symbols (because the _ had replaced all forbidden chars into filename) // TODO Example when this is needed ? // This may find when ref is 'A_B' and date was stored as 'A~B' into database, but in which case do we have this ? // May be we can add hidden option to enable this. diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 345d170ff2d..3b61c736971 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -62,7 +62,7 @@ function dol_basename($pathfile) */ function 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) { - global $db, $hookmanager; + global $hookmanager; global $object; if ($recursive <= 1) { // Avoid too verbose log @@ -97,43 +97,52 @@ function dol_dir_list($utf8_path, $types = "all", $recursive = 0, $filter = "", $loadsize = ($mode == 1 || $mode == 3 || $sortcriteria == 'size'); $loadperm = ($mode == 1 || $mode == 4 || $sortcriteria == 'perm'); - // Clean parameters - $utf8_path = preg_replace('/([\\/]+)$/', '', $utf8_path); - $os_path = dol_osencode($utf8_path); $now = dol_now(); - $reshook = 0; $file_list = array(); - if (!$nohook && $hookmanager instanceof HookManager) { - $hookmanager->resArray = array(); + // Clean parameters + $utf8_path = preg_replace('/([\\/]+)$/', '', $utf8_path); - $hookmanager->initHooks(array('fileslib')); - - $parameters = array( - 'path' => $os_path, - 'types' => $types, - 'recursive' => $recursive, - 'filter' => $filter, - 'excludefilter' => $exclude_array, // Already converted to array. - 'sortcriteria' => $sortcriteria, - 'sortorder' => $sortorder, - 'loaddate' => $loaddate, - 'loadsize' => $loadsize, - 'mode' => $mode - ); - $reshook = $hookmanager->executeHooks('getDirList', $parameters, $object); + if (preg_match('/\*/', $utf8_path)) { + $utf8_path_array = glob($utf8_path, GLOB_ONLYDIR); // This scan dir for files. If file does not exists, return empty. + //$os_path_array = dol_dir_list($utf8_path); + } else { + $utf8_path_array = array($utf8_path); } - // $hookmanager->resArray may contain array stacked by other modules - if (empty($reshook)) { - if (!is_dir($os_path)) { - return array(); + foreach ($utf8_path_array as $utf8_path_cursor) { + $os_path = dol_osencode($utf8_path_cursor); + if (!$nohook && $hookmanager instanceof HookManager) { + $hookmanager->resArray = array(); + + $hookmanager->initHooks(array('fileslib')); + + $parameters = array( + 'path' => $os_path, + 'types' => $types, + 'recursive' => $recursive, + 'filter' => $filter, + 'excludefilter' => $exclude_array, // Already converted to array. + 'sortcriteria' => $sortcriteria, + 'sortorder' => $sortorder, + 'loaddate' => $loaddate, + 'loadsize' => $loadsize, + 'mode' => $mode + ); + $reshook = $hookmanager->executeHooks('getDirList', $parameters, $object); } - if (($dir = opendir($os_path)) === false) { - return array(); - } else { + // $hookmanager->resArray may contain array stacked by other modules + if (empty($reshook)) { + if (!is_dir($os_path)) { + continue; + } + + if (($dir = opendir($os_path)) === false) { + continue; + } + $filedate = ''; $filesize = ''; $fileperm = ''; @@ -149,7 +158,7 @@ function dol_dir_list($utf8_path, $types = "all", $recursive = 0, $filter = "", $qualified = 1; - $utf8_fullpathfile = "$utf8_path/$utf8_file"; // Temp variable for speed + $utf8_fullpathfile = $utf8_path_cursor."/".$utf8_file; // Temp variable for speed // Check if file is qualified foreach ($excludefilterarray as $filt) { @@ -230,14 +239,14 @@ function dol_dir_list($utf8_path, $types = "all", $recursive = 0, $filter = "", } } closedir($dir); - - // Obtain a list of columns - if (!empty($sortcriteria) && $sortorder) { - $file_list = dol_sort_array($file_list, $sortcriteria, ($sortorder == SORT_ASC ? 'asc' : 'desc')); - } } } + // Obtain a list of columns + if (!empty($sortcriteria) && $sortorder) { + $file_list = dol_sort_array($file_list, $sortcriteria, ($sortorder == SORT_ASC ? 'asc' : 'desc')); + } + if ($hookmanager instanceof HookManager && is_array($hookmanager->resArray)) { $file_list = array_merge($file_list, $hookmanager->resArray); } @@ -250,7 +259,7 @@ function dol_dir_list($utf8_path, $types = "all", $recursive = 0, $filter = "", * Scan a directory and return a list of files/directories. * Content for string is UTF8 and dir separator is "/". * - * @param string $path Starting path from which to search. Example: 'produit/MYPROD' + * @param string $path Starting path from which to search. Example: 'produit/MYPROD' or 'produit/%' * @param string $filter Regex filter to restrict list. This regex value must be escaped for '/', since this char is used for preg_match function * @param string[]|null $excludefilter Array of Regex for exclude filter (example: array('(\.meta|_preview.*\.png)$','^\.')) * @param string $sortcriteria Sort criteria ("","fullname","name","date","size") @@ -272,9 +281,9 @@ function dol_dir_list_in_database($path, $filter = "", $excludefilter = null, $s $sql .= ", description"; } $sql .= " FROM ".MAIN_DB_PREFIX."ecm_files"; - $sql .= " WHERE entity = ".$conf->entity; + $sql .= " WHERE entity = ".((int) $conf->entity); if (preg_match('/%$/', $path)) { - $sql .= " AND filepath LIKE '".$db->escape($path)."'"; + $sql .= " AND (filepath LIKE '".$db->escape($path)."' OR filepath = '".$db->escape(preg_replace('/\/%$/', '', $path))."')"; } else { $sql .= " AND filepath = '".$db->escape($path)."'"; } @@ -3577,7 +3586,6 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, if ($fuser->hasRight($tmpmodule, $read) || preg_match('/^specimen/i', $original_file)) { $accessallowed = 1; } - $original_file = $conf->$tmpmodule->dir_output.'/temp/massgeneration/'.$user->id.'/'.$original_file; } else { if (empty($conf->$modulepart->dir_output)) { // modulepart not supported diff --git a/htdocs/ecm/index_auto.php b/htdocs/ecm/index_auto.php index b7b30ba4d1e..d6f9f5142f2 100644 --- a/htdocs/ecm/index_auto.php +++ b/htdocs/ecm/index_auto.php @@ -393,6 +393,9 @@ if (!getDolGlobalString('ECM_AUTO_TREE_HIDEN')) { $langs->load("banks"); $rowspan++; $sectionauto[] = array('position' => 180, 'level' => 1, 'module' => 'banque', 'test' => isModEnabled('bank'), 'label' => $langs->trans("BankAccount"), 'desc' => $langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("BankAccount"))); + // TODO Enable this + //$rowspan++; + //$sectionauto[] = array('position' => 182, 'level' => 1, 'module' => 'bank-statement', 'test' => isModEnabled('bank'), 'label' => $langs->trans("BankAccount").' - '.$langs->trans("Statement"), 'desc' => $langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("BankAccount").' - '.$langs->transnoentitiesnoconv("Statement"))); $rowspan++; $sectionauto[] = array('position' => 190, 'level' => 1, 'module' => 'chequereceipt', 'test' => isModEnabled('bank'), 'label' => $langs->trans("CheckReceipt"), 'desc' => $langs->trans("ECMDocsBy", $langs->transnoentitiesnoconv("CheckReceipt"))); }