<?
php
namespace App\Http\Controllers;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Pagination\CursorPaginator;
use Illuminate\Support\Facades\Crypt;
use App\Model\admin\Admin;
use App\Model\User\Users;
use App\Model\User\UserAddresses;
use App\Model\User\UserDetail;
use App\Model\Company\Company;
use App\Model\Company\CompanyUser;
use App\Model\Company\CompanyModule;
use App\Model\Role\Role;
use App\Model\Profile\Profile;
use App\Model\Operation\Operation;
use App\User;
use App\Model\State;
use App\Model\City;
use Auth;
use Image;
use Session;
use Str;
use Mail;
class UserController extends BaseController
{
//Constructor
public function __construct() {
$this->companyINFO = new Controller();
$this->companyMenus = CompanyModule::where('company_id',
Session::get('companyID'))->get();
$this->roles = Role::where('company_id', Session::get('companyID'))->get();
$this->profiles = Profile::where('company_id', Session::get('companyID'))-
>get();
$this->operations = Operation::get();
}
//User Registration
public function userRegistration(Request $request) {
if($request->isMethod('post')) {
$validator = Validator::make($request->all(), [
'first_name' => 'required',
'last_name' => 'required',
'email' => 'required',
'mobile' => 'required',
'password' => 'required|min:6|Max:20',
]);
if ($validator->fails()) {
Session::put('error', "Please Provide Proper request");
return redirect()->back();
}
try {
//Check if user exists with email or mobile
$checkUserExist = User::where('mobile', $request['mobile'])-
>orwhere('email', $request['email'])->first();
if($checkUserExist) {
Session::put('error', 'User Already exists with Mobile or
Email');
return redirect()->back();
}
//User Registration
$user = new User;
$user->first_name = ucfirst(trim($request['first_name'], " "));
$user->last_name = ucfirst(trim($request['last_name'], " "));
$user->email = $request['email'];
$user->mobile = $request['mobile'];
$user->password = md5($request['password']);
$user->save();
//Organization Creation
$company = new Company;
$company->user_id = $user['user_id'];
$company->org_id = rand(0, 99999999999);
// $company->default_company = 1;
$company->save();
//setting up the role
$role = new Role;
$role->company_id = $company['company_id'];
$role->role_name = 'CEO';
$role->level = 0;
$role->parent_id = 0;
$role->save();
//setting up the profile
$profile = new Profile;
$profile->company_id = $company['company_id'];
$profile->profile_name = 'ADMINISTRATOR';
$profile->save();
//Company Creation
$companyUser = new CompanyUser;
$companyUser->company_id = $company['company_id'];
$companyUser->user_id = $user['user_id'];
$company->default_company = 1;
// $companyUser->password = md5($request['password']); //logic
changed
$companyUser->role_id = $role['role_id'];
$companyUser->profile_id = $profile['profile_id'];
$companyUser->save();
Session::put('success', 'Account Created Successfully! Please login
to continue');
return redirect('/');
}catch (\Throwable $th) {
Session::put('error', $th->getMessage());
return redirect()->back();
}
}
return view('frontend.user.register');
}
//User Login
public function userLogin(Request $request) {
if($request->isMethod('post')) {
$validator = Validator::make($request->all(), [
'username' => 'required',
'password' => 'required',
]);
if ($validator->fails()) {
Session::put('error', "Username and Password are required");
return redirect()->back();
}
try {
//check user credentials
$user = User::with('company', 'companyUser.company',
'companyUser.role')->where('email', $request['username'])
->orWhere('mobile', $request['username'])
->first();
// $companyUser = CompanyUser::select('password')->where('user_id',
$user['user_id'])->first(); //logic changed
if((($user['email'] == $request['username']) && ($user['password']
== md5($request['password']))) || ($user['mobile'] == $request['username']) &&
($user['password'] == md5($request['password']))) {
$isCompanySet = (is_null($user['company']['company_name'])) ? 0
: 1;
Session::put(['userSession' => $user, 'org_id' =>
$user['company']['org_id']]);
Session::put('companyURL', $user['company']['company_url']);
Session::put('companyID', $user['company']['company_id']);
//admin user
$path = $isCompanySet ? '/home' :
'/begin/company/registration';
if($isCompanySet) {
return
redirect(config('constant.CRM').'/'.Session::get('companyURL').$path);
}
//company user
$isCompanyUserSet = (is_null($user['companyUser']['company']
['company_name'])) ? 0 : 1;
Session::put(['userSession' => $user, 'org_id' =>
$user['companyUser']['company']['org_id']]);
if($isCompanyUserSet) {
Session::put('companyURL', $user['companyUser']['company']
['company_url']);
Session::put('companyID', $user['companyUser']['company']
['company_id']);
if(strtolower(Session::get('userSession')['companyUser']
['role']['role_name']) == 'warehouse') {
return
redirect(config('constant.CRM').'/warehouse/'.Session::get('companyURL').'/home');
} else {
return
redirect(config('constant.CRM').'/'.Session::get('companyURL').'/home');
}
}
return redirect(config('constant.CRM').'/org'.$user['company']
['org_id'].$path);
}
Session::put('error', 'Incorrect Username or Password');
}catch (\Throwable $th) {
Session::put('error', $th->getMessage());
}
return redirect()->back();
}
return view('frontend.user.login');
}
//User Forgot Password
public function resetPassword(Request $request) {
if($request->isMethod('post')) {
$validator = Validator::make($request->all(), [
'username' => 'required'
]);
if ($validator->fails()) {
Session::put('error', "Please provide proper data");
return redirect()->back();
}
try {
$user = User::where('mobile', $request['username'])-
>orWhere('email', $request['username'])->first();
if($user) {
$user_email = $user['email'];
$new_password = rand(0, 99999999); //auto generate password
//updating user password
// $password = CompanyUser::where('user_id', $user['user_id'])-
>first(); //logic changed
//Sending Mail Notification to User
$credentials = [
'email' => $user_email,
'mobile' => $user['mobile'],
'password' => $new_password,
];
Mail::send('email-templates.user.reset-password',
['credentials' => $credentials] , function($message) use($user_email){
$message->to($user_email)->subject('Password Reset
Notification');
});
$user->password = md5($new_password);
$user->save();
Session::put('success', "New password is sent to your
registered email address, please login and change password using it");
return redirect()->back();
} else {
Session::put('error', "You are not yet registered with us!
please register to continue");
return redirect()->back();
}
}catch (\Throwable $th) {
Session::put('error', $th->getMessage());
}
}
return view('frontend.user.reset-password');
}
//User Details
public function userDetails(Request $request) {
if($request->isMethod('post')) {
$validator = Validator::make($request->all(), [
'first_name' => 'required',
'last_name' => 'required',
'email' => 'required',
'mobile' => 'required',
'state_id' => 'required',
'city_id' => 'required',
'taluka_id' => 'required',
'user_id' => 'required',
'role_id' => 'required',
'profile_id' => 'required',
'address' => 'required',
'pincode' => 'required'
]);
if ($validator->fails()) {
Session::put('error', "Please provide proper data");
return redirect()->back();
}
try {
$user = User::where('user_id', $request['user_id'])->first();
$user->first_name = $request['first_name'];
$user->last_name = $request['last_name'];
$user->email = $request['email'];
$user->mobile = $request['mobile'];
$user->address = $request['address'];
$user->pincode = $request['pincode'];
$user->state_id = $request['state_id'];
$user->city_id = $request['city_id'];
$user->taluka_id = $request['taluka_id'];
//update profile picture
if($request->hasFile('user_image')){
$image_tmp = $request['user_image'];
if($image_tmp->isValid()){
$extension = $image_tmp->getClientOriginalExtension();
$filename = $user['first_name'].'-'.
$user['last_name'].'-'.time().'.'.$extension;
$image_path =
public_path(config('constant.USER_PROFILE_IMG_PATH'));
// if(file_exists($image_path.$user['user_image'])){
// unlink($image_path.$user['user_image']);
// }
Image::make($image_tmp)->resize(128, 128)-
>save($image_path.$filename);
$user->user_image = $filename;
}
}
$user->save();
//update role & profile
$companyUser = CompanyUser::where('user_id', $request['user_id'])-
>first();
$companyUser->role_id = $request['role_id'];
$companyUser->profile_id = $request['profile_id'];
$companyUser->save();
Session::put('success', 'Info Updated');
return redirect()->back();
}catch (\Throwable $th) {
Session::put('error', $th->getMessage());
return redirect()->back();
}
}
$companyMenus = $this->companyMenus;
$roles = Role::with('role')->where('company_id',
Session::get('companyID'))->get();
$profiles = Profile::where('company_id', Session::get('companyID'))->get();
$user = CompanyUser::with('user', 'role', 'profile')->where('user_id',
Session::get('userSession')['user_id'])->first();
return view('backend.user.user-details', compact('companyMenus', 'roles',
'profiles', 'user'));
}
}