mirror of
https://github.com/Bigherollc/wticreatorstudio.git
synced 2026-07-31 14:16:57 -04:00
266 lines
8.6 KiB
PHP
266 lines
8.6 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\Http\Requests\UpdateProfileRequest;
|
|
use Modules\Customer\Http\Requests\UpdateCompanyInfoRequest;
|
|
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 Modules\Customer\Entities\UserCompany;
|
|
use Modules\Customer\Entities\UserAdditionalContact;
|
|
use App\Traits\SendMail;
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
|
|
|
class CustomerAccountController extends Controller
|
|
{
|
|
use ImageStore, SendMail;
|
|
protected $customerService;
|
|
|
|
public function __construct(CustomerService $customerService){
|
|
$this->customerService = $customerService;
|
|
}
|
|
|
|
public function account()
|
|
{
|
|
$customer = auth()->user()->load(['company','additionalContacts']);
|
|
$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(UpdateProfileRequest $request)
|
|
{
|
|
|
|
try {
|
|
|
|
$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 updateCompanyInfo(UpdateCompanyInfoRequest $request)
|
|
{
|
|
|
|
try {
|
|
|
|
$customer = auth()->user();
|
|
$company = UserCompany::updateOrCreate(
|
|
[
|
|
'user_id' => $customer->id,
|
|
],
|
|
[
|
|
'company_name' => $request->company_name,
|
|
'brand_name' => $request->brand_name,
|
|
'storefront' => $request->storefront,
|
|
'company_address' => $request->company_address,
|
|
'accounts_payable_name' => $request->accounts_payable_name,
|
|
'accounts_payable_email' => $request->accounts_payable_email,
|
|
'marketing_contact_name' => $request->marketing_contact_name,
|
|
]
|
|
);
|
|
|
|
$updates = [];
|
|
if (Cache::has(auth()->user()->id.'_company_info_updates')) {
|
|
$updates = json_decode(Cache::pull(auth()->user()->id.'_company_info_updates'));
|
|
}
|
|
|
|
|
|
foreach ($request->additional_contacts as $key => $additional_contact) {
|
|
|
|
$contact = UserAdditionalContact::updateOrCreate(
|
|
[
|
|
'id' => $additional_contact['id'] ?? null
|
|
],
|
|
[
|
|
'user_id' => $customer->id,
|
|
'name' => $additional_contact['name'],
|
|
'email' => $additional_contact['email'],
|
|
'position' => $additional_contact['position'],
|
|
]
|
|
);
|
|
|
|
if(!$contact->wasRecentlyCreated && $contact->wasChanged()){
|
|
|
|
$changes = \Arr::except($contact->getChanges(), ['updated_at']);
|
|
foreach($changes as $attr => $value){
|
|
$updates[] = "Updated Additional Contact ".str_replace(' ', '_', $attr)." to <b>". $value."</b>";
|
|
}
|
|
}
|
|
if($contact->wasRecentlyCreated){
|
|
$updates[] = "Added Additional Contact with Name: <b>". $contact->name."</b>, Email: <b>". $contact->email."</b> and Position: <b>".$contact->position."</b>";
|
|
}
|
|
}
|
|
|
|
$contactsId = collect($request->additional_contacts)->pluck('id')->toArray();
|
|
$customer->additionalContacts()
|
|
->whereNotIn('id', $contactsId)
|
|
->delete();
|
|
|
|
|
|
if(count($updates) > 0){
|
|
$changes = '';
|
|
$changes .= '<ul style="color:#55575d;font-family:Arial;font-size:13px;">';
|
|
foreach ($updates as $key => $value) {
|
|
$changes .= '<li>'.$value.'</li>';
|
|
}
|
|
$changes .= '</ul>';
|
|
|
|
$this->sendCompanyUpdates($customer->name,$customer->email,$changes);
|
|
}
|
|
|
|
return response()->json([
|
|
'additional_contacts' => $customer->additionalContacts()->get(),
|
|
'message' => 'Company Information 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);
|
|
}
|
|
}
|
|
} |