1010use CodedMonkey \Dirigent \EasyAdmin \PackagePaginator ;
1111use Composer \Semver \VersionParser ;
1212use Doctrine \ORM \EntityManagerInterface ;
13- use EasyCorp \Bundle \EasyAdminBundle \Dto \PaginatorDto ;
1413use Symfony \Bundle \FrameworkBundle \Controller \AbstractController ;
1514use Symfony \Component \HttpFoundation \Request ;
1615use Symfony \Component \HttpFoundation \Response ;
@@ -42,6 +41,8 @@ public function info(string $packageName, ?string $packageVersion = null): Respo
4241 }
4342
4443 $ dependentCount = $ this ->entityManager ->getRepository (Dependent::class)->count (['dependentPackageName ' => $ package ->getName ()]);
44+ $ implementationCount = $ this ->entityManager ->getRepository (Provider::class)->count (['providedPackageName ' => $ package ->getName (), 'implementation ' => true ]);
45+ $ providerCount = $ this ->entityManager ->getRepository (Provider::class)->count (['providedPackageName ' => $ package ->getName (), 'implementation ' => false ]);
4546 $ suggesterCount = $ this ->entityManager ->getRepository (Suggester::class)->count (['suggestedPackageName ' => $ package ->getName ()]);
4647
4748 return $ this ->render ('dashboard/packages/package_info.html.twig ' , [
@@ -50,6 +51,8 @@ public function info(string $packageName, ?string $packageVersion = null): Respo
5051 'version ' => $ version ,
5152
5253 'dependentCount ' => $ dependentCount ,
54+ 'implementationCount ' => $ implementationCount ,
55+ 'providerCount ' => $ providerCount ,
5356 'suggesterCount ' => $ suggesterCount ,
5457 ]);
5558 }
@@ -93,6 +96,56 @@ public function dependents(Request $request, string $packageName): Response
9396 ]);
9497 }
9598
99+ #[Route('/dashboard/packages/implementations/{packageName} ' , name: 'dashboard_packages_implementations ' , requirements: ['packageName ' => '[a-z0-9_.-]+/[a-z0-9_.-]+ ' ])]
100+ #[IsGrantedAccess]
101+ public function implementations (Request $ request , string $ packageName ): Response
102+ {
103+ $ package = $ this ->packageRepository ->findOneBy (['name ' => $ packageName ]);
104+
105+ $ providerRepository = $ this ->entityManager ->getRepository (Provider::class);
106+ $ queryBuilder = $ providerRepository ->createQueryBuilder ('provider ' );
107+ $ queryBuilder
108+ ->leftJoin ('provider.package ' , 'package ' )
109+ ->andWhere ('provider.providedPackageName = :packageName ' )
110+ ->andWhere ('provider.implementation = true ' )
111+ ->setParameter ('packageName ' , $ package ->getName ())
112+ ->addOrderBy ('package.name ' , 'ASC ' );
113+
114+ $ paginator = PackagePaginator::fromRequest ($ request , $ queryBuilder , $ this ->container ->get ('router ' ));
115+ $ providers = $ paginator ->getResults ();
116+
117+ return $ this ->render ('dashboard/packages/package_implementations.html.twig ' , [
118+ 'package ' => $ package ,
119+ 'providers ' => $ providers ,
120+ 'paginator ' => $ paginator ,
121+ ]);
122+ }
123+
124+ #[Route('/dashboard/packages/providers/{packageName} ' , name: 'dashboard_packages_providers ' , requirements: ['packageName ' => '[a-z0-9_.-]+/[a-z0-9_.-]+ ' ])]
125+ #[IsGrantedAccess]
126+ public function providers (Request $ request , string $ packageName ): Response
127+ {
128+ $ package = $ this ->packageRepository ->findOneBy (['name ' => $ packageName ]);
129+
130+ $ providerRepository = $ this ->entityManager ->getRepository (Provider::class);
131+ $ queryBuilder = $ providerRepository ->createQueryBuilder ('provider ' );
132+ $ queryBuilder
133+ ->leftJoin ('provider.package ' , 'package ' )
134+ ->andWhere ('provider.providedPackageName = :packageName ' )
135+ ->andWhere ('provider.implementation = false ' )
136+ ->setParameter ('packageName ' , $ package ->getName ())
137+ ->addOrderBy ('package.name ' , 'ASC ' );
138+
139+ $ paginator = PackagePaginator::fromRequest ($ request , $ queryBuilder , $ this ->container ->get ('router ' ));
140+ $ providers = $ paginator ->getResults ();
141+
142+ return $ this ->render ('dashboard/packages/package_providers.html.twig ' , [
143+ 'package ' => $ package ,
144+ 'providers ' => $ providers ,
145+ 'paginator ' => $ paginator ,
146+ ]);
147+ }
148+
96149 #[Route('/dashboard/packages/suggesters/{packageName} ' , name: 'dashboard_packages_suggesters ' , requirements: ['packageName ' => '[a-z0-9_.-]+/[a-z0-9_.-]+ ' ])]
97150 #[IsGrantedAccess]
98151 public function suggesters (Request $ request , string $ packageName ): Response
0 commit comments