@stack('styles')
@php $user = auth()->user(); // Tum menu yetkilerini tek batch sorgu al $menuAccess = $user ? \App\Support\ModuleAccess::userMenuAccessMap($user) : []; $isManager = $user && strtolower(trim((string) $user->role)) === 'manager'; $can = static function ($key) use ($menuAccess, $user) { $key = trim((string) $key); if ($key === '') { return false; } if (str_starts_with($key, 'module.')) { if (!$user) { return false; } $segments = explode('.', $key); if (count($segments) >= 3 && !empty($segments[1])) { $permission = !empty($segments[2]) ? (string) $segments[2] : 'view'; return \App\Support\ModuleAccess::userHasModule($user, (string) $segments[1], $permission); } return \App\Support\ModuleAccess::userHasPermission($user, $key); } return !empty($menuAccess[$key]); }; // Setup cacheable employee ID based on user email $employeeCacheKey = 'layout_emp_id_' . ($user->id ?? 0); $layoutEmployeeId = \Illuminate\Support\Facades\Cache::remember($employeeCacheKey, 60, static function () use ($user) { if (!$user || empty($user->email)) return 0; return (int) \Illuminate\Support\Facades\DB::table('employees') ->where('email', $user->email) ->where('status', 1) ->value('id'); }); $userId = (int) ($user->id ?? 0); $employeeId = $layoutEmployeeId ?? 0; // --- Form Menu Data & Groups --- $formMenuData = \App\Support\FormMenuNavigation::forUser($user); $formMenuGroups = [ 'performance' => collect((array) data_get($formMenuData, 'groups.performance', []))->map(static fn(array $row): object => (object) $row)->values(), 'tasks' => collect((array) data_get($formMenuData, 'groups.tasks', []))->map(static fn(array $row): object => (object) $row)->values(), 'settings' => collect((array) data_get($formMenuData, 'groups.settings', []))->map(static fn(array $row): object => (object) $row)->values(), ]; $formMenuLinkMap = (array) data_get($formMenuData, 'link_map', []); $formMenuLinksAllowed = []; foreach ((array) data_get($formMenuData, 'links', []) as $groupId => $groupLinks) { $formMenuLinksAllowed[(int) $groupId] = collect((array) $groupLinks)->map(static fn(array $row): object => (object) $row)->values(); } // Determine active form menus for dynamic highlighting $formMenuActiveGroupId = 0; $formMenuActiveModule = ''; if (request()->routeIs('admin.form-menus.fill')) { $activeMenuId = (int) request()->route('id'); if ($activeMenuId > 0) { $activeMeta = $formMenuLinkMap[$activeMenuId] ?? null; if (is_array($activeMeta)) { $formMenuActiveGroupId = (int) ($activeMeta['group_id'] ?? 0); $formMenuActiveModule = (string) ($activeMeta['module_key'] ?? ''); } elseif (\Illuminate\Support\Facades\Schema::hasTable('form_menu_links')) { $formMenuActiveModule = (string) (\Illuminate\Support\Facades\DB::table('form_menu_links')->where('id', $activeMenuId)->value('menu_group') ?? ''); } } } $hasFormMenuLinksForModule = static function (string $moduleKey) use ($formMenuGroups, $formMenuLinksAllowed): bool { $groups = $formMenuGroups[$moduleKey] ?? collect(); foreach ($groups as $menuGroup) { $menuGroupId = (int) ($menuGroup->id ?? 0); if ($menuGroupId > 0 && collect($formMenuLinksAllowed[$menuGroupId] ?? [])->isNotEmpty()) { return true; } } return false; }; $hasPerformanceFormMenuLinks = $hasFormMenuLinksForModule('performance'); $hasTasksFormMenuLinks = $hasFormMenuLinksForModule('tasks'); $hasSettingsFormMenuLinks = $hasFormMenuLinksForModule('settings'); $isAssetsAdmin = false; if ($user && strtolower(trim((string) $user->role)) !== 'admin') { try { $isAssetsAdmin = \Illuminate\Support\Facades\DB::table('a_users') ->where('user_id', $user->id) ->where('is_admin', 1) ->exists(); } catch (\Throwable $e) { $isAssetsAdmin = false; } } if (!$isAssetsAdmin) { $isAssetsAdmin = $user && strtolower(trim((string) $user->role)) === 'admin'; } $isAssetsGroupAuthority = false; try { $isAssetsGroupAuthority = \Illuminate\Support\Facades\DB::table('a_group_users') ->where('user_id', $user->id) ->where('is_authority', 1) ->exists(); } catch (\Throwable $e) {} // AKTIF ROUTE KONTROLLERI $hrActive = request()->routeIs('admin.employees.*', 'admin.questions.*', 'admin.rule-sets.*', 'admin.periods.*', 'admin.assignments.*', 'admin.reports.*') || $formMenuActiveModule === 'performance'; $tasksActive = request()->routeIs('admin.tasks.*') || $formMenuActiveModule === 'tasks'; $marketingActive = request()->routeIs('admin.marketing.*'); $assetsActive = request()->routeIs('admin.assets.*'); $settingsActive = request()->routeIs('admin.responsibility-centers.*', 'admin.email-settings.*', 'admin.task-settings.*', 'admin.form-menus.*', 'admin.form-templates.*', 'admin.form-responses.*', 'admin.camunda.workflows.*', 'admin.camunda.settings.*', 'admin.erp-settings.*', 'admin.erp-sync-logs.*') || $formMenuActiveModule === 'settings'; $userGroupsActive = request()->routeIs('admin.departments.*', 'admin.titles.*', 'admin.positions.*'); $unitManagementActive = request()->routeIs('admin.assets.groups.*'); $sharedAreaManagementActive = request()->routeIs('admin.assets.shared-areas.*'); $userManagementActive = $userGroupsActive || $unitManagementActive || $sharedAreaManagementActive || request()->routeIs('admin.users.*') || request()->routeIs('admin.roles.*'); $managementActive = $settingsActive || $userManagementActive || request()->routeIs('admin.modules.*') || $formMenuActiveModule === 'settings'; // GORUNURLUK KONTROLLERI (Granular - Parent Module View rules) // 1. Performance $canHrView = $can('module.performance.view'); $showHrBaseMenu = $can('menu.hr.employees') || $can('menu.hr.questions') || $can('menu.hr.rule_sets') || $can('menu.hr.periods') || $can('menu.hr.assignments') || $can('menu.hr.reports'); $showHrMenu = $canHrView && ($showHrBaseMenu || $hasPerformanceFormMenuLinks); // 2. Tasks $canTasksView = $can('module.tasks.view'); $showTasksMenu = $canTasksView && ($can('menu.tasks.my') || $can('menu.tasks.assign') || $can('menu.tasks.track') || $can('menu.tasks.camunda_pending') || $hasTasksFormMenuLinks); // 3. Marketing $canMarketingView = $can('module.marketing.view'); $showMarketingMenu = $canMarketingView && ($can('menu.marketing.board') || $can('menu.marketing.destek') || $can('menu.marketing.worklist') || $can('menu.marketing.kreatif') || $can('menu.marketing.marka_tescil') || $can('menu.marketing.musteri_sikayetleri') || $can('menu.marketing.franchise') || $can('menu.marketing.test')); // 4. Assets $canAssetsView = $can('module.assets.view'); $showAssetsMenu = $canAssetsView && ($can('menu.assets.my_inventory') || $can('menu.assets.my_faults') || $can('menu.assets.manage') || $can('menu.assets.user_assets') || $can('menu.assets.fault_manage') || $isAssetsGroupAuthority || $can('menu.assets.workflow')); // 5. Management (Yonetim) $canManagementView = $can('module.management.view'); $showSettingsMenu = $canManagementView && ($can('menu.settings.responsibility_centers') || $can('menu.settings.email_settings') || $can('menu.settings.task_settings') || $can('menu.settings.form_templates') || $can('menu.settings.form_responses') || $can('menu.settings.form_menus') || $can('menu.settings.erp_settings') || $can('menu.settings.erp_logs') || $can('menu.settings.workflow_management') || $can('menu.settings.module_permissions') || $hasSettingsFormMenuLinks); $showUserManagementMenu = $canManagementView && ($can('menu.users.index') || $can('menu.users.permissions') || $can('menu.users.permission_users') || $can('menu.users.role_permissions') || $can('menu.users.roles') || $can('menu.users.departments') || $can('menu.users.titles') || $can('menu.users.positions') || $can('menu.assets.groups') || $can('menu.assets.shared_areas')); $showManagementMenu = $showSettingsMenu || $showUserManagementMenu; @endphp
@if (session('access_error'))
{{ session('access_error') }}
@endif @yield('content')
@stack('modals')
@stack('styles')
@livewireScripts
@stack('scripts')