diff --git a/app/Http/Controllers/Fo/HomeController.php b/app/Http/Controllers/Fo/HomeController.php index 76027dcb..d4b5d4ca 100644 --- a/app/Http/Controllers/Fo/HomeController.php +++ b/app/Http/Controllers/Fo/HomeController.php @@ -17,10 +17,14 @@ use App\Models\Recipe; use App\Models\StaticPage; use App\Models\Video; use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Facades\Validator; +use Illuminate\Validation\ValidationException as IlluminateValidationException; use LDC\LDCCRM\Enums\ApiError; use LDC\LDCCRM\Exceptions\ApiErrorException; use LDC\LDCCRM\Exceptions\CrmException; +use LDC\LDCCRM\Exceptions\ValidationException; use LDC\LDCCRM\Models\SingleOptin; +use LDC\LDCCRM\Models\Customer; class HomeController extends Controller { @@ -81,6 +85,63 @@ class HomeController extends Controller } } + /** + * Unsubscribe from newsletter + * + * @param App\Http\Requests\Fo\SingleOptinRequest $request + * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory + */ + public function unscribeNewsletter(SingleOptinRequest $request) + { + // TODO: handle single optin avec hashcode. + $message = null; + + try { + // ? Is hashcode valid ? + Validator::validate([ + 'hashcode' => $request->hashcode + ], [ + 'hashcode' => 'required|uuid' + ]); + if ($customer = Customer::find($request->hashcode)) { + $customer->opt_in = false; + // ! Les données peuvent être parsés en retour de la crm et inconsitantes (Héritage vielle crm). + try { + $customer->save(); + } catch (ValidationException $e) { + $message = null; + } + $message = trans('Votre désinscription à la newsletter a été prise en compte'); + } + } catch (IlluminateValidationException $e) { + // Les données peuvent être parsés en retour de la crm et sont inconsitantes. + $message = null; + } catch (ApiErrorException $e) { + if (!$e->getApiError()->equals(ApiError::singleOptinCustomerExists)) { + if (app()->bound('sentry')) { + app('sentry')->captureException($e); + } + if ($request->hashcode) { + SingleOptin::setStatus($request->email, true); + $message = trans('Votre désinscription à la newsletter a été prise en compte'); + } else { + $message = trans('Une erreur est survenue, merci de réessayer ultérieurement'); + } + } + } catch (CrmException $e) { + if (app()->bound('sentry')) { + app('sentry')->captureException($e); + } + $message = trans('Une erreur est survenue, merci de réessayer ultérieurement'); + }//end try + + if (!$message) { + $message = trans('Le lien de désinscription est invalide'); + } + + return view('front.singleoptin-unsubscribe', compact('message')); + } + /** * Display a listing of the resource. *