A documentation section has been added to the site.
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
<?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());
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user