From 0e1648b6289324093866374d7245106ed590d953 Mon Sep 17 00:00:00 2001 From: velz Date: Wed, 11 Feb 2026 17:51:36 +0530 Subject: [PATCH 01/13] FIX_CLAIMS_SQL_INJECTION --- app/Models/TicketMasterModel.php | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/app/Models/TicketMasterModel.php b/app/Models/TicketMasterModel.php index 7b50d11e..324a18db 100644 --- a/app/Models/TicketMasterModel.php +++ b/app/Models/TicketMasterModel.php @@ -664,9 +664,13 @@ class TicketMasterModel extends Model // Execute the query $binds = ["start_date"=>$start_date,"end_date"=>$end_date]; + // Merge policy_type binds if present + if (!empty($statusBinds)) { + $binds = array_merge($binds, $statusBinds); + } $result = $this->db->query($sql, $binds)->getResultArray(); - - // print_rr($result);die(); + // print_rr(count(($result))); + // print_rr($this->db->lastQuery);die(); return $result; } @@ -729,8 +733,13 @@ class TicketMasterModel extends Model "; $binds = ["start_date"=>$start_date,"end_date"=>$end_date]; + // Merge policy_type binds if present + if (!empty($statusBinds)) { + $binds = array_merge($binds, $statusBinds); + } $result = $this->db->query($sql,$binds)->getResultArray(); - + // print_rr(count(($result))); + // print_rr($this->db->lastQuery);die(); return $result; } else { $ticket_type_data_1 = ""; @@ -804,8 +813,13 @@ class TicketMasterModel extends Model $binds = ["start_date"=>$start_date,"end_date"=>$end_date]; // Execute the query - $result = $this->db->query($sql,$binds)->getResultArray(); + // Merge policy_type binds if present + if (!empty($statusBinds)) { + $binds = array_merge($binds, $statusBinds); + } + $result = $this->db->query($sql,$binds)->getResultArray(); + // print_rr($this->db->lastQuery);die(); return $result; From dead8754599212fd1ba98a2333cd825ed248f199 Mon Sep 17 00:00:00 2001 From: "sanjeev.p" Date: Wed, 11 Feb 2026 19:09:10 +0530 Subject: [PATCH 02/13] FIX_NameRestrict --- app/Controllers/ClientController.php | 12 ++++++-- app/Controllers/LeadsController.php | 28 +++++++++++++------ .../PolicyTransactionController.php | 21 +++++++------- 3 files changed, 40 insertions(+), 21 deletions(-) diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index b0e59d7a..ad3b28d1 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -1145,8 +1145,16 @@ class ClientController extends AdminController $this->myLogger->logme('error', 'Create Client KYC function called'); $rules = [ - 'file_name' => [ - 'rules' => 'uploaded[file_name]|max_size[file_name,5120]|ext_in[file_name,pdf,jpg,jpeg,png]', + 'other_docs_name.*' => [ + 'label' => 'Documents Name', + 'rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9_\- ]+$/]', + 'errors' => [ + 'regex_match' => 'Document Name can only contain letters, numbers, hyphens, and underscores' + ] + ], + + 'file_name.*' => [ + 'rules' => 'uploaded[file_name.*]|max_size[file_name.*,5120]|ext_in[file_name.*,pdf,jpg,jpeg,png]', 'errors' => [ 'uploaded' => 'KYC document file is required', 'max_size' => 'File size should not exceed 5MB', diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php index dc577af0..092003a4 100644 --- a/app/Controllers/LeadsController.php +++ b/app/Controllers/LeadsController.php @@ -392,12 +392,15 @@ class LeadsController extends BaseController 'errors' => ['required' => 'Entity Type is required'] ], 'client_name' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Client Name is required'] + 'rules' => 'required|regex_match[/^[a-zA-Z0-9_ -]+$/]', + 'errors' => [ + 'required' => 'Client Name is required', + 'regex_match' => 'Client Name only letters, numbers and characters _ - and space are allowed' + ] ], 'client_short_name' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Client Short Name is required'] + 'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]', + 'errors' => ['required' => 'Client Short Name is required','regex_match' => 'Client Short Name only letters, numbers and characters _ and - are allowed'] ], 'gst' => [ 'rules' => 'required', @@ -412,18 +415,25 @@ class LeadsController extends BaseController 'errors' => ['required' => 'Branch Code is required'] ], 'contact_person_name' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Contact Person Name is required'] + 'rules' => 'required|regex_match[/^[a-zA-Z0-9_ -]+$/]', + 'errors' => [ + 'required' => 'Contact Person Name is required', + 'regex_match' => 'Contact person name only letters, numbers and characters _ - and space are allowed' + ] ], 'contact_person_mobile' => [ 'rules' => 'required', - 'errors' => ['required' => 'Contact Person Mobile is required'] + 'rules' => 'required|regex_match[/^[0-9]+$/]', + 'errors' => ['required' => 'Contact Person Mobile is required' , + 'regex_match' => 'Contact Person Mobile Only numbers' + ] ], 'contact_person_email' => [ - 'rules' => 'required|valid_email', + 'rules' => 'required|valid_email|regex_match[/^[a-zA-Z0-9_-]+$/]', 'errors' => [ 'required' => 'Contact Person Email is required', - 'valid_email' => 'Please enter a valid email address' + 'valid_email' => 'Please enter a valid email address', + 'regex_match' => 'Contact Person Email Only letters, numbers and characters _ - @ . are allowed' ] ], 'salse_person_id' => [ diff --git a/app/Controllers/PolicyTransactionController.php b/app/Controllers/PolicyTransactionController.php index 62a75808..efc3efcd 100644 --- a/app/Controllers/PolicyTransactionController.php +++ b/app/Controllers/PolicyTransactionController.php @@ -1012,11 +1012,12 @@ 'calc_policy_issue_date.*' => ['label' => 'Policy Issue Date', 'rules' => 'required','errors' => [ 'required' => 'Policy Issue Date is required' ]], 'co_share_per.*' => ['label' => 'Co-Share %', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Co-Share % must be a valid decimal.']], 'non_comm_per_amt.*' => ['label' => 'Non-Comm Premium', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Amount must be numeric.']], - 'base_premium.*' => ['label' => 'Base Premium', 'rules' => 'required|numeric|differs[0]','errors' => [ - 'required' => 'Base Premium is required.', - 'numeric' => 'Base Premium must be a valid number.', - 'differs' => 'Base Premium cannot be zero; please enter a positive or negative value.' - ]], + 'base_premium.*' => ['label' => 'Base Premium', 'rules' => 'required|regex_match[/^-?\d+(\.\d+)?$/]|differs[0]', + 'errors' => [ + 'required' => 'Base Premium is required.', + 'regex_match' => 'Base Premium must be a valid positive or negative number.', + 'differs' => 'Base Premium cannot be zero.' + ]], 'tp_premium.*' => ['label' => 'TP Premium', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'TP Premium must be numeric.']], 'ter_premium.*' => ['label' => 'TEP Premium', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'TEP Premium must be numeric.']], 'co_premium.*' => ['label' => 'Co-Premium', 'rules' => 'permit_empty|decimal','errors'=> ['decimal' => 'Co-Premium must be numeric.']], @@ -2482,11 +2483,11 @@ ], 'base_premium.*' => [ 'label' => 'Base Premium', - 'rules' => 'required|numeric|differs[0]', - 'errors' => [ - 'required' => 'Base Premium is required.', - 'numeric' => 'Base Premium must be a valid number.', - 'differs' => 'Base Premium cannot be zero; please enter a positive or negative value.' + 'rules' => 'required|regex_match[/^-?\d+(\.\d+)?$/]|differs[0]', + 'errors' => [ + 'required' => 'Base Premium is required.', + 'regex_match' => 'Base Premium must be a valid positive or negative number.', + 'differs' => 'Base Premium cannot be zero.' ] ], 'total.*' => [ From fa69f2780ce5ada866814d0e2855f299d24c1eed Mon Sep 17 00:00:00 2001 From: velz Date: Thu, 12 Feb 2026 12:04:33 +0530 Subject: [PATCH 03/13] FIX_SQL_INJECT2 --- app/Config/Acl.php | 6 ++++++ app/Controllers/EmployeeController.php | 2 +- app/Controllers/VidalApiController.php | 6 +++--- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/Config/Acl.php b/app/Config/Acl.php index b122e08b..a1b44339 100644 --- a/app/Config/Acl.php +++ b/app/Config/Acl.php @@ -36,6 +36,12 @@ class Acl 'teams' => [] ], + // ===================== VIEW INCEPTION PAGE ===================== + '#^/hrFileList#' => [ + 'roles' => [ ADMIN_ROLE_ID,HEAD_ROLE_ID, MANAGER_ROLE_ID, STAFF_ROLE_ID, ACCOUNT_MANAGER_ROLE_ID], + 'teams' => [] + ], + // ===================== USER MANAGEMENT ===================== '#^/user#' => [ 'roles' => [ HEAD_ROLE_ID,ADMIN_ROLE_ID], diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php index 66b44c37..f754b918 100755 --- a/app/Controllers/EmployeeController.php +++ b/app/Controllers/EmployeeController.php @@ -1905,7 +1905,7 @@ class EmployeeController extends AdminController $query = " UPDATE employee_polices SET employee_polices.status = 'truncated', employee_polices.is_active = 0 - WHERE employee_polices.file_id == :file_id: + WHERE employee_polices.file_id = :file_id: "; $binds = ["file_id" => $file_id]; diff --git a/app/Controllers/VidalApiController.php b/app/Controllers/VidalApiController.php index cba86afd..eac51552 100644 --- a/app/Controllers/VidalApiController.php +++ b/app/Controllers/VidalApiController.php @@ -836,9 +836,9 @@ class VidalApiController extends BaseController // log_message('error', "✅ Match found: emp_code={$row['empNo']} policy={$row['policyNumber']}"); $sql = "UPDATE employee_polices - SET tpa_id = ? - WHERE id = ?"; - $this->db->query($sql, [$row['enrollmentId'], $policy_data['emp_policy_id']]); + SET tpa_id = :tpa_id:, + WHERE id = :emp_policy_id:"; + $this->db->query($sql, ["tpa_id"=>$row['enrollmentId'], "emp_policy_id"=>$policy_data['emp_policy_id']]); // for e-card send if(strtolower(trim($policy_data['relationship'])) == 'self'){ From dad3b50c10d4d0e77f1bd7d173e47ca9dbb3478b Mon Sep 17 00:00:00 2001 From: "sanjeev.p" Date: Thu, 12 Feb 2026 12:23:30 +0530 Subject: [PATCH 04/13] FIX_recommit FE validation --- app/Controllers/ClientController.php | 461 ++++++++++++++---- app/Controllers/EmployeeController.php | 6 +- app/Controllers/LeadsController.php | 39 +- app/Controllers/MasterController.php | 35 +- .../PolicyTransactionController.php | 6 +- app/Controllers/ThzController.php | 6 +- app/Controllers/TicketController.php | 388 ++++++++++++--- app/Controllers/UserController.php | 18 +- app/Views/client_kyc.php | 53 +- app/Views/client_rm.php | 28 +- app/Views/kyc_entity_type_basic_info.php | 26 +- 11 files changed, 862 insertions(+), 204 deletions(-) diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index ad3b28d1..2874c2cc 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -974,22 +974,28 @@ class ClientController extends AdminController $rules = [ 'entity_type_id' => [ - 'rules' => 'required', + 'rules' => 'required|numeric', 'errors' => [ 'required' => 'Entity Type is required', + 'numeric' => 'Invalid Entity Type selected' ] ], 'client_name' => [ - 'rules' => 'required|alpha_space', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_-]+$/]|min_length[2]||max_length[45]', 'errors' => [ - 'required' => 'Client Name is required', - 'alpha_space' => 'Client Name can only contain alphabets and spaces.', + 'required' => 'Client Name is required', + 'regex_match' => 'Client Name can only contain letters, numbers, spaces, hyphens(-), and underscores(_).', + 'min_length' => 'Client Name must be at least 2 characters.', + 'max_length' => 'Client Name must not exceed 45 characters.', ] ], 'short_name' => [ - 'rules' => 'required', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]|min_length[2]||max_length[15]', 'errors' => [ - 'required' => 'Client Short Name is required', + 'required' => 'Client Short Name is required', + 'regex_match' => 'Client Short Name can only contain letters, numbers, hyphens(-), and underscores(_) with no spaces.', + 'min_length' => 'Client Short Name must be at least 2 characters.', + 'max_length' => 'Client Short Name must not exceed 15 characters.', ] ], 'pan' => [ @@ -1145,7 +1151,7 @@ class ClientController extends AdminController $this->myLogger->logme('error', 'Create Client KYC function called'); $rules = [ - 'other_docs_name.*' => [ + 'other_docs_name' => [ 'label' => 'Documents Name', 'rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9_\- ]+$/]', 'errors' => [ @@ -1153,8 +1159,8 @@ class ClientController extends AdminController ] ], - 'file_name.*' => [ - 'rules' => 'uploaded[file_name.*]|max_size[file_name.*,5120]|ext_in[file_name.*,pdf,jpg,jpeg,png]', + 'file_name' => [ + 'rules' => 'uploaded[file_name]|max_size[file_name,5120]|ext_in[file_name,pdf,jpg,jpeg,png]', 'errors' => [ 'uploaded' => 'KYC document file is required', 'max_size' => 'File size should not exceed 5MB', @@ -1516,6 +1522,52 @@ class ClientController extends AdminController $this->myLogger->logme('error', 'Client relation function called'); + $rules = [ + // --- Hidden Fields --- + 'PrimaryKey' => [ + 'rules' => 'permit_empty|numeric', + ], + 'client_id' => [ + 'rules' => 'required|numeric', + 'errors' => ['required' => 'Client ID is missing.'] + ], + + // --- Account Manager (Array Category) --- + // Note the .* which validates every item inside the multiple select array + 'account_manager' => [ + 'rules' => 'required', + 'errors' => [ + 'required' => 'Please select at least one Account Manager (L1).', + ] + ], + + // --- Manager (L2) --- + 'manager' => [ + 'rules' => 'required|numeric', + 'errors' => [ + 'required' => 'Please select a Manager (L2).', + 'numeric' => 'Invalid Manager selection.' + ] + ], + + // --- Head --- + 'head' => [ + 'rules' => 'required|numeric', + 'errors' => [ + 'required' => 'Please select a Head.', + 'numeric' => 'Invalid Head selection.' + ] + ], + ]; + if (!$this->validate($rules)) { + return $this->response->setStatusCode(400)->setJSON([ + 'status' => false, + 'message' => 'Input validation failed', + 'code' => 400, + 'errors' => $this->validator->getErrors() + ]); + } + $data['client_id'] = $this->request->getPost('client_id'); $data['created_by'] = get_session_userid(); $inserted = false; @@ -1550,6 +1602,52 @@ class ClientController extends AdminController public function editClientRelation() { $this->myLogger->logme('error', 'Client relation function called'); + $rules = [ + // --- Hidden Fields --- + 'PrimaryKey' => [ + 'rules' => 'permit_empty|numeric', + ], + + 'client_id' => [ + 'rules' => 'required|numeric', + 'errors' => ['required' => 'Client ID is missing.'] + ], + + // --- Account Manager (Array Category) --- + // Note the .* which validates every item inside the multiple select array + 'account_manager' => [ + 'rules' => 'required', + 'errors' => [ + 'required' => 'Please select at least one Account Manager (L1).', + ] + ], + + // --- Manager (L2) --- + 'manager' => [ + 'rules' => 'required|numeric', + 'errors' => [ + 'required' => 'Please select a Manager (L2).', + 'numeric' => 'Invalid Manager selection.' + ] + ], + + // --- Head --- + 'head' => [ + 'rules' => 'required|numeric', + 'errors' => [ + 'required' => 'Please select a Head.', + 'numeric' => 'Invalid Head selection.' + ] + ], + ]; + if (!$this->validate($rules)) { + return $this->response->setStatusCode(400)->setJSON([ + 'status' => false, + 'message' => 'Input validation failed', + 'code' => 400, + 'errors' => $this->validator->getErrors() + ]); + } $id = $this->request->getPost('PrimaryKey'); $data['client_id'] = $this->request->getPost('client_id'); @@ -1627,84 +1725,89 @@ class ClientController extends AdminController $this->myLogger->logme('error', 'Client branch CREATE function called'); $rules = [ - 'branch_name' => [ - 'rules' => 'required', - 'errors' => [ - 'required' => 'Branch Name is required', - ] - ], - 'branch_code' => [ - 'rules' => 'required', - 'errors' => [ - 'required' => 'Branch Code is required', - ] - ], - 'address1' => [ - 'rules' => 'required', - 'errors' => [ - 'required' => 'Address Line 1 is required', - ] - ], - 'state' => [ - 'rules' => 'required', - 'errors' => [ - 'required' => 'State is required', - ] - ], - 'district' => [ - 'rules' => 'required', - 'errors' => [ - 'required' => 'District is required.', - ] - ], - 'city' => [ - 'rules' => 'required', - 'errors' => [ - 'required' => 'City is required.', - ] - ], - 'pincode' => [ - 'rules' => 'required', - 'errors' => [ - 'required' => 'Pincode is required.', - ] - ], - 'gst' => [ - 'rules' => 'required|regex_match[/^\d{2}[A-Z]{5}\d{4}[A-Z]{1}[A-Z\d]{1}Z[A-Z\d]{1}$/]', - 'errors' => [ - 'required' => 'GST number is required', - 'regex_match' => 'Invalid GST Number. Example: 12ABCDE1234F5Z6' - ] - ], - 'name.*' => [ - 'rules' => 'required|alpha_space', - 'errors' => [ - 'required' => 'Contact name is required', - 'alpha_space' => 'Contact name may contain only letters and spaces' - ] - ], - 'designation.*' => [ - 'rules' => 'required|alpha_space', - 'errors' => [ - 'required' => 'Designation is required', - 'alpha_space' => 'Designation may contain only letters and spaces' - ] - ], - 'email.*' => [ - 'rules' => 'required|valid_email', - 'errors' => [ - 'required' => 'Email is required', - 'valid_email' => 'Please enter a valid email address' - ] - ], - 'mobile.*' => [ - 'rules' => 'required|numeric|exact_length[10]', - 'errors' => [ - 'required' => 'Mobile number is required', - 'numeric' => 'Mobile number must contain digits only', - 'exact_length' => 'Mobile number must be exactly 10 digits' - ] - ], + 'branch_name' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_-]+$/]|min_length[3]', + 'errors' => [ + 'required' => 'Branch Name is required', + 'regex_match' => 'Branch Name can only contain letters, numbers, spaces, hyphens(-), and underscores(_).', + ] + ], + 'branch_code' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]', + 'errors' => [ + 'required' => 'Branch Code is required', + 'regex_match' => 'Branch Code can only contain letters, numbers, hyphens(-), and underscores(_).', + ] + ], + 'address1' => [ + 'rules' => 'required', + 'errors' => ['required' => 'Address Line 1 is required'] + ], + 'address2' => [ + 'rules' => 'permit_empty|string', + ], + 'state' => [ + 'rules' => 'required|numeric', + 'errors' => ['required' => 'State is required'] + ], + 'district' => [ + 'rules' => 'required', + 'errors' => ['required' => 'District is required.'] + ], + 'city' => [ + 'rules' => 'required', + 'errors' => ['required' => 'City is required.'] + ], + 'pincode' => [ + 'rules' => 'required|numeric|exact_length[6]', + 'errors' => [ + 'required' => 'Pincode is required.', + 'numeric' => 'Pincode must be numeric', + 'exact_length' => 'Pincode must be exactly 6 digits' + ] + ], + 'gst' => [ + 'rules' => 'required|regex_match[/^\d{2}[A-Z]{5}\d{4}[A-Z]{1}[A-Z\d]{1}Z[A-Z\d]{1}$/]', + 'errors' => [ + 'required' => 'GST number is required', + 'regex_match' => 'Invalid GST Number format.' + ] + ], + 'name.*' => [ + 'rules' => 'required|alpha_space', + 'errors' => [ + 'required' => 'Contact name is required', + 'alpha_space' => 'Contact name may contain only letters and spaces' + ] + ], + 'designation.*' => [ + 'rules' => 'required|alpha_space', + 'errors' => [ + 'required' => 'Designation is required', + 'alpha_space' => 'Designation may contain only letters and spaces' + ] + ], + 'email.*' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'errors' => [ + 'required' => 'Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' + ] + ], + 'mobile.*' => [ + 'rules' => 'required|numeric|exact_length[10]', + 'errors' => [ + 'required' => 'Mobile number is required', + 'numeric' => 'Mobile number must contain digits only', + 'exact_length' => 'Mobile number must be exactly 10 digits' + ] + ], + 'units.*' => [ + 'rules' => 'permit_empty|numeric' // For the multiple select + ], + 'sez' => [ + 'rules' => 'permit_empty' // For the checkbox + ] ]; if (!$this->validate($rules)) { @@ -2080,11 +2183,11 @@ class ClientController extends AdminController ] ], 'email.*' => [ - 'rules' => 'required|valid_email', - 'errors' => [ - 'required' => 'Email is required', - 'valid_email' => 'Please enter a valid email address' - ] + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'errors' => [ + 'required' => 'Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' + ] ], 'mobile.*' => [ 'rules' => 'required|numeric|exact_length[10]', @@ -2382,6 +2485,92 @@ class ClientController extends AdminController $request_post_data = $this->request->getPost(); $sanitized_post_data = sanitizeInputArrayAdvanced($request_post_data); + $rules = [ + // --- BASIC SELECTS (Required) --- + 'client_branch_id' => [ + 'rules' => 'required', + 'errors' => ['required' => 'Please select a Client Branch.'] + ], + 'policy_type_id' => [ + 'rules' => 'required|is_natural_no_zero', + 'errors' => [ + 'required' => 'Policy Type is required.', + 'is_natural_no_zero' => 'Please select a valid Policy Type.' + ] + ], + 'insurer' => [ + 'rules' => 'required', + 'errors' => ['required' => 'Please select an Insurer.'] + ], + 'tpa' => [ + 'rules' => 'required', + 'errors' => ['required' => 'Please select a TPA.'] + ], + + // --- TEXT FIELDS (Required & Specific Format) --- + 'policy_no' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_\-\/\\\]+$/]', + 'errors' => [ + 'required' => 'This field is required.', + 'regex_match' => 'Only letters, numbers, spaces, _, -, /, and \ are allowed.' + ] + ], + 'gst' => [ + 'rules' => 'required|numeric|greater_than_equal_to[0]|less_than_equal_to[100]', + 'errors' => [ + 'required' => 'GST percentage is required.', + 'numeric' => 'GST must be a valid number.', + 'greater_than_equal_to' => 'GST cannot be negative.', + 'less_than_equal_to' => 'GST percentage cannot exceed 100%.' + ] + ], + + // --- DATE FIELDS (Required) --- + 'policy_start_date' => [ + 'rules' => 'required', + 'errors' => [ + 'required' => 'Start date is required.', + ] + ], + 'policy_end_date' => [ + 'rules' => 'required', + 'errors' => [ + 'required' => 'End date is required.', + ] + ], + + // --- PERMIT EMPTY FIELDS (Optional) --- + 'base_policy' => [ + 'rules' => 'permit_empty' + ], + 'wellness_plan_id' => [ + 'rules' => 'permit_empty|alpha_numeric', + 'errors' => [ + 'alpha_numeric' => 'Wellness Plan ID can only contain letters and numbers (no spaces or special characters).' + ] + ], + 'wellness_vendor_id' => [ + 'rules' => 'permit_empty' + ], + 'disclaimer' => [ + 'rules' => 'permit_empty|string|min_length[5]', + 'errors' => ['min_length' => 'Disclaimer should be at least 5 characters long if provided.'] + ], + + // --- CHECKBOXES (Permit Empty) --- + 'enrolment_visibility' => ['rules' => 'permit_empty'], + 'is_lgbtq' => ['rules' => 'permit_empty'] + ]; + + if (!$this->validate($rules)) { + return $this->response->setStatusCode(400)->setJSON([ + 'status' => false, + 'message' => 'Input validation failed', + 'code' => 400, + 'errors' => $this->validator->getErrors() + ]); + } + $policy_type_id = $sanitized_post_data['policy_type_id'] ?? null; $client_branch_id = $sanitized_post_data['client_branch_id'] ?? null; $client_id = $sanitized_post_data['client_id'] ?? null; @@ -2479,6 +2668,94 @@ class ClientController extends AdminController /** here ci4 rules not implemented, because UI screen Fields are hide/show implemented thats why */ public function editClientPolicy() { + $rules = [ + // --- BASIC SELECTS (Required) --- + 'client_branch_id' => [ + 'rules' => 'required', + 'errors' => ['required' => 'Please select a Client Branch.'] + ], + 'policy_type_id' => [ + 'rules' => 'required|is_natural_no_zero', + 'errors' => [ + 'required' => 'Policy Type is required.', + 'is_natural_no_zero' => 'Please select a valid Policy Type.' + ] + ], + 'insurer' => [ + 'rules' => 'required', + 'errors' => ['required' => 'Please select an Insurer.'] + ], + 'tpa' => [ + 'rules' => 'required', + 'errors' => ['required' => 'Please select a TPA.'] + ], + + // --- TEXT FIELDS (Required & Specific Format) --- + 'policy_no' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_\-\/\\\]+$/]', + 'errors' => [ + 'required' => 'This field is required.', + 'regex_match' => 'Only letters, numbers, spaces, _, -, /, and \ are allowed.' + ] + ], + 'gst' => [ + 'rules' => 'required|numeric|greater_than_equal_to[0]|less_than_equal_to[100]', + 'errors' => [ + 'required' => 'GST percentage is required.', + 'numeric' => 'GST must be a valid number.', + 'greater_than_equal_to' => 'GST cannot be negative.', + 'less_than_equal_to' => 'GST percentage cannot exceed 100%.' + ] + ], + + // --- DATE FIELDS (Required) --- + 'policy_start_date' => [ + 'rules' => 'required|valid_date', + 'errors' => [ + 'required' => 'Start date is required.', + 'valid_date' => 'Enter a valid date format (YYYY-MM-DD).' + ] + ], + 'policy_end_date' => [ + 'rules' => 'required|valid_date', + 'errors' => [ + 'required' => 'End date is required.', + 'valid_date' => 'Enter a valid date format (YYYY-MM-DD).' + ] + ], + + // --- PERMIT EMPTY FIELDS (Optional) --- + 'base_policy' => [ + 'rules' => 'permit_empty' + ], + 'wellness_plan_id' => [ + 'rules' => 'permit_empty|alpha_numeric', + 'errors' => [ + 'alpha_numeric' => 'Wellness Plan ID can only contain letters and numbers (no spaces or special characters).' + ] + ], + 'wellness_vendor_id' => [ + 'rules' => 'permit_empty' + ], + 'disclaimer' => [ + 'rules' => 'permit_empty|string|min_length[5]', + 'errors' => ['min_length' => 'Disclaimer should be at least 5 characters long if provided.'] + ], + + // --- CHECKBOXES (Permit Empty) --- + 'enrolment_visibility' => ['rules' => 'permit_empty'], + 'is_lgbtq' => ['rules' => 'permit_empty'] + ]; + + if (!$this->validate($rules)) { + return $this->response->setStatusCode(400)->setJSON([ + 'status' => false, + 'message' => 'Input validation failed', + 'code' => 400, + 'errors' => $this->validator->getErrors() + ]); + } + $this->myLogger->logme('error', 'Client policy function called'); $data = $this->request->getPost(); $sanitized_post_data = sanitizeInputArrayAdvanced($data); diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php index f754b918..4a019293 100755 --- a/app/Controllers/EmployeeController.php +++ b/app/Controllers/EmployeeController.php @@ -2767,10 +2767,10 @@ class EmployeeController extends AdminController // ] // ], 'email_corporate' => [ - 'rules' => 'required|valid_email', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ - 'required' => 'Email is required', - 'valid_email' => 'Enter a valid email address' + 'required' => 'Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' ] ], 'mobile' => [ diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php index 092003a4..2deca1f1 100644 --- a/app/Controllers/LeadsController.php +++ b/app/Controllers/LeadsController.php @@ -379,6 +379,7 @@ class LeadsController extends BaseController private function prepareLeadData() { $rules = [ + 'lead_type' => [ 'rules' => 'integer', 'errors' => ['required' => 'Lead Type is required'] @@ -406,19 +407,33 @@ class LeadsController extends BaseController 'rules' => 'required', 'errors' => ['required' => 'GST Number is required'] ], - 'branch_name' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Branch Name is required'] + 'gst' => [ + 'rules' => 'required|regex_match[/^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}$/]', + 'errors' => [ + 'required' => 'GST Number is required.', + 'regex_match' => 'Invalid GST format. Example: 22AAAAA0000A1Z5' + ] ], - 'branch_code' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Branch Code is required'] + 'branch_name' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_-]+$/]|min_length[3]', + 'errors' => [ + 'required' => 'Branch Name is required.', + 'regex_match' => 'Branch Name can only contain letters, numbers, spaces, - and _.', + 'min_length' => 'Branch Name must be at least 3 characters long.' + ] + ], + 'branch_code' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]', + 'errors' => [ + 'required' => 'Branch Code is required.', + 'regex_match' => 'Branch Code can only contain letters, numbers, - and _.' + ] ], 'contact_person_name' => [ 'rules' => 'required|regex_match[/^[a-zA-Z0-9_ -]+$/]', 'errors' => [ 'required' => 'Contact Person Name is required', - 'regex_match' => 'Contact person name only letters, numbers and characters _ - and space are allowed' + 'regex_match' => 'Contact person name only letters, numbers and spaces, - and _.' ] ], 'contact_person_mobile' => [ @@ -429,12 +444,14 @@ class LeadsController extends BaseController ] ], 'contact_person_email' => [ - 'rules' => 'required|valid_email|regex_match[/^[a-zA-Z0-9_-]+$/]', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ - 'required' => 'Contact Person Email is required', - 'valid_email' => 'Please enter a valid email address', - 'regex_match' => 'Contact Person Email Only letters, numbers and characters _ - @ . are allowed' + 'required' => 'Contact Person Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' ] + // 'rules' => 'required|valid_email|regex_match[/^[a-zA-Z0-9_-]+$/]', + // 'regex_match' => 'Contact Person Email Only letters, numbers and characters _ - @ . are allowed' + ], 'salse_person_id' => [ 'rules' => 'required', diff --git a/app/Controllers/MasterController.php b/app/Controllers/MasterController.php index 074b36bc..cff68f18 100755 --- a/app/Controllers/MasterController.php +++ b/app/Controllers/MasterController.php @@ -403,10 +403,11 @@ class MasterController extends AdminController // Contact Details (Array) // ====================== 'name.*' => [ - 'rules' => 'required|trim|min_length[2]', + 'rules' => 'required|trim|min_length[2]|regex_match[/^[a-zA-Z0-9\s_-]+$/]', 'errors' => [ 'required' => 'Contact name is required', - 'min_length' => 'Contact name must be at least 2 characters' + 'min_length' => 'Contact name must be at least 2 characters', + 'regex_match' => 'Contact name is invalid Format' ] ], @@ -418,10 +419,10 @@ class MasterController extends AdminController ], 'email.*' => [ - 'rules' => 'required|valid_email', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ - 'required' => 'Email is required', - 'valid_email' => 'Invalid email format' + 'required' => 'Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' ] ], @@ -658,10 +659,10 @@ class MasterController extends AdminController ], 'email.*' => [ - 'rules' => 'required|valid_email', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ - 'required' => 'Email is required', - 'valid_email' => 'Invalid email format' + 'required' => 'Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' ] ], @@ -1054,10 +1055,10 @@ class MasterController extends AdminController ], 'email.*' => [ - 'rules' => 'required|valid_email', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ - 'required' => 'Email is required', - 'valid_email' => 'Invalid email format' + 'required' => 'Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' ] ], @@ -1367,10 +1368,10 @@ class MasterController extends AdminController ], 'email.*' => [ - 'rules' => 'required|valid_email', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ - 'required' => 'Email is required', - 'valid_email' => 'Invalid email format' + 'required' => 'Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' ] ], @@ -3518,10 +3519,10 @@ class MasterController extends AdminController ] ], 'email' => [ - 'rules' => 'required|valid_email', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ - 'required' => 'Email is required', - 'valid_email' => 'Enter a valid email address' + 'required' => 'Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' ] ], 'mobile' => [ diff --git a/app/Controllers/PolicyTransactionController.php b/app/Controllers/PolicyTransactionController.php index efc3efcd..4a5d3d04 100644 --- a/app/Controllers/PolicyTransactionController.php +++ b/app/Controllers/PolicyTransactionController.php @@ -1012,9 +1012,8 @@ 'calc_policy_issue_date.*' => ['label' => 'Policy Issue Date', 'rules' => 'required','errors' => [ 'required' => 'Policy Issue Date is required' ]], 'co_share_per.*' => ['label' => 'Co-Share %', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Co-Share % must be a valid decimal.']], 'non_comm_per_amt.*' => ['label' => 'Non-Comm Premium', 'rules' => 'permit_empty|decimal','errors' => ['decimal' => 'Amount must be numeric.']], - 'base_premium.*' => ['label' => 'Base Premium', 'rules' => 'required|regex_match[/^-?\d+(\.\d+)?$/]|differs[0]', + 'base_premium.*' => ['label' => 'Base Premium', 'rules' => 'permit_empty|regex_match[/^-?\d+(\.\d+)?$/]|differs[0]', 'errors' => [ - 'required' => 'Base Premium is required.', 'regex_match' => 'Base Premium must be a valid positive or negative number.', 'differs' => 'Base Premium cannot be zero.' ]], @@ -2483,9 +2482,8 @@ ], 'base_premium.*' => [ 'label' => 'Base Premium', - 'rules' => 'required|regex_match[/^-?\d+(\.\d+)?$/]|differs[0]', + 'rules' => 'permit_empty|regex_match[/^-?\d+(\.\d+)?$/]|differs[0]', 'errors' => [ - 'required' => 'Base Premium is required.', 'regex_match' => 'Base Premium must be a valid positive or negative number.', 'differs' => 'Base Premium cannot be zero.' ] diff --git a/app/Controllers/ThzController.php b/app/Controllers/ThzController.php index 827b6587..a4bde6dd 100644 --- a/app/Controllers/ThzController.php +++ b/app/Controllers/ThzController.php @@ -89,10 +89,10 @@ class ThzController extends BaseController ], 'email' => [ - 'rules' => 'required|valid_email|max_length[150]', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ - 'required' => 'Email is required', - 'valid_email' => 'Please enter a valid email address' + 'required' => 'Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' ] ], diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index 6f69ed45..2a265f4c 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -1135,19 +1135,44 @@ class TicketController extends BaseController if ($selected_ticket_type == 1 || $selected_ticket_type == 72) { $rules = [ // --- EMPLOYEE DETAILS --- - 'emp_code' => ['label' => 'Employee Code','rules' => 'required|alpha_numeric_space', - 'errors' => ['required' => 'Employee Code is required'] + 'emp_code' => [ + 'label' => 'Employee Code', + 'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]', + 'errors' => [ + 'required' => 'Employee Code is required.', + 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, - and _ allowed).' + ] ], - 'emp_name' => ['label' => 'Employee Name','rules' => 'required|min_length[3]', - 'errors' => ['required' => 'Employee Name is required','min_length' => 'Employee Name must be at least 3 characters long'] + 'emp_name' => [ + 'label' => 'Employee Name', + 'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s_-]+$/]', + 'errors' => [ + 'required' => 'Employee Name is required', + 'min_length' => 'Employee Name must be at least 3 characters long', + 'regex_match' => 'Employee Name can only contain letters, numbers, spaces, hyphens, and underscores.' + ] ], - 'insured_name' => ['label' => 'Insured Name','rules' => 'required', - 'errors' => ['required' => 'Insured Name is required'] + 'insured_name' => [ + 'label' => 'Insured Name', + 'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s_-]+$/]', + 'errors' => [ + 'required' => 'Insured Name is required', + 'min_length' => 'Insured Name must be at least 3 characters long', + 'regex_match' => 'Insured Name can only contain letters, numbers, spaces, hyphens, and underscores.' + ] ], 'relationship' => ['label' => 'Relationship','rules' => 'required', 'errors' => ['required' => 'Please select a Relationship'] ], - 'policy_no' => ['label' => 'Policy No','rules' => 'permit_empty','errors' => []], + 'policy_no' => [ + 'label' => 'Policy Number', + // Allows: A-Z, a-z, 0-9, spaces (\s), hyphens (\-), underscores (_), and slashes (\/) + 'rules' => 'permit_empty|min_length[3]|max_length[50]|regex_match[/^[a-zA-Z0-9\s\-\/_]+$/]', + 'errors' => [ + 'min_length' => 'Policy Number appears too short (min 5 characters).', + 'regex_match' => 'Policy Number can only contain letters, numbers, spaces, hyphens(-), underscores(_), and slashes(/).' + ] + ], 'tpa_no' => ['label' => 'TPA ID','rules' => 'permit_empty','errors' => []], 'emp_mobile' => ['label' => 'Employee Mobile No','rules' => 'required|numeric|exact_length[10]', 'errors' => [ @@ -1156,11 +1181,19 @@ class TicketController extends BaseController 'exact_length' => 'Mobile must be exactly 10 digits' ] ], - 'emp_mail' => ['label' => 'Employee Mail ID','rules' => 'required|valid_email', - 'errors' => ['required' => 'Employee Email is required','valid_email' => 'Please provide a valid email address'] + 'emp_mail' => ['label' => 'Employee Mail ID', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'errors' => [ + 'required' => 'Employee Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' + ] ], - 'emp_personal_mail' => ['label' => 'Personal Mail ID','rules' => 'permit_empty|valid_email', - 'errors' => ['valid_email' => 'Personal email format is invalid'] + 'emp_personal_mail' => ['label' => 'Personal Mail ID', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'errors' => [ + 'required' => 'Personal Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' + ] ], 'client_policy_id' => ['label' => 'Policy','rules' => 'required', 'errors' => ['required' => 'Please select a Policy'] @@ -1258,15 +1291,20 @@ class TicketController extends BaseController 'insurer_id' => ['label' => 'Insurer ID','rules' => 'required', 'errors' => ['required' => 'Insurer data is missing. Please re-select the policy.'] ], - 'emp_mobile' => ['label' => 'Mobile No','rules' => 'permit_empty|numeric|exact_length[10]', - 'errors' => ['numeric' => 'Mobile number must contain only digits.', - 'exact_length' => 'Mobile number must be exactly 10 digits.' + 'emp_mobile' => ['label' => 'Employee Mobile No','rules' => 'required|numeric|exact_length[10]', + 'errors' => [ + 'required' => 'Mobile number is required', + 'numeric' => 'Mobile must contain only numbers', + 'exact_length' => 'Mobile must be exactly 10 digits' ] ], - 'emp_mail' => ['label' => 'Mail ID','rules' => 'permit_empty|valid_email', - 'errors' => ['valid_email' => 'Please provide a valid email address format.'] + 'emp_mail' => ['label' => 'Employee Mail ID', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'errors' => [ + 'required' => 'Employee Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' + ] ], - // --- CLAIM DETAILS --- 'ticket_type_id' => ['label' => 'Policy Type','rules' => 'required','errors' => ['required' => 'Policy Type is required.']], 'claim_status_id' => ['label' => 'Status','rules' => 'required','errors' => ['required' => 'Status is required.']], @@ -1278,24 +1316,43 @@ class TicketController extends BaseController } else { $rules = [ // --- EMPLOYEE DETAILS --- - 'emp_code' => ['label' => 'Employee ID', 'rules' => 'required', - 'errors' => ['required' => 'Employee Code is required'] + 'emp_code' => [ + 'label' => 'Employee Code', + 'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]', + 'errors' => [ + 'required' => 'Employee Code is required.', + 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, - and _ allowed).', + ] ], - 'emp_name' => ['label' => 'Employee Name','rules' => 'required|min_length[3]', - 'errors' => ['required' => 'Employee Name is required','min_length' => 'Employee Name must be at least 3 characters long'] + 'emp_name' => [ + 'label' => 'Employee Name', + 'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s_-]+$/]', + 'errors' => [ + 'required' => 'Employee Name is required', + 'min_length' => 'Employee Name must be at least 3 characters long', + 'regex_match' => 'Employee Name can only contain letters, numbers, spaces, hyphens, and underscores.' + ] ], - 'emp_mobile' => ['label' => 'Mobile No','rules' => 'required|numeric|exact_length[10]', + 'emp_mobile' => ['label' => 'Employee Mobile No','rules' => 'required|numeric|exact_length[10]', 'errors' => [ 'required' => 'Mobile number is required', - 'numeric' => 'Mobile must be digits only', + 'numeric' => 'Mobile must contain only numbers', 'exact_length' => 'Mobile must be exactly 10 digits' ] ], - 'emp_mail' => ['label' => 'Mail ID','rules' => 'required|valid_email', - 'errors' => ['required' => 'Official email is required','valid_email' => 'Please provide a valid official email'] + 'emp_mail' => ['label' => 'Employee Mail ID', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'errors' => [ + 'required' => 'Employee Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' + ] ], - 'emp_personal_mail' => ['label' => 'Personal Mail','rules' => 'permit_empty|valid_email', - 'errors' => ['valid_email' => 'Personal email format is invalid'] + 'emp_personal_mail' => ['label' => 'Personal Mail ID', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'errors' => [ + 'required' => 'Personal Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' + ] ], 'client_policy_id' => ['label' => 'Policy','rules' => 'required','errors' => ['required' => 'Please select a Policy']], 'acm_id' => ['label' => 'Account Manager','rules' => 'required','errors' => ['required' => 'Account Manager must be selected']], @@ -1399,19 +1456,44 @@ class TicketController extends BaseController if ($selected_ticket_type == 1 || $selected_ticket_type == 72) { $rules = [ // --- EMPLOYEE DETAILS --- - 'emp_code' => ['label' => 'Employee Code','rules' => 'required|alpha_numeric_space', - 'errors' => ['required' => 'Employee Code is required'] + 'emp_code' => [ + 'label' => 'Employee Code', + 'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]', + 'errors' => [ + 'required' => 'Employee Code is required.', + 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, - and _ allowed).', + ] ], - 'emp_name' => ['label' => 'Employee Name','rules' => 'required|min_length[3]', - 'errors' => ['required' => 'Employee Name is required','min_length' => 'Employee Name must be at least 3 characters long'] + 'emp_name' => [ + 'label' => 'Employee Name', + 'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s_-]+$/]', + 'errors' => [ + 'required' => 'Employee Name is required', + 'min_length' => 'Employee Name must be at least 3 characters long', + 'regex_match' => 'Employee Name can only contain letters, numbers, spaces, hyphens, and underscores.' + ] ], - 'insured_name' => ['label' => 'Insured Name','rules' => 'required', - 'errors' => ['required' => 'Insured Name is required'] + 'insured_name' => [ + 'label' => 'Insured Name', + 'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s_-]+$/]', + 'errors' => [ + 'required' => 'Insured Name is required', + 'min_length' => 'Insured Name must be at least 3 characters long', + 'regex_match' => 'Insured Name can only contain letters, numbers, spaces, hyphens, and underscores.' + ] ], 'relationship' => ['label' => 'Relationship','rules' => 'required', 'errors' => ['required' => 'Please select a Relationship'] ], - 'policy_no' => ['label' => 'Policy No','rules' => 'permit_empty','errors' => []], + 'policy_no' => [ + 'label' => 'Policy Number', + // Allows: A-Z, a-z, 0-9, spaces (\s), hyphens (\-), underscores (_), and slashes (\/) + 'rules' => 'permit_empty|min_length[3]|max_length[50]|regex_match[/^[a-zA-Z0-9\s\-\/_]+$/]', + 'errors' => [ + 'min_length' => 'Policy Number appears too short (min 5 characters).', + 'regex_match' => 'Policy Number can only contain letters, numbers, spaces, hyphens(-), underscores(_), and slashes(/).' + ] + ], 'tpa_no' => ['label' => 'TPA ID','rules' => 'permit_empty','errors' => []], 'emp_mobile' => ['label' => 'Employee Mobile No','rules' => 'required|numeric|exact_length[10]', 'errors' => [ @@ -1420,11 +1502,19 @@ class TicketController extends BaseController 'exact_length' => 'Mobile must be exactly 10 digits' ] ], - 'emp_mail' => ['label' => 'Employee Mail ID','rules' => 'required|valid_email', - 'errors' => ['required' => 'Employee Email is required','valid_email' => 'Please provide a valid email address'] + 'emp_mail' => ['label' => 'Employee Mail ID', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'errors' => [ + 'required' => 'Employee Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' + ] ], - 'emp_personal_mail' => ['label' => 'Personal Mail ID','rules' => 'permit_empty|valid_email', - 'errors' => ['valid_email' => 'Personal email format is invalid'] + 'emp_personal_mail' => ['label' => 'Personal Mail ID', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'errors' => [ + 'required' => 'Personal Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' + ] ], 'client_policy_id' => ['label' => 'Policy','rules' => 'required', 'errors' => ['required' => 'Please select a Policy'] @@ -1522,15 +1612,20 @@ class TicketController extends BaseController 'insurer_id' => ['label' => 'Insurer ID','rules' => 'required', 'errors' => ['required' => 'Insurer data is missing. Please re-select the policy.'] ], - 'emp_mobile' => ['label' => 'Mobile No','rules' => 'permit_empty|numeric|exact_length[10]', - 'errors' => ['numeric' => 'Mobile number must contain only digits.', - 'exact_length' => 'Mobile number must be exactly 10 digits.' + 'emp_mobile' => ['label' => 'Employee Mobile No','rules' => 'required|numeric|exact_length[10]', + 'errors' => [ + 'required' => 'Mobile number is required', + 'numeric' => 'Mobile must contain only numbers', + 'exact_length' => 'Mobile must be exactly 10 digits' ] ], - 'emp_mail' => ['label' => 'Mail ID','rules' => 'permit_empty|valid_email', - 'errors' => ['valid_email' => 'Please provide a valid email address format.'] + 'emp_mail' => ['label' => 'Employee Mail ID', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'errors' => [ + 'required' => 'Employee Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' + ] ], - // --- CLAIM DETAILS --- 'ticket_type_id' => ['label' => 'Policy Type','rules' => 'required','errors' => ['required' => 'Policy Type is required.']], 'claim_status_id' => ['label' => 'Status','rules' => 'required','errors' => ['required' => 'Status is required.']], @@ -1542,24 +1637,43 @@ class TicketController extends BaseController } else { $rules = [ // --- EMPLOYEE DETAILS --- - 'emp_code' => ['label' => 'Employee ID', 'rules' => 'required', - 'errors' => ['required' => 'Employee Code is required'] + 'emp_code' => [ + 'label' => 'Employee Code', + 'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]', + 'errors' => [ + 'required' => 'Employee Code is required.', + 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, - and _ allowed).', + ] ], - 'emp_name' => ['label' => 'Employee Name','rules' => 'required|min_length[3]', - 'errors' => ['required' => 'Employee Name is required','min_length' => 'Employee Name must be at least 3 characters long'] + 'emp_name' => [ + 'label' => 'Employee Name', + 'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s_-]+$/]', + 'errors' => [ + 'required' => 'Employee Name is required', + 'min_length' => 'Employee Name must be at least 3 characters long', + 'regex_match' => 'Employee Name can only contain letters, numbers, spaces, hyphens, and underscores.' + ] ], - 'emp_mobile' => ['label' => 'Mobile No','rules' => 'required|numeric|exact_length[10]', + 'emp_mobile' => ['label' => 'Employee Mobile No','rules' => 'required|numeric|exact_length[10]', 'errors' => [ 'required' => 'Mobile number is required', - 'numeric' => 'Mobile must be digits only', + 'numeric' => 'Mobile must contain only numbers', 'exact_length' => 'Mobile must be exactly 10 digits' ] ], - 'emp_mail' => ['label' => 'Mail ID','rules' => 'required|valid_email', - 'errors' => ['required' => 'Official email is required','valid_email' => 'Please provide a valid official email'] + 'emp_mail' => ['label' => 'Employee Mail ID', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'errors' => [ + 'required' => 'Employee Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' + ] ], - 'emp_personal_mail' => ['label' => 'Personal Mail','rules' => 'permit_empty|valid_email', - 'errors' => ['valid_email' => 'Personal email format is invalid'] + 'emp_personal_mail' => ['label' => 'Personal Mail ID', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'errors' => [ + 'required' => 'Personal Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' + ] ], 'client_policy_id' => ['label' => 'Policy','rules' => 'required','errors' => ['required' => 'Please select a Policy']], 'acm_id' => ['label' => 'Account Manager','rules' => 'required','errors' => ['required' => 'Account Manager must be selected']], @@ -1813,8 +1927,11 @@ class TicketController extends BaseController $rules = [ 'emp_mail' => [ 'label' => 'To', - 'rules' => 'required|valid_email', - 'errors' => ['required' => 'Recipient email is missing.','valid_email' => 'Please provide a valid email address for the recipient.'] + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'errors' => [ + 'required' => 'Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' + ] ], 'mail_subject' => [ 'label' => 'Subject', @@ -1823,11 +1940,6 @@ class TicketController extends BaseController 'required' => 'Please enter a Subject for the mail.', 'min_length' => 'Subject should be at least 5 characters long.' ] - ], - 'content' => [ - 'label' => 'Mail Content', - 'rules' => 'required', - 'errors' => ['required' => 'You cannot send an empty mail.'] ] ]; @@ -3509,6 +3621,160 @@ class TicketController extends BaseController // -------- END CLAIM DUMP UPLOAD ---------------------------------------------------------------------------------------------- public function saveIRDocsJson() + { + // ----------------------------------------------------- + // 1) GET INPUT + // ----------------------------------------------------- + $request_data = $this->request->getPost(); + $data = sanitizeInputArrayAdvanced($request_data); + + $ticket_id = $data['ticket_id'] ?? ''; + $required_docs = $data['required_docs'] ?? ''; + + // ----------------------------------------------------- + // 2) BASIC VALIDATION (CI4) + // ----------------------------------------------------- + $rules = [ + 'ticket_id' => [ + 'label' => 'Ticket ID', + 'rules' => 'required|numeric', + 'errors' => [ + 'required' => 'System could not identify the Number.', + 'numeric' => 'Invalid format.' + ] + ], + + 'required_docs' => [ + 'label' => 'Required Documents', + 'rules' => 'required', + 'errors' => [ + 'required' => 'Document data is required' + ] + ] + ]; + + if (!$this->validate($rules)) { + return $this->response->setStatusCode(400)->setJSON([ + 'status' => false, + 'message' => 'Input validation failed', + 'code' => 400, + 'errors' => $this->validator->getErrors() + ]); + } + + // ----------------------------------------------------- + // 3) VALIDATE JSON FORMAT + // ----------------------------------------------------- + $docsArray = json_decode($required_docs, true); + + if (json_last_error() !== JSON_ERROR_NONE) { + return $this->response->setStatusCode(400)->setJSON([ + 'status' => false, + 'message' => 'Input validation failed', + 'code' => 400, + 'errors' => [ + 'required_docs' => 'Invalid JSON format' + ] + ]); + } + + // ----------------------------------------------------- + // 4) VALIDATE JSON STRUCTURE + // ----------------------------------------------------- + if (!isset($docsArray['docs']) || !is_array($docsArray['docs'])) { + return $this->response->setStatusCode(400)->setJSON([ + 'status' => false, + 'message' => 'Input validation failed', + 'code' => 400, + 'errors' => [ + 'required_docs' => 'Invalid document structure' + ] + ]); + } + + // ----------------------------------------------------- + // 5) VALIDATE EACH DOCUMENT NAME + // ----------------------------------------------------- + foreach ($docsArray['docs'] as $index => $doc) { + + // Check document_name exists + if (!isset($doc['document_name'])) { + return $this->response->setStatusCode(400)->setJSON([ + 'status' => false, + 'code' => 400, + 'message' => 'Input validation failed', + 'errors' => [ + 'required_docs' => + "Document name missing at row " . ($index + 1) + ] + ]); + } + + // YOUR REQUIRED REGEX RULE + if (!preg_match('/^[a-zA-Z0-9_\- ]+$/', $doc['document_name'])) { + return $this->response->setStatusCode(400)->setJSON([ + 'status' => false, + 'code' => 400, + 'message' => 'Input validation failed', + 'errors' => [ + 'required_docs' => + "Document name '{$doc['document_name']}' can only contain letters, numbers, hyphens and underscores" + ] + ]); + } + + // Check document_received exists + if (!array_key_exists('document_received', $doc)) { + return $this->response->setStatusCode(400)->setJSON([ + 'status' => false, + 'code' => 400, + 'message' => 'Input validation failed', + 'errors' => [ + 'required_docs' => + "document_received key missing at row " . ($index + 1) + ] + ]); + } + } + + // ----------------------------------------------------- + // 6) EXTRA SAFETY CHECKS + // ----------------------------------------------------- + if (empty($ticket_id) || empty($required_docs)) { + return $this->respond([ + 'status' => false, + 'code' => 404, + 'message' => 'Failed to save Docs' + ], 200); + } + + // ----------------------------------------------------- + // 7) UPDATE DATABASE + // ----------------------------------------------------- + db_connect()->query( + "UPDATE ticket_master SET required_docs = ? WHERE id = ?", + [$required_docs, $ticket_id] + ); + + // ----------------------------------------------------- + // 8) RETURN UPDATED DATA + // ----------------------------------------------------- + $saved = $this->ticketMasterModel + ->select('required_docs') + ->where('id', $ticket_id) + ->first(); + + $savedDocs = json_decode($saved['required_docs'] ?? '{}', true) ?? []; + + return $this->respond([ + 'status' => true, + 'code' => 200, + 'message' => 'IR docs saved successfully', + 'data' => $savedDocs + ], 200); + } + + public function saveIRDocsJson_old() { $request_data = $this->request->getPost(); $data = sanitizeInputArrayAdvanced($request_data); diff --git a/app/Controllers/UserController.php b/app/Controllers/UserController.php index d2a32ac1..44b44e51 100755 --- a/app/Controllers/UserController.php +++ b/app/Controllers/UserController.php @@ -139,10 +139,10 @@ class UserController extends AdminController // Email // ====================== 'email' => [ - 'rules' => 'required|valid_email', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ - 'required' => 'Email is required', - 'valid_email' => 'Please enter a valid email address', + 'required' => 'Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' ] ], @@ -323,10 +323,10 @@ class UserController extends AdminController // Email // ====================== 'email' => [ - 'rules' => 'required|valid_email', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ - 'required' => 'Email is required', - 'valid_email' => 'Please enter a valid email address', + 'required' => 'Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' ] ], @@ -829,10 +829,10 @@ class UserController extends AdminController // Email // ====================== 'email' => [ - 'rules' => 'required|valid_email', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ - 'required' => 'Email is required', - 'valid_email' => 'Please enter a valid email address', + 'required' => 'Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' ] ], // ====================== diff --git a/app/Views/client_kyc.php b/app/Views/client_kyc.php index e9b726a5..6a8a0259 100755 --- a/app/Views/client_kyc.php +++ b/app/Views/client_kyc.php @@ -165,7 +165,32 @@ console.error(status, error); $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); - toastr.warning('Something Wrong!', 'Warning'); + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 404) { + toastr.warning('Resource not found', 'Warning'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } + } }); }); @@ -221,7 +246,31 @@ console.error(status, error); $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); - toastr.warning('Something Wrong!', 'Warning'); + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 404) { + toastr.warning('Resource not found', 'Warning'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } } }); diff --git a/app/Views/client_rm.php b/app/Views/client_rm.php index 4d3dd823..a996bd93 100755 --- a/app/Views/client_rm.php +++ b/app/Views/client_rm.php @@ -158,7 +158,33 @@ $(document).ready(function(){ setTimeout(function() { $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); - console.log('Something Wrong!', 'warning'); }, 1000); + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 404) { + toastr.warning('Resource not found', 'Warning'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } + + }, 1000); } }); diff --git a/app/Views/kyc_entity_type_basic_info.php b/app/Views/kyc_entity_type_basic_info.php index 88c08db9..65441948 100755 --- a/app/Views/kyc_entity_type_basic_info.php +++ b/app/Views/kyc_entity_type_basic_info.php @@ -88,7 +88,31 @@ $(document).ready(function () { setTimeout(function() { $('.loader').fadeOut(); $('.loader-mask').delay(350).fadeOut('slow'); - toastr.warning('Something Wrong!', 'Warning'); + if (xhr.status === 400) { + let response = JSON.parse(xhr.responseText); + let errorMessages = ""; + let seenMessages = []; // Array to store unique messages + if (response.errors) { + $.each(response.errors, function (field, message) { + if (!seenMessages.includes(message)) { + errorMessages += `• ${message}
`; + seenMessages.push(message); // Mark this message as "seen" + } + }); + toastr.error(errorMessages, 'Validation Error', { "allowHtml": true }); + } else { + toastr.warning(response.message || 'Validation failed', 'Warning'); + } + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + toastr.error(response.message, 'Security Policy'); + } else if (xhr.status === 404) { + toastr.warning('Resource not found', 'Warning'); + } else if (xhr.status === 500) { + toastr.error('Something went wrong . Please try again later.', 'Server Error'); + } else { + toastr.error('An unexpected error occurred. Please try again later.', 'Error'); + } }, 1000); } }); From 0c7c9f1ca6f87892d4e957cc5275deaefbbb8273 Mon Sep 17 00:00:00 2001 From: velz Date: Thu, 12 Feb 2026 12:34:24 +0530 Subject: [PATCH 05/13] FIX_SQL_INJECT3 --- app/Controllers/BDSReportController.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/Controllers/BDSReportController.php b/app/Controllers/BDSReportController.php index 902da3e7..f9d68b1e 100644 --- a/app/Controllers/BDSReportController.php +++ b/app/Controllers/BDSReportController.php @@ -270,6 +270,7 @@ class BDSReportController extends AdminController //Function for get BAP INSURE wise data for premium , policy count , revenue only public function getBAPInsurerData($category = 0, $start_date = null, $end_date = null) { + $category = (int)$category; try { $this->myLogger->logme('error', 'getBAPInsurerData function called'); $this->myLogger->logme('error', 'category : {data}', ['data' => $category]); @@ -429,7 +430,7 @@ class BDSReportController extends AdminController //Function for get BAP CLIENT wise data for premium , policy count , revenue only public function getBAPClientData($category = 0, $start_date = null, $end_date = null) { - + $category = (int)$category; try { $this->myLogger->logme('error', 'getBAPClientData function called'); $this->myLogger->logme('error', 'category : {data}', ['data' => $category]); @@ -530,7 +531,7 @@ class BDSReportController extends AdminController //Function for get CLIENT wise data for premium and policy count only public function getClientData($category = 0, $start_date = null, $end_date = null) { - + $category = (int)$category; try { $this->myLogger->logme('error', 'getClientData function called'); From 4ebf2cb54aadb8c0a4427a633a1da6b9d76c378c Mon Sep 17 00:00:00 2001 From: Gowtham M Date: Thu, 12 Feb 2026 12:39:53 +0530 Subject: [PATCH 06/13] Sql injecter issue test : GWM --- app/Controllers/ICICILombardController.php | 18 +++++++++--------- app/Models/EmployeePolicyModel.php | 16 +++++++++++++--- app/Models/MessageModel.php | 2 +- app/Models/PolicyTransactionModel.php | 14 ++++++++++++++ 4 files changed, 37 insertions(+), 13 deletions(-) diff --git a/app/Controllers/ICICILombardController.php b/app/Controllers/ICICILombardController.php index 1babfd76..e9cbdf32 100644 --- a/app/Controllers/ICICILombardController.php +++ b/app/Controllers/ICICILombardController.php @@ -121,28 +121,28 @@ class ICICILombardController extends AdminController $body = [ "PolicyNumber" => "4016/PPN/A/O/53185987/00/000", "CDBGAccountNumber" => "CD-MUM-0026", - "CorrelationId" => "550e8400-e29b-41d4-a716-446655440018", + "CorrelationId" => "550e8400-e29b-41d4-a716-446655440021", "MemberDetails" => [ [ - "MemberEmpId" => "EMPID3625562", + "MemberEmpId" => "EMPID3625564", "DOJ" => "21-MAR-2019", "InsuredName" => "Jeeva", "DOB" => "7-JUL-1993", "Relationship" => "SELF", "Gender" => "MALE", - "DOC" => '19-Nov-2025', + "DOC" => '18-Nov-2025', "SumInsured" => "500000", "EmailId" => "Jeeva@GMAIL.COM", "FlagStatus" => "A" ], [ - "MemberEmpId" => "EMPID3625562", + "MemberEmpId" => "EMPID3625564", "DOJ" => "21-MAR-2019", "InsuredName" => "Muthu", "DOB" => "8-AUG-1970", "Relationship" => "MOTHER", "Gender" => "FEMALE", - "DOC" => '19-Nov-2025', + "DOC" => '18-Nov-2025', "EmailId" => "Muthu@GMAIL.COM", "FlagStatus" => "A" ], @@ -180,8 +180,8 @@ class ICICILombardController extends AdminController $body = [ "PolicyNumber" => "4016/PPN/A/O/53185987/00/000", - "BatchId" => "3725147", - "CorrelationId" => "550e8400-e29b-41d4-a716-446655440018" + "BatchId" => "3727144", + "CorrelationId" => "550e8400-e29b-41d4-a716-446655440021" ]; $response = call_third_party_api($url, 'POST', $headers, $body, true); @@ -213,9 +213,9 @@ class ICICILombardController extends AdminController ]; $body = [ - "PolicyNumber" => "4016/PPN/A/O/53167743/00/000", + "PolicyNumber" => "4016/PPN/A/O/53185987/00/000", "IMID" => "201580517901", - "CorrelationId" => "550e8400-e29b-41d4-a716-446655440018" + "CorrelationId" => "550e8400-e29b-41d4-a716-446655440020" ]; $response = call_third_party_api($url, 'POST', $headers, $body, true); diff --git a/app/Models/EmployeePolicyModel.php b/app/Models/EmployeePolicyModel.php index 33ecc71b..908d1698 100755 --- a/app/Models/EmployeePolicyModel.php +++ b/app/Models/EmployeePolicyModel.php @@ -1114,9 +1114,9 @@ class EmployeePolicyModel extends Model public function getDeletionEmployeeDataForExportExcel($ref_data, $return_type = 0) { - $client_id = $ref_data['client_id']; - $client_policy_id = $ref_data['client_policy_id']; - $client_branch_id = $ref_data['client_branch_id']; + $client_id = (string) "'".$ref_data['client_id']."'"; + $client_policy_id = (string) "'".$ref_data['client_policy_id']."'"; + $client_branch_id = (string) "'".$ref_data['client_branch_id']."'"; $insurer_or_tpa = $ref_data['insurer_or_tpa']; $get_insurer_id_from_client_policy = $this->db->table('client_policy') @@ -1929,6 +1929,8 @@ class EmployeePolicyModel extends Model public function getDeletionDataForTruncated($file_id) { + $file_id = (int)$file_id; + // Fetch the necessary details in a single query using JOINs $result = $this->db->table('files f') ->select('i.deletion_add_day') @@ -2064,6 +2066,8 @@ class EmployeePolicyModel extends Model $action = "da"; } + $file_id = (int)$file_id; + $query = $this->db->query(" SELECT @@ -2086,6 +2090,7 @@ class EmployeePolicyModel extends Model // dd($this->db->getLastQuery(), $result); // dd($result); + return $result[0]; } @@ -2096,6 +2101,8 @@ class EmployeePolicyModel extends Model log_message('error', 'updateEmployeePolicyTruncateReverse model function called'); log_message('error', 'FILE ID : {data}', ['data' => $file_id]); + $file_id = (int)$file_id; + $this->db->query(" UPDATE employee_polices SET @@ -2137,6 +2144,9 @@ class EmployeePolicyModel extends Model //calculate the CD Transaction sum of the amount for the inception, addition, dependent addition, missed inception public function calculateCdTranctionAmount($file_id) { + + $file_id = (int)$file_id; + $query = $this->db->query(" SELECT diff --git a/app/Models/MessageModel.php b/app/Models/MessageModel.php index 6f2256a3..7b05dd40 100755 --- a/app/Models/MessageModel.php +++ b/app/Models/MessageModel.php @@ -73,6 +73,6 @@ class MessageModel extends Model $query = $builder->get(); return $query->getResult(); - dd($this->db->getLastQuery()); + // dd($this->db->getLastQuery()); } } diff --git a/app/Models/PolicyTransactionModel.php b/app/Models/PolicyTransactionModel.php index 74df001c..fe7872f7 100644 --- a/app/Models/PolicyTransactionModel.php +++ b/app/Models/PolicyTransactionModel.php @@ -2432,6 +2432,9 @@ return $result; } + + + //not in use function due to complexity of query and union, so writing raw query with bindings to avoid sql injection public function getBDSReportListSingleUnion($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $client_branch_id = 0, $insurer_branch_id = 0, $client_policy_id = 0, $user_id = 0, $where = []) { @@ -3015,6 +3018,15 @@ public function getBDSReportList($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $client_branch_id = 0, $insurer_branch_id = 0, $client_policy_id = 0, $user_id = 0, $where = []) { + $client_id = (int)$client_id; + $insurer_id = (int)$insurer_id; + $policy_type_id = (int)$policy_type_id; + $client_branch_id = (int)$client_branch_id; + $insurer_branch_id = (int)$insurer_branch_id; + $client_policy_id = (int)$client_policy_id; + $user_id = (int)$user_id; + $issuer = (int)$issuer; + $whereAdded = false; $statement_month_condition = ''; if ($date_type == 'statement_month' && $start_date != 0 && $end_date != 0) { @@ -3689,6 +3701,8 @@ "; $query = $this->db->query($sql); $result = $query->getResultArray(); + + // $countofalldata = count($result); // dd($result); // dd($this->db->getLastQuery()->getQuery()); From 64ff87ebfe3f357fcb7caa892b3c91be68202096 Mon Sep 17 00:00:00 2001 From: "sanjeev.p" Date: Thu, 12 Feb 2026 14:32:49 +0530 Subject: [PATCH 07/13] FIX_CodeCommit --- app/Controllers/ClientController.php | 247 ++++++++++++++++------ app/Controllers/EmployeeController.php | 2 +- app/Controllers/LeadsController.php | 8 +- app/Controllers/MasterController.php | 277 ++++++++++++------------- app/Controllers/ThzController.php | 2 +- app/Controllers/TicketController.php | 81 ++++++-- app/Controllers/UserController.php | 6 +- app/Views/cd_master_add_modal.php | 4 +- 8 files changed, 392 insertions(+), 235 deletions(-) diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index 2874c2cc..d48a3295 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -783,11 +783,19 @@ class ClientController extends AdminController ] ], + // 'cd_ac_no' => [ + // 'rules' => 'required|regex_match[/^[a-zA-Z0-9\/_\\-]+$/]', + // 'errors' => [ + // 'required' => 'Account number is required', + // 'regex_match' => 'Account number can only contain letters, numbers, slashes (/), underscores (_), and hyphens (-)', + // ] + // ], + 'cd_ac_no' => [ - 'rules' => 'required|regex_match[/^[a-zA-Z0-9\/_\\-]+$/]', + 'rules' => 'required|numeric', 'errors' => [ - 'required' => 'Account number is required', - 'regex_match' => 'Account number can only contain letters, numbers, slashes (/), underscores (_), and hyphens (-)', + 'required' => 'CD Account number is required.', + 'numeric' => 'CD Account number must contain only numbers.', ] ], @@ -984,7 +992,7 @@ class ClientController extends AdminController 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_-]+$/]|min_length[2]||max_length[45]', 'errors' => [ 'required' => 'Client Name is required', - 'regex_match' => 'Client Name can only contain letters, numbers, spaces, hyphens(-), and underscores(_).', + 'regex_match' => 'Client Name can only contain letters, numbers, spaces, hyphens(-) and underscores(_).', 'min_length' => 'Client Name must be at least 2 characters.', 'max_length' => 'Client Name must not exceed 45 characters.', ] @@ -993,7 +1001,7 @@ class ClientController extends AdminController 'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]|min_length[2]||max_length[15]', 'errors' => [ 'required' => 'Client Short Name is required', - 'regex_match' => 'Client Short Name can only contain letters, numbers, hyphens(-), and underscores(_) with no spaces.', + 'regex_match' => 'Client Short Name can only contain letters, numbers, hyphens(-) and underscores(_).', 'min_length' => 'Client Short Name must be at least 2 characters.', 'max_length' => 'Client Short Name must not exceed 15 characters.', ] @@ -1729,14 +1737,14 @@ class ClientController extends AdminController 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_-]+$/]|min_length[3]', 'errors' => [ 'required' => 'Branch Name is required', - 'regex_match' => 'Branch Name can only contain letters, numbers, spaces, hyphens(-), and underscores(_).', + 'regex_match' => 'Branch Name can only contain letters, numbers, spaces, hyphens(-) and underscores(_).', ] ], 'branch_code' => [ 'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]', 'errors' => [ 'required' => 'Branch Code is required', - 'regex_match' => 'Branch Code can only contain letters, numbers, hyphens(-), and underscores(_).', + 'regex_match' => 'Branch Code can only contain letters, numbers, hyphens(-) and underscores(_).', ] ], 'address1' => [ @@ -1747,23 +1755,32 @@ class ClientController extends AdminController 'rules' => 'permit_empty|string', ], 'state' => [ - 'rules' => 'required|numeric', - 'errors' => ['required' => 'State is required'] + 'label' => 'State', + 'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]', + 'errors' => [ + 'required' => 'State is required.', + 'regex_match' => 'State name can only contain letters, spaces, and hyphens.' + ] ], 'district' => [ - 'rules' => 'required', - 'errors' => ['required' => 'District is required.'] + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => [ + 'required' => 'District is required.', + 'regex_match' => 'District can contain letters, numbers, spaces, and hyphens.' + ] ], 'city' => [ - 'rules' => 'required', - 'errors' => ['required' => 'City is required.'] + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => [ + 'regex_match' => 'City can contain letters, numbers, spaces, and hyphens.' + ] ], 'pincode' => [ - 'rules' => 'required|numeric|exact_length[6]', + 'rules' => 'required|numeric|exact_length[6]', 'errors' => [ 'required' => 'Pincode is required.', - 'numeric' => 'Pincode must be numeric', - 'exact_length' => 'Pincode must be exactly 6 digits' + 'numeric' => 'Pincode must be digits only.', + 'exact_length' => 'Pincode must be exactly 6 digits.' ] ], 'gst' => [ @@ -2120,15 +2137,20 @@ class ClientController extends AdminController $rules = [ 'branch_name' => [ - 'rules' => 'required', + 'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s\-_]+$/]', 'errors' => [ - 'required' => 'Branch Name is required', + 'required' => 'Branch Name is required', + 'min_length' => 'Branch Name must be at least 3 characters long', + 'regex_match' => 'Branch Name can only contain letters, numbers, spaces, hyphens(-) and underscores(_).' ] ], 'branch_code' => [ - 'rules' => 'required', + // Note: Codes usually don't have spaces, but I've included the others + 'rules' => 'required|min_length[2]|regex_match[/^[a-zA-Z0-9\-_]+$/]', 'errors' => [ - 'required' => 'Branch Code is required', + 'required' => 'Branch Code is required', + 'min_length' => 'Branch Code must be at least 2 characters long', + 'regex_match' => 'Branch Code can only contain letters, numbers, hyphens(-) and underscores(_).' ] ], 'address1' => [ @@ -2138,29 +2160,34 @@ class ClientController extends AdminController ] ], 'state' => [ - 'rules' => 'required', - 'errors' => [ - 'required' => 'State is required', - ] - ], - 'district' => [ - 'rules' => 'required', - 'errors' => [ - 'required' => 'District is required.', - ] - ], - 'city' => [ - 'rules' => 'required', - 'errors' => [ - 'required' => 'City is required.', - ] - ], - 'pincode' => [ - 'rules' => 'required', - 'errors' => [ - 'required' => 'Pincode is required.', - ] - ], + 'label' => 'State', + 'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]', + 'errors' => [ + 'required' => 'State is required.', + 'regex_match' => 'State name can only contain letters, spaces, and hyphens.' + ] + ], + 'district' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => [ + 'required' => 'District is required.', + 'regex_match' => 'District can contain letters, numbers, spaces, and hyphens.' + ] + ], + 'city' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => [ + 'regex_match' => 'City can contain letters, numbers, spaces, and hyphens.' + ] + ], + 'pincode' => [ + 'rules' => 'required|numeric|exact_length[6]', + 'errors' => [ + 'required' => 'Pincode is required.', + 'numeric' => 'Pincode must be digits only.', + 'exact_length' => 'Pincode must be exactly 6 digits.' + ] + ], 'gst' => [ 'rules' => 'required|regex_match[/^\d{2}[A-Z]{5}\d{4}[A-Z]{1}[A-Z\d]{1}Z[A-Z\d]{1}$/]', 'errors' => [ @@ -2169,10 +2196,11 @@ class ClientController extends AdminController ] ], 'name.*' => [ - 'rules' => 'required|alpha_space', + 'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s\-_]+$/]', 'errors' => [ 'required' => 'Contact name is required', - 'alpha_space' => 'Contact name may contain only letters and spaces' + 'min_length' => 'Contact name must be at least 3 characters long', + 'regex_match' => 'Contact name can only contain letters, numbers, spaces, hyphens(-) and underscores(_).' ] ], 'designation.*' => [ @@ -2294,6 +2322,107 @@ class ClientController extends AdminController $client_id = $this->request->getPost('client_id'); $pre_branch_id = $this->request->getPost('pre_branch_id') ?? ''; + $rules = [ + 'branch_name' => [ + 'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s\-_]+$/]', + 'errors' => [ + 'required' => 'Branch Name is required', + 'min_length' => 'Branch Name must be at least 3 characters long', + 'regex_match' => 'Branch Name can only contain letters, numbers, spaces, hyphens(-) and underscores(_).' + ] + ], + 'branch_code' => [ + // Note: Codes usually don't have spaces, but I've included the others + 'rules' => 'required|min_length[2]|regex_match[/^[a-zA-Z0-9\-_]+$/]', + 'errors' => [ + 'required' => 'Branch Code is required', + 'min_length' => 'Branch Code must be at least 2 characters long', + 'regex_match' => 'Branch Code can only contain letters, numbers, hyphens(-) and underscores(_).' + ] + ], + 'address1' => [ + 'rules' => 'required', + 'errors' => [ + 'required' => 'Address Line 1 is required', + ] + ], + 'state' => [ + 'label' => 'State', + 'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]', + 'errors' => [ + 'required' => 'State is required.', + 'regex_match' => 'State name can only contain letters, spaces, and hyphens.' + ] + ], + 'district' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => [ + 'required' => 'District is required.', + 'regex_match' => 'District can contain letters, numbers, spaces, and hyphens.' + ] + ], + 'city' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => [ + 'regex_match' => 'City can contain letters, numbers, spaces, and hyphens.' + ] + ], + 'pincode' => [ + 'rules' => 'required|numeric|exact_length[6]', + 'errors' => [ + 'required' => 'Pincode is required.', + 'numeric' => 'Pincode must be digits only.', + 'exact_length' => 'Pincode must be exactly 6 digits.' + ] + ], + 'gst' => [ + 'rules' => 'required|regex_match[/^\d{2}[A-Z]{5}\d{4}[A-Z]{1}[A-Z\d]{1}Z[A-Z\d]{1}$/]', + 'errors' => [ + 'required' => 'GST number is required', + 'regex_match' => 'Invalid GST Number. Example: 12ABCDE1234F5Z6' + ] + ], + 'name.*' => [ + 'rules' => 'required|min_length[3]|regex_match[/^[a-zA-Z0-9\s\-_]+$/]', + 'errors' => [ + 'required' => 'Contact name is required', + 'min_length' => 'Contact name must be at least 3 characters long', + 'regex_match' => 'Contact name can only contain letters, numbers, spaces, hyphens(-) and underscores(_).' + ] + ], + 'designation.*' => [ + 'rules' => 'required|alpha_space', + 'errors' => [ + 'required' => 'Designation is required', + 'alpha_space' => 'Designation may contain only letters and spaces' + ] + ], + 'email.*' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'errors' => [ + 'required' => 'Email address is required.', + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' + ] + ], + 'mobile.*' => [ + 'rules' => 'required|numeric|exact_length[10]', + 'errors' => [ + 'required' => 'Mobile number is required', + 'numeric' => 'Mobile number must contain digits only', + 'exact_length' => 'Mobile number must be exactly 10 digits' + ] + ], + ]; + + if (!$this->validate($rules)) { + return $this->response->setStatusCode(400)->setJSON([ + 'status' => false, + 'message' => 'Input validation failed', + 'code' => 400, + 'errors' => $this->validator->getErrors() + ]); + } + $data = $this->request->getPost(); $data = sanitizeInputArrayAdvanced($data); $data['pre_branch_id'] = $pre_branch_id; @@ -2486,7 +2615,6 @@ class ClientController extends AdminController $sanitized_post_data = sanitizeInputArrayAdvanced($request_post_data); $rules = [ - // --- BASIC SELECTS (Required) --- 'client_branch_id' => [ 'rules' => 'required', 'errors' => ['required' => 'Please select a Client Branch.'] @@ -2506,13 +2634,11 @@ class ClientController extends AdminController 'rules' => 'required', 'errors' => ['required' => 'Please select a TPA.'] ], - - // --- TEXT FIELDS (Required & Specific Format) --- 'policy_no' => [ - 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_\-\/\\\]+$/]', + 'rules' => ['required', 'regex_match[/^[a-zA-Z0-9\s_\-\/\\\]+$/]'], 'errors' => [ - 'required' => 'This field is required.', - 'regex_match' => 'Only letters, numbers, spaces, _, -, /, and \ are allowed.' + 'required' => 'Policy No is required.', + 'regex_match' => 'Policy No Only letters, numbers, spaces, underscores, hyphens, forward slashes, and backslashes are allowed.' ] ], 'gst' => [ @@ -2524,30 +2650,17 @@ class ClientController extends AdminController 'less_than_equal_to' => 'GST percentage cannot exceed 100%.' ] ], - - // --- DATE FIELDS (Required) --- 'policy_start_date' => [ 'rules' => 'required', - 'errors' => [ - 'required' => 'Start date is required.', - ] + 'errors' => ['required' => 'Start date is required.'] ], 'policy_end_date' => [ 'rules' => 'required', - 'errors' => [ - 'required' => 'End date is required.', - ] - ], - - // --- PERMIT EMPTY FIELDS (Optional) --- - 'base_policy' => [ - 'rules' => 'permit_empty' + 'errors' => ['required' => 'End date is required.'] ], 'wellness_plan_id' => [ 'rules' => 'permit_empty|alpha_numeric', - 'errors' => [ - 'alpha_numeric' => 'Wellness Plan ID can only contain letters and numbers (no spaces or special characters).' - ] + 'errors' => ['alpha_numeric' => 'Wellness Plan ID can only contain letters and numbers.'] ], 'wellness_vendor_id' => [ 'rules' => 'permit_empty' diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php index 4a019293..e4a04375 100755 --- a/app/Controllers/EmployeeController.php +++ b/app/Controllers/EmployeeController.php @@ -2770,7 +2770,7 @@ class EmployeeController extends AdminController 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ 'required' => 'Email address is required.', - 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' ] ], 'mobile' => [ diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php index 2deca1f1..6521effa 100644 --- a/app/Controllers/LeadsController.php +++ b/app/Controllers/LeadsController.php @@ -379,7 +379,7 @@ class LeadsController extends BaseController private function prepareLeadData() { $rules = [ - + 'lead_type' => [ 'rules' => 'integer', 'errors' => ['required' => 'Lead Type is required'] @@ -418,7 +418,7 @@ class LeadsController extends BaseController 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_-]+$/]|min_length[3]', 'errors' => [ 'required' => 'Branch Name is required.', - 'regex_match' => 'Branch Name can only contain letters, numbers, spaces, - and _.', + 'regex_match' => 'Branch Name can only contain letters, numbers, spaces, hyphens(-) and underscores(_)..', 'min_length' => 'Branch Name must be at least 3 characters long.' ] ], @@ -426,14 +426,14 @@ class LeadsController extends BaseController 'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]', 'errors' => [ 'required' => 'Branch Code is required.', - 'regex_match' => 'Branch Code can only contain letters, numbers, - and _.' + 'regex_match' => 'Branch Code can only contain letters, numbers, hyphens(-) and underscores(_)..' ] ], 'contact_person_name' => [ 'rules' => 'required|regex_match[/^[a-zA-Z0-9_ -]+$/]', 'errors' => [ 'required' => 'Contact Person Name is required', - 'regex_match' => 'Contact person name only letters, numbers and spaces, - and _.' + 'regex_match' => 'Contact person name only letters, numbers and spaces, hyphens(-) and underscores(_)..' ] ], 'contact_person_mobile' => [ diff --git a/app/Controllers/MasterController.php b/app/Controllers/MasterController.php index cff68f18..0f5be81d 100755 --- a/app/Controllers/MasterController.php +++ b/app/Controllers/MasterController.php @@ -370,34 +370,34 @@ class MasterController extends AdminController ], 'state' => [ - 'rules' => 'required|is_natural_no_zero', - 'errors' => [ - 'required' => 'State is required' - ] - ], - - 'district' => [ - 'rules' => 'required|trim', - 'errors' => [ - 'required' => 'District is required' - ] - ], - - 'city' => [ - 'rules' => 'required|trim', - 'errors' => [ - 'required' => 'City is required' - ] - ], - - 'pincode' => [ - 'rules' => 'required|numeric|exact_length[6]', - 'errors' => [ - 'required' => 'Pincode is required', - 'numeric' => 'Pincode must contain only numbers', - 'exact_length' => 'Pincode must be exactly 6 digits' - ] - ], + 'label' => 'State', + 'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]', + 'errors' => [ + 'required' => 'State is required.', + 'regex_match' => 'State name can only contain letters, spaces, and hyphens.' + ] + ], + 'district' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => [ + 'required' => 'District is required.', + 'regex_match' => 'District can contain letters, numbers, spaces, and hyphens.' + ] + ], + 'city' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => [ + 'regex_match' => 'City can contain letters, numbers, spaces, and hyphens.' + ] + ], + 'pincode' => [ + 'rules' => 'required|numeric|exact_length[6]', + 'errors' => [ + 'required' => 'Pincode is required.', + 'numeric' => 'Pincode must be digits only.', + 'exact_length' => 'Pincode must be exactly 6 digits.' + ] + ], // ====================== // Contact Details (Array) @@ -422,7 +422,7 @@ class MasterController extends AdminController 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ 'required' => 'Email address is required.', - 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' ] ], @@ -611,34 +611,34 @@ class MasterController extends AdminController ], 'state' => [ - 'rules' => 'required|is_natural_no_zero', - 'errors' => [ - 'required' => 'State is required' - ] - ], - - 'district' => [ - 'rules' => 'required|trim', - 'errors' => [ - 'required' => 'District is required' - ] - ], - - 'city' => [ - 'rules' => 'required|trim', - 'errors' => [ - 'required' => 'City is required' - ] - ], - - 'pincode' => [ - 'rules' => 'required|numeric|exact_length[6]', - 'errors' => [ - 'required' => 'Pincode is required', - 'numeric' => 'Pincode must contain only numbers', - 'exact_length' => 'Pincode must be exactly 6 digits' - ] - ], + 'label' => 'State', + 'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]', + 'errors' => [ + 'required' => 'State is required.', + 'regex_match' => 'State name can only contain letters, spaces, and hyphens.' + ] + ], + 'district' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => [ + 'required' => 'District is required.', + 'regex_match' => 'District can contain letters, numbers, spaces, and hyphens.' + ] + ], + 'city' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => [ + 'regex_match' => 'City can contain letters, numbers, spaces, and hyphens.' + ] + ], + 'pincode' => [ + 'rules' => 'required|numeric|exact_length[6]', + 'errors' => [ + 'required' => 'Pincode is required.', + 'numeric' => 'Pincode must be digits only.', + 'exact_length' => 'Pincode must be exactly 6 digits.' + ] + ], // ====================== // Contact Details (Array) @@ -662,7 +662,7 @@ class MasterController extends AdminController 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ 'required' => 'Email address is required.', - 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' ] ], @@ -1007,34 +1007,34 @@ class MasterController extends AdminController ], 'state' => [ - 'rules' => 'required|is_natural_no_zero', - 'errors' => [ - 'required' => 'State is required' - ] - ], - - 'district' => [ - 'rules' => 'required|trim', - 'errors' => [ - 'required' => 'District is required' - ] - ], - - 'city' => [ - 'rules' => 'required|trim', - 'errors' => [ - 'required' => 'City is required' - ] - ], - - 'pincode' => [ - 'rules' => 'required|numeric|exact_length[6]', - 'errors' => [ - 'required' => 'Pincode is required', - 'numeric' => 'Pincode must contain only numbers', - 'exact_length' => 'Pincode must be exactly 6 digits' - ] - ], + 'label' => 'State', + 'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]', + 'errors' => [ + 'required' => 'State is required.', + 'regex_match' => 'State name can only contain letters, spaces, and hyphens.' + ] + ], + 'district' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => [ + 'required' => 'District is required.', + 'regex_match' => 'District can contain letters, numbers, spaces, and hyphens.' + ] + ], + 'city' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => [ + 'regex_match' => 'City can contain letters, numbers, spaces, and hyphens.' + ] + ], + 'pincode' => [ + 'rules' => 'required|numeric|exact_length[6]', + 'errors' => [ + 'required' => 'Pincode is required.', + 'numeric' => 'Pincode must be digits only.', + 'exact_length' => 'Pincode must be exactly 6 digits.' + ] + ], // ====================== // Contact Details (Array) @@ -1058,7 +1058,7 @@ class MasterController extends AdminController 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ 'required' => 'Email address is required.', - 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' ] ], @@ -1320,35 +1320,34 @@ class MasterController extends AdminController ], 'state' => [ - 'rules' => 'required|is_natural_no_zero', - 'errors' => [ - 'required' => 'State is required' - ] - ], - - 'district' => [ - 'rules' => 'required|trim', - 'errors' => [ - 'required' => 'District is required' - ] - ], - - 'city' => [ - 'rules' => 'required|trim', - 'errors' => [ - 'required' => 'City is required' - ] - ], - - 'pincode' => [ - 'rules' => 'required|numeric|exact_length[6]', - 'errors' => [ - 'required' => 'Pincode is required', - 'numeric' => 'Pincode must contain only numbers', - 'exact_length' => 'Pincode must be exactly 6 digits' - ] - ], - + 'label' => 'State', + 'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]', + 'errors' => [ + 'required' => 'State is required.', + 'regex_match' => 'State name can only contain letters, spaces, and hyphens.' + ] + ], + 'district' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => [ + 'required' => 'District is required.', + 'regex_match' => 'District can contain letters, numbers, spaces, and hyphens.' + ] + ], + 'city' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => [ + 'regex_match' => 'City can contain letters, numbers, spaces, and hyphens.' + ] + ], + 'pincode' => [ + 'rules' => 'required|numeric|exact_length[6]', + 'errors' => [ + 'required' => 'Pincode is required.', + 'numeric' => 'Pincode must be digits only.', + 'exact_length' => 'Pincode must be exactly 6 digits.' + ] + ], // ====================== // Contact Details (Array) // ====================== @@ -1371,7 +1370,7 @@ class MasterController extends AdminController 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ 'required' => 'Email address is required.', - 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' ] ], @@ -3522,7 +3521,7 @@ class MasterController extends AdminController 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ 'required' => 'Email address is required.', - 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' ] ], 'mobile' => [ @@ -3540,28 +3539,28 @@ class MasterController extends AdminController 'min_length' => 'Address must be at least 5 characters' ] ], - 'city' => [ - 'rules' => 'required|alpha_space', - 'errors' => [ - 'required' => 'City is required', - 'alpha_space' => 'City must contain only letters and spaces' - ] - ], 'state' => [ - 'rules' => 'required|alpha_space', - 'errors' => [ - 'required' => 'State is required', - 'alpha_space' => 'State must contain only letters and spaces' - ] - ], - 'pincode' => [ - 'rules' => 'required|numeric|exact_length[6]', - 'errors' => [ - 'required' => 'Pincode is required', - 'numeric' => 'Pincode must contain only digits', - 'exact_length' => 'Pincode must be exactly 6 digits' - ] - ], + 'label' => 'State', + 'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]', + 'errors' => [ + 'required' => 'State is required.', + 'regex_match' => 'State name can only contain letters, spaces, and hyphens.' + ] + ], + 'city' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => [ + 'regex_match' => 'City can contain letters, numbers, spaces, and hyphens.' + ] + ], + 'pincode' => [ + 'rules' => 'required|numeric|exact_length[6]', + 'errors' => [ + 'required' => 'Pincode is required.', + 'numeric' => 'Pincode must be digits only.', + 'exact_length' => 'Pincode must be exactly 6 digits.' + ] + ], 'aadhar' => [ 'rules' => 'required|numeric|exact_length[12]', 'errors' => [ diff --git a/app/Controllers/ThzController.php b/app/Controllers/ThzController.php index a4bde6dd..0a6dd3f8 100644 --- a/app/Controllers/ThzController.php +++ b/app/Controllers/ThzController.php @@ -92,7 +92,7 @@ class ThzController extends BaseController 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ 'required' => 'Email address is required.', - 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' ] ], diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index 2a265f4c..562fe5e3 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -1140,7 +1140,7 @@ class TicketController extends BaseController 'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]', 'errors' => [ 'required' => 'Employee Code is required.', - 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, - and _ allowed).' + 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, hyphens(-) and underscores(_). allowed).' ] ], 'emp_name' => [ @@ -1170,7 +1170,7 @@ class TicketController extends BaseController 'rules' => 'permit_empty|min_length[3]|max_length[50]|regex_match[/^[a-zA-Z0-9\s\-\/_]+$/]', 'errors' => [ 'min_length' => 'Policy Number appears too short (min 5 characters).', - 'regex_match' => 'Policy Number can only contain letters, numbers, spaces, hyphens(-), underscores(_), and slashes(/).' + 'regex_match' => 'Policy Number can only contain letters, numbers, spaces, hyphens(-) underscores(_), and slashes(/).' ] ], 'tpa_no' => ['label' => 'TPA ID','rules' => 'permit_empty','errors' => []], @@ -1221,15 +1221,29 @@ class TicketController extends BaseController 'hospital_address' => ['label' => 'Hospital Address','rules' => 'required', 'errors' => ['required' => 'Hospital Address is required'] ], - 'hospital_city' => ['label' => 'Hospital City','rules' => 'required', - 'errors' => ['required' => 'City is required'] - ], - 'hospital_state' => ['label' => 'Hospital State','rules' => 'required', - 'errors' => ['required' => 'State is required'] - ], - 'hospital_pin_code' => ['label' => 'Hospital Pincode','rules' => 'required|numeric|exact_length[6]', - 'errors' => ['exact_length' => 'Pincode must be 6 digits'] - ], + 'hospital_state' => [ + 'label' => 'hospital_State', + 'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]', + 'errors' => [ + 'required' => 'Hospital State is required.', + 'regex_match' => 'Hospital State name can only contain letters, spaces, and hyphens.' + ] + ], + 'hospital_city' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => [ + 'required' => 'Hospital City is required', + 'regex_match' => 'Hospital City can contain letters, numbers, spaces, and hyphens.' + ] + ], + 'hospital_pin_code' => [ + 'rules' => 'required|numeric|exact_length[6]', + 'errors' => [ + 'required' => 'Hospital Pincode is required.', + 'numeric' => 'Hospital Pincode must be digits only.', + 'exact_length' => 'Hospital Pincode must be exactly 6 digits.' + ] + ], 'hospital_phone_no' => ['label' => 'Hospital Phone','rules' => 'required|numeric|min_length[10]', 'errors' => ['min_length' => 'Phone number too short'] ], @@ -1321,7 +1335,7 @@ class TicketController extends BaseController 'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]', 'errors' => [ 'required' => 'Employee Code is required.', - 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, - and _ allowed).', + 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, hyphens(-) and underscores(_). allowed).', ] ], 'emp_name' => [ @@ -1461,7 +1475,7 @@ class TicketController extends BaseController 'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]', 'errors' => [ 'required' => 'Employee Code is required.', - 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, - and _ allowed).', + 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, hyphens(-) and underscores(_). allowed).', ] ], 'emp_name' => [ @@ -1490,11 +1504,13 @@ class TicketController extends BaseController // Allows: A-Z, a-z, 0-9, spaces (\s), hyphens (\-), underscores (_), and slashes (\/) 'rules' => 'permit_empty|min_length[3]|max_length[50]|regex_match[/^[a-zA-Z0-9\s\-\/_]+$/]', 'errors' => [ - 'min_length' => 'Policy Number appears too short (min 5 characters).', - 'regex_match' => 'Policy Number can only contain letters, numbers, spaces, hyphens(-), underscores(_), and slashes(/).' + 'min_length' => 'Policy Number appears too short (min 3 characters).', + 'regex_match' => 'Policy Number can only contain letters, numbers, spaces, hyphens(-) underscores(_), and slashes(/).' ] ], - 'tpa_no' => ['label' => 'TPA ID','rules' => 'permit_empty','errors' => []], + 'tpa_no' => ['label' => 'TPA ID','rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9]+$/]','errors' => [ + 'regex_match' => 'TPA ID can only contain letters and numbers.' + ]], 'emp_mobile' => ['label' => 'Employee Mobile No','rules' => 'required|numeric|exact_length[10]', 'errors' => [ 'required' => 'Mobile number is required', @@ -1551,6 +1567,35 @@ class TicketController extends BaseController 'hospital_pin_code' => ['label' => 'Hospital Pincode','rules' => 'required|numeric|exact_length[6]', 'errors' => ['exact_length' => 'Pincode must be 6 digits'] ], + 'state' => [ + 'label' => 'State', + 'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]', + 'errors' => [ + 'required' => 'State is required.', + 'regex_match' => 'State name can only contain letters, spaces, and hyphens.' + ] + ], + 'district' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => [ + 'required' => 'District is required.', + 'regex_match' => 'District can contain letters, numbers, spaces, and hyphens.' + ] + ], + 'city' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', + 'errors' => [ + 'regex_match' => 'City can contain letters, numbers, spaces, and hyphens.' + ] + ], + 'pincode' => [ + 'rules' => 'required|numeric|exact_length[6]', + 'errors' => [ + 'required' => 'Pincode is required.', + 'numeric' => 'Pincode must be digits only.', + 'exact_length' => 'Pincode must be exactly 6 digits.' + ] + ], 'hospital_phone_no' => ['label' => 'Hospital Phone','rules' => 'required|numeric|min_length[10]', 'errors' => ['min_length' => 'Phone number too short'] ], @@ -1642,7 +1687,7 @@ class TicketController extends BaseController 'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]', 'errors' => [ 'required' => 'Employee Code is required.', - 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, - and _ allowed).', + 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, hyphens(-) and underscores(_). allowed).', ] ], 'emp_name' => [ @@ -1930,7 +1975,7 @@ class TicketController extends BaseController 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ 'required' => 'Email address is required.', - 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' ] ], 'mail_subject' => [ diff --git a/app/Controllers/UserController.php b/app/Controllers/UserController.php index 44b44e51..8e3c702b 100755 --- a/app/Controllers/UserController.php +++ b/app/Controllers/UserController.php @@ -142,7 +142,7 @@ class UserController extends AdminController 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ 'required' => 'Email address is required.', - 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' ] ], @@ -326,7 +326,7 @@ class UserController extends AdminController 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ 'required' => 'Email address is required.', - 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' ] ], @@ -832,7 +832,7 @@ class UserController extends AdminController 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ 'required' => 'Email address is required.', - 'regex_match' => 'Please enter a valid email format (e.g., name@company.com).' + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' ] ], // ====================== diff --git a/app/Views/cd_master_add_modal.php b/app/Views/cd_master_add_modal.php index 4cc06188..7a8cf69f 100644 --- a/app/Views/cd_master_add_modal.php +++ b/app/Views/cd_master_add_modal.php @@ -67,12 +67,12 @@
- +
- +
From 4eefa9a48b57f77f6ac38e2a75a161198380a0f3 Mon Sep 17 00:00:00 2001 From: "sanjeev.p" Date: Thu, 12 Feb 2026 14:51:36 +0530 Subject: [PATCH 08/13] FIX_doublePipes --- app/Controllers/ClientController.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index d48a3295..36e86924 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -989,7 +989,7 @@ class ClientController extends AdminController ] ], 'client_name' => [ - 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_-]+$/]|min_length[2]||max_length[45]', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_-]+$/]|min_length[2]|max_length[45]', 'errors' => [ 'required' => 'Client Name is required', 'regex_match' => 'Client Name can only contain letters, numbers, spaces, hyphens(-) and underscores(_).', @@ -998,7 +998,7 @@ class ClientController extends AdminController ] ], 'short_name' => [ - 'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]|min_length[2]||max_length[15]', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]|min_length[2]|max_length[15]', 'errors' => [ 'required' => 'Client Short Name is required', 'regex_match' => 'Client Short Name can only contain letters, numbers, hyphens(-) and underscores(_).', @@ -1021,19 +1021,20 @@ class ClientController extends AdminController ], 'client_logo' => [ 'rules' => [ + 'uploaded[client_logo]', // Add this to check if a file was actually sent 'is_image[client_logo]', - 'max_size[client_logo,200]', // 200 KB + 'max_size[client_logo,200]', 'ext_in[client_logo,jpg,jpeg,png]', 'max_dims[client_logo,100,100]', ], 'errors' => [ + 'uploaded' => 'Please upload a client logo', 'is_image' => 'The uploaded file must be an image', 'max_size' => 'File size should not exceed 200 KB', 'ext_in' => 'Allowed file types: jpg, jpeg, png', 'max_dims' => 'Image dimensions must be 100 x 100 pixels', ] ], - ]; if (!$this->validate($rules)) { From 5c6cf90d8bb914c21d651c97f2054db8966b3e5f Mon Sep 17 00:00:00 2001 From: "sanjeev.p" Date: Thu, 12 Feb 2026 16:42:56 +0530 Subject: [PATCH 09/13] FIX_Tracker Issues --- app/Controllers/ClientController.php | 144 ++++++++++++++++++++------- app/Controllers/LeadsController.php | 6 +- app/Controllers/TicketController.php | 24 ++--- app/Views/ticket_form_handler.php | 29 ++++++ 4 files changed, 150 insertions(+), 53 deletions(-) diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index 36e86924..2343b08d 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -992,7 +992,7 @@ class ClientController extends AdminController 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_-]+$/]|min_length[2]|max_length[45]', 'errors' => [ 'required' => 'Client Name is required', - 'regex_match' => 'Client Name can only contain letters, numbers, spaces, hyphens(-) and underscores(_).', + 'regex_match' => 'Client Name can only contain letters, numbers, spaces, hyphens and underscores.', 'min_length' => 'Client Name must be at least 2 characters.', 'max_length' => 'Client Name must not exceed 45 characters.', ] @@ -1001,7 +1001,7 @@ class ClientController extends AdminController 'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]|min_length[2]|max_length[15]', 'errors' => [ 'required' => 'Client Short Name is required', - 'regex_match' => 'Client Short Name can only contain letters, numbers, hyphens(-) and underscores(_).', + 'regex_match' => 'Client Short Name can only contain letters, numbers, hyphens and underscores.', 'min_length' => 'Client Short Name must be at least 2 characters.', 'max_length' => 'Client Short Name must not exceed 15 characters.', ] @@ -1019,21 +1019,30 @@ class ClientController extends AdminController 'required' => 'HR File Processed By is required.', ] ], + // 'client_logo' => [ + // 'rules' => [ + // 'uploaded[client_logo]', // Add this to check if a file was actually sent + // 'is_image[client_logo]', + // 'max_size[client_logo,200]', + // 'ext_in[client_logo,jpg,jpeg,png]', + // 'max_dims[client_logo,100,100]', + // ], + // 'errors' => [ + // 'uploaded' => 'Please upload a client logo', + // 'is_image' => 'The uploaded file must be an image', + // 'max_size' => 'File size should not exceed 200 KB', + // 'ext_in' => 'Allowed file types: jpg, jpeg, png', + // 'max_dims' => 'Image dimensions must be 100 x 100 pixels', + // ] + // ], 'client_logo' => [ - 'rules' => [ - 'uploaded[client_logo]', // Add this to check if a file was actually sent - 'is_image[client_logo]', - 'max_size[client_logo,200]', - 'ext_in[client_logo,jpg,jpeg,png]', - 'max_dims[client_logo,100,100]', - ], - 'errors' => [ - 'uploaded' => 'Please upload a client logo', - 'is_image' => 'The uploaded file must be an image', - 'max_size' => 'File size should not exceed 200 KB', - 'ext_in' => 'Allowed file types: jpg, jpeg, png', - 'max_dims' => 'Image dimensions must be 100 x 100 pixels', - ] + 'rules' => 'permit_empty|is_image[client_logo]|max_size[client_logo,200]|ext_in[client_logo,jpg,jpeg,png]|max_dims[client_logo,100,100]', + 'errors' => [ + 'is_image' => 'The uploaded file must be an image', + 'max_size' => 'File size should not exceed 200 KB', + 'ext_in' => 'Allowed file types: jpg, jpeg, png', + 'max_dims' => 'Image dimensions must be 100 x 100 pixels', + ] ], ]; @@ -1086,6 +1095,65 @@ class ClientController extends AdminController public function editClientGeneralInfo() { + $rules = [ + 'entity_type_id' => [ + 'rules' => 'required|numeric', + 'errors' => [ + 'required' => 'Entity Type is required', + 'numeric' => 'Invalid Entity Type selected' + ] + ], + 'client_name' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_-]+$/]', + 'errors' => [ + 'required' => 'Client Name is required', + 'regex_match' => 'Client Name can only contain letters, numbers, spaces, hyphens and underscores.', + 'min_length' => 'Client Name must be at least 2 characters.', + 'max_length' => 'Client Name must not exceed 45 characters.', + ] + ], + 'short_name' => [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]', + 'errors' => [ + 'required' => 'Client Short Name is required', + 'regex_match' => 'Client Short Name can only contain letters, numbers, hyphens and underscores.', + 'min_length' => 'Client Short Name must be at least 2 characters.', + 'max_length' => 'Client Short Name must not exceed 15 characters.', + ] + ], + 'pan' => [ + 'rules' => 'required|regex_match[/^[A-Z]{5}[0-9]{4}[A-Z]$/]', + 'errors' => [ + 'required' => 'PAN Number is required.', + 'regex_match' => 'Invalid PAN format. Example: ABCDE1234F' + ] + ], + 'hr_file_processed_by' => [ + 'rules' => 'required', + 'errors' => [ + 'required' => 'HR File Processed By is required.', + ] + ], + 'client_logo' => [ + 'rules' => 'permit_empty|is_image[client_logo]|max_size[client_logo,200]|ext_in[client_logo,jpg,jpeg,png]|max_dims[client_logo,100,100]', + 'errors' => [ + 'is_image' => 'The uploaded file must be an image', + 'max_size' => 'File size should not exceed 200 KB', + 'ext_in' => 'Allowed file types: jpg, jpeg, png', + 'max_dims' => 'Image dimensions must be 100 x 100 pixels', + ] + ], + ]; + + if (!$this->validate($rules)) { + return $this->response->setStatusCode(400)->setJSON([ + 'status' => false, + 'message' => 'Input validation failed', + 'code' => 400, + 'errors' => $this->validator->getErrors() + ]); + } + $this->myLogger->logme('error', 'edit client general info function called'); $uploadFilePath = ROOTPATH . 'public/uploads/logo/'; $file_name = file_Upload($this->request->getFile('client_logo'), $uploadFilePath); @@ -1568,14 +1636,14 @@ class ClientController extends AdminController ] ], ]; - if (!$this->validate($rules)) { - return $this->response->setStatusCode(400)->setJSON([ - 'status' => false, - 'message' => 'Input validation failed', - 'code' => 400, - 'errors' => $this->validator->getErrors() - ]); - } + // if (!$this->validate($rules)) { + // return $this->response->setStatusCode(400)->setJSON([ + // 'status' => false, + // 'message' => 'Input validation failed', + // 'code' => 400, + // 'errors' => $this->validator->getErrors() + // ]); + // } $data['client_id'] = $this->request->getPost('client_id'); $data['created_by'] = get_session_userid(); @@ -1738,14 +1806,14 @@ class ClientController extends AdminController 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_-]+$/]|min_length[3]', 'errors' => [ 'required' => 'Branch Name is required', - 'regex_match' => 'Branch Name can only contain letters, numbers, spaces, hyphens(-) and underscores(_).', + 'regex_match' => 'Branch Name can only contain letters, numbers, spaces, hyphens and underscores.', ] ], 'branch_code' => [ 'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]', 'errors' => [ 'required' => 'Branch Code is required', - 'regex_match' => 'Branch Code can only contain letters, numbers, hyphens(-) and underscores(_).', + 'regex_match' => 'Branch Code can only contain letters, numbers, hyphens and underscores.', ] ], 'address1' => [ @@ -1757,11 +1825,13 @@ class ClientController extends AdminController ], 'state' => [ 'label' => 'State', - 'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]', - 'errors' => [ - 'required' => 'State is required.', - 'regex_match' => 'State name can only contain letters, spaces, and hyphens.' - ] + 'rules' => 'required', + 'errors' => ['required' => 'State is required.'] + // 'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]', + // 'errors' => [ + // 'required' => 'State is required.', + // 'regex_match' => 'State name can only contain letters, spaces, and hyphens.' + // ] ], 'district' => [ 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', @@ -2142,7 +2212,7 @@ class ClientController extends AdminController 'errors' => [ 'required' => 'Branch Name is required', 'min_length' => 'Branch Name must be at least 3 characters long', - 'regex_match' => 'Branch Name can only contain letters, numbers, spaces, hyphens(-) and underscores(_).' + 'regex_match' => 'Branch Name can only contain letters, numbers, spaces, hyphens and underscores.' ] ], 'branch_code' => [ @@ -2151,7 +2221,7 @@ class ClientController extends AdminController 'errors' => [ 'required' => 'Branch Code is required', 'min_length' => 'Branch Code must be at least 2 characters long', - 'regex_match' => 'Branch Code can only contain letters, numbers, hyphens(-) and underscores(_).' + 'regex_match' => 'Branch Code can only contain letters, numbers, hyphens and underscores.' ] ], 'address1' => [ @@ -2201,7 +2271,7 @@ class ClientController extends AdminController 'errors' => [ 'required' => 'Contact name is required', 'min_length' => 'Contact name must be at least 3 characters long', - 'regex_match' => 'Contact name can only contain letters, numbers, spaces, hyphens(-) and underscores(_).' + 'regex_match' => 'Contact name can only contain letters, numbers, spaces, hyphens and underscores.' ] ], 'designation.*' => [ @@ -2329,7 +2399,7 @@ class ClientController extends AdminController 'errors' => [ 'required' => 'Branch Name is required', 'min_length' => 'Branch Name must be at least 3 characters long', - 'regex_match' => 'Branch Name can only contain letters, numbers, spaces, hyphens(-) and underscores(_).' + 'regex_match' => 'Branch Name can only contain letters, numbers, spaces, hyphens and underscores.' ] ], 'branch_code' => [ @@ -2338,7 +2408,7 @@ class ClientController extends AdminController 'errors' => [ 'required' => 'Branch Code is required', 'min_length' => 'Branch Code must be at least 2 characters long', - 'regex_match' => 'Branch Code can only contain letters, numbers, hyphens(-) and underscores(_).' + 'regex_match' => 'Branch Code can only contain letters, numbers, hyphens and underscores.' ] ], 'address1' => [ @@ -2388,7 +2458,7 @@ class ClientController extends AdminController 'errors' => [ 'required' => 'Contact name is required', 'min_length' => 'Contact name must be at least 3 characters long', - 'regex_match' => 'Contact name can only contain letters, numbers, spaces, hyphens(-) and underscores(_).' + 'regex_match' => 'Contact name can only contain letters, numbers, spaces, hyphens and underscores.' ] ], 'designation.*' => [ diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php index 6521effa..958d7eba 100644 --- a/app/Controllers/LeadsController.php +++ b/app/Controllers/LeadsController.php @@ -418,7 +418,7 @@ class LeadsController extends BaseController 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s_-]+$/]|min_length[3]', 'errors' => [ 'required' => 'Branch Name is required.', - 'regex_match' => 'Branch Name can only contain letters, numbers, spaces, hyphens(-) and underscores(_)..', + 'regex_match' => 'Branch Name can only contain letters, numbers, spaces, hyphens and underscores..', 'min_length' => 'Branch Name must be at least 3 characters long.' ] ], @@ -426,14 +426,14 @@ class LeadsController extends BaseController 'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]', 'errors' => [ 'required' => 'Branch Code is required.', - 'regex_match' => 'Branch Code can only contain letters, numbers, hyphens(-) and underscores(_)..' + 'regex_match' => 'Branch Code can only contain letters, numbers, hyphens and underscores..' ] ], 'contact_person_name' => [ 'rules' => 'required|regex_match[/^[a-zA-Z0-9_ -]+$/]', 'errors' => [ 'required' => 'Contact Person Name is required', - 'regex_match' => 'Contact person name only letters, numbers and spaces, hyphens(-) and underscores(_)..' + 'regex_match' => 'Contact person name only letters, numbers and spaces, hyphens and underscores..' ] ], 'contact_person_mobile' => [ diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index 562fe5e3..59a2b22a 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -1140,7 +1140,7 @@ class TicketController extends BaseController 'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]', 'errors' => [ 'required' => 'Employee Code is required.', - 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, hyphens(-) and underscores(_). allowed).' + 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, hyphens and underscores. allowed).' ] ], 'emp_name' => [ @@ -1173,7 +1173,9 @@ class TicketController extends BaseController 'regex_match' => 'Policy Number can only contain letters, numbers, spaces, hyphens(-) underscores(_), and slashes(/).' ] ], - 'tpa_no' => ['label' => 'TPA ID','rules' => 'permit_empty','errors' => []], + 'tpa_no' => ['label' => 'TPA ID','rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9]+$/]','errors' => [ + 'regex_match' => 'TPA ID can only contain letters and numbers.' + ]], 'emp_mobile' => ['label' => 'Employee Mobile No','rules' => 'required|numeric|exact_length[10]', 'errors' => [ 'required' => 'Mobile number is required', @@ -1189,9 +1191,8 @@ class TicketController extends BaseController ] ], 'emp_personal_mail' => ['label' => 'Personal Mail ID', - 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ - 'required' => 'Personal Email address is required.', 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' ] ], @@ -1335,7 +1336,7 @@ class TicketController extends BaseController 'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]', 'errors' => [ 'required' => 'Employee Code is required.', - 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, hyphens(-) and underscores(_). allowed).', + 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, hyphens and underscores. allowed).', ] ], 'emp_name' => [ @@ -1362,9 +1363,8 @@ class TicketController extends BaseController ] ], 'emp_personal_mail' => ['label' => 'Personal Mail ID', - 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ - 'required' => 'Personal Email address is required.', 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' ] ], @@ -1475,7 +1475,7 @@ class TicketController extends BaseController 'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]', 'errors' => [ 'required' => 'Employee Code is required.', - 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, hyphens(-) and underscores(_). allowed).', + 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, hyphens and underscores. allowed).', ] ], 'emp_name' => [ @@ -1526,9 +1526,8 @@ class TicketController extends BaseController ] ], 'emp_personal_mail' => ['label' => 'Personal Mail ID', - 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ - 'required' => 'Personal Email address is required.', 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' ] ], @@ -1687,7 +1686,7 @@ class TicketController extends BaseController 'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]', 'errors' => [ 'required' => 'Employee Code is required.', - 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, hyphens(-) and underscores(_). allowed).', + 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, hyphens and underscores. allowed).', ] ], 'emp_name' => [ @@ -1714,9 +1713,8 @@ class TicketController extends BaseController ] ], 'emp_personal_mail' => ['label' => 'Personal Mail ID', - 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', 'errors' => [ - 'required' => 'Personal Email address is required.', 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' ] ], diff --git a/app/Views/ticket_form_handler.php b/app/Views/ticket_form_handler.php index d744931e..268a25d2 100644 --- a/app/Views/ticket_form_handler.php +++ b/app/Views/ticket_form_handler.php @@ -383,12 +383,23 @@ let $label = $('#employee_data_points_label'); let $input = $('#emp_mobile_number_for_claim'); + // Remove old attributes but DO NOT clear the .val() + $input.removeAttr('onkeypress maxlength oninput'); + if (value == "mobile") { $label.text('Employee Mobile Number'); $input.attr('onkeypress', 'return onlyNumbers(event)').attr('maxlength', '10'); + + $input.val($input.val().replace(/[^0-9]/g, '').substring(0, 10)); + $input.attr('oninput', "this.value = this.value.replace(/[^0-9]/g, '').substring(0, 10)"); } else { $label.text('Employee ID'); $input.removeAttr('onkeypress maxlength'); + + $input.attr('onkeypress', 'return onlyEmployee(event)'); + $input.val($input.val().replace(/[^a-zA-Z0-9\s\-_/]/g, '')); + $input.attr('oninput', "this.value = this.value.replace(/[^a-zA-Z0-9\\s\\-_/]/g, '')"); + } }); @@ -1069,6 +1080,24 @@ return false; } + function onlyEmployee(event) { + var charCode = (event.which) ? event.which : event.keyCode; + + // Allow Numbers (48-57) + // Allow Uppercase (65-90) + // Allow Lowercase (97-122) + // Allow Space (32), Hyphen (45), Underscore (95), Forward Slash (47) + if ( + (charCode >= 48 && charCode <= 57) || + (charCode >= 65 && charCode <= 90) || + (charCode >= 97 && charCode <= 122) || + [32, 45, 95, 47].includes(charCode) + ) { + return true; + } + return false; + } + function setClientPolicyData(input) { // console.log('policy_value ',input); From afaa70a3a078561561a13fc5983122ab1f47ed65 Mon Sep 17 00:00:00 2001 From: "sanjeev.p" Date: Thu, 12 Feb 2026 16:51:02 +0530 Subject: [PATCH 10/13] FIX_ClaimsEditSection --- app/Controllers/TicketController.php | 29 ---------------------------- 1 file changed, 29 deletions(-) diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index 59a2b22a..076d1303 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -1566,35 +1566,6 @@ class TicketController extends BaseController 'hospital_pin_code' => ['label' => 'Hospital Pincode','rules' => 'required|numeric|exact_length[6]', 'errors' => ['exact_length' => 'Pincode must be 6 digits'] ], - 'state' => [ - 'label' => 'State', - 'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]', - 'errors' => [ - 'required' => 'State is required.', - 'regex_match' => 'State name can only contain letters, spaces, and hyphens.' - ] - ], - 'district' => [ - 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', - 'errors' => [ - 'required' => 'District is required.', - 'regex_match' => 'District can contain letters, numbers, spaces, and hyphens.' - ] - ], - 'city' => [ - 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', - 'errors' => [ - 'regex_match' => 'City can contain letters, numbers, spaces, and hyphens.' - ] - ], - 'pincode' => [ - 'rules' => 'required|numeric|exact_length[6]', - 'errors' => [ - 'required' => 'Pincode is required.', - 'numeric' => 'Pincode must be digits only.', - 'exact_length' => 'Pincode must be exactly 6 digits.' - ] - ], 'hospital_phone_no' => ['label' => 'Hospital Phone','rules' => 'required|numeric|min_length[10]', 'errors' => ['min_length' => 'Phone number too short'] ], From 0f7258a0ee605a0aad2e85012504b74e0227054e Mon Sep 17 00:00:00 2001 From: "sanjeev.p" Date: Thu, 12 Feb 2026 16:58:29 +0530 Subject: [PATCH 11/13] FIX_BranchState --- app/Controllers/ClientController.php | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index 2343b08d..af024fd7 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -2232,10 +2232,11 @@ class ClientController extends AdminController ], 'state' => [ 'label' => 'State', - 'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]', + // 'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]', + 'rules' => 'required', 'errors' => [ 'required' => 'State is required.', - 'regex_match' => 'State name can only contain letters, spaces, and hyphens.' + // 'regex_match' => 'State name can only contain letters, spaces, and hyphens.' ] ], 'district' => [ @@ -2419,11 +2420,8 @@ class ClientController extends AdminController ], 'state' => [ 'label' => 'State', - 'rules' => 'required|regex_match[/^[a-zA-Z\s\-]+$/]', - 'errors' => [ - 'required' => 'State is required.', - 'regex_match' => 'State name can only contain letters, spaces, and hyphens.' - ] + 'rules' => 'required', + 'errors' => ['required' => 'State is required.'] ], 'district' => [ 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s\-]+$/]', From d10d84938966dfcad8190b1d6d1d2021a2a032ea Mon Sep 17 00:00:00 2001 From: "sanjeev.p" Date: Thu, 12 Feb 2026 17:50:46 +0530 Subject: [PATCH 12/13] FIX_leadsNonEBFixes --- app/Controllers/LeadsController.php | 48 ++++++++++++++--------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php index 958d7eba..0f96da92 100644 --- a/app/Controllers/LeadsController.php +++ b/app/Controllers/LeadsController.php @@ -366,18 +366,6 @@ class LeadsController extends BaseController // print_r($this->request->getPost()); die; $id = $this->request->getPost('id'); $data = $this->prepareLeadData(); - // print_r($data); die; - - - if (!$id) { - return $this->insertNewLead($data); - } else { - return $this->updateOldLead($id, $data); - } - } - - private function prepareLeadData() - { $rules = [ 'lead_type' => [ @@ -396,16 +384,12 @@ class LeadsController extends BaseController 'rules' => 'required|regex_match[/^[a-zA-Z0-9_ -]+$/]', 'errors' => [ 'required' => 'Client Name is required', - 'regex_match' => 'Client Name only letters, numbers and characters _ - and space are allowed' + 'regex_match' => 'Client Name only letters, numbers, space, hyphens and underscores are allowed' ] ], 'client_short_name' => [ 'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]', - 'errors' => ['required' => 'Client Short Name is required','regex_match' => 'Client Short Name only letters, numbers and characters _ and - are allowed'] - ], - 'gst' => [ - 'rules' => 'required', - 'errors' => ['required' => 'GST Number is required'] + 'errors' => ['required' => 'Client Short Name is required','regex_match' => 'Client Short Name only letters, numbers, hyphens and underscores are allowed'] ], 'gst' => [ 'rules' => 'required|regex_match[/^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}$/]', @@ -438,9 +422,11 @@ class LeadsController extends BaseController ], 'contact_person_mobile' => [ 'rules' => 'required', - 'rules' => 'required|regex_match[/^[0-9]+$/]', - 'errors' => ['required' => 'Contact Person Mobile is required' , - 'regex_match' => 'Contact Person Mobile Only numbers' + 'rules' => 'required|exact_length[10]|regex_match[/^[0-9]+$/]', + 'errors' => [ + 'required' => 'Contact Person Mobile is required' , + 'regex_match' => 'Contact Person Mobile Only numbers', + 'exact_length'=> 'Contact Person Mobile must be exactly 10 digits long.' ] ], 'contact_person_email' => [ @@ -462,8 +448,7 @@ class LeadsController extends BaseController 'errors' => ['required' => 'Status is required'] ] ]; - $request_data = $this->request->getPost(); - $data = sanitizeInputArrayAdvanced($request_data); + if (isset($data['lead_form_type']) && (int)$data['lead_form_type'] === 2) { $rules['client_type'] = [ 'rules' => 'required', @@ -524,8 +509,23 @@ class LeadsController extends BaseController ]); } - + // print_r($data); die; + + + if (!$id) { + return $this->insertNewLead($data); + } else { + return $this->updateOldLead($id, $data); + } + } + + private function prepareLeadData() + { + + $request_data = $this->request->getPost(); + $data = sanitizeInputArrayAdvanced($request_data); + $data['client_type'] = 1; $data['pan'] = ""; From 2b67f5b77f2c6c13ff0a8c2675f43c8ca4d2cfdf Mon Sep 17 00:00:00 2001 From: "sanjeev.p" Date: Fri, 13 Feb 2026 09:05:41 +0530 Subject: [PATCH 13/13] FIX_Validation --- app/Controllers/ClientController.php | 16 +++--- app/Controllers/MasterController.php | 85 ++++++++++++++++++++++------ app/Controllers/TicketController.php | 24 ++++---- app/Views/cd_master_add_modal.php | 2 +- 4 files changed, 88 insertions(+), 39 deletions(-) diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index af024fd7..2d86b540 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -1717,14 +1717,14 @@ class ClientController extends AdminController ] ], ]; - if (!$this->validate($rules)) { - return $this->response->setStatusCode(400)->setJSON([ - 'status' => false, - 'message' => 'Input validation failed', - 'code' => 400, - 'errors' => $this->validator->getErrors() - ]); - } + // if (!$this->validate($rules)) { + // return $this->response->setStatusCode(400)->setJSON([ + // 'status' => false, + // 'message' => 'Input validation failed', + // 'code' => 400, + // 'errors' => $this->validator->getErrors() + // ]); + // } $id = $this->request->getPost('PrimaryKey'); $data['client_id'] = $this->request->getPost('client_id'); diff --git a/app/Controllers/MasterController.php b/app/Controllers/MasterController.php index 0f5be81d..c03b7069 100755 --- a/app/Controllers/MasterController.php +++ b/app/Controllers/MasterController.php @@ -254,7 +254,7 @@ class MasterController extends AdminController $this->myLogger->logme('error','Insurer Onboarding function called'); $headerData['tab_name'] = 'Insurer Masters'; $headerData['page_name'] = 'Insurers'; - + $types = array( (object) array('id' => 'pvt', 'name' => 'PVT'), (object) array('id' => 'psu', 'name' => 'PSU') @@ -284,29 +284,78 @@ class MasterController extends AdminController $this->myLogger->logme('error','Insurer general info function called'); $rules = [ - 'name' => [ - 'rules' => 'required', - 'errors' => [ - 'required' => 'Name is required' - ] - ], - 'short_name' => [ - 'rules' => 'required|min_length[3]|max_length[8]', - 'errors' => [ - 'required' => 'Short name is required', - 'min_length' => 'Short name must be at least 3 characters', - 'max_length' => 'Short name cannot exceed 8 characters' - ] - ], - 'insurer_logo' => [ + 'name' => [ + 'label' => 'Insurer Name', + 'rules' => ['required', 'regex_match[/^[a-zA-Z0-9\s\-_]+$/]'], + 'errors' => [ + 'required' => 'Insurer Name is required.', + 'regex_match' => 'Insurer Name can only contain letters, numbers, spaces, hyphens, and underscores.', + ] + ], + 'short_name' => [ + 'label' => 'Insurer Short Name', + 'rules' => ['required', 'regex_match[/^[a-zA-Z0-9\-_]+$/]'], + 'errors' => [ + 'required' => 'Short Name is required.', + 'regex_match' => 'Short Name can only contain letters, numbers, hyphens, and underscores.', + ] + ], + 'type' => [ + 'label' => 'Insurer Type', + 'rules' => 'permit_empty|in_list[pvt,psu]', + 'errors' => [ + 'in_list' => 'Please select a valid Insurer Type (PVT or PSU).' + ] + ], + 'category' => [ + 'label' => 'Insurer Category', + 'rules' => 'permit_empty|in_list[life,general]', + 'errors' => [ + 'in_list' => 'Please select a valid Category (Life or General).' + ] + ], + 'addition_add_day' => [ + 'rules' => 'permit_empty' // Checkboxes return null if unchecked + ], + 'deletion_add_day' => [ + 'rules' => 'permit_empty' + ], + 'is_multi_event' => [ + 'rules' => 'permit_empty' + ], + 'insurer_logo' => [ 'rules' => 'if_exist|is_image[insurer_logo]|max_size[insurer_logo,200]|ext_in[insurer_logo,jpg,jpeg,png]', 'errors' => [ 'is_image' => 'The uploaded file must be an image', 'max_size' => 'File size should not exceed 200 KB', 'ext_in' => 'Allowed file types: jpg, jpeg, png', ] - ], - ]; + ], +]; + // $rules = [ + // 'name' => [ + // 'rules' => 'required', + // 'errors' => [ + // 'required' => 'Name is required' + // ] + // ], + // 'short_name' => [ + // 'rules' => 'required|min_length[3]|max_length[8]', + // 'errors' => [ + // 'required' => 'Short name is required', + // 'min_length' => 'Short name must be at least 3 characters', + // 'max_length' => 'Short name cannot exceed 8 characters' + // ] + // ], + // 'insurer_logo' => [ + // 'rules' => 'if_exist|is_image[insurer_logo]|max_size[insurer_logo,200]|ext_in[insurer_logo,jpg,jpeg,png]', + // 'errors' => [ + // 'is_image' => 'The uploaded file must be an image', + // 'max_size' => 'File size should not exceed 200 KB', + // 'ext_in' => 'Allowed file types: jpg, jpeg, png', + // ] + // ], + // ]; if (!$this->validate($rules)) { return $this->response->setStatusCode(400)->setJSON([ diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index 076d1303..7b4ef595 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -1136,11 +1136,11 @@ class TicketController extends BaseController $rules = [ // --- EMPLOYEE DETAILS --- 'emp_code' => [ - 'label' => 'Employee Code', + 'label' => 'Employee ID', 'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]', 'errors' => [ - 'required' => 'Employee Code is required.', - 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, hyphens and underscores. allowed).' + 'required' => 'Employee ID is required.', + 'regex_match' => 'Employee ID cannot contain spaces or special characters (only letters, numbers, hyphens and underscores. allowed).' ] ], 'emp_name' => [ @@ -1332,11 +1332,11 @@ class TicketController extends BaseController $rules = [ // --- EMPLOYEE DETAILS --- 'emp_code' => [ - 'label' => 'Employee Code', + 'label' => 'Employee ID', 'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]', 'errors' => [ - 'required' => 'Employee Code is required.', - 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, hyphens and underscores. allowed).', + 'required' => 'Employee ID is required.', + 'regex_match' => 'Employee ID cannot contain spaces or special characters (only letters, numbers, hyphens and underscores. allowed).', ] ], 'emp_name' => [ @@ -1471,11 +1471,11 @@ class TicketController extends BaseController $rules = [ // --- EMPLOYEE DETAILS --- 'emp_code' => [ - 'label' => 'Employee Code', + 'label' => 'Employee ID', 'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]', 'errors' => [ - 'required' => 'Employee Code is required.', - 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, hyphens and underscores. allowed).', + 'required' => 'Employee ID is required.', + 'regex_match' => 'Employee ID cannot contain spaces or special characters (only letters, numbers, hyphens and underscores. allowed).', ] ], 'emp_name' => [ @@ -1653,11 +1653,11 @@ class TicketController extends BaseController $rules = [ // --- EMPLOYEE DETAILS --- 'emp_code' => [ - 'label' => 'Employee Code', + 'label' => 'Employee ID', 'rules' => 'required|min_length[2]|max_length[20]|regex_match[/^[a-zA-Z0-9_-]+$/]', 'errors' => [ - 'required' => 'Employee Code is required.', - 'regex_match' => 'Employee Code cannot contain spaces or special characters (only letters, numbers, hyphens and underscores. allowed).', + 'required' => 'Employee ID is required.', + 'regex_match' => 'Employee ID cannot contain spaces or special characters (only letters, numbers, hyphens and underscores. allowed).', ] ], 'emp_name' => [ diff --git a/app/Views/cd_master_add_modal.php b/app/Views/cd_master_add_modal.php index 7a8cf69f..2d9c0143 100644 --- a/app/Views/cd_master_add_modal.php +++ b/app/Views/cd_master_add_modal.php @@ -67,7 +67,7 @@
- +