ldc-le-gaulois-pro/app/Http/Controllers/Fo/HomeController.php

128 lines
4.1 KiB
PHP
Raw Permalink Normal View History

2022-09-08 11:36:15 +02:00
<?php
namespace App\Http\Controllers\Fo;
use App\Http\Controllers\Controller;
use App\Http\Requests\Fo\Newsletter\SingleOptinRequest;
use App\Http\Requests\Fo\Newsletter\UnsubscribeNewsletterRequest;
use App\Models\News;
use App\Models\Product;
use App\Models\Range;
use App\Models\Slide;
use Illuminate\Support\Facades\Log;
use LDC\LDCCRM\Enums\ApiError;
use LDC\LDCCRM\Exceptions\ApiErrorException;
use LDC\LDCCRM\Exceptions\CrmException;
use LDC\LDCCRM\Models\SingleOptin;
2022-09-08 11:36:15 +02:00
class HomeController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Contracts\View\View
*/
public function index(): \Illuminate\Contracts\View\View
2022-09-08 11:36:15 +02:00
{
// Get Slides.
/** @var \Illuminate\Database\Eloquent\Builder $slides */
$slides = Slide::query()
->where('published', true)
->orderBy('order', 'DESC')
->get();
// Gammes.
$ranges = Range::all();
// VIP Products.
$threeproducts = Product::where('published', true)
->where('is_vip', true)
->take(3)
->orderBy('priority_order', 'DESC')
->with('subrange.range')
->get();
// Get Agenda.
// Events starting in the future.
$events = News::query()->where('published', true)
2024-02-05 09:33:08 +01:00
->where('event_start', '>', now())
->orderBy('event_start', 'desc')
2024-02-05 09:33:08 +01:00
->take(2)->get()->reverse();
// Get last 3 News.
$news = News::query()->latest()->where('published', true)
2024-02-05 09:33:08 +01:00
->take(3)->with('categories')->get();
return view('fo.pages.home', compact(
'slides',
'ranges',
'threeproducts',
'events',
'news'
));
2022-09-08 11:36:15 +02:00
}
/**
* Call the CRM to add a single optin
*
* @param \App\Http\Requests\Fo\Newsletter\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) {
\report($e);
return \response(trans('Une erreur est survenue, merci de réessayer ultérieurement'), 500);
} catch (CrmException $e) {
\report($e);
return \response(trans('Une erreur est survenue, merci de réessayer ultérieurement'), 500);
}
}
/**
* unsubscribeNewsletter method
*
* @param \App\Http\Requests\Fo\Newsletter\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)) {
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');
}
2022-09-08 11:36:15 +02:00
}