ldc-jeusselin/app/Http/Controllers/Auth/RegisterController.php

228 lines
8.9 KiB
PHP

<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Mail\VerifyEmail;
use Illuminate\Support\Facades\Mail;
use App\Providers\RouteServiceProvider;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
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;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
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'));
}
/**
* 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, [
'lastname' => 'required|string|max:255',
'firstname' => 'required|string|max:255',
'phone' => 'required|max:50',
'adress' => 'required|string|max:255',
'postal_code' => 'required|string|max:50',
'town' => 'required|string|max:255',
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
'ok_cgv' => 'accepted',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
*/
public function create(Request $request)
{
$data = $request->all();
$this->validator($data)->validate();
$lastname = filter_var($request->lastname, FILTER_SANITIZE_STRING);
$firstname = filter_var($request->firstname, FILTER_SANITIZE_STRING);
$birthdate = $request->birth_date;
$phone = filter_var($request->phone, FILTER_SANITIZE_STRING);
$email = filter_var($request->email, FILTER_SANITIZE_EMAIL);
$address = filter_var($request->adress, FILTER_SANITIZE_STRING);
//$address2 = $request->address2 !== null ? filter_var($request->address2, FILTER_SANITIZE_STRING) : null;
$postal_code = filter_var($request->postal_code, FILTER_SANITIZE_STRING);
$town = filter_var($request->town, FILTER_SANITIZE_STRING);
//$country = filter_var($request->country, FILTER_SANITIZE_STRING);
$password = $request->password;
$optin = $request->news !== null ? 1 : 0;
$user_cat = $request->user_cat;
$social_denomination = filter_var($request->social_denomination, FILTER_SANITIZE_STRING);
$tech_commercial = filter_var($request->tech_commercial, FILTER_SANITIZE_STRING);
$siret =$request->siret;
$numtva = $request->numtva;
$certiphyto = $request->certiphyto;
$certiphyto_date = $request->certiphyto_date;
$eleveur_volailles = isset($request->eleveur_volailles) ? true : false;
$eleveur_porcs = isset($request->eleveur_porcs) ? true : false;
$eleveur_bovins = isset($request->eleveur_bovins) ? true : false;
$capacite_stockage = filter_var($request->capacite_stockage, FILTER_SANITIZE_STRING);
$temps_chargement = filter_var($request->temps_chargement, FILTER_SANITIZE_STRING);
$stockage_aplat = isset($request->stockage_aplat) ? true : false;
$stockage_cellule = isset($request->stockage_cellule) ? true : false;
$adress_chargement = filter_var($request->adress_chargement, FILTER_SANITIZE_STRING);
$optional_contact = filter_var($request->optional_contact, FILTER_SANITIZE_STRING);
$ok_cgv = \Carbon\Carbon::now();
$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.");
} 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.");
}
$birthdate = $d->toDateString();
} else {
return back()
->withInput($request->except('password'))
->withErrors("Erreur sur le champs : date de naissance.");
}
if ($user_cat == "professionnel") {
$role = 3;
} else {
$role = 4;
}
//on inscrit que des pros dans cette phase
$role = 3;
$userData = [
'lastname' => $lastname,
'firstname' => $firstname,
'phone' => $phone,
'birth_date' => $birthdate,
'email' => $email,
'adress' => $address,
'postal_code' => $postal_code,
'town' => $town,
'password' => Hash::make($password),
'role' => $role,
'email_verify_token' => $tokenMail,
'ok_cgv' => $ok_cgv,
];
if ($role == 3) {
$proData = [
'social_denomination' => $social_denomination,
'tech_commercial' => $tech_commercial,
'siret' => $siret,
'numtva' => $numtva,
'certiphyto' => $certiphyto,
'certiphyto_date' => $certiphyto_date,
'eleveur_volailles' => $eleveur_volailles,
'eleveur_porcs' => $eleveur_porcs,
'eleveur_bovins' => $eleveur_bovins,
'capacite_stockage' => $capacite_stockage,
'temps_chargement' => $temps_chargement,
'stockage_aplat' => $stockage_aplat,
'stockage_cellule' => $stockage_cellule,
'adress_chargement' => $adress_chargement,
'optional_contact' => $optional_contact,
];
$userData = array_merge($userData, $proData);
}
//création dans la CRM
$crmUser = $this->apiCrm->createCustomer($email, $password, $firstname, $lastname, $optin, $birthdate, $phone, $address, null, $town, $postal_code, null);
//création OK
if ($crmUser->status === 'OK') {
//enregistrement local du user
$userData['crm_id'] = $crmUser->user->crm_id;
$userData['crm_hashcode'] = $crmUser->user->hashcode;
$user = User::create($userData);
//envoi du mail de vérification
Mail::to($email)->send(new VerifyEmail($user));
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.");
} 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." . $crmUser->code. " " . $crmUser->message . " " . print_r($crmUser->errors));
}
}
}
private function isSQLDate($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;
}
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))
return true;
return false;
}
}