customerService = $customerService; } public function account() { $customer = auth()->user(); $orders = AlacarteOrder::with(['user','items.product'])->where('user_id',$customer->id)->latest()->get(); return view('customer::account')->with('customer',$customer)->with('orders',$orders); } public function updateProfile(Request $request) { try { $request->validate([ 'avatar' => 'sometimes|nullable|image', 'first_name' => 'required|max:255', 'last_name' => 'nullable|max:255', 'phone' => 'required|max:255', 'date_of_birth' => 'nullable|date', 'description' => 'sometimes|nullable' ]); $customer = auth()->user(); $customer->first_name = $request->first_name; $customer->last_name = $request->last_name; $customer->phone = $request->phone; $customer->date_of_birth = $request->date_of_birth; $customer->description = $request->description; $file = $request->file('avatar'); if ($request->hasFile('avatar')) { $this->deleteImage($customer->avatar); $customer->avatar= $this->saveAvatar($file,200,200); } $customer->save(); return response()->json([ 'message' => 'Profile Updated Successfully.' ]); } catch(Exception $e){ return response()->json([ 'message' => $e->getMessage() ], 500); } } public function updatePassword(Request $request) { try { $request->validate([ 'current_password' => 'required|string', 'password' => 'required|min:8|confirmed', 'password_confirmation' => 'required' ], [ 'password.min' => 'Minimun password length is 8!' ]); $customer = auth()->user(); if (!Hash::check($request->current_password, $customer->password)) { return response()->json([ 'message' => 'Current password does not match.' ], 500); } $customer->password = Hash::make($request->password); $customer->save(); return response()->json([ 'message' => 'Password Change Successfully.' ]); } catch(Exception $e){ return response()->json([ 'message' => $e->getMessage() ], 500); } } public function updateEmail(Request $request) { try { $customer = auth()->user(); $request->validate([ 'email' => 'required|string|email|max:255|unique:users,email,'.$customer->id ]); $action_link = URL::temporarySignedRoute('customer.account.update-email-verify', 60 * 60, [ 'user' => encrypt($customer->id), 'email' => $request->email ]); $this->sendChangeEmailVerification($request->email, $action_link); return response()->json([ 'message' => 'Please check your email for a verification link to activate your new email adddress.' ]); } catch(Exception $e){ return response()->json([ 'message' => $e->getMessage() ], 500); } } public function verifyUpdateEmail(Request $request) { try { if (!$request->hasValidSignature()) { abort(403); } $customer = auth()->user(); if($customer->id == decrypt($request->user)){ $this->sendChangeEmailNotification($customer->email, $request->email); $customer->email = $request->email; $customer->save(); Toastr::success('New Email Successfully Verified', __('common.success')); return redirect()->to('/account'); } else { abort(403); } } catch(Exception $e){ return response()->json([ 'message' => $e->getMessage() ], 500); } } }