@@ -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
0 commit comments