ldc-groupe/app/Http/Middleware/HandleInertiaRequests.php
2026-02-11 09:15:43 +01:00

152 lines
6.8 KiB
PHP

<?php
namespace App\Http\Middleware;
use App\Enums\DynamicFieldTypes;
use App\Enums\ModelsList;
use App\Enums\StaticRoutesEnum;
use App\Helpers\TranslationHelper;
use App\Models\Company;
use App\Models\CompanyActivity;
use App\Models\CompanySector;
use App\Models\ContactCount;
use App\Models\Document;
use App\Models\DocumentCategory;
use App\Models\DocumentTag;
use App\Models\DynamicPage;
use App\Models\News;
use App\Models\NewsCategory;
use App\Models\NewsTag;
use App\Models\PageConfig;
use Diglactic\Breadcrumbs\Breadcrumbs;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
use Inertia\Middleware;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
use Uwil\LaravelBackend\Enums\RoleEnum;
use Uwil\LaravelBackend\Models\User;
use Uwil\LaravelCommon\Enums\ItemsPerPaginationEnum;
class HandleInertiaRequests extends Middleware
{
/**
* The root template that is loaded on the first page visit.
*
* @var string
*/
protected $rootView = 'back/app';
/**
* Define the props that are shared by default.
*
* @param \Illuminate\Http\Request $request
* @return array<string, mixed>
*/
public function share(Request $request): array
{
// Get translations from translator app.
$translations = TranslationHelper::getCachedTranslations();
// Get all errors messages of session from middleware and redirect response.
$errors = array_filter([
...($request->session()->get('errors')?->getBag('default')?->toArray() ?? []),
...array_filter([
'error' => $request->session()->get('error'),
]),
]);
$props = [
...parent::share($request),
'appEnv' => [
'mode' => config('app.env'),
'name' => config('app.name'),
'url' => config('app.url'),
'locale' => app()->getLocale(),
'locales' => LaravelLocalization::getSupportedLanguagesKeys(),
'fallbackLocale' => app()->getFallbackLocale(),
],
'auth' => [
'user' => $request->user(),
'policies' => [
'activityLogs' => [
'viewAny' => Gate::allows('viewAny', User::class),
],
'users' => [
'viewAny' => Gate::allows('viewAny', User::class),
'create' => Gate::allows('create', User::class),
],
'dynamicPages' => [
'viewAny' => Gate::allows('viewAny', DynamicPage::class),
'viewTrash' => Gate::allows('viewTrash', DynamicPage::class),
'create' => Gate::allows('create', DynamicPage::class),
],
'pageConfigs' => [
'viewAny' => Gate::allows('viewAny', PageConfig::class),
'viewTrash' => Gate::allows('viewTrash', PageConfig::class),
'create' => Gate::allows('create', PageConfig::class),
],
'contact_counts' => [
"viewAny" => Gate::allows('viewAny', ContactCount::class)
],
'news' => [
'viewAny' => Gate::allows('viewAny', News::class),
'viewTrash' => Gate::allows('viewTrash', News::class),
'create' => Gate::allows('create', News::class),
],
"newsCategories" => [
'viewAny' => Gate::allows('viewAny', NewsCategory::class),
'viewTrash' => Gate::allows('viewTrash', NewsCategory::class),
'create' => Gate::allows('create', NewsCategory::class),
],
"newsTags" => [
'viewAny' => Gate::allows('viewAny', NewsTag::class),
'viewTrash' => Gate::allows('viewTrash', NewsTag::class),
'create' => Gate::allows('create', NewsTag::class),
],
'companies' => [
'viewAny' => Gate::allows('viewAny', Company::class),
'viewTrash' => Gate::allows('viewTrash', Company::class),
'create' => Gate::allows('create', Company::class),
],
'companyActivities' => [
'viewAny' => Gate::allows('viewAny', CompanyActivity::class),
'viewTrash' => Gate::allows('viewTrash', CompanyActivity::class),
'create' => Gate::allows('create', CompanyActivity::class),
],
'companySectors' => [
'viewAny' => Gate::allows('viewAny', CompanySector::class),
'viewTrash' => Gate::allows('viewTrash', CompanySector::class),
'create' => Gate::allows('create', CompanySector::class),
],
'documents' => [
'viewAny' => Gate::allows('viewAny', Document::class),
'create' => Gate::allows('create', Document::class),
],
"documentCategories" => [
'viewAny' => Gate::allows('viewAny', DocumentCategory::class),
'viewTrash' => Gate::allows('viewTrash', DocumentCategory::class),
'create' => Gate::allows('create', DocumentCategory::class),
],
'documentTags' => [
'viewAny' => Gate::allows('viewAny', DocumentTag::class),
'viewTrash' => Gate::allows('viewTrash', DocumentTag::class),
'create' => Gate::allows('create', DocumentTag::class),
],
]
],
'enumItemsPerPagination' => ItemsPerPaginationEnum::toArray(),
'enumUserRole' => RoleEnum::toArray(),
'enumDynamicFieldTypes' => DynamicFieldTypes::toArray(),
'enumModelsList' => ModelsList::toArray(),
'enumStaticRoutes' => StaticRoutesEnum::getRoutes(),
'errors' => $errors,
'translations' => $translations,
];
if (Breadcrumbs::exists($request->route()->getName())) {
$props = array_merge($props, [
'breacrumbs' => Breadcrumbs::generate($request->route()->getName())->toArray()
]);
}
return $props;
}
}