Files
archived-doctrine-website/lib/Controllers/ProjectController.php
2023-09-26 22:47:30 +02:00

60 lines
2.1 KiB
PHP

<?php
declare(strict_types=1);
namespace Doctrine\Website\Controllers;
use Doctrine\StaticWebsiteGenerator\Controller\Response;
use Doctrine\Website\Model\Project;
use Doctrine\Website\Model\ProjectContributor;
use Doctrine\Website\Repositories\ProjectContributorRepository;
use Doctrine\Website\Repositories\ProjectRepository;
final readonly class ProjectController
{
/**
* @param ProjectRepository<Project> $projectRepository
* @param ProjectContributorRepository<ProjectContributor> $projectContributorRepository
*/
public function __construct(
private ProjectRepository $projectRepository,
private ProjectContributorRepository $projectContributorRepository,
) {
}
public function index(): Response
{
return new Response([
'primaryProjects' => $this->projectRepository->findPrimaryProjects(),
'inactiveProjects' => $this->projectRepository->findInactiveProjects(),
'archivedProjects' => $this->projectRepository->findArchivedProjects(),
'integrationProjects' => $this->projectRepository->findIntegrationProjects(),
]);
}
public function view(string $slug): Response
{
$project = $this->projectRepository->findOneBySlug($slug);
return new Response([
'project' => $project,
'integrationProjects' => $this->projectRepository->findProjectIntegrations($project),
'maintainers' => $this->projectContributorRepository->findMaintainersByProject($project),
'contributors' => $this->projectContributorRepository->findContributorsByProject($project),
], '/project.html.twig');
}
public function version(string $slug, string $versionSlug): Response
{
$project = $this->projectRepository->findOneBySlug($slug);
$version = $project->getVersion($versionSlug);
return new Response([
'project' => $project,
'version' => $version,
'latestTag' => $version->getLatestTag(),
], '/project-version.html.twig');
}
}