check()) { return redirect()->route('home'); } return view('front.auth.register'); } // TODO : Opt In et Suppression à faire et tester /** * Enregistre le customer dans la base de données */ public function register(Request $request) { $request->validate([ 'email' => 'required|email|max:255', 'username' => 'required|string|max:255|unique:customers,username', 'firstname' => 'required|string|max:255', 'lastname' => 'required|string|max:255', 'day' => 'required|alpha_num|gt:0|lt:32', 'month' => 'required|alpha_num|gt:0|lt:13', 'year' => 'required|alpha_num|gt:' . (date('Y') - 101) . '|lt:' . (date('Y') + 1), 'address' => 'max:255', 'phone' => 'max:255', 'city' => 'required|string|max:255', 'postcode' => 'required', 'password' => 'required|confirmed|min:8|max:255', ]); $email = filter_var($request->email, FILTER_SANITIZE_EMAIL); $username = filter_var($request->username, FILTER_SANITIZE_STRING); $firstname = filter_var($request->firstname, FILTER_SANITIZE_STRING); $lastname = filter_var($request->lastname, FILTER_SANITIZE_STRING); $day = filter_var($request->day, FILTER_SANITIZE_NUMBER_INT); $month = filter_var($request->month, FILTER_SANITIZE_NUMBER_INT); $year = filter_var($request->year, FILTER_SANITIZE_NUMBER_INT); $birthDate = Carbon::createFromDate($year, $month, $day); if ($birthDate->timestamp > Carbon::now()->subYears(18)->timestamp) { return back()->withInput()->withErrors(__("Vous devez avoir plus de 18 ans pour pouvoir vous inscrire.")); } if ($birthDate->format('dmY') !== $day . $month . $year) { return back()->withInput()->withErrors(__("Veuillez entrer une date de naissance valide")); } if ($request->address !== null) { $address = filter_var($request->address, FILTER_SANITIZE_STRING); } if ($request->phone !== null) { $phone = filter_var($request->phone, FILTER_SANITIZE_STRING); } $city = filter_var($request->city, FILTER_SANITIZE_STRING); $postcode = filter_var($request->postcode, FILTER_SANITIZE_STRING); $password = $request->password; $optin = $request->optin !== null ? 1 : 0; /** @var \LDCCRM\ApiV1 */ $crm = app('crmApi'); $crmCustomer = $crm->createCustomer($email, $password, $firstname, $lastname, $optin, $birthDate->format('Y-m-d'), isset($phone) ? $phone : null, isset($address) ? $address : null, null, $city, $postcode, null); if ($crmCustomer->status === "OK") { $customer = new Customers(); $customer->crm_id = $crmCustomer->user->crm_id; $customer->hashcode = $crmCustomer->user->hashcode; $customer->email = $email; $customer->username = $username; $customer->save(); Mail::to($email)->send(new RegisterConfirmMail($customer, $firstname)); return view('front.auth.confirm-register'); } else { switch ($crmCustomer->code) { case 102: return back()->withInput()->withErrors("Les champs obligatoires n'ont pas été correctement remplis."); case 103: return back()->withInput()->withErrors("Un compte est déjà associé à cette adresse email."); default: return back()->withInput()->withErrors("Une erreur est survenue lors de l'inscription, merci de réessayer plus tard."); } } } /** * Retourne la page de connexion */ public function authenticateForm() { if (Auth::guard('customer')->check()) { return redirect()->route('home'); } return view('front.auth.login'); } /** * Gère l'authentification des customers */ public function authenticate(Request $request) { $request->validate([ 'email' => 'required|email', 'password' => 'required', ]); $email = filter_var($request->email, FILTER_SANITIZE_EMAIL); $password = $request->password; $remember = $request->remember !== null ? true : false; /** @var Customers */ $customer = Customers::where('email', $email)->first(); if ($customer) { /** @var \LDCCRM\ApiV1 */ $crm = app('crmApi'); $result = $crm->loginCustomer($email, $password); if ($result->status === "OK") { /** @var \Illuminate\Auth\SessionGuard */ $guard = Auth::guard('customer'); $guard->login($customer, $remember); return redirect()->route('club.index'); } else { switch ($result->code) { case 115: return back()->withErrors("Veuillez vérifier que vous avez correctement rempli les champs obligatoires."); case 116: Mail::to($email)->send(new RegisterConfirmMail($customer, null)); return back()->withErrors("Votre compte n'est pas activé, vérifier dans vos emails pour y trouver le mail de confirmation. Un lien d'activation vous a été renvoyer."); case 117 || 118 || 119: return back()->withErrors("Email ou mot de passe incorrect."); default: return back()->withErrors("Une erreur est survenue, merci de réessayer ultérieurement."); } } } else { return back()->withErrors("Email ou mot de passe incorrect."); } } /** * Active le compte d'un customer */ public function activate($hashcode) { $hashcode = filter_var($hashcode, FILTER_SANITIZE_STRING); $customer = Customers::select('crm_id')->where('hashcode', $hashcode)->first(); if ($customer) { /** @var \LDCCRM\ApiV1 */ $crm = app('crmApi'); $result = $crm->activateCustomer($customer->crm_id); if ($result->status === "OK") { return view('front.auth.activate')->with('message', 'Votre compte a bien été activé, vous pouvez désormais vous connecter.'); } else { return view('front.auth.activate')->with('message', "Ce lien d'activation n'est pas valide."); } } else { return view('front.auth.activate')->with('message', "Ce lien d'activation n'est pas valide."); } } public function logout() { if (Auth::guard('customer')->check()) { Auth::guard('customer')->logout(); return redirect()->route('home'); } } public function update(Request $request) { // TODO : A tester avec pages Mes Informations $request->validate([ 'username' => 'required|string|max:255|unique:customers,username', 'firstname' => 'required|string|max:255', 'lastname' => 'required|string|max:255', 'birth_date' => 'required', 'address' => 'string|max:255', 'phone' => 'max:255', 'country' => 'required|string|max:255', 'city' => 'required|string|max:255', 'postcode' => 'required', ]); $username = filter_var($request->username, FILTER_SANITIZE_STRING); $firstname = filter_var($request->firstname, FILTER_SANITIZE_STRING); $lastname = filter_var($request->lastname, FILTER_SANITIZE_STRING); $birthDate = $request->birth_date; if ($request->address !== null) $address = filter_var($request->address, FILTER_SANITIZE_STRING); if ($request->phone !== null) $phone = filter_var($request->phone, FILTER_SANITIZE_STRING); $country = filter_var($request->country,FILTER_SANITIZE_STRING); $city = filter_var($request->city, FILTER_SANITIZE_STRING); $postcode = filter_var($request->postcode, FILTER_SANITIZE_STRING); $optin = $request->optin !== null ? 1 : 0; $customer = Customers::where('email', Auth::guard('customer')->user()->email)->first(); if (!$customer) { return back()->withErrors("Une erreur est survenue, merci de réessayer."); } /** @var \LDCCRM\ApiV1 */ $crm = app('crmApi'); $result = $crm->updateCustomer($customer->crm_id, $firstname, $lastname, $optin, $birthDate, $phone, $address, null, $city, $postcode, $country); if ($result->status === "OK") { $customer->username = $username; $customer->save(); return back()->with('success', 'Modifications enregistrés !'); } else { // TODO : Retour correct switch ($result->code) { case 104: dd("KO 104"); return back()->withErrors("Veuillez vérifier que vous avez correctement rempli les champs obligatoires."); case 105: dd("KO 105"); return back()->withErrors("Une erreur est survenue, merci de réessayer."); default: dd("KO default"); return back()->withErrors("Une erreur est survenue, merci de réessayer ultérieurement."); } } } public function passwordReset(Request $request) { $request->validate([ 'email' => 'required|email|max:255', ]); $email = filter_var($request->email, FILTER_SANITIZE_EMAIL); $customerExist = Customers::where('email', $email)->count() === 0 ? false : true; // TODO : Enlever les dd de test if ($customerExist) { $token = Str::random(80); $passwordReset = new PasswordReset(); $passwordReset->email = $email; $passwordReset->token = $token; $passwordReset->created_at = now(); $passwordReset->save(); Mail::to($email)->send(new PasswordResetMail($token)); dd("OK"); return back()->with('success', 'Un email de réinitialisation a bien été envoyé sur votre adresse email.'); } else { dd("KO"); return back()->withErrors("Cette adresse email n'est pas enregistrée dans nos services."); } } public function changePassword(Request $request, $token) { // TODO : Faire la méthode qui appel la vue qui redirige ici une fois les infos rentrée $request->validate([ 'password' => 'required|confirmed|min:8|max:255' ]); $password = $request->password; try { $passwordReset = PasswordReset::where('token', $token)->first(); $crmId = Customers::where('email', $passwordReset->email)->first()->crm_id; } catch (Exception $e) { dd("KO pas de données"); return back()->withErrors("Changement du mot de passe impossible, les données envoyés sont incorrectes."); } /** @var \LDCCRM\ApiV1 */ $crm = app('crmApi'); $result = $crm->changePwdCustomer($crmId, $password); // TODO : Retourner les bonnes vues au lieu des dd if ($result->status === "OK") { $passwordReset->delete(); dd("OK !"); } else { switch ($result->code) { case 107: dd("KO 107"); return back()->withErrors("Veuillez vérifier que vous avez correctement rempli les champs obligatoires."); case 108 || 109: dd("KO 108 ou 109"); return back()->withErrors("Changement impossible, compte inexistant."); default: dd("KO default"); return back()->withErrors("Une erreur est survenue, merci de réessayer ultérieurement."); } } } public function changeOptin() { // TODO : Récupération de l'utilisateur par le système d'Auth et tester la méthode, enlever les dd die("Attente"); $crmId = Auth::guard('customer')->user()->crm_id; /** @var \LDCCRM\ApiV1 */ $crm = app('crmApi'); $result = $crm->toggleOptInCustomer($crmId); if ($result->status === "OK") { dd("OK"); return back()->with('success', 'Modification enregistrée !'); } else { switch ($result->code) { case 113 || 114: dd("KO 113 ou 114"); return back()->withErrors("Mise à jour impossible, compte inexistant."); default: dd("KO default"); return back()->withErrors("Une erreur est survenue, merci de réessayer ultérieurement."); } } } public function addFavoriteRecipe($recipeId) { $recipe = Recipes::findOrFail($recipeId); $customer = Customers::findOrFail(Auth::guard('customer')->user()->id); $customer->recipes()->attach($recipe); return back()->with('success', 'Recette ajoutée à vos recettes favorites.'); } public function removeFavoriteRecipe(Request $request) { $recipe = Recipes::findOrFail($request->id); $customer = Auth::guard('customer')->user(); $customer->recipes()->detach($recipe);; } public function addToCart($productId) { $product = Products::findOrFail($productId); $customer = Customers::findOrFail(Auth::guard('customer')->user()->id); $customer->products()->attach($product); } public function removeFromCart(Request $request) { $product = Products::findOrFail($request->id); $customer = Auth::guard('customer')->user(); $customer->products()->detach($product); } public function delete($id) { die('Not implemented yet'); // Suppression d'un compte client $customer = Customers::findOrFail($id); $customer->recipes()->delete(); $customer->products()->delete(); $customer->answers()->delete(); $customer->forums()->delete(); // TODO : Suppression via la CRM if (Auth::guard('customer')->user()->id === $customer->id) Auth::guard('customer')->logout(); $customer->delete(); return redirect()->route('home'); } }