286 lines
14 KiB
PHP
286 lines
14 KiB
PHP
<?php
|
|
|
|
namespace App\Controllers;
|
|
|
|
use App\Models\UsersModel;
|
|
use App\Models\BusinessModel;
|
|
use CodeIgniter\Files\File;
|
|
|
|
class Users extends BaseController
|
|
{
|
|
## For User Listing
|
|
public function index()
|
|
{
|
|
helper('session');
|
|
|
|
$session_role = get_user_role();
|
|
$session_bid = get_business_id();
|
|
$session_role = get_user_role();
|
|
|
|
if (!empty($session_role) && $session_role !== "sadmin") {
|
|
$this->logger->info("Users: Listing In admin role . BID = ".$session_bid);
|
|
$where = ['users.business_id' => (int)$session_bid, 'users.isactive' => 1];
|
|
} else {
|
|
$this->logger->info("Users: Listing In Super-admin role .");
|
|
$where = ['users.isactive !=' => NULL];
|
|
}
|
|
$model = new UsersModel();
|
|
$model->setTable('users');
|
|
// $user_details = $model->where($where)->orderBy('user_id', 'DESC')->findAll();
|
|
$user_details = $model->select('users.*, business.title as org_name')
|
|
->join('business', 'business.business_id = users.business_id')
|
|
->where($where)->orderBy('user_id', 'DESC')->findAll();
|
|
|
|
$this->logger->info("Users: Listing Count .".count($user_details));
|
|
$data['page_name'] = 'User Details';
|
|
$data['loged_user'] = $session_role;
|
|
$data['details'] = $user_details;
|
|
|
|
// echo '<pre>';
|
|
// print_r($data); die;
|
|
$this->render_page('user_list', $data);
|
|
}
|
|
|
|
## To Load User Add/Update page
|
|
public function user_page($id)
|
|
{
|
|
helper('session');
|
|
$session_role = get_user_role();
|
|
$session_bid = get_business_id();
|
|
$session_uid = get_logged_user_id();
|
|
if ($id === '0') {
|
|
$this->logger->info("Users: In Add page");
|
|
$data['page_name'] = 'Add User';
|
|
$business_details = $this->business_details();
|
|
$render_page_name = 'user_form';
|
|
$data['details'] = [];
|
|
} else if ($id !== '0') {
|
|
$this->logger->info("Users: In Edit page");
|
|
$model = new UsersModel();
|
|
$model->setTable('users');
|
|
if (!empty($session_role)){
|
|
switch ($session_role) {
|
|
case "sadmin":
|
|
$where = ['users.user_id' => $id, 'users.isactive !=' => NULL];
|
|
$edit_user_details = $model->where($where)->first();
|
|
$business_details = $this->business_details();
|
|
$render_page_name = 'user_form';
|
|
$data['page_name'] = 'Edit User';
|
|
break;
|
|
case "admin":
|
|
$where = ['users.user_id' => $id, 'users.isactive =' => 1];
|
|
$edit_user_details = $model->where($where)->first();
|
|
$business_details = [];
|
|
$render_page_name = 'user_form';
|
|
$data['page_name'] = 'Edit User';
|
|
break;
|
|
case "manager":
|
|
$where = ['users.user_id' => $id, 'users.isactive =' => 1];
|
|
$edit_user_details = $model->where($where)->first();
|
|
$business_details = [];
|
|
if($session_uid === $id && $session_role === "manager"){
|
|
$data['page_name'] = 'Edit User';
|
|
$render_page_name = 'user_form';
|
|
}else{
|
|
$data['page_name'] = 'Page Not Found';
|
|
$render_page_name = 'pages_404';
|
|
}
|
|
break;
|
|
default:
|
|
$data['page_name'] = 'Page Not Found';
|
|
$render_page_name = 'pages_404';
|
|
}
|
|
}
|
|
$data['details'] = $edit_user_details;
|
|
}
|
|
$data['business_details'] = $business_details;
|
|
$data['session_bid'] = $session_bid;
|
|
$this->render_page($render_page_name, $data);
|
|
}
|
|
|
|
## For SuperAdmin Role business Dropdown displayed on Userpage.otherwise Hidden fields
|
|
public function business_details()
|
|
{
|
|
$model = new BusinessModel();
|
|
$model->setTable('business');
|
|
$business_details = $model->orderBy('business_id', 'DESC')->findAll();
|
|
return $business_details;
|
|
}
|
|
|
|
## For inserting/updating details of user
|
|
public function insert_users()
|
|
{
|
|
$this->logger->info("Users: Inserting/Updating Details");
|
|
try {
|
|
## CI validation rule for profile_picture
|
|
$validationRule = [
|
|
'profile_picture' => [
|
|
'label' => 'Image File',
|
|
'rules' => 'uploaded[profile_picture]|is_image[profile_picture]|mime_in[profile_picture,image/jpg,image/jpeg,image/gif,image/png,image/webp]'
|
|
]
|
|
];
|
|
|
|
## Declarions
|
|
helper('session');
|
|
$UsersModel = new UsersModel();
|
|
$session_uid = get_logged_user_id();
|
|
$session_bid = get_business_id();
|
|
$user_id = $this->request->getPost('user_id');
|
|
$business_id = $this->request->getPost('business_id')?$this->request->getPost('business_id'):$session_bid;
|
|
$img_details = $this->request->getFile('profile_picture'); // Here I Have Image details ;
|
|
$final_img_name = NULL;//Just flag
|
|
$existing_img_name = $this->request->getPost('existing_profile_picture_name'); // HiddenField for if have any pic name means;
|
|
$img_path = 'public/uploads/';
|
|
|
|
##Step 1 : image details available
|
|
if($img_details){
|
|
$this->logger->info("Users: image details avaiable");
|
|
##Step 2 : i have image details .<br/>
|
|
if ($img_details->isValid()) {
|
|
##Step 3 : image Name.$new_img_name."<br/>";
|
|
$new_img_name = $img_details->getName(); // before movement name
|
|
$this->logger->info("Users: Image Name B4 Upload".$new_img_name);
|
|
##Step 4 : Validation Rule Apply here.if not throw the error"<br/>";
|
|
if (!$this->validate($validationRule)) {
|
|
if($new_img_name !== ''){
|
|
|
|
$error = $this->validator->getErrors();
|
|
// echo "Error : ".(string)$error."<br/>";
|
|
$this->logger->error("Users: Err on image upload".$error['profile_picture']);
|
|
throw new \Exception((string)$error['profile_picture']);
|
|
}
|
|
}
|
|
##Step 5 : Check Existing and New Image Name Same Or not same no use to move on target folder
|
|
if($new_img_name !== $existing_img_name){
|
|
$this->logger->info("Users: Image Name are Differ".$new_img_name." & ".$existing_img_name);
|
|
## Step 6 : Different Image Name means removed on target folder using Unlink;
|
|
if ($existing_img_name && is_file($img_path.$existing_img_name)) {
|
|
$this->logger->info("Users: already Image Available on target Folder Path : ".$img_path.$existing_img_name." So, Deleted.");
|
|
// echo "Deleted_file : ".(string)$img_path.$existing_img_name."<br/>";
|
|
unlink($img_path.$existing_img_name);
|
|
}
|
|
## Step 7 : Moved to target;
|
|
$img_details->move($img_path, $new_img_name);
|
|
$final_img_name = $img_details->getName(); // after movement name
|
|
$this->logger->info("Users: Image Name After Upload".$final_img_name);
|
|
}else{
|
|
$final_img_name = $existing_img_name;
|
|
$this->logger->info("Users: Image Name are same".$new_img_name." & ".$existing_img_name." Can't Upload");
|
|
}
|
|
}
|
|
else{
|
|
## Step 8 : Not a Vaild Image File so replace Existing file name;
|
|
$final_img_name = $existing_img_name;
|
|
$this->logger->info("Users: Not a Vaild Image File Nothing To Update/Upload");
|
|
// throw new \Exception("Not a Vaild Image File");
|
|
}
|
|
}
|
|
else{
|
|
## Step 9 : Testing Purpose File Details Not Available. so i can't move it.;
|
|
$this->logger->info("Users: Testing Purpose Image Details Not Available. so i can't move it.");
|
|
$final_img_name = $existing_img_name;
|
|
//throw new \Exception("Testing Purpose File Details Not Available so i can't move it if you have existing filee means save it or your choice");
|
|
}
|
|
|
|
$data = [
|
|
'profile_picture' => $final_img_name,
|
|
'city' => $this->request->getPost('city'),
|
|
'state' => $this->request->getPost('state'),
|
|
'email' => $this->request->getPost('email'),
|
|
'postal_code' => $this->request->getPost('postal_code'),
|
|
'country' => $this->request->getPost('country'),
|
|
'role' => $this->request->getPost('role'),
|
|
'first_name' => $this->request->getPost('first_name'),
|
|
'last_name' => $this->request->getPost('last_name'),
|
|
'mobile_no' => $this->request->getPost('mobile_no'),
|
|
'date_of_birth' => NULL,
|
|
'address' => $this->request->getPost('address'),
|
|
'gender' => $this->request->getPost('gender'),
|
|
'business_id' => $business_id
|
|
];
|
|
|
|
if (empty($user_id)) {
|
|
// It's an insert operation
|
|
$password = $this->request->getVar('password');
|
|
$hash_password = password_hash($password, PASSWORD_DEFAULT);
|
|
$data['isactive'] = 1;
|
|
$data['password'] = $hash_password;
|
|
$data['created_by'] = $session_uid;
|
|
//print_r($data);die;
|
|
// ($UsersModel->insert($data)) ? session()->setFlashdata('success', 'User has been added successfully.')
|
|
// : session()->setFlashdata('error', 'User could not be added. Please try again.');
|
|
if ($UsersModel->insert($data)) {
|
|
session()->setFlashdata('success', 'User has been added successfully.');
|
|
$this->logger->info("Users: has been added successfully. Inserted ID = ".$UsersModel->insertID());
|
|
} else {
|
|
session()->setFlashdata('error', 'User could not be added. Please try again.');
|
|
$this->logger->error("Users: Err could not be added. Please try again.");
|
|
}
|
|
|
|
|
|
} else {
|
|
// It's an update operation
|
|
$isactive = $this->request->getPost('isactive');
|
|
$data['updated_by'] = $session_uid;
|
|
$data['isactive'] = ($isactive == 'on') ? 1 : 0;
|
|
if($session_uid == $user_id && $data['isactive'] == 0){
|
|
throw new \Exception("Cant able to Update Because logged-In persons can't remove. Please Contact your Admin!....");
|
|
}
|
|
if ($UsersModel->update($user_id, $data)) {
|
|
session()->setFlashdata('success', 'User has been updated successfully.');
|
|
$this->logger->info("Users: has been updated successfully. Updated ID = ".$user_id);
|
|
} else {
|
|
session()->setFlashdata('error', 'User update failed. Please try again.');
|
|
$this->logger->error("Users: Err Failed to update ID =".$user_id);
|
|
}
|
|
}
|
|
}catch(\Exception $e) {
|
|
$this->logger->error("Users: Err Occur =".$e->getMessage());
|
|
session()->setFlashdata('error', 'Message: ' .$e->getMessage());
|
|
}
|
|
return redirect()->route('user_list');
|
|
}
|
|
|
|
## For delete the user details (Which means inactive the details)
|
|
public function delete_user($id)
|
|
{
|
|
helper('session');
|
|
$session_uid = get_logged_user_id();
|
|
try {
|
|
if($id == $session_uid){
|
|
throw new \Exception("Your Logged-In, Can't able delete");
|
|
}
|
|
$model = new UsersModel();
|
|
$where = ['users.user_id' => $id, 'users.isactive =' => 1];
|
|
$existingUser = $model->where($where)->find($id);
|
|
$this->logger->Info("Users: Going to Inactive ID = ".$id);
|
|
|
|
if ($existingUser) {
|
|
$data['isactive'] = 0;
|
|
$data['updated_by'] = $session_uid;
|
|
if(!empty($existingUser['profile_picture']) && file_exists(FCPATH."public/uploads/".$existingUser['profile_picture'])){
|
|
unlink('public/uploads/'.$existingUser['profile_picture']);
|
|
$data['profile_picture'] = NULL;
|
|
}
|
|
|
|
|
|
if ($model->update($id, $data)) {
|
|
session()->setFlashdata('success', 'Deleted successfully.');
|
|
$this->logger->info("Users: has been Inactived successfully. Inactived ID = ".$id);
|
|
} else {
|
|
$this->logger->error("Users: Not able to Inactive ID =".$id);
|
|
throw new \Exception("Data Not able to Deleted");
|
|
}
|
|
}
|
|
else{
|
|
$this->logger->error("Users: Does Not Exist To Inactive, ID = ".$id);
|
|
throw new \Exception("User Already Deleted");
|
|
}
|
|
}catch(\Exception $e) {
|
|
$this->logger->error("Users: Err Occur = ".$e->getMessage());
|
|
session()->setFlashdata('error', 'Message: ' .$e->getMessage());
|
|
}
|
|
return redirect()->route('user_list');
|
|
}
|
|
}
|