127 lines
4.1 KiB
PHP
127 lines
4.1 KiB
PHP
<?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;
|
|
|
|
class HomeController extends Controller
|
|
{
|
|
/**
|
|
* Display a listing of the resource.
|
|
*
|
|
* @return \Illuminate\Contracts\View\View
|
|
*/
|
|
public function index(): \Illuminate\Contracts\View\View
|
|
{
|
|
// 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)
|
|
->where('event_start', '>', now())
|
|
->orderBy('event_start', 'desc')
|
|
->take(2)->get()->reverse();
|
|
|
|
// Get last 3 News.
|
|
$news = News::query()->latest()->where('published', true)
|
|
->take(3)->with('categories')->get();
|
|
|
|
return view('fo.pages.home', compact(
|
|
'slides',
|
|
'ranges',
|
|
'threeproducts',
|
|
'events',
|
|
'news'
|
|
));
|
|
}
|
|
|
|
/**
|
|
* 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');
|
|
}
|
|
}
|