ldc-legaulois/app/Http/Controllers/Controller.php

130 lines
4.7 KiB
PHP
Raw Normal View History

2020-07-23 10:29:36 +02:00
<?php
namespace App\Http\Controllers;
use App\Models\Discount;
2024-07-18 11:39:05 +02:00
use App\Models\Message;
2024-07-30 16:05:27 +02:00
use App\Models\Notification;
use Illuminate\Database\Eloquent\Builder;
2020-07-23 10:29:36 +02:00
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator as LengthAwarePaginatorCustom;
2024-07-15 10:23:12 +02:00
use Illuminate\Support\Facades\Auth;
2024-01-10 14:49:46 +01:00
use Illuminate\Support\Facades\Cache;
2024-07-15 10:23:12 +02:00
use Illuminate\Support\Facades\View;
use Illuminate\Support\Str;
use Uwil\LaravelCommon\Controllers\Controller as BaseController;
2020-07-23 10:29:36 +02:00
class Controller extends BaseController
{
2021-03-20 14:38:15 +01:00
use AuthorizesRequests;
use ValidatesRequests;
2024-07-15 10:23:12 +02:00
/**
2024-07-30 16:05:27 +02:00
* Summary of _construct.
2024-07-15 10:23:12 +02:00
*
* @return void
*/
public function __construct()
{
$this->middleware(function (Request $request, callable $next) {
if (Auth::guard('club')->check()) {
/** @var \App\Models\Customer */
2024-07-30 16:05:27 +02:00
$customerModel = Auth::guard('club')->user();
$notificationModels = $customerModel->getAllNotifications();
View::share(
'notifications_count',
$notificationModels->count() - $customerModel->readNotifications()->count()
);
View::share('notifications_list', $notificationModels);
View::share('notifications_message_count', $notificationModels
2024-07-18 11:39:05 +02:00
// @phpstan-ignore-next-line
->whereNotIn('id', $customerModel->readNotifications->pluck('id'))
2024-07-30 16:05:27 +02:00
->filter(function (Notification $notificationModel) {
return $notificationModel->notifiable_type === Message::class and
!is_null($notificationModel->customer_id);
})
2024-07-18 11:39:05 +02:00
->count());
$discountCache = Cache::remember(
"discountsCustomerCount_{$customerModel->hashcode}",
86400,
function () use ($customerModel) {
return Discount::getCustomerDiscountsCount($customerModel->hashcode);
}
);
View::share('discountsCustomerCount', $discountCache);
} //end if
2024-07-15 10:23:12 +02:00
return $next($request);
});
}
2024-07-05 16:34:57 +02:00
/**
2024-07-30 16:05:27 +02:00
* Gives the redirection path for FO Auth controllers.
2024-07-05 16:34:57 +02:00
*
* @return string
*/
protected function authLoggedRedirectPath(): string
{
return route('club.home.show');
}
2024-05-15 12:40:31 +02:00
/**
* Get a paginate resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function jsonPaginateModels(Request $request): \Illuminate\Http\JsonResponse
{
/** @var \Illuminate\Database\Eloquent\Model $models */
$models = $request->targetModel::query()
->where($request->input('fieldName') ?? 'name', 'like', "%{$request->input('search')}%")
->orderBy($request->input('fieldName') ?? 'name', 'ASC')
->paginate($request->input('paginate') ?? 10);
return \response()->json($models);
}
/**
* Get models titles for search input propositions.
*
* @param Builder $query
* @param string $searchField
* @param string|null $search
* @return \Illuminate\Pagination\LengthAwarePaginator
*/
public function getModelsTitles(
Builder $query,
string $searchField,
string|null $search = null
): \Illuminate\Pagination\LengthAwarePaginator {
$modelsTitles = [];
$searchLower = Str::lower($search);
$query->when(!is_null($search), function (Builder $q) use ($searchLower, $searchField) {
$q->where($searchField, 'like', "%{$searchLower}%");
})
->where('published', true)
->inRandomOrder()
->pluck($searchField)
->each(function (string $title) use (&$modelsTitles, $searchLower) {
if (count($modelsTitles) < 5) {
foreach (explode(" ", $title) as $word) {
$word = Str::lower($word);
if (
strlen($word) > 3
&& !in_array($word, $modelsTitles)
&& str_contains($word, $searchLower)
) {
$modelsTitles[] = $word;
}
}
return $modelsTitles;
}
})
->toArray();
\sort($modelsTitles);
$titles = array_slice($modelsTitles, 0, 5);
return new LengthAwarePaginatorCustom($titles, count($titles), (count($titles) <= 0) ? 1 : count($titles));
}
2020-07-23 10:29:36 +02:00
}