186 lines
6.2 KiB
PHP
186 lines
6.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Fo;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Mail\VerifyEmail;
|
|
use App\Models\Customer;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Foundation\Auth\RegistersUsers;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Illuminate\Support\Str;
|
|
use Illuminate\Support\Facades\Mail;
|
|
|
|
class RegisterController extends Controller
|
|
{
|
|
use RegistersUsers;
|
|
|
|
/** @var \LDCCRM\ApiV1 */
|
|
private $apiCrm;
|
|
|
|
/**
|
|
* Create a new controller instance.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct()
|
|
{
|
|
$this->middleware('guest');
|
|
// $this->apiCrm = new \LDCCRM\ApiV1(config('crm.endpoint'), config('crm.token'));
|
|
}
|
|
|
|
/**
|
|
* Index
|
|
*
|
|
* @return \Illuminate\Contracts\View\View
|
|
*/
|
|
public function index()
|
|
{
|
|
return view('theme::fo.register-crm');
|
|
}
|
|
|
|
/**
|
|
* Register a user from a form
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
|
|
*/
|
|
public function register(Request $request)
|
|
{
|
|
|
|
$request->validate([
|
|
'lastname' => 'required|string|max:255',
|
|
'firstname' => 'required|string|max:255',
|
|
'birth_date' => 'required|string|max:10',
|
|
'email' => 'required|string|email|max:255|unique:users|confirmed',
|
|
'password' => 'required|string|min:8|confirmed',
|
|
'address' => 'required|string|max:255',
|
|
'address2' => 'max:255',
|
|
'town' => 'required|string|max:255',
|
|
'postal_code' => 'required|string|max:255',
|
|
'country' => 'required|string|max:255',
|
|
'reglement' => 'accepted',
|
|
]);
|
|
|
|
$lastname = filter_var($request->lastname, FILTER_SANITIZE_STRING);
|
|
$firstname = filter_var($request->firstname, FILTER_SANITIZE_STRING);
|
|
$birthdate = $request->birth_date;
|
|
$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;
|
|
$tokenMail = Str::uuid();
|
|
|
|
$MJ = Carbon::now()->subYears(18);
|
|
|
|
if ($this->isSqlDate($birthdate)) {
|
|
$d = Carbon::createFromFormat('Y-m-d', $birthdate);
|
|
if (!$d->lessThanOrEqualTo($MJ)) {
|
|
return back()
|
|
->withInput($request->except('password'))
|
|
->withErrors("Vous devez être majeur pour vous inscrire au jeu.");
|
|
}
|
|
} elseif ($this->isFormDate($birthdate)) {
|
|
$d = Carbon::createFromFormat('d/m/Y', $birthdate);
|
|
if (!$d->lessThanOrEqualTo($MJ)) {
|
|
return back()
|
|
->withInput($request->except('password'))
|
|
->withErrors("Vous devez être majeur pour vous inscrire au jeu.");
|
|
}
|
|
|
|
$birthdate = $d->toDateString();
|
|
} else {
|
|
return back()
|
|
->withInput($request->except('password'))
|
|
->withErrors("Erreur sur le champs : date de naissance.");
|
|
} //end if
|
|
|
|
$crmUser = $this->apiCrm->createCustomer(
|
|
$email,
|
|
$password,
|
|
$firstname,
|
|
$lastname,
|
|
$optin,
|
|
$birthdate,
|
|
null,
|
|
$address,
|
|
$address2,
|
|
$town,
|
|
$postcode,
|
|
ucfirst($country)
|
|
);
|
|
|
|
if ($crmUser->status === 'OK') {
|
|
$user = Customer::create([
|
|
'crm_id' => $crmUser->user->crm_id,
|
|
'firstname' => $firstname,
|
|
'lastname' => $lastname,
|
|
'birth_date' => $birthdate,
|
|
'email' => $email,
|
|
'password' => Hash::make("MOTDEPASSE"),
|
|
'address' => $address,
|
|
'address2' => $address2,
|
|
'town' => $town,
|
|
'postal_code' => $postcode,
|
|
'country' => ucfirst($country),
|
|
'email_verify_token' => $tokenMail,
|
|
]);
|
|
|
|
Mail::to($email)->send(new VerifyEmail($user));
|
|
|
|
return redirect()->route('fo.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."
|
|
);
|
|
} else {
|
|
if ($crmUser->code === 103) {
|
|
return back()
|
|
->withInput($request->except('password'))
|
|
->withErrors("Un compte utilisateur est déjà associé à votre email.");
|
|
} else {
|
|
return back()
|
|
->withInput($request->except('password'))
|
|
->withErrors("Une erreur est survenue, merci de recommencer.");
|
|
}
|
|
} //end if
|
|
}
|
|
|
|
/**
|
|
* Check if $date is a sql date
|
|
*
|
|
* @param string $date
|
|
* @return boolean
|
|
*/
|
|
private function isSqlDate(string $date)
|
|
{
|
|
if (preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $date)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Check if $date is a form date
|
|
*
|
|
* @param string $date
|
|
* @return boolean
|
|
*/
|
|
private function isFormDate(string $date)
|
|
{
|
|
if (preg_match("/^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{4}$/", $date)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|