97 lines
3.4 KiB
PHP
97 lines
3.4 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace App\Http\Controllers\Site;
|
|
|
|
use App\Dto\Service\Site\Documentation;
|
|
use App\Services\Site\DocumentationService;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\View\View;
|
|
|
|
final class DocumentationController extends Controller
|
|
{
|
|
public function __construct(
|
|
private readonly DocumentationService $documentationService,
|
|
) { }
|
|
|
|
public function defaultVersion(Request $request): RedirectResponse | View
|
|
{
|
|
$project = $request->get('project');
|
|
$websiteTranslations = $request->get('websiteTranslations');
|
|
|
|
$result = $this->documentationService->defaultVersion($project, $request->user());
|
|
if ($result->isError()) {
|
|
if ($result->getCode() === 404) {
|
|
return view('site.projects.documentation.no-default-version', [
|
|
'project' => $project,
|
|
'websiteTranslations' => $websiteTranslations,
|
|
]);
|
|
}
|
|
$this->errors($result);
|
|
}
|
|
|
|
$url = \App\Enums\Site\ProjectSection::DocumentationVersion->url($project, $websiteTranslations->getLanguage(), ['version' => $result->getVersion()->slug]);
|
|
/**
|
|
* 302 redirect because the documentation version can change at any time.
|
|
*/
|
|
return redirect($url, 302);
|
|
}
|
|
|
|
public function index(Request $request): View
|
|
{
|
|
$documentation = new Documentation(
|
|
project: $request->get('project'),
|
|
version: $request->get('version'),
|
|
websiteTranslations: $request->get('websiteTranslations'),
|
|
user: $request->user(),
|
|
);
|
|
$result = $this->documentationService->index($documentation);
|
|
|
|
if ($result->isError()) {
|
|
$this->errors($result);
|
|
}
|
|
|
|
return view('site.projects.documentation.index', $result->getData());
|
|
}
|
|
|
|
public function category(string $slug, Request $request): View
|
|
{
|
|
$documentation = new Documentation(
|
|
project: $request->get('project'),
|
|
version: $request->get('version'),
|
|
websiteTranslations: $request->get('websiteTranslations'),
|
|
user: $request->user(),
|
|
);
|
|
$result = $this->documentationService->category($slug, $documentation);
|
|
|
|
if ($result->isError()) {
|
|
$this->errors($result);
|
|
}
|
|
if ($result->isTranslation()) {
|
|
return $this->viewPageWithoutTranslation($result);
|
|
}
|
|
|
|
return view('site.projects.documentation.category', $result->getData());
|
|
}
|
|
|
|
public function view(string $slug, Request $request): View
|
|
{
|
|
$documentation = new Documentation(
|
|
project: $request->get('project'),
|
|
version: $request->get('version'),
|
|
websiteTranslations: $request->get('websiteTranslations'),
|
|
user: $request->user(),
|
|
);
|
|
$result = $this->documentationService->view($slug, $documentation);
|
|
|
|
if ($result->isError()) {
|
|
$this->errors($result);
|
|
}
|
|
if ($result->isTranslation()) {
|
|
return $this->viewPageWithoutTranslation($result);
|
|
}
|
|
|
|
return view('site.projects.documentation.view', $result->getData());
|
|
}
|
|
}
|