HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
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');
    }
}