Viewing File: /home/ubuntu/shop-website-base/app/Http/Controllers/User/LoginController.php

<?php

namespace App\Http\Controllers\User;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;
use App\Helpers\Helper;
use DB, Hash, Exception, File, Setting, Validator;

use App\Models\User;

use App\Models\PasswordReset;

use Carbon\Carbon;

class LoginController extends Controller
{
    use AuthenticatesUsers;

    /**
     * Create a new authentication controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest:user', ['except' => 'logout']);
    }

    /**
     * Show the application’s login form.
     *
     * @return \Illuminate\Http\Response
     */
    public function showLoginForm()
    {

        return view('user.auth.login');
    }

    protected function guard() {

        return Auth::guard('user');

    }
    
    /**
     * Where to redirect users after login.
    *
    * @var string
    */
    protected $redirectTo = '/';

    protected $redirectAfterLogout = '/login';


    public function login(Request $request) {

        try{
            
            DB::begintransaction();

            $rules =  [
            'email' => 'required',
            'password' => 'required|min:6',
            ];

            Helper::custom_validator($request->all(),$rules,$custom_messages=[]);


          if(is_numeric($request->get('email'))){

            $validate =  ['mobile'=>$request->get('email'),'password'=>$request->get('password'),'status'=>USER_APPROVED];
         
          }
          elseif (filter_var($request->get('email'), FILTER_VALIDATE_EMAIL)) {

            $validate =  ['email' => $request->get('email'), 'password'=>$request->get('password'),'status'=>USER_APPROVED];

          }

      
        // Attempt to log the user in
        if (Auth::guard('user')->attempt($validate, $request->remember)) {
            if(Auth::guard('user')->check()) {

                if($user = User::find(Auth::guard('user')->user()->id)) {

                    $user->timezone = $request->has('timezone') ? $request->timezone : 'Asia/Kolkata';

                    $user->save();

                }  

            };

            // if successful, then redirect to their intended location
            return redirect()->intended(route('user.index'))->with('flash_success',tr('login_success'));
        } 
     
        // if unsuccessful, then redirect back to the login with the form data
     
        return redirect()->back()->withInput($request->only('email', 'remember'))->with('flash_error', tr('email_password_wrong'));
  
        }  catch (Exception $e) {
                
            DB::rollback();

            return redirect()->back()->withInput()->with('flash_error', $e->getMessage());

        }
  
    }



    public function logout() {

        Auth::guard('user')->logout();
        
        return redirect()->route('user.login')->with('flash_success',tr('logout_successs'));
    }

    
    /**
     * @method forgot_password
     *
     * @uses return view to forgot password
     *
     * @created Sakthi
     *
     * @updated 
     *
     * @param object 
     * 
     * @return response return view page
     *
     **/

    public function forgot_password() {

        return view('user.auth.forgot_password');

    }


    public function forgot_password_update(Request $request){

        try {
    
            DB::beginTransaction();
    
            // Check email configuration and email notification enabled by admin
    
            if(Setting::get('is_email_notification') != YES ) {
    
                throw new Exception(tr('email_not_configured'), 101);
                
            }
            
            $validator = Validator::make( $request->all(), [
                'email' => 'required|email|max:255|exists:users',
            ]);
    
            if($validator->fails()) {
    
                $error = implode(',', $validator->messages()->all());
    
                throw new Exception($error, 101);
            }
    
            $user = User::where('email' , $request->email)->first();
    
            if(!$user) {
    
                throw new Exception(api_error(1002), 1002);
            }
    
            
            $token = app('auth.password.broker')->createToken($user);
    
            PasswordReset::where('email', $user->email)->delete();
    
            PasswordReset::insert([
                'email'=>$user->email,
                'token'=>$token,
                'created_at'=>Carbon::now()
            ]);
    
            $email_data['subject'] = tr('forgot_email_title' , Setting::get('site_name'));
    
            $email_data['email']  = $user->email;
    
            $email_data['name']  = $user->name;
    
            $email_data['user']  = $user;
    
            $email_data['page'] = "emails.users.forgot-password";
    
            $email_data['url'] = url('/')."/reset_password?token=".$token;
            
            $this->dispatch(new \App\Jobs\SendEmailJob($email_data));
    
            DB::commit();
    
            return redirect()->back()->with('flash_success',api_success(102)); 
    
    
        } catch(Exception $e) {
    
            DB::rollback();
    
            return redirect()->back()->withInput()->with('flash_error', $e->getMessage());
    
        }
       }



     /**
     * @method reset_password
     *
     * @uses return view to reset password
     *
     * @created Ganesh
     *
     * @updated 
     *
     * @param object 
     * 
     * @return response return view page
     *
     **/

    public function reset_password() {

        return view('user.auth.reset-password');

    }


    /**
     * @method reset_password_update()
     *
     * @uses To reset the password
     *
     * @created Ganesh
     *
     * @updated Ganesh
     *
     * @param object $request - Email id
     *
     * @return send mail to the valid store
     */
    
    public function reset_password_update(Request $request) {

        try {


            $validator = Validator::make( $request->all(), [
                'password' => 'required|confirmed|min:6',
                'password_confirmation'=>'required',
                'reset_token' => 'required|string'
            ]);
    
            if($validator->fails()) {
    
                $error = implode(',', $validator->messages()->all());
    
                throw new Exception($error, 101);
            }

            DB::beginTransaction();

            $password_reset = PasswordReset::where('token', $request->reset_token)->first();

            if(!$password_reset){

                throw new Exception(api_error(107), 107);
            }
            
            $user = User::where('email', $password_reset->email)->first();

            $user->password = \Hash::make($request->password);

            $user->save();

            PasswordReset::where('email', $user->email) ->delete();

            DB::commit();

            \Auth::guard('user')->login($user);

            // if successful, then redirect to their intended location
            return redirect()->route('user.index')->with(['profile'=>$user, 'flash_success'=>api_success(104)]); 

        } catch(Exception $e) {

             DB::rollback();

            return redirect()->back()->withInput()->with('flash_error', $e->getMessage());
        }


   }

}
Back to Directory File Manager