ldc-gen-game-web/app/Http/Controllers/Fo/RegisterController.php

104 lines
4 KiB
PHP

<?php
namespace App\Http\Controllers\Fo;
use App\Http\Controllers\Controller;
use App\Http\Requests\Fo\RegisterRequest;
use App\Mail\VerifyEmail;
use App\Models\Customer;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Str;
use LDC\LDCCRM\Enums\ApiError;
use LDC\LDCCRM\Exceptions\ApiErrorException;
use LDC\LDCCRM\Exceptions\CrmException;
use LDC\LDCCRM\Exceptions\ValidationException;
use LDC\LDCCRM\Models\Customer as CrmCustomer;
class RegisterController extends Controller
{
/**
* Register form
*
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
*/
public function register()
{
return view('front.basic.register-crm');
}
/**
* Register form submit
*
* @param RegisterRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function registerSubmit(RegisterRequest $request)
{
if (!Carbon::parse($request->birth_date)->lessThanOrEqualTo(Carbon::now()->subYears(18))) {
return back()
->withInput($request->except('password'))
->withErrors("Vous devez être majeur pour vous inscrire au jeu.");
}
$crmCustomer = null;
try {
$crmCustomer = new CrmCustomer(\array_intersect_key(
$request->validated(),
[
'firstname' => '',
'lastname' => '',
'birth_date' => '',
'address' => '',
'postcode' => '',
'country' => '',
'city' => '',
'phone' => '',
'email' => '',
'password' => '',
'opt_in' => '',
]
));
$crmCustomer->password = $request->password;
$crmCustomer->save();
$tokenMail = Str::uuid();
Mail::to($request->email)->send(new VerifyEmail($crmCustomer, $tokenMail));
$customer = new Customer();
$customer->email = $crmCustomer->email;
$customer->hashcode = $crmCustomer->hashcode;
$customer->email_verify_token = $tokenMail;
$customer->saveOrFail();
return redirect()->route('login')
->with('success', sprintf(
'%s %s %s %s %s',
'Pour finaliser votre inscription, merci de cliquer sur le lien qui vient de vous être envoyé par',
'email<br> Informations complémentaires :<br>',
'- Vérifiez vos spams : l\'email de confirmation s\'y trouve peut-être<br>',
'- Attention : le mail peut parfois mettre quelques minutes à vous parvenir<br>',
//phpcs:ignore Generic.Files.LineLength.TooLong
'- L\'activation de votre compte doit se faire dans les 24 heures qui suivent la demande de création.'
));
} catch (ApiErrorException $e) {
if ($e->getApiError()->equals(ApiError::customerExists())) {
return back()->withErrors('Un compte est déjà associé à cette adresse email.');
}
if ($e->getApiError()->equals(ApiError::validationFailed())) {
return back()->withErrors($e->getMessage());
}
report($e);
return back()->withErrors('Une erreur est survenue, merci de réessayer ultérieurement.');
} catch (ValidationException $e) {
return back()->withErrors($e->getMessage());
} catch (\Exception | \TypeError | CrmException $e) {
\report($e);
// ! Une erreur critique est survenue avec la CRM.
return back()->withErrors('Une erreur est survenue, merci de réessayer ultérieurement.');
} //end try
return back()->withErrors('Une erreur est survenue, merci de réessayer ultérieurement.');
}
}