Files
wticreatorstudio/Modules/Customer/Http/Controllers/CustomerAccountController.php
T
2024-02-12 22:54:20 -05:00

187 lines
5.5 KiB
PHP

<?php
namespace Modules\Customer\Http\Controllers;
use App\Models\Order;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Customer\Http\Requests\ProfileRequest;
use Modules\Customer\Http\Requests\CreateAddressRequest;
use Modules\Customer\Entities\CustomerAddress;
use Modules\Customer\Rules\MatchOldPassword;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use App\Traits\ImageStore;
use Illuminate\Support\Facades\File;
use Modules\Customer\Services\CustomerService;
use App\Repositories\UserRepository;
use Brian2694\Toastr\Facades\Toastr;
use Modules\Setup\Entities\Country;
use Exception;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule;
use Modules\UserActivityLog\Traits\LogActivity;
use Yajra\DataTables\Facades\DataTables;
use Modules\Subscription\Entities\UserCredit;
use Modules\Customer\Services\AugmentationService;
use Illuminate\Support\Facades\URL;
use Modules\WTIALaCarte\Entities\AlacarteOrder;
use App\Traits\SendMail;
class CustomerAccountController extends Controller
{
use ImageStore, SendMail;
protected $customerService;
public function __construct(CustomerService $customerService){
$this->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);
}
}
}