diff --git a/app/Controllers/ClaimController.php b/app/Controllers/ClaimController.php index 6e8b551..084cec2 100644 --- a/app/Controllers/ClaimController.php +++ b/app/Controllers/ClaimController.php @@ -503,59 +503,33 @@ class ClaimController extends ResourceController private function collectClaimUploadFiles(): array { $filesToProcess = []; - $candidates = []; - + + // getFileMultiple() works when input name is claim_files[] $multiple = $this->request->getFileMultiple('claim_files'); - if (!empty($multiple)) { - $candidates[] = $multiple; - } - - $single = $this->request->getFile('claim_files'); - if ($single !== null) { - $candidates[] = $single; - } - - $allFiles = $this->request->getFiles(); - if (!empty($allFiles['claim_files'])) { - $candidates[] = $allFiles['claim_files']; - } - - foreach ($candidates as $candidate) { - foreach ($this->flattenUploadedFiles($candidate) as $uploadedFile) { - if (!$this->isValidUploadFile($uploadedFile)) { - continue; + + if (!empty($multiple) && is_array($multiple)) { + foreach ($multiple as $uploadedFile) { + if ($this->isValidUploadFile($uploadedFile)) { + $filesToProcess[] = $uploadedFile; } - - // Deduplicate by temp path (same file reference can appear in multiple sources). - $filesToProcess[$uploadedFile->getTempName()] = $uploadedFile; } + return $filesToProcess; } - - 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]; + + // Fallback: getFile() may return an array of files in some CI4 versions + $single = $this->request->getFile('claim_files'); + + if (is_array($single)) { + foreach ($single as $uploadedFile) { + if ($this->isValidUploadFile($uploadedFile)) { + $filesToProcess[] = $uploadedFile; + } + } + } elseif ($this->isValidUploadFile($single)) { + $filesToProcess[] = $single; } - - if (!is_array($files)) { - return []; - } - - $result = []; - foreach ($files as $file) { - $result = array_merge($result, $this->flattenUploadedFiles($file)); - } - - return $result; + + return $filesToProcess; } private function isValidUploadFile($uploadedFile): bool @@ -584,27 +558,22 @@ class ClaimController extends ResourceController foreach ($filesToProcess as $file) { try { - $clientName = $file->getClientName(); - $clientExt = $file->getClientExtension(); - $clientMime = $file->getClientMimeType(); - $storedName = $file->getRandomName(); + $storedName = time() . '_' . $file->getRandomName(); if (!$file->move($uploadPath, $storedName)) { $result['errors'][] = $file->getErrorString() ?: 'Unable to move uploaded file'; continue; } - $inserted = $this->ClaimFilesModel->insert([ + if (!$this->ClaimFilesModel->insert([ 'claim_id' => $claimId, - 'file_name' => $clientName ?: $storedName, + 'file_name' => $file->getClientName() ?: $storedName, 'file_path' => self::CLAIM_UPLOAD_DIR . $storedName, - 'file_extension' => $clientExt, - 'file_mime_type' => $clientMime, + 'file_extension' => $file->getClientExtension(), + 'file_mime_type' => $file->getClientMimeType(), 'is_active' => 1, 'created_by' => $createdBy, - ]); - - if ($inserted === false) { + ])) { if (is_file($uploadPath . $storedName)) { unlink($uploadPath . $storedName); }