FIX_CLAIM_FILE_UPLOAD_2
This commit is contained in:
parent
b7d52e74d0
commit
bea9f03013
@ -503,59 +503,33 @@ class ClaimController extends ResourceController
|
|||||||
private function collectClaimUploadFiles(): array
|
private function collectClaimUploadFiles(): array
|
||||||
{
|
{
|
||||||
$filesToProcess = [];
|
$filesToProcess = [];
|
||||||
$candidates = [];
|
|
||||||
|
|
||||||
|
// getFileMultiple() works when input name is claim_files[]
|
||||||
$multiple = $this->request->getFileMultiple('claim_files');
|
$multiple = $this->request->getFileMultiple('claim_files');
|
||||||
if (!empty($multiple)) {
|
|
||||||
$candidates[] = $multiple;
|
if (!empty($multiple) && is_array($multiple)) {
|
||||||
|
foreach ($multiple as $uploadedFile) {
|
||||||
|
if ($this->isValidUploadFile($uploadedFile)) {
|
||||||
|
$filesToProcess[] = $uploadedFile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $filesToProcess;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fallback: getFile() may return an array of files in some CI4 versions
|
||||||
$single = $this->request->getFile('claim_files');
|
$single = $this->request->getFile('claim_files');
|
||||||
if ($single !== null) {
|
|
||||||
$candidates[] = $single;
|
if (is_array($single)) {
|
||||||
|
foreach ($single as $uploadedFile) {
|
||||||
|
if ($this->isValidUploadFile($uploadedFile)) {
|
||||||
|
$filesToProcess[] = $uploadedFile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} elseif ($this->isValidUploadFile($single)) {
|
||||||
|
$filesToProcess[] = $single;
|
||||||
}
|
}
|
||||||
|
|
||||||
$allFiles = $this->request->getFiles();
|
return $filesToProcess;
|
||||||
if (!empty($allFiles['claim_files'])) {
|
|
||||||
$candidates[] = $allFiles['claim_files'];
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($candidates as $candidate) {
|
|
||||||
foreach ($this->flattenUploadedFiles($candidate) as $uploadedFile) {
|
|
||||||
if (!$this->isValidUploadFile($uploadedFile)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Deduplicate by temp path (same file reference can appear in multiple sources).
|
|
||||||
$filesToProcess[$uploadedFile->getTempName()] = $uploadedFile;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return array_values($filesToProcess);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Recursively extract UploadedFile instances from nested upload arrays.
|
|
||||||
*
|
|
||||||
* @param mixed $files
|
|
||||||
* @return list<\CodeIgniter\HTTP\Files\UploadedFile>
|
|
||||||
*/
|
|
||||||
private function flattenUploadedFiles($files): array
|
|
||||||
{
|
|
||||||
if ($files instanceof \CodeIgniter\HTTP\Files\UploadedFile) {
|
|
||||||
return [$files];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!is_array($files)) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = [];
|
|
||||||
foreach ($files as $file) {
|
|
||||||
$result = array_merge($result, $this->flattenUploadedFiles($file));
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function isValidUploadFile($uploadedFile): bool
|
private function isValidUploadFile($uploadedFile): bool
|
||||||
@ -584,27 +558,22 @@ class ClaimController extends ResourceController
|
|||||||
|
|
||||||
foreach ($filesToProcess as $file) {
|
foreach ($filesToProcess as $file) {
|
||||||
try {
|
try {
|
||||||
$clientName = $file->getClientName();
|
$storedName = time() . '_' . $file->getRandomName();
|
||||||
$clientExt = $file->getClientExtension();
|
|
||||||
$clientMime = $file->getClientMimeType();
|
|
||||||
$storedName = $file->getRandomName();
|
|
||||||
|
|
||||||
if (!$file->move($uploadPath, $storedName)) {
|
if (!$file->move($uploadPath, $storedName)) {
|
||||||
$result['errors'][] = $file->getErrorString() ?: 'Unable to move uploaded file';
|
$result['errors'][] = $file->getErrorString() ?: 'Unable to move uploaded file';
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$inserted = $this->ClaimFilesModel->insert([
|
if (!$this->ClaimFilesModel->insert([
|
||||||
'claim_id' => $claimId,
|
'claim_id' => $claimId,
|
||||||
'file_name' => $clientName ?: $storedName,
|
'file_name' => $file->getClientName() ?: $storedName,
|
||||||
'file_path' => self::CLAIM_UPLOAD_DIR . $storedName,
|
'file_path' => self::CLAIM_UPLOAD_DIR . $storedName,
|
||||||
'file_extension' => $clientExt,
|
'file_extension' => $file->getClientExtension(),
|
||||||
'file_mime_type' => $clientMime,
|
'file_mime_type' => $file->getClientMimeType(),
|
||||||
'is_active' => 1,
|
'is_active' => 1,
|
||||||
'created_by' => $createdBy,
|
'created_by' => $createdBy,
|
||||||
]);
|
])) {
|
||||||
|
|
||||||
if ($inserted === false) {
|
|
||||||
if (is_file($uploadPath . $storedName)) {
|
if (is_file($uploadPath . $storedName)) {
|
||||||
unlink($uploadPath . $storedName);
|
unlink($uploadPath . $storedName);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user