File: D:/HostingSpaces/SBogers10/shop.komma.nl/app/Auth/RegisterController.php
<?php
namespace App\Auth;
use App\Users\Requests\UpdateSiteUserRequest;
use App\Users\SiteUserInterface;
use App\Users\SiteUserRole;
use Illuminate\Auth\Events\Registered;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Validation\Rules\Unique;
use Illuminate\View\View;
use Komma\KMS\Auth\AuthValidationHelper;
use Komma\KMS\Globalization\RegionInfo;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
protected string $redirectTo = '/registered';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Show the application registration form.
*
* @return View
*/
public function showRegistrationForm()
{
$culturesForSelect = RegionInfo::getNeutralCultures()->map(function(RegionInfo $regionInfo) use(&$culturesForSelect) {
if(isset($culturesForSelect[$regionInfo->getThreeLetterISORegionName()])) unset($culturesForSelect[$regionInfo->getThreeLetterISORegionName()]); //Remove the item from the regular cultures list
return [$regionInfo->getThreeLetterISORegionName() => $regionInfo->getNativeName() !== '' ? $regionInfo->getNativeName() : $regionInfo->getDisplayName()];
})->collapse()->sort()->toArray();
return view('templates.auth.register', ['links' => new \StdClass, 'cultures' => $culturesForSelect]);
}
/**
* Show the application registration form.
*
* @return View
*/
public function showRegistered()
{
return view('templates.auth.registered', ['links' => new \StdClass]);
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'first_name' => 'required|max:255',
'last_name' => 'required|max:255',
'email' => ['required', 'email', 'max:255', new UniqueAccountUserRule()],
'phone' => 'required|max:255',
'street' => 'required|max:255',
'house_number' => 'required|max:255',
'postal_code' => 'required|max:255',
'city' => 'required|max:255',
'country' => ['required'],
'password' => AuthValidationHelper::setRules()['password'],
'accept_legal' => 'accepted'
]);
}
/**
* Handle a registration request for the application.
*
* @param Request $request
*
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\Routing\Redirector
*/
public function register(UpdateSiteUserRequest $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
// $this->guard()->login($user);
return $this->registered($request, $user)
?: redirect($this->redirectPath());
}
/**
* Create a new site user instance after a valid registration.
*
* @param array $data
* @return SiteUserInterface
*/
protected function create(array $data)
{
//Use the users language and country to build a culture string.
/** @var RegionInfo|null $usersRegionInfo */
$usersRegionInfo = null;
RegionInfo::getWhere('threeLetterISORegionName', '=', $data['country'])->each(function(RegionInfo $regionInfo) use($data, &$usersRegionInfo) {
$regionCode = $regionInfo->getName();
$languageCode = null;
$languageCode = $regionInfo->getLanguages()->first()->getName();
if($regionCode && $languageCode) {
$regionInfoString = implode('-', [$languageCode, $regionCode]);
$usersRegionInfo = RegionInfo::getInstance($regionInfoString);
return false; //break;
}
});
//This trick also gets guest users and transforms them into registered ones.
/** @var SiteUserInterface $user */
$user = app(SiteUserInterface::class)::firstOrCreate([
'email' => $data['email'],
]);
$usersRegionInfo = RegionInfo::getWhere('threeLetterISORegionName', '=', $data['country'])->filter(function(RegionInfo $regionInfo) {
return !$regionInfo->isNeutral();
})->first();
$user->culture = $usersRegionInfo->getName();
$user->role = SiteUserRole::Customer;
$user->first_name = $data['first_name'];
$user->last_name_prefix = $data['last_name_prefix'];
$user->last_name = $data['last_name'];
$user->email = $data['email'];
$user->telephone = $data['phone'];
$user->password = \Hash::make($data['password']);
$user->is_guest = false;
$user->save();
return $user;
}
/**
* Get the guard to be used during registration.
*
* @return \Illuminate\Contracts\Auth\StatefulGuard
*/
protected function guard()
{
return Auth::guard('site');
}
}