FIX_ 1) sanitizepost for all 2) MIME File Upload images and pdf 3)CI Rules

This commit is contained in:
sanjeev.p 2026-01-23 11:28:18 +05:30
parent 68ecf58058
commit 7cea4444d5
51 changed files with 3662 additions and 680 deletions

View File

@ -59,8 +59,48 @@ class AppContentManagementController extends AdminController
// add and edit
public function add_advertise_image() {
try {
$data = $this->request->getPost();
$sanitized_post_data = sanitizeInputArrayAdvanced($data);
$id = (int) $sanitized_post_data['add_image_id'];
$rules = [
'client_id' => [
'rules' => 'required|integer',
'errors' => [
'required' => 'Client is required',
'integer' => 'Invalid client selected'
]
],
];
$rules['advertise_image'] = [
'rules' => ($id === 0 ? 'uploaded[advertise_image]|' : '') // required only for ADD
. 'is_image[advertise_image]'
. '|mime_in[advertise_image,image/jpg,image/jpeg,image/png]'
. '|max_size[advertise_image,200]'
. '|min_dims[advertise_image,1640,664]'
. '|max_dims[advertise_image,1640,664]',
'errors' => [
'uploaded' => 'Image is required',
'is_image' => 'File must be an image',
'mime_in' => 'Only JPG, JPEG, PNG allowed',
'max_size' => 'Image size must not exceed 200 KB',
'min_dims' => 'Image dimensions must be exactly 1640x664 pixels',
'max_dims' => 'Image dimensions must be exactly 1640x664 pixels',
]
];
if (!$this->validate($rules)) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'message' => 'Input validation failed',
'code' => 400,
'errors' => $this->validator->getErrors()
]);
}
$file = $this->request->getFile('advertise_image');
$client_id = $this->request->getPost('client_id');
$client_id = $sanitized_post_data['client_id'];
//1) original file name for vaildations
$fileName = $file->getClientName(); //original file name for vaildations
$existing = $this->addImgModel->where('name', $fileName)->where('client_id', $fileName)->where('is_active', 1)->first();
@ -80,13 +120,13 @@ class AppContentManagementController extends AdminController
$file->move($uploadPath, $fileName);
$id = $this->request->getPost('add_image_id');
$data = ['name' => $fileName,'client_id'=>$client_id];
$id = $sanitized_post_data['add_image_id'];
$details = ['name' => $fileName,'client_id'=>$client_id];
if ($id == 0) {
$this->addImgModel->insert($data);
$this->addImgModel->insert($details);
} else {
$this->addImgModel->update($id, $data);
$this->addImgModel->update($id, $details);
}
return $this->respond(['status' => true, 'message' => 'Image saved successfully.']);
@ -143,8 +183,56 @@ class AppContentManagementController extends AdminController
if ($this->request->getMethod() === 'post') {
$id = $this->request->getPost('fe_id');
$data = $this->request->getPost();
$rules = [
'type' => [
'rules' => 'required|max_length[255]',
'errors' => [
'required' => 'Type is required',
'max_length' => 'Type cannot exceed 255 characters'
]
],
'content_section' => [
'rules' => 'required|max_length[255]',
'errors' => [
'required' => 'Content Section is required',
'max_length' => 'Content Section cannot exceed 255 characters'
]
],
'heading' => [
'rules' => 'required|max_length[255]',
'errors' => [
'required' => 'Heading is required',
'max_length' => 'Heading cannot exceed 255 characters'
]
],
'content' => [
'rules' => 'required|max_length[5000]',
'errors' => [
'required' => 'Content is required',
'max_length' => 'Content cannot exceed 5000 characters'
]
],
'notes' => [
'rules' => 'required|max_length[1500]',
'errors' => [
'required' => 'Notes are required',
'max_length' => 'Notes cannot exceed 1500 characters'
]
]
];
if (!$this->validate($rules)) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'message' => 'Input validation failed',
'code' => 400,
'errors' => $this->validator->getErrors()
]);
}
$request_post_data = $this->request->getPost();
$data = sanitizeInputArrayAdvanced($data);
$id = $data['fe_id'];
unset($data['fe_id']);
@ -231,8 +319,30 @@ class AppContentManagementController extends AdminController
try {
// --- 1. POST: CREATE OR UPDATE ---
if ($method === 'post') {
$id = $this->request->getPost('faq_id');
$data = array_filter($this->request->getPost(), fn($v) => $v !== '' && $v !== null);
$rules = [
'category' => [
'rules' => 'required',
'errors' => [
'required' => 'Category is required'
]
],
'question' => [
'rules' => 'required',
'errors' => [
'required' => 'Question is required'
]
],
'answer' => [
'rules' => 'required',
'errors' => [
'required' => 'Answer is required'
]
]
];
$request_post_data = $this->request->getPost();
$sanitized_post_data = sanitizeInputArrayAdvanced($request_post_data);
$data = array_filter($sanitized_post_data, fn($v) => $v !== '' && $v !== null);
$id = $data['faq_id'];
if (empty($id)) {
$status = $this->faqModel->insert($data);

View File

@ -191,10 +191,13 @@ class BDSReportController extends AdminController
return $this->loadLayout('irba_report', $data);
} else {
$fromDate = $this->request->getPost('fromDate');
$toDate = $this->request->getPost('toDate');
$category = $this->request->getPost('category');
$report_type = $this->request->getPost('report_type');
$request_post_data = $this->request->getPost();
$sanitized_post_data = sanitizeInputArrayAdvanced($request_post_data);
$fromDate = $sanitized_post_data['fromDate'];
$toDate = $sanitized_post_data['toDate'];
$category = $sanitized_post_data['category'];
$report_type = $sanitized_post_data['report_type'];
// log_message('error',json_encode($_POST));die();
if ($report_type == 'insurer') {
$life = $category == 'life' ? 1 : 0;
@ -937,11 +940,13 @@ class BDSReportController extends AdminController
return $this->loadLayout('renewal_search', $data);
} else {
$fromDate = $this->request->getPost('fromDate');
$toDate = $this->request->getPost('toDate');
$client_id = $this->request->getPost('client_id');
$client_type = $this->request->getPost('client_type');
$issuer_branch = $this->request->getPost('issuer_branch');
$request_post_data = $this->request->getPost();
$sanitized_post_data = sanitizeInputArrayAdvanced($request_post_data);
$fromDate = $sanitized_post_data['fromDate'];
$toDate = $sanitized_post_data['toDate'];
$client_id = $sanitized_post_data['client_id'];
$client_type = $sanitized_post_data['client_type'];
$issuer_branch = $sanitized_post_data['issuer_branch'];
$data['issuer_branch'] = $this->nhanceBranchModel->where('is_active', 1)->findAll();
$data['client_type'] = [1 => 'Group', 2 => 'Individual'];

File diff suppressed because it is too large Load Diff

View File

@ -2676,12 +2676,73 @@ class EmployeeController extends AdminController
//UPDATE EMPLOYEE
public function update_emp_data()
{
$data = $this->request->getPost();
$rules = [
'emp_code' => [
'rules' => 'required',
'errors' => [
'required' => 'Employee Code is missing'
]
],
'name' => [
'rules' => 'required|min_length[2]|max_length[100]',
'errors' => [
'required' => 'Employee name is required',
'min_length' => 'Name must be at least 2 characters',
'max_length' => 'Name cannot exceed 100 characters'
]
],
'gender' => [
'rules' => 'permit_empty|in_list[M,F]',
'errors' => [
'in_list' => 'Invalid gender selected'
]
],
'email_corporate' => [
'rules' => 'required|valid_email',
'errors' => [
'required' => 'Email is required',
'valid_email' => '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'
]
],
];
$request_post_data = $this->request->getPost();
$data = sanitizeInputArrayAdvanced($request_post_data);
if (isset($data['relationship'])) {
$rules['relationship'] = [
'rules' => 'required|in_list[Self,Spouse,Child,Father,Mother,Father-in-law,Mother-in-law]',
'errors' => [
'required' => 'Relationship is required',
'in_list' => 'The selected relationship is invalid.'
]
];
}
if (!$this->validate($rules)) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'message' => 'Input validation failed',
'code' => 400,
'errors' => $this->validator->getErrors()
]);
}
// print_rr($data);die();
// $data['dob'] = date('Y-m-d', strtotime($data['dob']));
if(isset( $data['dob'])){
$data['dob'] = change_date_format($data['dob'], null, 'Y-m-d');
}
$data['dob'] = (!empty($data['dob'])) ? change_date_format($data['dob'], null, 'Y-m-d') : null;
// print_rr($data); die;
// Fetch current employee data
@ -2971,12 +3032,15 @@ class EmployeeController extends AdminController
}
public function mapEmployees(){
$client_id = $this->request->getPost('client_id');
$branch_id = $this->request->getPost('branch_id');
$policy_id = $this->request->getPost('client_policy_id');
$selected_employees = (array)$this->request->getPost('selected');
$si_amt = $this->request->getPost('si_amt');
$policy_start_date_unformatted = $this->request->getPost('policy_start_date');
$request_post_data = $this->request->getPost();
$sanitized_post_data = sanitizeInputArrayAdvanced($request_post_data);
$client_id = $sanitized_post_data['client_id'];
$branch_id = $sanitized_post_data['branch_id'];
$policy_id = $sanitized_post_data['client_policy_id'];
$selected_employees = (array)$sanitized_post_data['selected'];
$si_amt = $sanitized_post_data['si_amt'];
$policy_start_date_unformatted = $sanitized_post_data['policy_start_date'];
$policy_start_date = change_date_format($policy_start_date_unformatted, 'd/M/Y', 'Y-m-d');
@ -3013,7 +3077,9 @@ class EmployeeController extends AdminController
}
public function unmapEmployees($actionType){
$selected_employees = (array)$this->request->getPost('selected');
$request_post_data = $this->request->getPost();
$sanitized_post_data = sanitizeInputArrayAdvanced($request_post_data);
$selected_employees = (array)$sanitized_post_data['selected'];
if($actionType == 0){
for($i = 0;$i<count($selected_employees);$i++){log_message('error',$selected_employees[$i]);
$result1 = $this->employeeModel->set(['client_id' => null, 'client_branch_id' => null])->where('id',$selected_employees[$i])->update();log_message('error',$result1);
@ -3273,7 +3339,31 @@ class EmployeeController extends AdminController
public function retailendorsementsave()
{
try {
$data = $this->request->getPost();
$rules = [
'endorsement_no' => [
'rules' => 'required',
'errors' => [
'required' => 'Endorsement Number is missing'
]
],
'status' => [
'rules' => 'required',
'errors' => [
'required' => 'Status is required',
]
]
];
if (!$this->validate($rules)) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'message' => 'Input validation failed',
'code' => 400,
'errors' => $this->validator->getErrors()
]);
}
$request_post_data = $this->request->getPost();
$data = sanitizeInputArrayAdvanced($request_post_data);
if (!empty($data['id'])) {
$text = "update";
$updateID = $data['id'];

View File

@ -378,7 +378,95 @@ class LeadsController extends BaseController
private function prepareLeadData()
{
$data = $this->request->getPost();
$rules = [
'lead_type' => [
'rules' => 'required',
'errors' => ['required' => 'Lead Type is required']
],
'issuer' => [
'rules' => 'required',
'errors' => ['required' => 'Issuer is required']
],
'entity_type_id' => [
'rules' => 'required',
'errors' => ['required' => 'Entity Type is required']
],
'client_name' => [
'rules' => 'required',
'errors' => ['required' => 'Client Name is required']
],
'client_short_name' => [
'rules' => 'required',
'errors' => ['required' => 'Client Short Name is required']
],
'gst' => [
'rules' => 'required',
'errors' => ['required' => 'GST Number is required']
],
'branch_name' => [
'rules' => 'required',
'errors' => ['required' => 'Branch Name is required']
],
'branch_code' => [
'rules' => 'required',
'errors' => ['required' => 'Branch Code is required']
],
'contact_person_name' => [
'rules' => 'required',
'errors' => ['required' => 'Contact Person Name is required']
],
'contact_person_mobile' => [
'rules' => 'required',
'errors' => ['required' => 'Contact Person Mobile is required']
],
'contact_person_email' => [
'rules' => 'required|valid_email',
'errors' => [
'required' => 'Contact Person Email is required',
'valid_email' => 'Please enter a valid email address'
]
],
'salse_person_id' => [
'rules' => 'required',
'errors' => ['required' => 'Sales Person is required']
],
'status' => [
'rules' => 'required',
'errors' => ['required' => 'Status is required']
]
];
$request_data = $this->request->getPost();
$data = sanitizeInputArrayAdvanced($request_data);
if($data['lead_form_type'] == 2){
$rules['client_type'] = [
'rules' => 'required',
'errors' => ['required' => 'Client Type is required']
];
$rules['policy_type_id'] = [
'rules' => 'required',
'errors' => ['required' => 'Policy Type is required']
];
$rules['policy_start_date'] = [
'rules' => 'required',
'errors' => ['required' => 'Date of Commencement is required']
];
$rules['policy_end_date'] = [
'rules' => 'required',
'errors' => ['required' => 'Date of Expiry is required']
];
}
if (!$this->validate($rules)) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'message' => 'Input validation failed',
'code' => 400,
'errors' => $this->validator->getErrors()
]);
}
$data['client_type'] = 1;
$data['pan'] = "";
@ -5739,7 +5827,7 @@ class LeadsController extends BaseController
$first_file_name = $isFirstField ? 'Member List' : '';
$member_data_link = $isFirstField ? $sample_dwn_link : '';
$read_only = $isFirstField ? 'readonly' : '';
$accept = $isFirstField ? '.xls,.xlsx' : '';
$accept = $isFirstField ? '.xls,.xlsx' : '.xls,.xlsx,.pdf,.jpg,.jpeg,.png';
$displayIndex = $index + 1;
$html .= '

File diff suppressed because it is too large Load Diff

View File

@ -281,13 +281,17 @@ class PayoutController extends BaseController
//... Payout-invoice Mapping - Save/update/soft Delete/Hard Delete Data
public function saveInvoice()
{
$json = $this->request->getJSON(true);
// print_rr($json);die();
if (!$json) {
$raw_json = $this->request->getJSON(true);
// 1. Check if the JSON was actually valid/parsed before sanitizing
if (is_null($raw_json)) {
return $this->response->setJSON(['error' => 'Invalid JSON','message' => 'Invalid JSON received.'])->setStatusCode(400);
}
// 2. Sanitize the data
$json = sanitizeInputArrayAdvanced($raw_json);
// 3. Now you can safely use $json (even if it is an empty array)
$id = $json['invoice_id'] ?? null;
try {

View File

@ -917,12 +917,14 @@
// policy Transaction Create function start
public function createInceptionPolicy()
{
$post_data = $this->request->getPost() ?? [];
$post_data = $this->request->getPost();
$post_data = $post_data ? sanitizeInputArrayAdvanced($post_data) : [];
$this->myLogger->logme('error', 'Policy Trancaction form data : '. json_encode($post_data));
$id = $this->request->getPost('id');
$id = $post_data['id'] ?? null;
$data = $this->preparePolicyData();
$data['cd_ac_pk'] = $this->request->getPost('cd_ac_no');
$data['cd_ac_pk'] = $post_data['cd_ac_no'];
$data['issuer'] = 2;
$data['status'] = 'completed';
$this->myLogger->logme('error', 'Policy Trancaction modified form data ( insert data ) : '. json_encode($data));
@ -937,7 +939,8 @@
private function preparePolicyData()
{
$data = $this->request->getPost();
$request_data = $this->request->getPost();
$data = sanitizeInputArrayAdvanced($request_data);
$file_data = $this->request->getFiles() ?? null;
$data['file_data'] = $file_data ?? null;
@ -2247,9 +2250,10 @@
public function createEndorsementPolicy()
{
$id = $this->request->getPost('id');
// $id = $this->request->getPost('id');
$data = $this->preparePolicyTransactionData();
$data['status'] = 'completed';
$id = $data['id'] ?? null;
// print_r($data); die;
if (!$id) {
@ -2261,8 +2265,8 @@
private function preparePolicyTransactionData()
{
$data = $this->request->getPost();
$request_post_data = $this->request->getPost();
$data = sanitizeInputArrayAdvanced($request_post_data);
// echo '<pre>';
// print_r($data);
// die;
@ -3250,10 +3254,12 @@
$client_policy_id = (!isset($client_policy_id) || $client_policy_id === '' || $client_policy_id === null) ? 0 : $client_policy_id;
$user_id = (!isset($user_id) || $user_id === '' || $user_id === null) ? 0 : $user_id;
if ($this->request->is('post')) {
$isFromDashboard = $this->request->getPost("is_dashboard");
$request_post_data = $this->request->getPost();
$sanitized_post_data = sanitizeInputArrayAdvanced($request_post_data);
$isFromDashboard = $sanitized_post_data["is_dashboard"];
if (isset($isFromDashboard) && !empty($isFromDashboard) && $isFromDashboard == 1) {
$ids = $this->request->getPost('ids');
$ids = $sanitized_post_data['ids'];
$ids = array_filter(explode(',', $ids));
@ -4221,10 +4227,12 @@
// echo 'scbsc';die();
if ($this->request->is('post')) {
// $jsonData = (array)$this->request->getJSON();
$customer_id = $this->request->getPost('customer_id');
$policy_id = $this->request->getPost('policy_id');
$cus_doc_name = $this->request->getPost('cus_doc_name');
$policy_doc_name = $this->request->getPost('policy_doc_name');
$request_data = $this->request->getPost();
$data = sanitizeInputArrayAdvanced($request_data);
$customer_id = $data['customer_id'];
$policy_id = $data['policy_id'];
$cus_doc_name = $data['cus_doc_name'];
$policy_doc_name = $data['policy_doc_name'];
$pt_files = [];
$kyc_files = [];
$batch_files = [];

View File

@ -63,7 +63,98 @@ class ThzController extends BaseController
public function ticketSave()
{
try {
$data = $this->request->getPost();
$rules = [
'client_id' => [
'rules' => 'permit_empty|integer',
'errors' => [
'integer' => 'Invalid client selected'
]
],
'mobile' => [
'rules' => 'required|regex_match[/^[0-9]{10}$/]',
'errors' => [
'required' => 'Mobile number is required',
'regex_match' => 'Mobile number must be exactly 10 digits'
]
],
'name' => [
'rules' => 'required|min_length[3]|max_length[100]|alpha_space',
'errors' => [
'required' => 'Name is required',
'min_length' => 'Name must be at least 3 characters',
'alpha_space'=> 'Name can contain only letters and spaces'
]
],
'email' => [
'rules' => 'required|valid_email|max_length[150]',
'errors' => [
'required' => 'Email is required',
'valid_email' => 'Please enter a valid email address'
]
],
'empcode' => [
'rules' => 'permit_empty|max_length[50]',
'errors' => [
'max_length' => 'Employee code is too long'
]
],
'ticket_type' => [
'rules' => 'required|in_list[Sales,Service]',
'errors' => [
'required' => 'Ticket Type is required',
'in_list' => 'Invalid Ticket Type selected'
]
],
'assign_to' => [
'rules' => 'permit_empty|integer',
'errors' => [
'integer' => 'Invalid assignee selected'
]
],
'subject' => [
'rules' => 'required|min_length[5]|max_length[150]',
'errors' => [
'required' => 'Subject is required',
'min_length' => 'Subject must be at least 5 characters',
'max_length' => 'Subject cannot exceed 150 characters'
]
],
'message' => [
'rules' => 'required|min_length[10]|max_length[1500]',
'errors' => [
'required' => 'Message is required',
'min_length' => 'Message must be at least 10 characters',
'max_length' => 'Message cannot exceed 1500 characters'
]
],
'status' => [
'rules' => 'permit_empty|in_list[Open,In Progress,Resolved,Closed]',
'errors' => [
'in_list' => 'Invalid ticket status'
]
],
];
if (!$this->validate($rules)) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'message' => 'Input validation failed',
'code' => 400,
'errors' => $this->validator->getErrors()
]);
}
$request_post_data = $this->request->getPost();
$data = sanitizeInputArrayAdvanced($request_post_data);
$references = "";
if (!empty($data['thz_id'])) {
@ -157,7 +248,30 @@ class ThzController extends BaseController
{
try {
$data = $this->request->getPost();
$rules = [
'notes' => [
'rules' => 'required|string|min_length[1]|max_length[1500]',
'errors' => [
'required' => 'Notes is required',
'string' => 'Notes must be valid text',
'min_length' => 'Notes cannot be empty',
'max_length' => 'Notes cannot exceed 1500 characters'
]
],
];
if (!$this->validate($rules)) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'message' => 'Input validation failed',
'code' => 400,
'errors' => $this->validator->getErrors()
]);
}
$request_post_data = $this->request->getPost();
$data = sanitizeInputArrayAdvanced($request_post_data);
$data['notes_type'] = $data['notes_type'] ?? 'External';

View File

@ -1122,8 +1122,130 @@ class TicketController extends BaseController
public function createTicket()
{
$ticket_data = $this->request->getPost();
$ticket_data = $this->formatDateForClaim($ticket_data);
$rules = [
'emp_code' => [
'rules' => 'required',
'errors' => ['required' => 'Employee Code is required']
],
'emp_name' => [
'rules' => 'required',
'errors' => ['required' => 'Employee Name is required']
],
'insured_name' => [
'rules' => 'required',
'errors' => ['required' => 'Insured Name is required']
],
'relationship' => [
'rules' => 'required',
'errors' => ['required' => 'Relationship is required']
],
'emp_mobile' => [
'rules' => 'required',
'errors' => ['required' => 'Employee Mobile is required']
],
'emp_mail' => [
'rules' => 'required',
'errors' => ['required' => 'Employee Email is required']
],
'client_name' => [
'rules' => 'required',
'errors' => ['required' => 'Client Name is required']
],
'insurer_id' => [
'rules' => 'required',
'errors' => ['required' => 'Insurer is required']
],
'client_policy_id' => [
'rules' => 'required',
'errors' => ['required' => 'Policy is required']
],
'claim_status_id' => [
'rules' => 'required',
'errors' => ['required' => 'Claim Status is required']
],
'priority' => [
'rules' => 'required',
'errors' => ['required' => 'Priority is required']
],
'mode_of_intimation' => [
'rules' => 'required',
'errors' => ['required' => 'Mode of Intimation is required']
],
'claim_type' => [
'rules' => 'required',
'errors' => ['required' => 'Claim Type is required']
],
'hospital_name' => [
'rules' => 'required',
'errors' => ['required' => 'Hospital Name is required']
],
'hospital_address' => [
'rules' => 'required',
'errors' => ['required' => 'Hospital Address is required']
],
'hospital_city' => [
'rules' => 'required',
'errors' => ['required' => 'Hospital City is required']
],
'hospital_state' => [
'rules' => 'required',
'errors' => ['required' => 'Hospital State is required']
],
'hospital_pin_code' => [
'rules' => 'required',
'errors' => ['required' => 'Hospital Pincode is required']
],
'hospital_phone_no' => [
'rules' => 'required',
'errors' => ['required' => 'Hospital Phone Number is required']
],
'doa' => [
'rules' => 'required',
'errors' => ['required' => 'Date of Admission is required']
],
'dod' => [
'rules' => 'required',
'errors' => ['required' => 'Date of Discharge is required']
],
'claim_amount' => [
'rules' => 'required',
'errors' => ['required' => 'Claim Amount is required']
],
];
if (!$this->validate($rules)) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'message' => 'Input validation failed',
'code' => 400,
'errors' => $this->validator->getErrors()
]);
}
$request_data = $this->request->getPost();
$sanitized_data = sanitizeInputArrayAdvanced($request_data);
$ticket_data = $this->formatDateForClaim($sanitized_data);
// $ticket_data = $this->getLastMatchedStatus($ticket_data, );
// print_rr($ticket_data); die;
@ -1183,9 +1305,132 @@ class TicketController extends BaseController
public function updateTicket()
{
$rules = [
'emp_code' => [
'rules' => 'required',
'errors' => ['required' => 'Employee Code is required']
],
'emp_name' => [
'rules' => 'required',
'errors' => ['required' => 'Employee Name is required']
],
'insured_name' => [
'rules' => 'required',
'errors' => ['required' => 'Insured Name is required']
],
'relationship' => [
'rules' => 'required',
'errors' => ['required' => 'Relationship is required']
],
'emp_mobile' => [
'rules' => 'required',
'errors' => ['required' => 'Employee Mobile is required']
],
'emp_mail' => [
'rules' => 'required',
'errors' => ['required' => 'Employee Email is required']
],
'client_name' => [
'rules' => 'required',
'errors' => ['required' => 'Client Name is required']
],
'insurer_id' => [
'rules' => 'required',
'errors' => ['required' => 'Insurer is required']
],
'client_policy_id' => [
'rules' => 'required',
'errors' => ['required' => 'Policy is required']
],
'claim_status_id' => [
'rules' => 'required',
'errors' => ['required' => 'Claim Status is required']
],
'priority' => [
'rules' => 'required',
'errors' => ['required' => 'Priority is required']
],
'mode_of_intimation' => [
'rules' => 'required',
'errors' => ['required' => 'Mode of Intimation is required']
],
'claim_type' => [
'rules' => 'required',
'errors' => ['required' => 'Claim Type is required']
],
'hospital_name' => [
'rules' => 'required',
'errors' => ['required' => 'Hospital Name is required']
],
'hospital_address' => [
'rules' => 'required',
'errors' => ['required' => 'Hospital Address is required']
],
'hospital_city' => [
'rules' => 'required',
'errors' => ['required' => 'Hospital City is required']
],
'hospital_state' => [
'rules' => 'required',
'errors' => ['required' => 'Hospital State is required']
],
'hospital_pin_code' => [
'rules' => 'required',
'errors' => ['required' => 'Hospital Pincode is required']
],
'hospital_phone_no' => [
'rules' => 'required',
'errors' => ['required' => 'Hospital Phone Number is required']
],
'doa' => [
'rules' => 'required',
'errors' => ['required' => 'Date of Admission is required']
],
'dod' => [
'rules' => 'required',
'errors' => ['required' => 'Date of Discharge is required']
],
'claim_amount' => [
'rules' => 'required',
'errors' => ['required' => 'Claim Amount is required']
],
];
if (!$this->validate($rules)) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'message' => 'Input validation failed',
'code' => 400,
'errors' => $this->validator->getErrors()
]);
}
$request_data = $this->request->getPost();
$sanitized_data = sanitizeInputArrayAdvanced($request_data);
$ticket_data = $this->formatDateForClaim($sanitized_data);
$ticket_id = $this->request->getPost('ticket_master_id');
$ticket_data = $this->request->getPost();
$ticket_data = $this->formatDateForClaim($ticket_data);
$old_ticket_data = $this->ticketMasterModel->where('id', $ticket_id)->where('is_active', 1)->first();
$ticket_data['claim_status_id'] = $this->getLastMatchedStatus($ticket_data, $old_ticket_data);
// print_rr($ticket_data); die;
@ -1250,7 +1495,49 @@ class TicketController extends BaseController
{
//action 1 is create. action 2 is edit and action 3 is delete
if ($action == 1) {
$received_data = $this->request->getPost();
$rules = [
'template_name' => [
'rules' => 'required',
'errors' => [
'required' => 'Template Name is required'
]
],
'ticket_type' => [
'rules' => 'required',
'errors' => [
'required' => 'Policy Type is required'
]
],
'trigger_type' => [
'rules' => 'required',
'errors' => [
'required' => 'Trigger Type is required'
]
],
'subject' => [
'rules' => 'required',
'errors' => [
'required' => 'Subject is required'
]
],
'mail_content' => [
'rules' => 'required',
'errors' => [
'required' => 'Mail Content is required'
]
]
];
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();
$received_data = sanitizeInputArrayAdvanced($data);
if (isset($received_data['id']) && $received_data['id'] != '') {
$status = $this->ticketMailTemplateModel->save($received_data);
if ($status) {
@ -3002,6 +3289,70 @@ class TicketController extends BaseController
public function uploadClaimMisFile()
{
$filename = '';
$fileSize = '';
//validate uploaded file
$validated = $this->validate([
'file' => [
'uploaded[file]',
'mime_in[file,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.oasis.opendocument.spreadsheet]',
'max_size[file,16384]',
],
]);
if ($validated)
{
$file = $this->request->getFile('file');
if (!$file) {
$this->myLogger->logme("error", 'File not found');
return $this->respond(['status' => false, 'code' => 400, 'message' => 'File not found'], 400);
}
$is_moved = $file->move(WRITEPATH . 'uploads/claims_mis/');
if ($is_moved) {
$filename = file_Upload_for_lead($file, $file_path);
$fileSize = $file->getSize(); // File size in bytes
$fileSize = $fileSize / (1024 * 1024); // Convert to MB
$this->myLogger->logme("error", 'File move successful');
$request_data = $this->request->getPost();
$data = sanitizeInputArrayAdvanced($request_data);
if(isset($data['from_date']) && !empty($data['from_date'])){
$data['from_date'] = change_date_format($data['from_date'], 'd/m/Y', 'Y-m-d');
}
if(isset($data['to_date']) && !empty($data['to_date'])){
$data['to_date'] = change_date_format($data['to_date'], 'd/m/Y', 'Y-m-d');
}
if(!empty($file_name)){
$data['file_name'] = $file;
}
$response = $this->claimmisFileModel->insert($data);
if($response){
return $this->respond(['status'=>true, 'code'=>200, 'message'=>'MIS file uploaded successfully'], 200);
}else{
return $this->respond(['status'=>true, 'code'=>500, 'message'=>'Failed to upload'], 200);
}
} else {
$this->myLogger->logme("error", 'File move failed');
return $this->respond(['status' => false, 'code' => 500, 'message' => 'File move failed'], 500);
}
} else {
$this->myLogger->logme("error", 'Upload failed Invalid file');
return $this->respond(['status' => false, 'code' => 404, 'message' => 'Invalid file'], 404);
}
/*** OLD CODE KEEP it Safe
$file = $this->request->getFile('file');
$data = $this->request->getPost();
@ -3027,6 +3378,7 @@ class TicketController extends BaseController
}else{
return $this->respond(['status'=>true, 'code'=>500, 'message'=>'Failed to upload'], 200);
}
****/
}
public function downloadClaimMisFile()

View File

@ -83,7 +83,114 @@ class UserController extends AdminController
return redirect()->to(base_url('/user/list'));
} else {
$userData = $this->request->getPost();
// $userData = $this->request->getPost();
$data = $this->request->getPost();
$userData = sanitizeInputArrayAdvanced($data);
$rules = [
// ======================
// Nhance Branch
// ======================
'nhance_branch_id' => [
'rules' => 'required|integer',
'errors' => [
'required' => 'Nhance Branch is required',
'integer' => 'Invalid Nhance Branch selected'
]
],
// ======================
// Reporting Manager
// ======================
'rm_id' => [
'rules' => 'required|integer',
'errors' => [
'required' => 'Reporting Manager is required',
'integer' => 'Invalid Reporting Manager selected'
]
],
// ======================
// Employee Code
// ======================
'emp_code' => [
'rules' => 'required|alpha_numeric|min_length[3]|max_length[20]|is_unique[user_profiles.emp_code,id,{PrimaryKey}]',
'errors' => [
'required' => 'Employee Code is required',
'alpha_numeric' => 'Employee Code must be alphanumeric',
'min_length' => 'Employee Code must be at least 3 characters',
'max_length' => 'Employee Code cannot exceed 20 characters',
'is_unique' => 'Employee Code already exists'
]
],
// ======================
// First Name
// ======================
'first_name' => [
'rules' => 'required|alpha_space|min_length[2]|max_length[100]',
'errors' => [
'required' => 'Name is required',
'alpha_space' => 'Name can contain only letters and spaces',
'min_length' => 'Name must be at least 2 characters',
'max_length' => 'Name cannot exceed 100 characters'
]
],
// ======================
// Email
// ======================
'email' => [
'rules' => 'required|valid_email|is_unique[user_profiles.email,id,{PrimaryKey}]',
'errors' => [
'required' => 'Email is required',
'valid_email' => 'Please enter a valid email address',
'is_unique' => 'Email already exists'
]
],
// ======================
// Mobile
// ======================
'mobile' => [
'rules' => 'required|regex_match[/^[6-9][0-9]{9}$/]|is_unique[user_profiles.mobile,id,{PrimaryKey}]',
'errors' => [
'required' => 'Mobile number is required',
'regex_match' => 'Enter a valid 10-digit mobile number starting with 6, 7, 8, or 9',
'is_unique' => 'Mobile number already exists'
]
],
// ======================
// Role
// ======================
'role' => [
'rules' => 'required|integer',
'errors' => [
'required' => 'User Role is required',
'integer' => 'Invalid User Role selected'
]
],
// ======================
// Team (Multiple select)
// ======================
'team' => [
'rules' => 'required',
'errors' => [
'required' => 'At least one User Team must be selected'
]
],
];
if (!$this->validate($rules)) {
return $this->response->setStatusCode(400)->setJSON([
'status' => false,
'message' => 'Input validation failed',
'code' => 400,
'errors' => $this->validator->getErrors()
]);
}
$userData['created_by'] = get_session_userid();
$temp_team = $userData['team'];
unset($userData['team']);
@ -167,9 +274,116 @@ class UserController extends AdminController
return redirect()->to(base_url('/user/list'));
} else {
// echo ":/ in 163";
$id = $this->request->getPost('PrimaryKey');
$teams = $this->request->getPost('team');
$userData = $this->request->getPost();
$rules = [
// ======================
// Nhance Branch
// ======================
'nhance_branch_id' => [
'rules' => 'required|integer',
'errors' => [
'required' => 'Nhance Branch is required',
'integer' => 'Invalid Nhance Branch selected'
]
],
// ======================
// Reporting Manager
// ======================
'rm_id' => [
'rules' => 'required|integer',
'errors' => [
'required' => 'Reporting Manager is required',
'integer' => 'Invalid Reporting Manager selected'
]
],
// ======================
// Employee Code
// ======================
'emp_code' => [
'rules' => 'required|alpha_numeric|min_length[3]|max_length[20]|is_unique[user_profiles.emp_code,id,{PrimaryKey}]',
'errors' => [
'required' => 'Employee Code is required',
'alpha_numeric' => 'Employee Code must be alphanumeric',
'min_length' => 'Employee Code must be at least 3 characters',
'max_length' => 'Employee Code cannot exceed 20 characters',
'is_unique' => 'Employee Code already exists'
]
],
// ======================
// First Name
// ======================
'first_name' => [
'rules' => 'required|alpha_space|min_length[2]|max_length[100]',
'errors' => [
'required' => 'Name is required',
'alpha_space' => 'Name can contain only letters and spaces',
'min_length' => 'Name must be at least 2 characters',
'max_length' => 'Name cannot exceed 100 characters'
]
],
// ======================
// Email
// ======================
'email' => [
'rules' => 'required|valid_email|is_unique[user_profiles.email,id,{PrimaryKey}]',
'errors' => [
'required' => 'Email is required',
'valid_email' => 'Please enter a valid email address',
'is_unique' => 'Email already exists'
]
],
// ======================
// Mobile
// ======================
'mobile' => [
'rules' => 'required|regex_match[/^[6-9][0-9]{9}$/]|is_unique[user_profiles.mobile,id,{PrimaryKey}]',
'errors' => [
'required' => 'Mobile number is required',
'regex_match' => 'Enter a valid 10-digit mobile number starting with 6, 7, 8, or 9',
'is_unique' => 'Mobile number already exists'
]
],
// ======================
// Role
// ======================
'role' => [
'rules' => 'required|integer',
'errors' => [
'required' => 'User Role is required',
'integer' => 'Invalid User Role selected'
]
],
// ======================
// Team (Multiple select)
// ======================
'team' => [
'rules' => 'required',
'errors' => [
'required' => 'At least one User Team must be selected'
]
],
];
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();
$userData = sanitizeInputArrayAdvanced($data);
$id = $userData['PrimaryKey'];
$teams = $userData['team'];
unset($userData['csrf_test_name']);
unset($userData['PrimaryKey']);
@ -594,29 +808,100 @@ class UserController extends AdminController
// add/update
if ($method === 'post') {
$data = $this->request->getPost();
$id = !empty($data['PrimaryKey']) ? $data['PrimaryKey'] : null;
$rules = [
// ======================
// Partner Name
// ======================
'name' => [
'rules' => 'required|alpha_space|min_length[2]|max_length[100]',
'errors' => [
'required' => 'Partner name is required',
'alpha_space' => 'Partner name can contain only letters and spaces',
'min_length' => 'Partner name must be at least 2 characters',
'max_length' => 'Partner name cannot exceed 100 characters'
]
],
// ======================
// Mobile Number
// ======================
'mobile' => [
'rules' => 'required|regex_match[/^[6-9][0-9]{9}$/]',
'errors' => [
'required' => 'Mobile number is required',
'regex_match' => 'Enter a valid 10-digit mobile number starting with 6, 7, 8, or 9',
]
],
// ======================
// Email
// ======================
'email' => [
'rules' => 'required|valid_email',
'errors' => [
'required' => 'Email is required',
'valid_email' => 'Please enter a valid email address',
]
],
// ======================
// Retention Rate
// ======================
'retention_rate' => [
'rules' => [
'required',
'regex_match[/^(100(\.0{1,2})?|([0-9]{1,2})(\.[0-9]{1,2})?)$/]'
],
'errors' => [
'required' => 'Retention Rate is required',
'regex_match' => 'Retention Rate must be between 0 and 100 with up to 2 decimal places'
]
],
// ======================
// Nhance Branch
// ======================
'nhance_branch_id' => [
'rules' => 'required|integer',
'errors' => [
'required' => 'Nhance Branch is required',
'integer' => 'Invalid Nhance Branch selected'
]
],
];
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();
$sanitized_post_data = sanitizeInputArrayAdvanced($data);
$id = !empty($sanitized_post_data['PrimaryKey']) ? $sanitized_post_data['PrimaryKey'] : null;
unset($sanitized_post_data['pk']);
// don't forgot same means just unset the key because partner_staff some UNIQUE KEY sets in table thats why
if ($id) {
$existing = $this->partnerStaffModel->find((int)$id);
if ($existing) {
if ($data['email'] === $existing['email']) { unset($data['email']); }
if ($data['mobile'] === $existing['mobile']) { unset($data['mobile']); }
if ($sanitized_post_data['email'] === $existing['email']) { unset($sanitized_post_data['email']); }
if ($sanitized_post_data['mobile'] === $existing['mobile']) { unset($sanitized_post_data['mobile']); }
}
}
$errors = [];
// Check Email Duplicate (if it wasn't unset)
if (isset($data['email'])) {
$count = $this->partnerStaffModel->where('email', $data['email'])->countAllResults();
if (isset($sanitized_post_data['email'])) {
$count = $this->partnerStaffModel->where('email', $sanitized_post_data['email'])->countAllResults();
if ($count > 0) $errors['email'] = "This email is already taken by another user.";
}
// Check Mobile Duplicate (if it wasn't unset)
if (isset($data['mobile'])) {
$count = $this->partnerStaffModel->where('mobile', $data['mobile'])->countAllResults();
if (isset($sanitized_post_data['mobile'])) {
$count = $this->partnerStaffModel->where('mobile', $sanitized_post_data['mobile'])->countAllResults();
if ($count > 0) $errors['mobile'] = "This mobile is already taken by another user.";
}
@ -632,14 +917,14 @@ class UserController extends AdminController
// --- Save/Update ---
if ($id) {
$text = "update";
$data['updated_by'] = get_session_userid();
$sanitized_post_data['updated_by'] = get_session_userid();
$result = $this->partnerStaffModel->update($id, $data);
$result = $this->partnerStaffModel->update($id, $sanitized_post_data);
} else {
$text = "create";
$data['role_id'] = 1;
$data['created_by'] = get_session_userid();
$id = $this->partnerStaffModel->insert($data);
$sanitized_post_data['role_id'] = 1;
$sanitized_post_data['created_by'] = get_session_userid();
$id = $this->partnerStaffModel->insert($sanitized_post_data);
if($id){
$details['manager_id'] = $id;
$details['updated_by'] = get_session_userid();

View File

@ -684,7 +684,7 @@ table.dataTable tbody td {
<div class="form-group col-md-5">
<label for="incentive_file_name">Upload File</label>
<div class="input-icon">
<input type="file" class="form-control" name="incentive_file_name" id="incentive_file_name" required>
<input type="file" class="form-control" name="incentive_file_name" id="incentive_file_name" required accept=".jpg,.jpeg,.png">
<i class="mdi mdi-upload additional-icon"></i>
</div>
</div>
@ -1134,6 +1134,16 @@ table.dataTable tbody td {
console.error("Response Headers:", xhr.getAllResponseHeaders());
console.error("Error Thrown:", error);
console.error("Status:", status);
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}else{toastr.error('Server error occurred.', 'Error');}
}
});
@ -1333,7 +1343,16 @@ table.dataTable tbody td {
},
error: function(xhr) {
console.log("Error: " + xhr.statusText);
toastr.error('Server error occurred.', 'Error');
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}else{toastr.error('Server error occurred.', 'Error');}
},
complete: function() {
btn.disabled = false;
@ -1395,6 +1414,16 @@ table.dataTable tbody td {
error: function(xhr) {
console.log("Error: " + xhr.statusText);
toastr.error('Server error occurred.', 'Error');
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}else{toastr.error('Server error occurred.', 'Error');}
},
complete: function() {
btn.disabled = false;

View File

@ -126,7 +126,7 @@ table.dataTable thead th {
<div class="form-group">
<label for="branchname">Upload Image</label>
<div class="input-icon">
<input type="file" class="form-control" name="advertise_image" id="advertise_image" accept="image/*" onchange="PreviewImage();" required>
<input type="file" class="form-control" name="advertise_image" id="advertise_image" accept=".jpg,.jpeg,.png" onchange="PreviewImage();" required>
<i class="mdi mdi-upload additional-icon"></i>
</div>
</div>
@ -227,7 +227,15 @@ table.dataTable thead th {
switch (xhr.status) {
case 400:
msg = xhr.responseJSON?.message || 'Bad Request — Invalid input.';
let response = xhr.responseJSON || JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
msg = response.message || 'Bad Request — Invalid input.';
break;
case 401:
msg = 'Unauthorized — Please log in again.';

View File

@ -197,6 +197,14 @@
// Handle error response
console.error('Upload failed:', error);
console.error('Upload failed:', error);
if (xhr.status === 400) {
var response = JSON.parse(xhr.responseText);
toastr.warning(response.message || 'Validation failed', 'Warning');
}
if (xhr.status === 500) {
var response = JSON.parse(xhr.responseText);
toastr.warning(response.message || 'Validation failed', 'Warning');
}
},
complete: function() {
// Reset button state

View File

@ -204,6 +204,16 @@
console.error(status, error);
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}
toastr.error('An error occurred while adding the CD account number.', 'ERROR');
}
});

View File

@ -236,6 +236,14 @@
// Handle error response
console.error('Upload failed:', error);
console.error('Upload failed:', error);
if (xhr.status === 400) {
var response = JSON.parse(xhr.responseText);
toastr.warning(response.message || 'Validation failed', 'Warning');
}
if (xhr.status === 500) {
var response = JSON.parse(xhr.responseText);
toastr.warning(response.message || 'Validation failed', 'Warning');
}
},
complete: function() {
// Reset button state

View File

@ -81,7 +81,7 @@ input:checked + .slider:before {
style="border-radius:25px; border:1px solid #00999E;padding:10px;color:#00999E;"
alt="avatar"/>
<span style="margin-bottom:5px;">
<input type="file" name="client_logo" id="client_logo" accept="image/*" onchange="PreviewImage();"><br>
<input type="file" name="client_logo" id="client_logo" accept=".jpg,.jpeg,.png" onchange="PreviewImage();"><br>
<i class="text">( Image dimensions 100 x 100 pixels and size of 200KB. )</i>
</span>
<br>
@ -324,7 +324,7 @@ input:checked + .slider:before {
$.each(res.data, function (index, item) {
var row = `<tr>
<td> ${item.file_name}</td>
<td id="form_${item.id}" style=""><form class="ajax" ><input class="file-input__input" type="file" name="file_name">
<td id="form_${item.id}" style=""><form class="ajax" ><input class="file-input__input" type="file" name="file_name" accept=".jpg,.jpeg,.png">
<input type="hidden" class="form-control" value="<?= csrf_hash() ?>" name="<?= csrf_token() ?>" />
<input type="hidden" class="form-control" value="${item.id}" name="kyc_doc_type_id" />
<input type="hidden" name="client_id" id="id_for_kyc_file" value="${client_id_for_file}"/>
@ -349,7 +349,16 @@ input:checked + .slider:before {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
$submitButton.prop('disabled', false);
if (xhr.status === 404) {
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
} else if (xhr.status === 404) {
toastr.warning('Resource not found', 'Warning');
} else if (xhr.status === 500) {
toastr.warning('Internal server error', 'Warning');

View File

@ -281,7 +281,7 @@ $(document).ready(function() {
</tr>
`;
}
});
$('#branch_list').append(branchTable);
}

View File

@ -304,7 +304,8 @@
<td>${item.file_name}</td>
<td id="form_${item.id}">
<form class="ajax">
<input class="file-input__input" type="file" name="file_name">
<input class="file-input__input" type="file" name="file_name"
accept=".pdf,.jpg,.jpeg,.png">
<input type="hidden" class="form-control" value="<?= csrf_hash() ?>" name="<?= csrf_token() ?>">
<input type="hidden" class="form-control" value="${item.id}" name="kyc_doc_type_id">
<input type="hidden" name="client_id" value="${client_id}">

View File

@ -36,6 +36,7 @@
<div class="form-group col-md-3 file-input-group">
<label for="file_input">Browser File<span class="text-danger">*</span></label>
<input type="file" class="form-control file-input" id="kyc_docs_file" name="file_name" required
accept=".pdf,.jpg,.jpeg,.png"
style="box-shadow: none !important; outline: none !important; border: none; height: unset !important;padding: 0px !important;background: transparent !important;">
</div>

View File

@ -4,7 +4,7 @@
<!-- <td><?= $index + 1; ?></td> -->
<td><?= esc($item['file_name']); ?></td>
<td><?= esc($item['other_docs_name']); ?></td>
<td><a id="download_<?= esc($item['id']); ?>" data-id="<?= esc($item['id']); ?>" class="mdi mdi-download" style="font-size:18px;" download></a></td>
<td><a id="download_<?= esc($item['id']); ?>" data-id="<?= esc($item['id']); ?>" class="mdi mdi-download" style="font-size:18px;" download title="Download file"></a></td>
</tr>
<?php endforeach; ?>
<?php else: ?>

View File

@ -7,7 +7,7 @@
<?php if(empty($item['upload_doc_name'])) { ?>
<td id="form_<?= esc($item['id']); ?>">
<form class="ajax" enctype="multipart/form-data" method="post">
<input class="file-input__input" type="file" name="file_name">
<input class="file-input__input" type="file" name="file_name" accept=".pdf,.jpg,.jpeg,.png">
<input type="hidden" class="form-control" value="<?= csrf_hash() ?>" name="<?= csrf_token() ?>">
<input type="hidden" class="form-control" value="<?= esc($item['id']); ?>" name="kyc_doc_type_id">
<input type="hidden" name="client_id" value="<?= esc($client_id); ?>">

View File

@ -48,6 +48,7 @@
name="file_name"
id="kyc_docs_file_<?= $value['id'] ?>"
class="form-control edit-file-input"
accept=".pdf,.jpg,.jpeg,.png"
style="box-shadow:none!important; outline:none!important; border:none; height:unset!important;padding: 0px !important;background: transparent !important;">
</div>

View File

@ -832,7 +832,16 @@ input:checked + .slider_blue::before {
setTimeout(function() {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
if (xhr.status === 404) {
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
} else if (xhr.status === 404) {
//console.log('Resource not found', 'Warning');
} else if (xhr.status === 500) {
//console.log('Internal server error', 'Warning');

View File

@ -548,8 +548,16 @@
console.error('Response Text: ', xhr.responseText);
}
toastr.warning('Error uploading file', 'WARNING');
console.error('Upload error:', error);
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}else{ toastr.warning('Error uploading file', 'WARNING'); }
},
complete: function() {
$('.loader').fadeOut();

View File

@ -326,6 +326,18 @@
},
error: function () {
$('.loader, .loader-mask').fadeOut();
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}else{
toastr.error("Something went wrong!", 'Error');
}
}
});
}

View File

@ -449,7 +449,18 @@
},
error: function () {
$('.loader, .loader-mask').fadeOut();
}
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}else{
toastr.error("Something went wrong!", 'Error');
}
});
}

View File

@ -254,6 +254,16 @@ input:checked + .slider:before {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
console.log('Something Wrong!', 'warning');
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}
}
});
}

View File

@ -305,7 +305,7 @@
window.location.reload();
},
error: function(xhr, status, error) {
error: function (xhr, status, error) {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
@ -323,14 +323,37 @@
console.error('Response headers:', xhr.getAllResponseHeaders());
console.error('Response URL:', xhr.responseURL);
// Example of throwing a detailed error for further handling
throw new Error(`AJAX Request failed:
Status: ${status},
Error: ${error},
Status Code: ${xhr.status},
Status Text: ${xhr.statusText},
Response: ${xhr.responseText}
`);
// Handle validation errors (CI4)
if (xhr.status === 400) {
let response = null;
try {
response = JSON.parse(xhr.responseText);
} catch (e) {
toastr.error('Invalid server response', 'Error');
return;
}
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
return;
}
// Handle server errors
if (xhr.status >= 500) {
toastr.error('Server error. Please try again later.', 'Error');
return;
}
// Fallback
toastr.error('Unexpected error occurred.', 'Error');
},
complete: function() {
$('.loader').fadeOut();

View File

@ -254,6 +254,16 @@ $(document).ready(function () {
setTimeout(function() {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}
toastr.warning('Something Wrong!', 'warning');
}, 1000);
}
@ -296,6 +306,16 @@ $(document).ready(function () {
setTimeout(function() {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}
toastr.warning('Something Wrong!', 'warning');
}, 1000);
}

View File

@ -1646,7 +1646,7 @@
console.log('Form is Empty', 'Warning');
return;
}
var salse_person_id = $("#salse_person_id").val();
console.log('salse_person_id : ', salse_person_id);
@ -1701,6 +1701,16 @@
console.error(status, error);
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}
}
});
});

