diff --git a/app/Controllers/Activities.php b/app/Controllers/Activities.php index ce67973..091378d 100644 --- a/app/Controllers/Activities.php +++ b/app/Controllers/Activities.php @@ -1141,8 +1141,30 @@ class Activities extends Controller { ]); } + if (! is_writable($uploadDir)) { + log_message('error', 'Upload directory is not writable: {path}', ['path' => $uploadDir]); + + return $this->response->setStatusCode(500)->setJSON([ + 'status' => 'error', + 'message' => 'Upload directory is not writable', + ]); + } + $filename = basename(str_replace('\\', '/', $file->getClientName())); - if (! $file->move($uploadDir, $filename, true)) { + + try { + $uploaded = $file->move($uploadDir, $filename, true); + } catch (\Throwable $e) { + log_message('error', 'Attachment upload failed: {message}', ['message' => $e->getMessage()]); + + return $this->response->setStatusCode(500)->setJSON([ + 'status' => 'error', + 'message' => 'Unable to save upload', + 'error' => $e->getMessage(), + ]); + } + + if (! $uploaded) { return $this->response->setStatusCode(500)->setJSON([ 'status' => 'error', 'message' => 'Unable to save upload',