Current File : //home/tradevaly/www/app/Http/Controllers/Frontend/AuthenticationController.php
<?php

namespace App\Http\Controllers\Frontend;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
use Carbon\Carbon;
use Brian2694\Toastr\Facades\Toastr;
use App\Models\Company;
use Mail;
use Illuminate\Support\Facades\Notification;
use App\Notifications\UserVerification;
use App\Notifications\UserRegister;
use App\Notifications\ForgetCode;
use Illuminate\Support\Facades\Hash;


class AuthenticationController extends Controller
{
    //  register function start
     public function store(Request $request)
    {
        if(User::where('email', $request->email)->first() != null){
             Toastr::error('Email Already Exists', '', ['progressBar' => true, 'closeButton' => true, 'positionClass' => 'toast-top-right']);
              return redirect()->back();
        }
        if(User::where('username', $request->username)->first() != null){
             Toastr::error('Username Already Exists', '', ['progressBar' => true, 'closeButton' => true, 'positionClass' => 'toast-top-right']);
              return redirect()->back();
        }
        
        $this->validate($request, [
            'name' => 'required',
            'email' => 'required',
            'password' => 'required',
            'category_id' => 'required',
            'username' => 'required',
            'type' => 'required',
            'country_id' => 'required',
            'company' => 'required',
            'g-recaptcha-response' => 'required',
        ]);
        $password = $request->password;
        $user = new User();
        $user->name = $request->name;
        $user->email = $request->email;
        $user->category_id = $request->category_id;
        $user->username = $request->username;
        $user->type = $request->type;
        $user->image = 'image.jpg';
        $user->password = bcrypt($password);
        $user->verify_code = rand(999,9999);
        $user->country_id = $request->country_id;
        $user->package_id = 1;
        $user->next_pay = Carbon::now()->addYear(10);
        $user->save();
        if($user->save()){
            $user->password = $password;
            $company = new Company();
            $company->user_id = $user->id;
            $company->name = $request->company;
            $company->image = 'image.jpg';
            $company->phone = $request->phone;
            if($company->save()){
                $user->user_password = $request->password;
                Notification::send($user, new UserRegister($user));
                Notification::route('mail', 'tradevalyb2b@gmail.com')->notify(new UserRegister($user));
                Notification::send($user, new UserVerification($user));
                 if($request->admin_user_create){
                         Toastr::success('Registration Successfull');
                      return back();
                    }

                Auth::loginUsingId($user->id);
                Toastr::success('Registration Successfull Please Check Your Email !! For Login', '', ['progressBar' => true, 'closeButton' => true, 'positionClass' => 'toast-top-right']);
              return view('thankyou');
            }
        }
    }
    public function register(){
        if(Auth::check()){
            return redirect('/user/dashboard');
        }
        else{ 
        return view('frontend.pages.auth.register');
        }
    }
    // register funciton end
     
    // Verification function start
    
    public function verify(){
         if(Auth::check() && Auth::user()->email_verified_at == null){
             return view('frontend.pages.auth.verification');
         }
         return redirect('/user/dashboard');
         
    }
    
    public function resend(){
       if(Auth::check() && Auth::user()->email_verified_at == null){
          $user = User::findOrFail(Auth::id());
          $user->verify_code = rand(999,9999);
          $user->save();
          
          Notification::send($user, new UserVerification($user));
          Toastr::success('Verification Code Send Succefully!!', '', ['progressBar' => true, 'closeButton' => true, 'positionClass' => 'toast-top-right']);
        return view('frontend.pages.auth.verification');  
        }
         Toastr::success('Something Went Wrong!!!', '', ['progressBar' => true, 'closeButton' => true, 'positionClass' => 'toast-top-right']);
         return back();
         
    }
    
    public function verify_check(Request $request){
        $request->validate(['code' => 'required']);
        $user = User::find(Auth::id());
        if($user->verify_code == $request->code){
            $user->email_verified_at = Carbon::now();
            $user->verify_code = null;
            $user->save();
            return redirect('user/dashboard');
        }
        Toastr::error('Invalid Verification Code!!', '', ['progressBar' => true, 'closeButton' => true, 'positionClass' => 'toast-top-right']);
         return back();
    }
    // verification Function end
    