View File

@ -553,7 +553,7 @@ if (isset($selected_lead_type)) {
let isFirstField = container.childElementCount === 0; // Check if it's the first field
let placeholder = isFirstField ? 'First file must be Demography.' : '';
let accept = isFirstField ? '.xls,.xlsx' : '';
let accept = isFirstField ? '.xls,.xlsx' : '.xls,.xlsx,.pdf,.jpg,.jpeg,.png';
if(selected_lead_form_type != 1){

View File

@ -628,6 +628,16 @@
console.error(status, error);
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}
}
});
});

View File

@ -283,6 +283,16 @@
console.error(xhr.responseText);
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}
});
}

View File

@ -1030,7 +1030,7 @@ function addHTMLInput(data = null, container_id = 'dynamic-form-container')
</div>
<div class="form-group col-md-5">
<label for="file">Upload File<span class="text-danger">${required_star}</span></label>
<input type="file" class="form-control" id="file_name" name="file[]" ${required}>
<input type="file" class="form-control" id="file_name" name="file[]" ${required} accept=".pdf,.jpg,.jpeg,.png">
</div>
<div class="form-group col-md-2" style="position: relative;top: 28px;">
<a class="btn btn-danger waves-effect waves-light" onclick="removeHTMLInput(this, '${container_id}')">x</a>
@ -1216,7 +1216,7 @@ function addHTMLInputForVehicleFileUpload(data = null, container_id = 'dynamic-f
</div>
<div class="form-group col-md-5">
<label for="file">Upload File<span class="text-danger">${required_star}</span></label>
<input type="file" class="form-control" id="file_name" name="file_name[]" ${required}>
<input type="file" class="form-control" id="file_name" name="file_name[]" ${required} accept=".pdf,.jpg,.jpeg,.png">
</div>
<div class="form-group col-md-2" style="position: relative;top: 28px;">
<a class="btn btn-danger waves-effect waves-light" onclick="removeHTMLInputForVehicleFileUpload(this, '${container_id}')">x</a>

View File

@ -1013,7 +1013,7 @@ function addHTMLInput(data = null)
</div>
<div class="form-group col-md-5">
<label for="file">Upload File<span class="text-danger">*</span></label>
<input type="file" class="form-control" id="file_name" name="file[]" required>
<input type="file" class="form-control" id="file_name" name="file[]" accept=".pdf,.jpg,.jpeg,.png" required>
</div>
<div class="form-group col-md-2" style="position: relative;top: 28px;">
<a class="btn btn-danger waves-effect waves-light" onclick="removeHTMLInput(this)">x</a>
@ -1192,7 +1192,7 @@ function addHTMLInputForVehicleFileUpload(data = null)
</div>
<div class="form-group col-md-5">
<label for="file">Upload File<span class="text-danger">*</span></label>
<input type="file" class="form-control" id="file_name" name="file_name[]" required>
<input type="file" class="form-control" id="file_name" name="file_name[]" accept=".pdf,.jpg,.jpeg,.png" required>
</div>
<div class="form-group col-md-2" style="position: relative;top: 28px;">
<a class="btn btn-danger waves-effect waves-light" onclick="removeHTMLInputForVehicleFileUpload(this)">x</a>

View File

@ -175,21 +175,21 @@
<div class="form-group col-md-4">
<label for="aadhar_file_name">Aadhar</label>
<div class="input-icon">
<input type="file" class="form-control" name="aadhar_file_name" id="aadhar_file_name" accept="image/*,application/pdf">
<input type="file" class="form-control" name="aadhar_file_name" id="aadhar_file_name" accept=".pdf,.jpg,.jpeg,.png">
<i class="mdi mdi-upload additional-icon"></i>
</div>
</div>
<div class="form-group col-md-4">
<label for="pan_file_name">PAN</label>
<div class="input-icon">
<input type="file" class="form-control" name="pan_file_name" id="pan_file_name" accept="image/*,application/pdf">
<input type="file" class="form-control" name="pan_file_name" id="pan_file_name" accept=".pdf,.jpg,.jpeg,.png">
<i class="mdi mdi-upload additional-icon"></i>
</div>
</div>
<div class="form-group col-md-4">
<label for="certificate_file_name">Certificate</label>
<div class="input-icon">
<input type="file" class="form-control" name="certificate_file_name" id="certificate_file_name" accept="image/*,application/pdf">
<input type="file" class="form-control" name="certificate_file_name" id="certificate_file_name" accept=".pdf,.jpg,.jpeg,.png">
<i class="mdi mdi-upload additional-icon"></i>
</div>
</div>
@ -363,6 +363,16 @@
},
error: function () {
$('.loader, .loader-mask').fadeOut();
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}
}
});
}

