ldc-legaulois/app/Http/Controllers/Fo/HomeController.php

150 lines
5.4 KiB
PHP

<?php
namespace App\Http\Controllers\Fo;
use App\Enums\Settings\SettingsType;
use App\Enums\StaticPageType;
use App\Http\Controllers\Controller;
use App\Http\Requests\Fo\SingleOptinRequest;
use App\Http\Requests\Fo\UnsubscribeNewsletterRequest;
use App\Models\DemarcheSlide;
use App\Models\Discount;
use App\Models\MainSlide;
use App\Models\Product;
use App\Models\GeneralSetting;
use App\Models\News;
use App\Models\Range;
use App\Models\Recipe;
use App\Models\StaticPage;
use App\Models\Video;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
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
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Contracts\View\View
*/
public function index(): \Illuminate\Contracts\View\View
{
$staticPageModel = StaticPage::getCachedStaticPage(StaticPageType::home);
$mainSlideModels = MainSlide::getPublishedOrderedWithApproaches();
$demarcheSlideModels = DemarcheSlide::getPublishedOrdered();
$rangeModels = Range::getPublishedOrderedBySlug();
$productViews = Cache::remember('HomeProductsViews', 86400, function () {
return Product::getProductsViewsByRange();
});
$hotNewsSettings = GeneralSetting::getCachedGeneralSetting(SettingsType::hotNews);
$newsModels = News::getPublishedWithNewsCategory();
$recipeModels = Recipe::get9PublishedWithProducts();
$videoModels = Video::get9PublishedHomeVideosOrderedWithProducts();
$discountsTotal = Discount::getCachedDiscounts()->sum('value');
return view('fo.pages.home', compact(
'staticPageModel',
'mainSlideModels',
'rangeModels',
'demarcheSlideModels',
'productViews',
'newsModels',
'recipeModels',
'hotNewsSettings',
'videoModels',
'discountsTotal',
));
}
/**
* Call the CRM to add a single optin
*
* @param \App\Http\Requests\Fo\SingleOptinRequest $request
* @return string|array|null|\Illuminate\Contracts\Translation\Translator
* @throws \LDC\LDCCRM\Exceptions\ValidationException ValidationException.
* @throws \Illuminate\Contracts\Container\BindingResolutionException BindingResolutionException.
*/
public function addOptIn(SingleOptinRequest $request)
{
try {
SingleOptin::setStatus($request->email, true);
return \response(trans("Votre inscription à la newsletter a été prise en compte"), 200);
} catch (ApiErrorException $e) {
// Il y a deja un customerInfo avec optin a true pour ce customer.
if ($e->getApiError()->equals(ApiError::singleOptinCustomerExists)) {
return trans('Vous êtes déjà inscrit avec cette adresse email');
}
\report($e);
return \response(trans('Une erreur est survenue, merci de réessayer ultérieurement'), 404);
} catch (CrmException $e) {
\report($e);
return \response(trans('Une erreur est survenue, merci de réessayer ultérieurement'), 404);
}
}
/**
* unsubscribeNewsletter method
*
* @param \App\Http\Requests\Fo\UnsubscribeNewsletterRequest $request
* @return \Illuminate\Contracts\View\View
*/
public function unsubscribeNewsletter(UnsubscribeNewsletterRequest $request): \Illuminate\Contracts\View\View
{
$error = null;
$hashcode = $request->hashcode;
try {
SingleOptin::unsetStatusWithHashcode($hashcode);
} catch (ApiErrorException $e) {
Log::debug($e->getMessage());
if ($e->getApiError()->equals(ApiError::modelNotFound)) {
if ($customer = Customer::find($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) {
$error = null;
}
} else {
abort(404);
}
} else {
if (app()->bound('sentry')) {
app('sentry')->captureException($e);
}
$error = true;
}
} catch (CrmException $e) {
Log::debug($e->getMessage());
$error = true;
if (app()->bound('sentry')) {
app('sentry')->captureException($e);
}
} //end try
if (!is_null($error)) {
return view('fo.pages.newsletter-unsubscribe')->with(
'error',
trans('Une erreur est survenue, merci de réessayer ultérieurement')
);
}
return view('fo.pages.newsletter-unsubscribe');
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\JsonResponse
*/
public function updateHotNewsSatus(): \Illuminate\Http\JsonResponse
{
Cache::put('hotNewsIsDisplayed', true, now()->addHours(24));
return response()->json();
}
}