Files
online.tbbank.gov.tm-larave…/app/Providers/NovaServiceProvider.php
2024-03-07 17:30:04 +05:00

203 lines
5.9 KiB
PHP

<?php
namespace App\Providers;
use App\Nova\Dashboards\Main;
use App\Nova\Resources\Branch\Branch;
use App\Nova\Resources\Order\Card\CardOrder;
use App\Nova\Resources\Order\Card\CardState;
use App\Nova\Resources\Order\Card\CardType;
use App\Nova\Resources\Order\Card\Pin\CardPin;
use App\Nova\Resources\Order\Card\Requisite\CardRequisite;
use App\Nova\Resources\Order\Loan\LoanOrder;
use App\Nova\Resources\Order\Loan\LoanType;
use App\Nova\Resources\System\Location\Province;
use App\Nova\Resources\System\Roles\Permission;
use App\Nova\Resources\System\Roles\Role;
use App\Nova\User;
use App\Repos\System\Nova\NovaRepo;
use Eolica\NovaLocaleSwitcher\LocaleSwitcher;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
use Laravel\Nova\Events\ServingNova;
use Laravel\Nova\Fields\Date;
use Laravel\Nova\Menu\Menu;
use Laravel\Nova\Menu\MenuGroup;
use Laravel\Nova\Menu\MenuItem;
use Laravel\Nova\Menu\MenuSection;
use Laravel\Nova\Nova;
use Laravel\Nova\NovaApplicationServiceProvider;
use Spatie\BackupTool\BackupTool;
use Stepanenko3\LogsTool\LogsTool;
class NovaServiceProvider extends NovaApplicationServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
Nova::initialPath(NovaRepo::initialPath());
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
parent::boot();
Nova::withBreadcrumbs();
Nova::footer(NovaRepo::footer());
$this->setupNavigation();
$this->setupUserNavigation();
$this->setupUserSettings();
$this->setupAssets();
$this->setupFieldMacros();
}
/**
* Register the Nova routes.
*/
protected function routes(): void
{
Nova::routes()
->withAuthenticationRoutes()
->withPasswordResetRoutes()
->register();
}
/**
* Register the Nova gate.
*
* This gate determines who can access Nova in non-local environments.
*/
protected function gate(): void
{
Gate::define('viewNova', NovaRepo::viewNova());
}
/**
* Get the dashboards that should be listed in the Nova sidebar.
*/
protected function dashboards(): array
{
return [
new Main,
];
}
/**
* Get the tools that should be listed in the Nova sidebar.
*/
public function tools(): array
{
return [
LocaleSwitcher::make()
->setLocales(config('app.locales'))
->onSwitchLocale(NovaRepo::localeSwitcherSave()),
BackupTool::make()
->canSee(NovaRepo::isSuperAdmin()),
LogsTool::make()
->canSee(NovaRepo::isMe())
->canDownload(NovaRepo::isMe())
->canDelete(NovaRepo::isMe()),
];
}
/**
* Setup navigation
*/
public function setupNavigation(): void
{
Nova::mainMenu(function (Request $request) {
return [
MenuSection::dashboard(Main::class)->icon('chart-bar'),
MenuSection::make(__('Orders'), [
MenuGroup::make(__('Loan department'), [
MenuItem::resource(LoanOrder::class),
])->collapsedByDefault(),
MenuGroup::make(__('Card department'), [
MenuItem::resource(CardOrder::class)->name(__('Order new card')),
MenuItem::resource(CardRequisite::class),
MenuItem::resource(CardPin::class),
])->collapsedByDefault(),
])->icon('ticket')->collapsedByDefault(),
MenuSection::make(__('System'), [
MenuGroup::make(__('Users'), [
MenuItem::resource(User::class),
MenuItem::resource(Role::class),
MenuItem::resource(Permission::class),
])->collapsedByDefault(),
MenuGroup::make(__('Loan'), [
MenuItem::resource(LoanType::class),
])->collapsedByDefault(),
MenuGroup::make(__('Card'), [
MenuItem::resource(CardState::class),
MenuItem::resource(CardType::class),
])->collapsedByDefault(),
MenuGroup::make(__('Location'), [
MenuItem::resource(Province::class),
MenuItem::resource(Branch::class),
])->collapsedByDefault(),
])->icon('cog')->collapsedByDefault(),
MenuSection::make(__('Backups'))
->path('/backups')
->icon('server')
->canSee(fn () => auth()->user()->isSuperAdmin()),
MenuSection::make(__('Logs'))
->path('/logs')
->icon('document-text')
->canSee(fn () => auth()->user()->isSuperAdmin()),
];
});
}
/**
* Setup user navigation (dropdown).
*/
public function setupUserNavigation(): void
{
Nova::userMenu(function (Request $request, Menu $menu) {
$menu->prepend(MenuItem::make(__('My Profile'), $request->user()->profilePage()));
return $menu;
});
}
/**
* Setup user settings
*/
public function setupUserSettings(): void
{
Nova::serving(fn (ServingNova $event) => NovaRepo::serving($event));
}
/**
* Setup Assets
*/
public function setupAssets(): void
{
Nova::style('additional', resource_path('css/vendor/nova/css/additional.css'));
}
/**
* Setup macros of fields
*/
public function setupFieldMacros(): void
{
Date::macro('toTurkmenFormat', fn () => $this->displayUsing(fn ($value) => $value?->format('d.m.Y')));
}
}