View File

@ -312,6 +312,16 @@
error: function(xhr) {
toastr.error("Something went wrong!", 'Error');
console.error(xhr.responseText);
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}
},
complete: function() {
btn.disabled = false;

View File

@ -7,7 +7,7 @@ $increment = 1;
foreach ($lead_edit_data["multi_file_data"] as $index => $value) {
$isFirstField = ($index === 0);
$placeholder = $isFirstField ? 'First file must be Demography.' : '';
$accept = $isFirstField ? '.xls,.xlsx' : '';
$accept = $isFirstField ? '.xls,.xlsx' : '.xls,.xlsx,.pdf,.jpg,.jpeg,.png';
$displayIndex = $index + 1;
?>

View File

@ -243,6 +243,16 @@
console.error(xhr.responseText);
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}
});
}

View File

@ -715,8 +715,19 @@ document.addEventListener("DOMContentLoaded", function () {
console.error('Response Text: ', xhr.responseText);
}
toastr.warning('Error uploading file', 'WARNING');
console.error('Upload error:', error);
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}else{ toastr.warning('Error uploading file', 'WARNING'); }
// toastr.warning('Error uploading file', 'WARNING');
// console.error('Upload error:', error);
},
complete: function() {
$('.loader').fadeOut();

View File

@ -506,7 +506,17 @@ beccause = dataTables_length and dataTables_paginate need in same line thats why
}
},
error: function(xhr) {
toastr.error("Something went wrong!", 'Error');
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}else{
toastr.error("Something went wrong!", 'Error');}
console.error(xhr.responseText);
},
complete: function() {

View File

@ -571,7 +571,16 @@ data-backdrop="static"
}
},
error: function(xhr) {
toastr.error("Something went wrong!", 'Error');
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}else{ toastr.error("Something went wrong!", 'Error'); }
console.error(xhr.responseText);
},
complete: function() {
@ -619,8 +628,19 @@ data-backdrop="static"
}
},
error: function(xhr) {
toastr.error("Something went wrong!", 'Error');
console.error(xhr.responseText);
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}else{
toastr.error("Something went wrong!", 'Error');
console.error(xhr.responseText);
}
},
complete: function() { btn.disabled = false;}
});

