Skip to content

Commit dd2a777

Browse files
committed
Add package link pages for providers and implementations
1 parent 0a9e2a2 commit dd2a777

File tree

5 files changed

+80
-4
lines changed

5 files changed

+80
-4
lines changed

src/Controller/Dashboard/DashboardPackagesInfoController.php

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ public function info(string $packageName, ?string $packageVersion = null): Respo
4545
}
4646

4747
$dependentCount = $this->entityManager->getRepository(Dependent::class)->count(['dependentPackageName' => $package->getName()]);
48-
$implementationCount = $this->entityManager->getRepository(Provider::class)->count(['providedPackageName' => $package->getName() . '-implementation']);
49-
$providerCount = $this->entityManager->getRepository(Provider::class)->count(['providedPackageName' => $package->getName()]);
48+
$implementationCount = $this->entityManager->getRepository(Provider::class)->count(['providedPackageName' => $package->getName(), 'implementation' => true]);;
49+
$providerCount = $this->entityManager->getRepository(Provider::class)->count(['providedPackageName' => $package->getName(), 'implementation' => false]);;;
5050
$suggesterCount = $this->entityManager->getRepository(Suggester::class)->count(['suggestedPackageName' => $package->getName()]);
5151

5252
return $this->render('dashboard/packages/package_info.html.twig', [
@@ -102,6 +102,60 @@ public function dependents(Request $request, string $packageName): Response
102102
]);
103103
}
104104

105+
#[Route('/dashboard/packages/implementations/{packageName}', name: 'dashboard_packages_implementations', requirements: ['packageName' => '[a-z0-9_.-]+/[a-z0-9_.-]+'])]
106+
#[IsGrantedAccess]
107+
public function implementations(Request $request, string $packageName): Response
108+
{
109+
$package = $this->packageRepository->findOneBy(['name' => $packageName]);
110+
111+
$providerRepository = $this->entityManager->getRepository(Provider::class);
112+
$queryBuilder = $providerRepository->createQueryBuilder('provider');
113+
$queryBuilder
114+
->leftJoin('provider.package', 'package')
115+
->andWhere('provider.providedPackageName = :packageName')
116+
->andWhere('provider.implementation = true')
117+
->setParameter('packageName', $package->getName())
118+
->addOrderBy('package.name', 'ASC');
119+
120+
$paginatorDto = new PaginatorDto(20, 3, 1, true, null);
121+
$paginatorDto->setPageNumber($request->query->getInt('page', 1));
122+
$paginator = (new PackagePaginator($this->adminUrlGenerator))->paginate($paginatorDto, $queryBuilder);
123+
$providers = $paginator->getResults();
124+
125+
return $this->render('dashboard/packages/package_implementations.html.twig', [
126+
'package' => $package,
127+
'providers' => $providers,
128+
'paginator' => $paginator,
129+
]);
130+
}
131+
132+
#[Route('/dashboard/packages/providers/{packageName}', name: 'dashboard_packages_providers', requirements: ['packageName' => '[a-z0-9_.-]+/[a-z0-9_.-]+'])]
133+
#[IsGrantedAccess]
134+
public function providers(Request $request, string $packageName): Response
135+
{
136+
$package = $this->packageRepository->findOneBy(['name' => $packageName]);
137+
138+
$providerRepository = $this->entityManager->getRepository(Provider::class);
139+
$queryBuilder = $providerRepository->createQueryBuilder('provider');
140+
$queryBuilder
141+
->leftJoin('provider.package', 'package')
142+
->andWhere('provider.providedPackageName = :packageName')
143+
->andWhere('provider.implementation = false')
144+
->setParameter('packageName', $package->getName())
145+
->addOrderBy('package.name', 'ASC');
146+
147+
$paginatorDto = new PaginatorDto(20, 3, 1, true, null);
148+
$paginatorDto->setPageNumber($request->query->getInt('page', 1));
149+
$paginator = (new PackagePaginator($this->adminUrlGenerator))->paginate($paginatorDto, $queryBuilder);
150+
$providers = $paginator->getResults();
151+
152+
return $this->render('dashboard/packages/package_providers.html.twig', [
153+
'package' => $package,
154+
'providers' => $providers,
155+
'paginator' => $paginator,
156+
]);
157+
}
158+
105159
#[Route('/dashboard/packages/suggesters/{packageName}', name: 'dashboard_packages_suggesters', requirements: ['packageName' => '[a-z0-9_.-]+/[a-z0-9_.-]+'])]
106160
#[IsGrantedAccess]
107161
public function suggesters(Request $request, string $packageName): Response
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{% extends 'dashboard/packages/package_base.html.twig' %}
2+
3+
{% block page_title %}{{ package.name }} <small>{{ 'Implementations'|trans }}</small>{% endblock %}
4+
5+
{% block page_content %}
6+
{% include 'dashboard/packages/package_header.html.twig' with {currentPage: 'implementations'} %}
7+
8+
{% include 'dashboard/packages/_package_list.html.twig' with {packages: providers|map(provider => provider.package)} %}
9+
{% endblock %}

templates/dashboard/packages/package_info.html.twig

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,10 @@
4949
<div><a href="{{ packageDependentsUrl }}">{{ 'Dependents'|trans }}</a>: {{ dependentCount }}</div>
5050
{% set packageSuggestersUrl = dashboard_path('dashboard_packages_suggesters', {packageName: package.name}) %}
5151
<div><a href="{{ packageSuggestersUrl }}">{{ 'Suggesters'|trans }}</a>: {{ suggesterCount }}</div>
52-
<div>{{ 'Providers'|trans }}: {{ providerCount }}</div>
53-
<div>{{ 'Implementations'|trans }}: {{ implementationCount }}</div>
52+
{% set packageImplementationsUrl = dashboard_path('dashboard_packages_implementations', {packageName: package.name}) %}
53+
<div><a href="{{ packageImplementationsUrl }}">{{ 'Implementations'|trans }}</a>: {{ implementationCount }}</div>
54+
{% set packageProvidersUrl = dashboard_path('dashboard_packages_providers', {packageName: package.name}) %}
55+
<div><a href="{{ packageProvidersUrl }}">{{ 'Providers'|trans }}</a>: {{ providerCount }}</div>
5456
{% if version.license %}
5557
<div>License: {{ version.license|join(', ') }}</div>
5658
{% else %}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{% extends 'dashboard/packages/package_base.html.twig' %}
2+
3+
{% block page_title %}{{ package.name }} <small>{{ 'Providers'|trans }}</small>{% endblock %}
4+
5+
{% block page_content %}
6+
{% include 'dashboard/packages/package_header.html.twig' with {currentPage: 'providers'} %}
7+
8+
{% include 'dashboard/packages/_package_list.html.twig' with {packages: providers|map(provider => provider.package)} %}
9+
{% endblock %}

translations/messages.en.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@ Credits: Credits
44
Dashboard: Dashboard
55
Dependents: Dependents
66
Documentation: Documentation
7+
Implementations: Implementations
78
Info: Info
89
Packages: Packages
910
Personal: Personal
11+
Providers: Providers
1012
Sign out: Sign out
1113
Statistics: Statistics
1214
Suggesters: Suggesters

0 commit comments

Comments
 (0)