sarga/packages/Webkul/Customer/src/Http/Controllers/RegistrationController.php

230 lines
7.4 KiB
PHP
Raw Normal View History

<?php
namespace Webkul\Customer\Http\Controllers;
use Illuminate\Support\Str;
2018-12-21 12:48:34 +00:00
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Mail;
2019-09-12 08:36:38 +00:00
use Webkul\Customer\Mail\RegistrationEmail;
use Webkul\Customer\Mail\VerificationEmail;
2021-01-04 16:10:56 +00:00
use Webkul\Shop\Mail\SubscriptionEmail;
2018-08-22 09:46:27 +00:00
use Webkul\Customer\Repositories\CustomerRepository;
2019-05-21 07:16:43 +00:00
use Webkul\Customer\Repositories\CustomerGroupRepository;
2021-01-04 16:10:56 +00:00
use Webkul\Core\Repositories\SubscribersListRepository;
use Cookie;
class RegistrationController extends Controller
{
/**
2019-07-01 11:33:36 +00:00
* Contains route related configuration
*
2019-07-01 11:33:36 +00:00
* @var array
*/
protected $_config;
/**
2019-07-01 11:33:36 +00:00
* CustomerRepository object
*
2020-03-05 05:34:57 +00:00
* @var \Webkul\Customer\Repositories\CustomerRepository
2020-02-17 15:52:58 +00:00
*/
2019-07-01 11:33:36 +00:00
protected $customerRepository;
/**
* CustomerGroupRepository object
*
2020-03-05 05:34:57 +00:00
* @var \Webkul\Customer\Repositories\CustomerGroupRepository
2020-02-17 15:52:58 +00:00
*/
2019-07-01 11:33:36 +00:00
protected $customerGroupRepository;
2021-01-04 16:10:56 +00:00
/**
* SubscribersListRepository
*
* @var \Webkul\Core\Repositories\SubscribersListRepository
*/
protected $subscriptionRepository;
2019-07-01 11:33:36 +00:00
/**
* Create a new Repository instance.
*
2020-03-05 14:19:14 +00:00
* @param \Webkul\Customer\Repositories\CustomerRepository $customer
2020-03-05 05:34:57 +00:00
* @param \Webkul\Customer\Repositories\CustomerGroupRepository $customerGroupRepository
2021-01-04 16:10:56 +00:00
* @param \Webkul\Core\Repositories\SubscribersListRepository $subscriptionRepository
2021-01-15 12:56:27 +00:00
*
2019-07-01 11:33:36 +00:00
* @return void
2020-02-17 15:52:58 +00:00
*/
2019-07-01 11:33:36 +00:00
public function __construct(
CustomerRepository $customerRepository,
2021-01-04 16:10:56 +00:00
CustomerGroupRepository $customerGroupRepository,
SubscribersListRepository $subscriptionRepository
2019-07-01 11:33:36 +00:00
)
2018-12-21 12:48:34 +00:00
{
$this->_config = request('_config');
2019-07-01 11:33:36 +00:00
$this->customerRepository = $customerRepository;
$this->customerGroupRepository = $customerGroupRepository;
2021-01-04 16:10:56 +00:00
$this->subscriptionRepository = $subscriptionRepository;
}
/**
* Opens up the user's sign up form.
*
2019-08-19 09:30:24 +00:00
* @return \Illuminate\View\View
*/
2018-12-21 12:48:34 +00:00
public function show()
{
return view($this->_config['view']);
}
/**
* Method to store user's sign up form data to DB.
*
2020-03-05 05:34:57 +00:00
* @return \Illuminate\Http\Response
*/
2019-07-01 11:33:36 +00:00
public function create()
2018-12-21 12:48:34 +00:00
{
2019-07-01 11:33:36 +00:00
$this->validate(request(), [
'first_name' => 'string|required',
2020-02-17 15:52:58 +00:00
'last_name' => 'string|required',
'email' => 'email|required|unique:customers,email',
'password' => 'confirmed|min:6|required',
]);
2018-08-22 09:46:27 +00:00
2021-01-04 16:10:56 +00:00
$data = array_merge(request()->input(), [
'password' => bcrypt(request()->input('password')),
'api_token' => Str::random(80),
'is_verified' => core()->getConfigData('customer.settings.email.verification') ? 0 : 1,
'customer_group_id' => $this->customerGroupRepository->findOneWhere(['code' => 'general'])->id,
'token' => md5(uniqid(rand(), true)),
2021-01-18 14:43:46 +00:00
'subscribed_to_news_letter' => isset(request()->input()['is_subscribed']) ? 1 : 0,
2021-01-04 16:10:56 +00:00
]);
2019-12-24 14:01:13 +00:00
Event::dispatch('customer.registration.before');
2018-12-21 12:48:34 +00:00
2019-07-01 11:33:36 +00:00
$customer = $this->customerRepository->create($data);
2018-12-21 12:48:34 +00:00
2019-12-24 14:01:13 +00:00
Event::dispatch('customer.registration.after', $customer);
2018-12-21 12:48:34 +00:00
2021-01-04 16:10:56 +00:00
if (! $customer) {
session()->flash('error', trans('shop::app.customer.signup-form.failed'));
return redirect()->back();
}
if (isset($data['is_subscribed'])) {
$subscription = $this->subscriptionRepository->findOneWhere(['email' => $data['email']]);
if ($subscription) {
$this->subscriptionRepository->update([
'customer_id' => $customer->id,
], $subscription->id);
} else {
2021-01-04 16:10:56 +00:00
$this->subscriptionRepository->create([
'email' => $data['email'],
'customer_id' => $customer->id,
'channel_id' => core()->getCurrentChannel()->id,
'is_subscribed' => 1,
'token' => $token = uniqid(),
]);
2020-01-27 16:06:03 +00:00
try {
2021-01-04 16:10:56 +00:00
Mail::queue(new SubscriptionEmail([
'email' => $data['email'],
'token' => $token,
]));
} catch (\Exception $e) { }
}
}
if (core()->getConfigData('customer.settings.email.verification')) {
try {
if (core()->getConfigData('emails.general.notifications.emails.general.notifications.verification')) {
Mail::queue(new VerificationEmail(['email' => $data['email'], 'token' => $data['token']]));
2019-09-12 08:36:38 +00:00
}
2021-01-04 16:10:56 +00:00
session()->flash('success', trans('shop::app.customer.signup-form.success-verify'));
} catch (\Exception $e) {
report($e);
2021-01-04 16:10:56 +00:00
session()->flash('info', trans('shop::app.customer.signup-form.success-verify-email-unsent'));
}
} else {
2021-01-04 16:10:56 +00:00
try {
if (core()->getConfigData('emails.general.notifications.emails.general.notifications.registration')) {
Mail::queue(new RegistrationEmail(request()->all()));
}
2021-01-04 16:10:56 +00:00
session()->flash('success', trans('shop::app.customer.signup-form.success-verify'));
} catch (\Exception $e) {
report($e);
session()->flash('info', trans('shop::app.customer.signup-form.success-verify-email-unsent'));
}
session()->flash('success', trans('shop::app.customer.signup-form.success'));
}
2021-01-04 16:10:56 +00:00
return redirect()->route($this->_config['redirect']);
}
/**
* Method to verify account
*
2020-03-05 05:34:57 +00:00
* @param string $token
* @return \Illuminate\Http\Response
*/
2018-12-21 12:48:34 +00:00
public function verifyAccount($token)
{
2019-07-01 11:33:36 +00:00
$customer = $this->customerRepository->findOneByField('token', $token);
2019-01-15 11:54:41 +00:00
if ($customer) {
$customer->update(['is_verified' => 1, 'token' => 'NULL']);
session()->flash('success', trans('shop::app.customer.signup-form.verified'));
} else {
session()->flash('warning', trans('shop::app.customer.signup-form.verify-failed'));
}
return redirect()->route('customer.session.index');
}
2020-03-05 05:34:57 +00:00
/**
* @param string $email
* @return \Illuminate\Http\Response
*/
2018-12-21 12:48:34 +00:00
public function resendVerificationEmail($email)
{
2021-01-04 16:10:56 +00:00
$verificationData = [
'email' => $email,
'token' => md5(uniqid(rand(), true)),
];
2019-07-01 11:33:36 +00:00
$customer = $this->customerRepository->findOneByField('email', $email);
2019-07-01 11:33:36 +00:00
$this->customerRepository->update(['token' => $verificationData['token']], $customer->id);
try {
2019-05-01 11:31:03 +00:00
Mail::queue(new VerificationEmail($verificationData));
2019-01-15 11:54:41 +00:00
if (Cookie::has('enable-resend')) {
\Cookie::queue(\Cookie::forget('enable-resend'));
}
2019-01-15 11:54:41 +00:00
if (Cookie::has('email-for-resend')) {
\Cookie::queue(\Cookie::forget('email-for-resend'));
}
2019-05-01 11:31:03 +00:00
} catch (\Exception $e) {
2020-01-27 16:06:03 +00:00
report($e);
2021-01-04 16:10:56 +00:00
session()->flash('error', trans('shop::app.customer.signup-form.verification-not-sent'));
return redirect()->back();
}
2021-01-15 12:56:27 +00:00
session()->flash('success', trans('shop::app.customer.signup-form.verification-sent'));
return redirect()->back();
}
2019-05-01 11:31:03 +00:00
}