@php $layoutCssPath = public_path('css/admin/layout.css'); $layoutCssAsset = 'css/admin/layout.css'; if (!file_exists($layoutCssPath)) { $layoutCssPath = public_path('assets/app.css'); $layoutCssAsset = 'assets/app.css'; } $layoutCssVersion = file_exists($layoutCssPath) ? (string) filemtime($layoutCssPath) : (string) time(); @endphp @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]); }; // Prefer employee id provided by AdminLayoutComposer. $layoutEmployeeId = (int) ($layoutEmployeeId ?? 0); if ($layoutEmployeeId <= 0 && $user) { try { if (\Illuminate\Support\Facades\Schema::hasTable('employees')) { $employeeCode = trim((string) ($user->user_code ?? '')); $company = trim((string) ($user->company ?? '')); $hasCompanyColumn = \Illuminate\Support\Facades\Schema::hasColumn('employees', 'company'); if ($employeeCode !== '' && \Illuminate\Support\Facades\Schema::hasColumn('employees', 'employee_code')) { $query = \Illuminate\Support\Facades\DB::table('employees')->where('employee_code', $employeeCode); if ($company !== '' && $hasCompanyColumn) { $query->where('company', $company); } $layoutEmployeeId = (int) ($query->value('id') ?? 0); } if ($layoutEmployeeId <= 0 && \Illuminate\Support\Facades\Schema::hasColumn('employees', 'name')) { $query = \Illuminate\Support\Facades\DB::table('employees')->where('name', (string) ($user->name ?? '')); if ($company !== '' && $hasCompanyColumn) { $query->where('company', $company); } $layoutEmployeeId = (int) ($query->value('id') ?? 0); } } } catch (\Throwable $e) { $layoutEmployeeId = 0; } } $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; $canDashboard = $can('menu.dashboard'); $canPerformanceEvaluations = $canHrView && $can('menu.performance.evaluations'); $canAssetsManage = $can('module.assets.manage') || $isAssetsAdmin || $isAssetsGroupAuthority; $showUserGroupsMenu = $canManagementView && ($can('menu.users.departments') || $can('menu.users.titles') || $can('menu.users.positions')); $logo = $logo ?? null; $notifyReady = (bool) ($notifyReady ?? false); $notifyCount = (int) ($notifyCount ?? 0); $notifyItems = collect($notifyItems ?? []); @endphp
@if (session('access_error'))
{{ session('access_error') }}
@endif @yield('content')
@stack('modals')
@stack('styles')
@livewireScripts
@stack('scripts')