validate(['q' => 'nullable|string|max:120']); $articles = $legacy->articlesForGroup($sectorSlug); $root = config('legacy_content.groups.'.$sectorSlug.'.root'); $article = $legacy->article($root); $q = $filters['q'] ?? ''; $articles = array_values(array_filter($articles, fn ($item) => $q === '' || str_contains(mb_strtolower(strip_tags($item['html'].' '.$item['title'])), mb_strtolower($q)))); $match = $articles !== []; app(PublicSearchMetrics::class)->candidate($request, 'sector_content', count($articles), ['q' => $q]); return Inertia::render('portal/legacy', ['article' => $article, 'articles' => $articles, 'view' => 'landing', 'query' => $q, 'match' => $match]); } public function article(Request $request, LegacyContent $legacy, string $legacySlug = 'agronegocio'): Response { return Inertia::render('portal/legacy', ['article' => $legacy->article($legacySlug), 'view' => 'article', 'contentContext' => $this->context($request)]); } public function start(Request $request, LegacyContent $legacy, InvestorPath $path, string $legacySlug = 'agronegocio'): Response { abort_unless($path->available(), 404); $article = $legacy->article($legacySlug); return Inertia::render('investor-path/index', ['contexts' => $path->contexts($request->user()), 'contentSource' => $article]); } public function attach(Request $request, string $id, LegacyContent $legacy): JsonResponse|RedirectResponse { $legacy->attach($request->user(), $id, $request->all()); return $request->expectsJson() ? response()->json(['saved' => true]) : redirect('/investimentos/'.$id)->with('success', 'ReferĂȘncia guardada no dossier.'); } /** @return array{id: string, title: string}|null */ private function context(Request $request): ?array { $data = $request->validate(['context' => 'nullable|uuid']); if (! $request->user() || empty($data['context'])) { return null; } try { $case = app(VirtualDesk::class)->case($request->user(), $data['context'], true); return $case->closed_at ? null : ['id' => $case->id, 'title' => $case->title]; } catch (HttpException $error) { if (! in_array($error->getStatusCode(), [403, 404], true)) { throw $error; } return null; // Consultation stays public; an unauthorized private context is never returned. } } }