ldc-tregalette/app/Http/Controllers/Fo/HomeController.php
2024-10-15 17:46:47 +02:00

88 lines
3 KiB
PHP

<?php
namespace App\Http\Controllers\Fo;
use App\Enums\StaticPageType;
use App\Http\Controllers\Controller;
use App\Http\Requests\Fo\UnsubscribeNewsletterRequest;
use App\Models\KlubBloc;
use App\Models\News;
use App\Models\Range;
use App\Models\StaticPage;
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\Customer;
use LDC\LDCCRM\Models\SingleOptin;
class HomeController extends Controller
{
/**
* Display the homepage.
*
* @return \Illuminate\Contracts\View\View
*/
public function index(): \Illuminate\Contracts\View\View
{
$rangeModels = Range::query()->limit(3)->inRandomOrder()->get();
$newsModels = News::query()->where('published', true)->orderBy('created_at', 'desc')->limit(6)->get();
$staticPageModel = StaticPage::query()->where('type', StaticPageType::home)->firstOrFail();
$klubBloc = KlubBloc::query()->first();
\throw_if(empty($klubBloc), 'empty klubBloc');
return view('fo.pages.home', compact('staticPageModel', 'rangeModels', 'klubBloc', 'newsModels'));
}
/**
* 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');
}
}