71 lines
2.9 KiB
PHP
71 lines
2.9 KiB
PHP
<?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.
|
|
}
|
|
}
|
|
}
|