152 lines
6.8 KiB
PHP
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;
|
|
}
|
|
}
|