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

172 lines
5.5 KiB
PHP
Raw Normal View History

2020-10-29 15:40:23 +01:00
<?php
2022-03-15 16:27:41 +01:00
namespace App\Http\Controllers\Fo;
2020-10-29 15:40:23 +01:00
2022-03-15 16:27:41 +01:00
use App\Http\Controllers\Controller;
use App\Http\Requests\Fo\RegisterRequest;
use App\Mail\VerifyEmail;
2022-03-15 16:27:41 +01:00
use App\Models\Customer;
2020-10-29 15:40:23 +01:00
use App\Providers\RouteServiceProvider;
use Carbon\Carbon;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Mail;
class RegisterController extends Controller
{
use RegistersUsers;
2020-11-20 17:47:05 +01:00
// TODO : Utilité ??
2020-10-29 15:40:23 +01:00
protected $redirectTo = RouteServiceProvider::HOME;
2022-03-15 16:27:41 +01:00
/**
* @var \LDCCRM\ApiV1
*/
2021-02-23 18:27:03 +01:00
private $apiCrm;
2022-03-15 16:27:41 +01:00
/**
* RegisterController
*/
2020-10-29 15:40:23 +01:00
public function __construct()
{
2021-02-23 18:27:03 +01:00
$this->apiCrm = new \LDCCRM\ApiV1(config('crm.endpoint'), config('crm.token'));
2020-10-29 15:40:23 +01:00
}
2022-03-15 16:27:41 +01:00
/**
* Register form
*
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
*/
public function register()
2021-08-18 17:08:02 +02:00
{
2020-10-29 15:40:23 +01:00
return view('front.basic.register-crm');
}
2022-03-15 16:27:41 +01:00
/**
* Register form submit
*
* @param RegisterRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function registerSubmit(RegisterRequest $request)
2021-08-18 17:08:02 +02:00
{
$lastname = filter_var($request->lastname, FILTER_SANITIZE_STRING);
2020-10-29 15:40:23 +01:00
$firstname = filter_var($request->firstname, FILTER_SANITIZE_STRING);
2021-02-23 18:27:03 +01:00
$birthdate = $request->birth_date;
2021-08-18 17:08:02 +02:00
$email = filter_var($request->email, FILTER_SANITIZE_EMAIL);
$password = $request->password;
$address = filter_var($request->address, FILTER_SANITIZE_STRING);
$address2 = $request->address2 !== null ? filter_var($request->address2, FILTER_SANITIZE_STRING) : null;
$town = filter_var($request->town, FILTER_SANITIZE_STRING);
$postcode = filter_var($request->postal_code, FILTER_SANITIZE_STRING);
$country = filter_var($request->country, FILTER_SANITIZE_STRING);
$optin = $request->news !== null ? 1 : 0;
2020-10-29 15:40:23 +01:00
$tokenMail = Str::uuid();
2020-11-20 17:47:05 +01:00
$MJ = Carbon::now()->subYears(18);
2022-03-15 16:27:41 +01:00
if ($this->isSqlDate($birthdate)) {
2021-02-23 18:27:03 +01:00
$d = Carbon::createFromFormat('Y-m-d', $birthdate);
2021-08-18 17:08:02 +02:00
if (!$d->lessThanOrEqualTo($MJ)) {
2020-11-20 17:47:05 +01:00
return back()
->withInput($request->except('password'))
->withErrors("Vous devez être majeur pour vous inscrire au jeu.");
2021-08-18 17:08:02 +02:00
}
} elseif ($this->isFormDate($birthdate)) {
2021-02-23 18:27:03 +01:00
$d = Carbon::createFromFormat('d/m/Y', $birthdate);
2021-08-18 17:08:02 +02:00
if (!$d->lessThanOrEqualTo($MJ)) {
2020-11-20 17:47:05 +01:00
return back()
2022-03-15 16:27:41 +01:00
->withInput($request->except('password'))
->withErrors("Vous devez être majeur pour vous inscrire au jeu.");
2021-08-18 17:08:02 +02:00
}
2020-11-20 17:47:05 +01:00
2021-02-23 18:27:03 +01:00
$birthdate = $d->toDateString();
2021-08-18 17:08:02 +02:00
} else {
2020-11-20 17:47:05 +01:00
return back()
->withInput($request->except('password'))
->withErrors("Erreur sur le champs : date de naissance.");
2022-03-15 16:27:41 +01:00
} //end if
$crmUser = $this->apiCrm->createCustomer(
$email,
$password,
$firstname,
$lastname,
$optin,
$birthdate,
null,
$address,
$address2,
$town,
$postcode,
ucfirst($country)
);
2021-02-23 18:27:03 +01:00
2021-08-18 17:08:02 +02:00
if ($crmUser->status === 'OK') {
2022-03-15 16:27:41 +01:00
$customer = Customer::create([
2021-02-23 18:27:03 +01:00
'crm_id' => $crmUser->user->crm_id,
'firstname' => $firstname,
'lastname' => $lastname,
'birth_date' => $birthdate,
'email' => $email,
2022-03-11 09:50:03 +01:00
'password' => Hash::make("MOTDEPASSE"),
2022-03-15 16:27:41 +01:00
// TODO : ???
2021-02-23 18:27:03 +01:00
'address' => $address,
'address2' => $address2,
'town' => $town,
'postal_code' => $postcode,
'country' => ucfirst($country),
'email_verify_token' => $tokenMail,
]);
2022-03-15 16:27:41 +01:00
Mail::to($email)->send(new VerifyEmail($customer));
2021-02-23 18:27:03 +01:00
return redirect()->route('login')
->with('success', "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>" .
"- L'activation de votre compte doit se faire dans les 24 heures qui suivent la demande de création.");
2022-03-15 16:27:41 +01:00
} //end if
if ($crmUser->code === 103) {
return back()
->withInput($request->except('password'))
->withErrors("Un compte utilisateur est déjà associé à votre email.");
}
return back()
->withInput($request->except('password'))
->withErrors("Une erreur est survenue, merci de recommencer.");
2020-11-20 17:47:05 +01:00
}
2022-03-15 16:27:41 +01:00
/**
* Regex is SQL date
*
* @param mixed $date
* @return boolean
*/
private function isSqlDate($date)
2021-08-18 17:08:02 +02:00
{
if (preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $date)) {
2020-11-20 17:47:05 +01:00
return true;
2021-08-18 17:08:02 +02:00
}
2020-11-20 17:47:05 +01:00
return false;
}
2022-03-15 16:27:41 +01:00
/**
* Regex is form date
*
* @param mixed $date
* @return boolean
*/
2021-08-18 17:08:02 +02:00
private function isFormDate($date)
{
if (preg_match("/^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{4}$/", $date)) {
2020-11-20 17:47:05 +01:00
return true;
2021-08-18 17:08:02 +02:00
}
2020-11-20 17:47:05 +01:00
return false;
2020-10-29 15:40:23 +01:00
}
}