FIX_CLAIM_FILE_UPLOAD_2

This commit is contained in:
VENKATESHWARAN 2026-06-01 11:26:16 +05:30
parent b7d52e74d0
commit bea9f03013

View File

@ -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);
} }