View File

@ -434,7 +434,16 @@
setTimeout(function() {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
toastr.error('Something Wrong!', 'warning');
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
} else{toastr.error('Something Wrong!', 'warning');}
}, 1000);
}
});

View File

@ -328,6 +328,17 @@
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
console.log('Something Wrong!', 'warning');
// Handle validation errors (CI4)
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}
}, 1000);
}
});

View File

@ -478,6 +478,16 @@ $(document).ready(function () {
setTimeout(function() {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}
toastr.warning('Something Wrong!', 'warning');
}, 1000);
},

View File

@ -222,7 +222,7 @@ $(document).ready(function() {
$.each(res.data, function(index, item) {
var row = `<tr>
<td> ${item.file_name}</td>
<td id="form_${item.id}" style=""><form class="ajax" ><input class="file-input__input" type="file" name="file_name">
<td id="form_${item.id}" style=""><form class="ajax" ><input class="file-input__input" type="file" name="file_name" accept=".jpg,.jpeg,.png">
<input type="hidden" class="form-control" value="<?= csrf_hash() ?>" name="<?= csrf_token() ?>" />
<input type="hidden" class="form-control" value="${item.id}" name="kyc_doc_type_id" />
<input type="hidden" name="client_id" id="id_for_kyc_file" value="${client_id_for_file}"/>
@ -247,7 +247,16 @@ $(document).ready(function() {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
$submitButton.prop('disabled', false);
if (xhr.status === 404) {
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
} else if (xhr.status === 404) {
toastr.warning('Resource not found', 'Warning');
} else if (xhr.status === 500) {
toastr.warning('Internal server error', 'Warning');

View File

@ -787,6 +787,16 @@ $("#vehicle_form").submit(function(event) {
console.error(status, error);
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}
}
});
});

View File

@ -581,7 +581,7 @@
<div class="form-group col-md-5">
<label for="incentive_file_name">Upload File</label>
<div class="input-icon">
<input type="file" class="form-control" name="incentive_file_name" id="incentive_file_name" required>
<input type="file" class="form-control" name="incentive_file_name" id="incentive_file_name" accept=".jpg,.jpeg,.png" required>
<i class="mdi mdi-upload additional-icon"></i>
</div>
</div>

View File

@ -222,6 +222,16 @@
console.error(xhr.responseText);
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
if (xhr.status === 400) {
let response = JSON.parse(xhr.responseText);
if (response.errors) {
$.each(response.errors, function (field, message) {
toastr.warning(message, 'Validation Error');
});
} else {
toastr.warning(response.message || 'Validation failed', 'Warning');
}
}
});
}

View File

@ -7345,7 +7345,7 @@ function appendMultiFileData(data) {
let isFirstField = container.childElementCount === 0; // Check if it's the first field
let placeholder = isFirstField ? 'First file must be Demography.' : '';
let accept = isFirstField ? '.xls,.xlsx' : '';
let accept = isFirstField ? '.xls,.xlsx' : '.xls,.xlsx,.pdf,.jpg,.jpeg,.png';
if(isFirstField == 1){