    // Login Function start here
    public function login(){
        if(Auth::check()){
            return redirect()->route('user.dashboard');
        }
        return view('frontend.pages.auth.login');
    }
     public function login_switch(Request $request)
    {
        $request->validate([
            'email' => ['required','email'],
            'password' => 'required',
        ]);
        $credentials = $request->only('email', 'password');
        if (Auth::attempt($credentials)) {
            return redirect()->route('user.dashboard')
                        ->withSuccess('You have Successfully loggedin');
        }
  
        return redirect("login")->withSuccess('Oppes! You have entered invalid credentials');
    }
    // login function end
    
    // Forget password
    public function forget(){
        return view('frontend.pages.auth.forget');
    }
    public function forget_code($email){
        $user = User::where('email',$email)->where('verify_code','!=',null)->firstOrFail();
        return view('frontend.pages.auth.forget_code',compact('email'));
    }
    // Forget password
    public function forget_codesend(Request $request){
        $user = User::where('email',$request->email)->firstOrFail();
        if($user){
            $user->verify_code = rand(999,9999);
            $user->save();
          Notification::send($user, new ForgetCode($user));
          Toastr::success('Verification Code Send Succefully!!', '', ['progressBar' => true, 'closeButton' => true, 'positionClass' => 'toast-top-right']);
        return redirect()->route('front.user.forget.code',$user->email);
        }
    }
    public function code_check(Request $request){
        $request->validate([
            'email' => ['required','email'],
            'code' => 'required',
        ]);
        $user = User::where('email',$request->email)->firstOrFail();
        
          if($user->verify_code == $request->code){
            $user->verify_code = null;
            $user->password_forget_time = Carbon::now()->addMinutes(30);
            $user->save();
            $time = Carbon::parse($user->password_forget_time)->format('Y-M-d-H-i-s-A');
            $email = $user->email;
            $id = $user->id;
             Toastr::success('Verify Successfully!!', '', ['progressBar' => true, 'closeButton' => true, 'positionClass' => 'toast-top-right']);
             return redirect()->route('front.user.forget.new_password', ['email' => $email, 'time' => $time, 'id' => $id]);
        }
         Toastr::error('Verification Code Does not Match!!', '', ['progressBar' => true, 'closeButton' => true, 'positionClass' => 'toast-top-right']);
         
        return back();
    }
     public function new_password($email,$time,$id){
          $user = User::where('email',$email)->where('id',$id)->first();
         
            
         if($user){
                   if(Carbon::now()->lt($user->password_forget_time)){
                    return  view('frontend.pages.auth.forget_new_password',compact('email','id'));
                   }
                   else{
                         Toastr::error('Password Change time expires try again!!', '', ['progressBar' => true, 'closeButton' => true, 'positionClass' => 'toast-top-right']);
                         return redirect()->route('front.user.forget');
                  }
          }
          Toastr::error('Something went wrong please try again!!', '', ['progressBar' => true, 'closeButton' => true, 'positionClass' => 'toast-top-right']);
         return redirect()->route('front.user.login');
    }
     public function change_password(Request $request,$email){
         $request->validate([
        'id' => 'required',
        'new_password' => 'required|string|min:8',
        'confirm_password' => 'required|same:new_password',
    ]);
    $user = User::where('email',$email)->where('id',$request->id)->first();
    if($user){
        $user->password = Hash::make($request->new_password);
        $user->password_forget_time = null;
        $user->save();
         Toastr::success('Password Change Successfully!!', '', ['progressBar' => true, 'closeButton' => true, 'positionClass' => 'toast-top-right']);
         return redirect()->route('front.user.login');
    }
    Toastr::error('Something went wrong please try again!!', '', ['progressBar' => true, 'closeButton' => true, 'positionClass' => 'toast-top-right']);
    return back();

    
    }
}