From 5f0491aa8e04ad240474872c4781e885378e726a Mon Sep 17 00:00:00 2001 From: Venkatesh Date: Mon, 15 Jun 2026 16:32:42 +0530 Subject: [PATCH] FIX_CORS_ISSUE --- app/Config/Exceptions.php | 4 +-- app/Controllers/ClientController.php | 12 ++++----- app/Debug/CorsExceptionHandler.php | 39 ++++++++++++++++++++++++++++ app/Filters/Cors.php | 10 ++++--- 4 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 app/Debug/CorsExceptionHandler.php diff --git a/app/Config/Exceptions.php b/app/Config/Exceptions.php index 4173dcdd..0ec3c4ba 100755 --- a/app/Config/Exceptions.php +++ b/app/Config/Exceptions.php @@ -3,7 +3,7 @@ namespace Config; use CodeIgniter\Config\BaseConfig; -use CodeIgniter\Debug\ExceptionHandler; +use App\Debug\CorsExceptionHandler; use CodeIgniter\Debug\ExceptionHandlerInterface; use Psr\Log\LogLevel; use Throwable; @@ -99,6 +99,6 @@ class Exceptions extends BaseConfig */ public function handler(int $statusCode, Throwable $exception): ExceptionHandlerInterface { - return new ExceptionHandler($this); + return new CorsExceptionHandler($this); } } diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index 299f17d3..de22eacf 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -7822,20 +7822,18 @@ class ClientController extends AdminController ->join('employees', 'clients.id = employees.client_id', 'left') ->join('employee_polices', 'employees.id = employee_polices.employee_id', 'left') ->where('client_policy.is_active', 1) - // ->where('insurers.is_active', 1) - // ->where('tpa.is_active', 1) ->where('employees.is_active', 1) ->where('employees.relationship', "Self") ->where('employee_polices.is_active', 1) ->whereIn('employees.emp_status', ['active', 'expired']) ->whereIn('employee_polices.status', ['active', 'expired']) ->where('employees.is_active', 1) - ->where('client_policy.id', $param) + ->where('employee_polices.client_policy_id', $param) ->groupBy('employees.emp_code') ->get() ->getResultArray(); - // print_r(db_connect()->getLastQuery()); die; + // print_r(db_connect()->getLastQuery()->getQuery()); die; $dataForClientAndInsurer = $this->clientPolicyModel ->select(" @@ -7938,8 +7936,8 @@ class ClientController extends AdminController ->join('employees', 'clients.id = employees.client_id') ->join('employee_polices', 'employees.id = employee_polices.employee_id AND client_policy.id = employee_polices.client_policy_id') ->where('client_policy.is_active', 1) - ->where('insurers.is_active', 1) - ->where('tpa.is_active', 1) + // ->where('insurers.is_active', 1) + // ->where('tpa.is_active', 1) ->where('employees.is_active', 1) ->whereIn('employees.emp_status', ['active', 'expired']) ->where('employees.relationship', "Self") @@ -7964,7 +7962,7 @@ class ClientController extends AdminController $data = $query->get()->getRowArray(); - // print_r(db_connect()->getLastQuery()); die; + // print_r(db_connect()->getLastQuery()->getQuery()); die; $memberData = []; $dataForClientAndInsurer = []; diff --git a/app/Debug/CorsExceptionHandler.php b/app/Debug/CorsExceptionHandler.php new file mode 100644 index 00000000..977d1257 --- /dev/null +++ b/app/Debug/CorsExceptionHandler.php @@ -0,0 +1,39 @@ +handler = new ExceptionHandler($config); + } + + public function handle( + Throwable $exception, + RequestInterface $request, + ResponseInterface $response, + int $statusCode, + int $exitCode + ): void { + (new Cors())->after($request, $response); + + $this->handler->handle($exception, $request, $response, $statusCode, $exitCode); + } +} diff --git a/app/Filters/Cors.php b/app/Filters/Cors.php index 60a97a89..6d2d3f02 100644 --- a/app/Filters/Cors.php +++ b/app/Filters/Cors.php @@ -355,9 +355,13 @@ class Cors implements FilterInterface return $response; } - // For non-OPTIONS requests, don't return a response - // Let the request proceed to the controller - // CORS headers will be added in after() method + // Apply CORS headers on the shared response before other before-filters run. + // When a before-filter returns early (4xx/5xx), CodeIgniter skips after-filters, + // so relying only on after() leaves error responses without CORS headers. + if (! empty($origin) && $this->isOriginAllowed($origin)) { + $this->addCorsHeaders(Services::response(), $request, $origin, false); + } + return null; }