File: /var/www/ipsremont-demo/app/Http/ViewComposers/NavigationComposer.php
<?php
namespace App\Http\ViewComposers;
use App\Models\Permission;
use App\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\View\View;
class NavigationComposer
{
public function compose(View $view): View
{
return $view->with('nav', $this->getNav());
}
public function getNav(): array
{
$userNav = [];
foreach ($this->nav() as $nav) {
if ($nav['permissions'] === true || can($nav['permissions'])) {
if (request()->routeIs($nav['prefix'] . '*')) {
$nav['active'] = true;
}
$userNav[] = $nav;
}
}
return $userNav;
}
protected function nav(): array
{
/** @var User $user */
$user = Auth::user();
$nav = [];
$nav[] = ['name' => 'leftNav.specifications', 'icon' => 'fa-plug', 'route' => 'specifications.categories', 'prefix' => 'specifications', 'permissions' => Permission::parts];
$nav[] = ['name' => 'leftNav.parts', 'icon' => 'fa-puzzle-piece', 'route' => 'parts.index', 'prefix' => 'parts', 'permissions' => Permission::parts];
$nav[] = ['name' => 'leftNav.orders', 'icon' => 'fa-dolly-flatbed', 'route' => 'orders.index', 'prefix' => 'orders', 'permissions' => Permission::orders];
$nav[] = ['name' => 'leftNav.shipment', 'icon' => 'fa-shipping-fast', 'route' => 'shipment.index', 'prefix' => 'shipment', 'permissions' => Permission::shipments_view];
$nav[] = ['name' => 'leftNav.repairs', 'icon' => 'fa-oil-can', 'route' => 'repairs.index', 'prefix' => 'repairs', 'permissions' => Permission::repairs];
if ($user->isManager()) {
$nav[] = ['name' => 'leftNav.reporting', 'icon' => 'fa-file-excel', 'route' => 'reporting.manager', 'prefix' => 'reporting', 'permissions' => Permission::repairs];
}
$nav[] = ['name' => 'leftNav.acttc', 'icon' => 'fa-file-invoice', 'route' => 'acttc.index', 'prefix' => 'acttc', 'permissions' => Permission::act_tc_view];
$nav[] = ['name' => 'leftNav.reconciliation', 'icon' => 'fa-ruble-sign', 'route' => 'reconciliation.index', 'prefix' => 'reconciliation', 'permissions' => Permission::reconciliation];
$nav[] = ['name' => 'leftNav.serviceCenter', 'icon' => 'fa-tools', 'route' => 'services.index', 'prefix' => 'services', 'permissions' => Permission::services];
$nav[] = ['name' => 'leftNav.movementThroughWarehouses', 'icon' => 'fa-people-carry', 'route' => 'movement.index', 'prefix' => 'movement', 'permissions' => Permission::movement_through_warehouses];
$nav[] = ['name' => 'leftNav.address', 'icon' => 'fa-map-marked-alt', 'route' => 'address.index', 'prefix' => 'address', 'permissions' => Permission::address];
$nav[] = ['name' => 'leftNav.regions', 'icon' => 'fa-globe', 'route' => 'regions.index', 'prefix' => 'regions', 'permissions' => Permission::regions];
$nav[] = ['name' => 'leftNav.branches', 'icon' => 'fa-house-user', 'route' => 'branches', 'prefix' => 'branches', 'permissions' => Permission::branches];
$nav[] = ['name' => 'leftNav.users', 'icon' => 'fa-user-friends', 'route' => 'users.index', 'prefix' => 'users', 'permissions' => Permission::users];
$nav[] = ['name' => 'leftNav.constructor', 'icon' => 'flaticon-safe-shield-protection', 'route' => 'constructor.index', 'prefix' => 'constructor', 'permissions' => Permission::constructor];
$nav[] = ['name' => 'leftNav.warehouses', 'icon' => 'fa-people-carry', 'route' => 'warehouses.index', 'prefix' => 'warehouses', 'permissions' => Permission::closed];
$nav[] = ['name' => 'leftNav.emails', 'icon' => 'fa-mail-bulk', 'route' => 'emails.index', 'prefix' => 'emails', 'permissions' => Permission::emails];
$nav[] = ['name' => 'leftNav.settings', 'icon' => 'fa-robot', 'route' => 'settings.index', 'prefix' => 'settings', 'permissions' => Permission::settings];
$nav[] = ['name' => 'leftNav.categories', 'icon' => 'fa-plug', 'route' => 'categories.index', 'prefix' => 'categories', 'permissions' => Permission::categories];
$nav[] = ['name' => 'leftNav.error_codes', 'icon' => 'fa-robot', 'route' => 'errors.index', 'prefix' => 'errors', 'permissions' => Permission::settings];
$nav[] = ['name' => 'leftNav.html', 'icon' => 'fa-robot', 'route' => 'html.index', 'prefix' => 'html', 'permissions' => Permission::settings];
$nav[] = ['name' => 'leftNav.notifications', 'icon' => 'fa-bell', 'route' => 'notifications.list', 'prefix' => 'notifications', 'permissions' => Permission::notifications];
$nav[] = ['name' => 'leftNav.currencies', 'icon' => 'fa-ruble-sign', 'route' => 'currencies.index', 'prefix' => 'currencies', 'permissions' => Permission::currencies];
foreach ($nav as &$item) {
$item['icon'] = 'fas menu-icon ' . $item['icon'];
$item['active'] = $item['active'] ?? false;
}
return $nav;
}
}