@@ -45,6 +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 ' => true ]);
49+ $ providerCount = $ this ->entityManager ->getRepository (Provider::class)->count (['providedPackageName ' => $ package ->getName (), 'implementation ' => false ]);
4850 $ suggesterCount = $ this ->entityManager ->getRepository (Suggester::class)->count (['suggestedPackageName ' => $ package ->getName ()]);
4951
5052 return $ this ->render ('dashboard/packages/package_info.html.twig ' , [
@@ -53,6 +55,8 @@ public function info(string $packageName, ?string $packageVersion = null): Respo
5355 'version ' => $ version ,
5456
5557 'dependentCount ' => $ dependentCount ,
58+ 'implementationCount ' => $ implementationCount ,
59+ 'providerCount ' => $ providerCount ,
5660 'suggesterCount ' => $ suggesterCount ,
5761 ]);
5862 }
@@ -98,6 +102,60 @@ public function dependents(Request $request, string $packageName): Response
98102 ]);
99103 }
100104
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+
101159 #[Route('/dashboard/packages/suggesters/{packageName} ' , name: 'dashboard_packages_suggesters ' , requirements: ['packageName ' => '[a-z0-9_.-]+/[a-z0-9_.-]+ ' ])]
102160 #[IsGrantedAccess]
103161 public function suggesters (Request $ request , string $ packageName ): Response
0 commit comments