@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Services\InvestorPath;
|
||||
use App\Services\LegacyContent;
|
||||
use App\Services\VirtualDesk;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Inertia\Inertia;
|
||||
use Inertia\Response;
|
||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||
|
||||
class LegacyContentController extends Controller
|
||||
{
|
||||
public function landing(Request $request, LegacyContent $legacy, string $sectorSlug = 'agronegocio'): Response
|
||||
{
|
||||
$filters = $request->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 !== [];
|
||||
|
||||
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.
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user