pluck('value', 'name') ->map(fn ($value) => Settings::convertValue($value)) ->all(); }); $viewData = [ 'serverroot' => url('/'), 'site' => $siteArray, ]; // Cached useful links for sidebar $viewData['usefulLinks'] = Cache::remember('content_useful_links', self::CACHE_TTL, function () { return Content::active() ->ofType(Content::TYPE_USEFUL) ->orderBy('ordinal') ->get(); }); if (Auth::check()) { $userId = Auth::id(); // User data with category exclusions (short cache per user) $userdata = Cache::remember('composer_user_'.$userId, self::CACHE_TTL, function () use ($userId) { $user = User::find($userId); $user->categoryexclusions = User::getCategoryExclusionById($userId); return $user; }); // Update last login every 3 hours (outside of cache to avoid stale checks) if (now()->subHours(3) > $userdata->lastlogin) { event(new UserLoggedIn($userdata)); } // Cached menu categories per user (depends on their exclusions) $parentcatlist = Cache::remember('menu_user_'.$userId, self::CACHE_TTL, function () use ($userdata) { return Category::getForMenu($userdata->categoryexclusions); }); $viewData = array_merge($viewData, [ 'userdata' => $userdata, 'loggedin' => true, 'isadmin' => $userdata->hasRole('Admin'), 'ismod' => $userdata->hasRole('Moderator'), 'parentcatlist' => $parentcatlist, 'header_menu_cat' => request()->input('t', ''), ]); } else { $viewData = array_merge($viewData, [ 'isadmin' => false, 'ismod' => false, 'loggedin' => false, ]); } $view->with($viewData); } }