diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 2325f818..09e6d227 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -100,6 +100,7 @@ $routes->group("/user", ["filter" => "authMVC"], function ($routes) { $routes->get("list", "UserController::list"); $routes->get("getuser/(:hash)", "UserController::getuser/$1"); $routes->get("deactive/(:hash)", "UserController::deactive/$1"); + $routes->get("activateUser/(:any)", "UserController::activateUser/$1"); $routes->get("rolesandteams", "UserController::getRolesAndTeams"); $routes->get("getUserActivityHistory", "UserController::getUserActivityHistory"); $routes->match(['get','post','put'], 'partner', 'UserController::partner'); diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index ee3a8098..df96dde0 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -1004,8 +1004,8 @@ class ClientController extends AdminController ] ], 'short_name' => [ - 'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]|min_length[2]|max_length[15]', - 'errors' => [ + '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.', 'min_length' => 'Client Short Name must be at least 2 characters.', @@ -1013,9 +1013,8 @@ class ClientController extends AdminController ] ], 'pan' => [ - 'rules' => 'required|regex_match[/^[A-Z]{5}[0-9]{4}[A-Z]$/]', + 'rules' => 'permit_empty|regex_match[/^[A-Z]{5}[0-9]{4}[A-Z]$/]', 'errors' => [ - 'required' => 'PAN Number is required.', 'regex_match' => 'Invalid PAN format. Example: ABCDE1234F' ] ], @@ -1120,7 +1119,7 @@ class ClientController extends AdminController ] ], 'short_name' => [ - 'rules' => 'required|regex_match[/^[a-zA-Z0-9_-]+$/]', + '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.', @@ -1129,9 +1128,8 @@ class ClientController extends AdminController ] ], 'pan' => [ - 'rules' => 'required|regex_match[/^[A-Z]{5}[0-9]{4}[A-Z]$/]', + 'rules' => 'permit_empty|regex_match[/^[A-Z]{5}[0-9]{4}[A-Z]$/]', 'errors' => [ - 'required' => 'PAN Number is required.', 'regex_match' => 'Invalid PAN format. Example: ABCDE1234F' ] ], @@ -1876,10 +1874,10 @@ class ClientController extends AdminController ] ], 'designation.*' => [ - 'rules' => 'required|alpha_space', + 'rules' => 'required|regex_match[/^[A-Za-z0-9\-_\/ ]+$/]', 'errors' => [ 'required' => 'Designation is required', - 'alpha_space' => 'Designation may contain only letters and spaces' + 'regex_match' => 'Designation may only contain letters, numbers, /, -, _ and spaces' ] ], 'email.*' => [ @@ -2283,10 +2281,10 @@ class ClientController extends AdminController ] ], 'designation.*' => [ - 'rules' => 'required|alpha_space', + 'rules' => 'required|regex_match[/^[A-Za-z0-9\-_\/ ]+$/]', 'errors' => [ 'required' => 'Designation is required', - 'alpha_space' => 'Designation may contain only letters and spaces' + 'regex_match' => 'Designation may only contain letters, numbers, /, -, _ and spaces' ] ], 'email.*' => [ @@ -2467,10 +2465,10 @@ class ClientController extends AdminController ] ], 'designation.*' => [ - 'rules' => 'required|alpha_space', + 'rules' => 'required|regex_match[/^[A-Za-z0-9\-_\/ ]+$/]', 'errors' => [ 'required' => 'Designation is required', - 'alpha_space' => 'Designation may contain only letters and spaces' + 'regex_match' => 'Designation may only contain letters, numbers, /, -, _ and spaces' ] ], 'email.*' => [ @@ -5803,6 +5801,99 @@ class ClientController extends AdminController // print_r($postData); die; $client_type = $postData['client_type'] ?? null; + $from_modal = $postData['from_modal'] ?? null; + + $rules = [ + 'client_name' => [ + 'label' => 'Client Name', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9 ,\/_\-]+$/]', + 'errors' => [ + 'required' => 'Client Name is required.', + 'regex_match' => 'Client Name only allows letters, numbers, spaces, and , / _ -' + ] + ], + 'short_name' => [ + 'label' => 'Client Short Name', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9,\/_\-]+$/]|is_unique[clients.short_name]', + 'errors' => [ + 'required' => 'Short Name is required.', + 'regex_match' => 'Short Name only allows letters, numbers, and , / _ -', + 'is_unique' => 'This Short Name is already in use.' + ] + ], + 'pan' => [ + 'label' => 'PAN', + 'rules' => 'permit_empty|regex_match[/^[A-Z]{5}[0-9]{4}[A-Z]{1}$/]', + 'errors' => [ + 'regex_match' => 'Invalid PAN format (Example: ABCDE1234F).' + ] + ], + 'entity_type_id' => [ + 'label' => 'Entity Type', + 'rules' => 'required', + 'errors' => [ + 'required' => 'Please select an Entity Type.' + ] + ], + 'branch_name' => [ + 'label' => 'Branch Name', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9 ,\/_\-]+$/]', + 'errors' => [ + 'required' => 'Branch Name is required.', + 'regex_match' => 'Branch Name only allows letters, numbers, spaces, and , / _ -' + ] + ], + 'branch_code' => [ + 'label' => 'Branch Code', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9,\/_\-]+$/]', + 'errors' => [ + 'required' => 'Branch Code is required.', + 'regex_match' => 'Branch Code only allows letters, numbers, and , / _ -' + ] + ], + 'name' => [ + 'label' => 'Contact Person Name', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9 ,\/_\-]+$/]', + 'errors' => [ + 'required' => 'Name is required.', + 'regex_match' => 'Name only allows letters, numbers, spaces, and , / _ -' + ] + ], + 'mobile' => [ + 'label' => 'Mobile', + 'rules' => 'required|numeric|exact_length[10]', + 'errors' => [ + 'required' => 'Mobile number is required.', + 'numeric' => 'Mobile must contain only digits.', + 'exact_length' => 'Mobile number must be exactly 10 digits.' + ] + ], + 'email' => [ + 'label' => 'Email', + 'rules' => 'required|valid_email', + 'errors' => [ + 'required' => 'Email is required.', + 'valid_email' => 'Please provide a valid email address.' + ] + ], + 'gst' => [ + 'label' => 'GST', + 'rules' => 'required|regex_match[/^\d{2}[A-Z]{5}\d{4}[A-Z]{1}[A-Z\d]{1}[Z]{1}[A-Z\d]{1}$/]', + 'errors' => [ + 'required' => 'GST Number is required.', + 'regex_match' => 'Invalid GST format (Example: 12ABCDE1234F5Z6).' + ] + ] + ]; + + if (isset($from_modal) && !$this->validate($rules)) { + return $this->response->setStatusCode(400)->setJSON([ + 'status' => false, + 'message' => 'Input validation failed', + 'code' => 400, + 'errors' => $this->validator->getErrors() + ]); + } $client_insert = null; if ($client_type == 2) { @@ -5928,7 +6019,8 @@ class ClientController extends AdminController ], ]; - if (!$this->validate($rules)) { + + if (!$this->validate($rules)) { return $this->response->setStatusCode(400)->setJSON([ 'status' => false, 'message' => 'Input validation failed', @@ -5936,6 +6028,7 @@ class ClientController extends AdminController 'errors' => $this->validator->getErrors() ]); } + $data = $this->request->getPost(); $sanitized_post_data = sanitizeInputArrayAdvanced($data); $id = $sanitized_post_data['vehicle_primary_key'] ?? null; diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php index fd736c2a..95fe4d80 100644 --- a/app/Controllers/LeadsController.php +++ b/app/Controllers/LeadsController.php @@ -370,7 +370,9 @@ class LeadsController extends BaseController $actual_lead_id = ! empty($actual_lead_id) ? $actual_lead_id : null; $postData = $this->request->getPost(); $data = $this->prepareLeadData(); - $rules = [ + + + $rules = [ 'lead_type' => [ 'rules' => 'integer', @@ -380,21 +382,6 @@ class LeadsController extends BaseController 'rules' => 'required', 'errors' => ['required' => 'Issuer is required'], ], - 'entity_type_id' => [ - 'rules' => 'required', - 'errors' => ['required' => 'Entity Type is required'], - ], - 'client_name' => [ - 'rules' => 'required|regex_match[/^[a-zA-Z0-9_ -]+$/]', - 'errors' => [ - 'required' => 'Client Name is required', - '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, 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}$/]', 'errors' => [ @@ -460,6 +447,30 @@ class LeadsController extends BaseController ], ]; + if (isset($postData['lead_type']) && $postData['lead_type'] == 1) { + + $rules['entity_type_id'] = [ + 'rules' => 'required', + 'errors' => ['required' => 'Entity Type is required'], + ]; + + $rules['client_name'] = [ + 'rules' => 'required|regex_match[/^[a-zA-Z0-9_ -]+$/]', + 'errors' => [ + 'required' => 'Client Name is required', + 'regex_match' => 'Client Name only letters, numbers, space, hyphens and underscores are allowed', + ], + ]; + + $rules['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, hyphens and underscores are allowed' + ], + ]; + } + foreach ($postData as $key => $value) { // Check if the key starts with 'docs_name_' if (strpos($key, 'docs_name_') === 0) { diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index dfbac180..2d99b088 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -1290,7 +1290,13 @@ class TicketController extends BaseController ] ], // --- ADDITIONAL / CONDITIONAL FIELDS --- - 'claim_number' => ['label' => 'Claim Number','rules' => 'permit_empty|alpha_numeric_punct','errors' => ['alpha_numeric_punct' => 'Invalid Claim Number.']], + 'claim_number' => [ + 'label' => 'Claim Number', + 'rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9\/_-]+$/]', + 'errors' => [ + 'regex_match' => 'Claim Number only allows letters, numbers, slashes (/), hyphens (-), and underscores (_).' + ] + ], 'denial_date' => ['label' => 'Denial Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Denial Date must be dd/mm/yyyy.']], 'approved_amount' => ['label' => 'Approved Amount','rules' => 'permit_empty|numeric', 'errors' => ['numeric' => 'Approved amount must be numeric'] @@ -1649,7 +1655,13 @@ class TicketController extends BaseController ], // --- ADDITIONAL / CONDITIONAL FIELDS --- - 'claim_number' => ['label' => 'Claim Number','rules' => 'permit_empty|alpha_numeric_punct','errors' => ['alpha_numeric_punct' => 'Invalid Claim Number.']], + 'claim_number' => [ + 'label' => 'Claim Number', + 'rules' => 'permit_empty|regex_match[/^[a-zA-Z0-9\/_-]+$/]', + 'errors' => [ + 'regex_match' => 'Claim Number only allows letters, numbers, slashes (/), hyphens (-), and underscores (_).' + ] + ], 'denial_date' => ['label' => 'Denial Date','rules' => 'permit_empty|regex_match[/^\d{2}\/\d{2}\/\d{4}$/]','errors' => ['regex_match' => 'Denial Date must be dd/mm/yyyy.']], 'approved_amount' => ['label' => 'Approved Amount','rules' => 'permit_empty|numeric', 'errors' => ['numeric' => 'Approved amount must be numeric'] diff --git a/app/Controllers/UserController.php b/app/Controllers/UserController.php index 145ab807..09b458dc 100755 --- a/app/Controllers/UserController.php +++ b/app/Controllers/UserController.php @@ -115,12 +115,13 @@ class UserController extends AdminController // ====================== 'emp_code' => [ 'label' => 'Employee Code', - 'rules' => 'required|min_length[3]|max_length[15]|regex_match[/^[a-zA-Z0-9_\-\/]+$/]', + 'rules' => 'required|min_length[3]|max_length[15]|regex_match[/^[a-zA-Z0-9_\-\/]+$/]|is_unique[user_profiles.emp_code]', 'errors' => [ 'required' => 'Employee Code is required', 'min_length' => 'Employee Code must be at least 3 characters', 'max_length' => 'Employee Code cannot exceed 15 characters', - 'regex_match' => 'Employee Code can only contain letters, numbers, underscores, hyphens, and forward slashes (/).' + 'regex_match' => 'Employee Code can only contain letters, numbers, underscores, hyphens, and forward slashes (/).', + 'is_unique' => 'This Employee Code already exists.' ] ], @@ -141,10 +142,11 @@ class UserController extends AdminController // Email // ====================== 'email' => [ - 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]|is_unique[user_profiles.email]', 'errors' => [ 'required' => 'Email address is required.', - 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).', + 'is_unique' => 'This Email address already exists.' ] ], @@ -152,10 +154,11 @@ class UserController extends AdminController // Mobile // ====================== 'mobile' => [ - 'rules' => 'required|regex_match[/^[6-9][0-9]{9}$/]', + 'rules' => 'required|regex_match[/^[6-9][0-9]{9}$/]|is_unique[user_profiles.mobile]', 'errors' => [ 'required' => 'Mobile number is required', 'regex_match' => 'Enter a valid 10-digit mobile number starting with 6, 7, 8, or 9', + 'is_unique' => 'This Mobile number already exists.' ] ], @@ -268,7 +271,10 @@ class UserController extends AdminController if (!$this->request->getPost()) { return redirect()->to(base_url('/user/list')); } else { - // echo ":/ in 163"; + + $data = $this->request->getPost(); + $userData = sanitizeInputArrayAdvanced($data); + $id = $userData['PrimaryKey']; $rules = [ // ====================== @@ -297,13 +303,13 @@ class UserController extends AdminController // Employee Code // ====================== 'emp_code' => [ - 'label' => 'Employee Code', - 'rules' => 'required|min_length[3]|max_length[15]|regex_match[/^[a-zA-Z0-9_\-\/]+$/]', + 'rules' => "required|min_length[3]|max_length[15]|regex_match[/^[a-zA-Z0-9_\-\/]+$/]|is_unique[user_profiles.emp_code,id,{$id}]", 'errors' => [ 'required' => 'Employee Code is required', 'min_length' => 'Employee Code must be at least 3 characters', 'max_length' => 'Employee Code cannot exceed 15 characters', - 'regex_match' => 'Employee Code can only contain letters, numbers, underscores, hyphens, and forward slashes (/).' + 'regex_match' => 'Employee Code can only contain letters, numbers, underscores, hyphens, and forward slashes (/).', + 'is_unique' => 'This Employee Code already exists.' ] ], @@ -324,10 +330,11 @@ class UserController extends AdminController // Email // ====================== 'email' => [ - 'rules' => 'required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]', + 'rules' => "required|regex_match[/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/]|is_unique[user_profiles.email,id,{$id}]", 'errors' => [ 'required' => 'Email address is required.', - 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).' + 'regex_match' => 'Please enter a valid email format (e.g., name@domain.com).', + 'is_unique' => 'This Email address already exists.' ] ], @@ -335,10 +342,11 @@ class UserController extends AdminController // Mobile // ====================== 'mobile' => [ - 'rules' => 'required|regex_match[/^[6-9][0-9]{9}$/]', + 'rules' => "required|regex_match[/^[6-9][0-9]{9}$/]|is_unique[user_profiles.mobile,id,{$id}]", 'errors' => [ 'required' => 'Mobile number is required', 'regex_match' => 'Enter a valid 10-digit mobile number starting with 6, 7, 8, or 9', + 'is_unique' => 'This Mobile number already exists.' ] ], @@ -466,7 +474,29 @@ class UserController extends AdminController $emailToDelete = $model->where('id', $id)->first(); $deactive = $model->where('id', $id)->set(['is_active' => 0])->update(); - $this->bookStack->deleteUser($emailToDelete); + // $this->bookStack->deleteUser($emailToDelete); + if($deactive) + { + // $db = \Config\Database::connect(); + // $tableName = 'hdz_staff'; + + // $db->table($tableName)->insert($hdz_staff); + + + echo json_encode(array("status" => true)); + }else{ + echo json_encode(array("status" => false)); + } + } + + public function activateUser($id = null) + { + $model = new UserModel(); + + $emailToDelete = $model->where('id', $id)->first(); + $deactive = $model->where('id', $id)->set(['is_active' => 1])->update(); + + // $this->bookStack->deleteUser($emailToDelete); if($deactive) { // $db = \Config\Database::connect(); diff --git a/app/Views/UserList.php b/app/Views/UserList.php index 9659eaf4..caec359f 100755 --- a/app/Views/UserList.php +++ b/app/Views/UserList.php @@ -389,7 +389,15 @@ table.dataTable tbody td {
@@ -493,7 +501,7 @@ table.dataTable tbody td { @@ -502,7 +510,7 @@ table.dataTable tbody td { @@ -511,11 +519,11 @@ table.dataTable tbody td {