1212use CodedMonkey \Dirigent \Form \PackageFormType ;
1313use CodedMonkey \Dirigent \Message \UpdatePackage ;
1414use CodedMonkey \Dirigent \Package \PackageMetadataResolver ;
15- use Composer \Semver \VersionParser ;
1615use Doctrine \ORM \EntityManagerInterface ;
17- use Doctrine \ORM \QueryBuilder ;
18- use EasyCorp \Bundle \EasyAdminBundle \Contracts \Orm \EntityPaginatorInterface ;
19- use EasyCorp \Bundle \EasyAdminBundle \Dto \PaginatorDto ;
2016use Symfony \Bundle \FrameworkBundle \Controller \AbstractController ;
2117use Symfony \Component \HttpFoundation \Request ;
2218use Symfony \Component \HttpFoundation \Response ;
@@ -46,7 +42,7 @@ public function list(Request $request): Response
4642 $ queryBuilder ->setParameter ('query ' , "% {$ query }% " );
4743 }
4844
49- $ paginator = $ this -> createPackagePaginator ($ request , $ queryBuilder );
45+ $ paginator = PackagePaginator:: fromRequest ($ request , $ queryBuilder, $ this -> container -> get ( ' router ' ) );
5046 $ packages = $ paginator ->getResults ();
5147
5248 return $ this ->render ('dashboard/packages/list.html.twig ' , [
@@ -55,89 +51,6 @@ public function list(Request $request): Response
5551 ]);
5652 }
5753
58- #[Route('/packages/{packageName} ' , name: 'dashboard_packages_info ' , requirements: ['packageName ' => '[a-z0-9_.-]+/[a-z0-9_.-]+ ' ])]
59- #[IsGrantedAccess]
60- public function info (string $ packageName ): Response
61- {
62- $ package = $ this ->packageRepository ->findOneBy (['name ' => $ packageName ]);
63- $ version = $ package ->getLatestVersion ();
64-
65- return $ this ->render ('dashboard/packages/package_info.html.twig ' , [
66- 'package ' => $ package ,
67- 'version ' => $ version ,
68- ]);
69- }
70-
71- #[Route('/packages/{packageName}/v/{packageVersion} ' , name: 'dashboard_packages_version_info ' , requirements: ['packageName ' => '[a-z0-9_.-]+/[a-z0-9_.-]+ ' ])]
72- #[IsGrantedAccess]
73- public function versionInfo (string $ packageName , string $ packageVersion ): Response
74- {
75- $ package = $ this ->packageRepository ->findOneBy (['name ' => $ packageName ]);
76- $ version = $ package ->getVersion ((new VersionParser ())->normalize ($ packageVersion ));
77-
78- return $ this ->render ('dashboard/packages/package_info.html.twig ' , [
79- 'package ' => $ package ,
80- 'version ' => $ version ,
81- ]);
82- }
83-
84- #[Route('/packages/{packageName}/versions ' , name: 'dashboard_packages_versions ' , requirements: ['packageName ' => '[a-z0-9_.-]+/[a-z0-9_.-]+ ' ])]
85- #[IsGrantedAccess]
86- public function versions (string $ packageName ): Response
87- {
88- $ package = $ this ->packageRepository ->findOneBy (['name ' => $ packageName ]);
89- $ versions = $ package ->getVersions ()->toArray ();
90-
91- usort ($ versions , Package::class . '::sortVersions ' );
92-
93- return $ this ->render ('dashboard/packages/package_versions.html.twig ' , [
94- 'package ' => $ package ,
95- 'versions ' => $ versions ,
96- ]);
97- }
98-
99- #[Route('/packages/{packageName}/statistics ' , name: 'dashboard_packages_statistics ' , requirements: ['packageName ' => '[a-z0-9_.-]+/[a-z0-9_.-]+ ' ])]
100- #[IsGrantedAccess]
101- public function statistics (string $ packageName ): Response
102- {
103- $ package = $ this ->packageRepository ->findOneBy (['name ' => $ packageName ]);
104-
105- $ versionInstallationsData = [];
106-
107- foreach ($ package ->getVersions () as $ version ) {
108- $ majorVersion = $ version ->getMajorVersion ();
109-
110- $ versionInstallationsData [$ majorVersion ] ??= [];
111-
112- foreach ($ version ->getInstallations ()->getData () as $ key => $ installations ) {
113- $ versionInstallationsData [$ majorVersion ][$ key ] ??= 0 ;
114- $ versionInstallationsData [$ majorVersion ][$ key ] += $ installations ;
115- }
116- }
117-
118- $ today = new \DateTimeImmutable ();
119- $ todayKey = $ today ->format ('Ymd ' );
120- $ installationsToday = $ package ->getInstallations ()->getData ()[$ todayKey ] ?? 0 ;
121-
122- $ installationsLast30Days = 0 ;
123- $ date = new \DateTimeImmutable ('-30 days ' );
124-
125- while ($ date <= $ today ) {
126- $ dateKey = $ date ->format ('Ymd ' );
127- $ installationsLast30Days += $ package ->getInstallations ()->getData ()[$ dateKey ] ?? 0 ;
128-
129- $ date = $ date ->modify ('+1 day ' );
130- }
131-
132- return $ this ->render ('dashboard/packages/package_statistics.html.twig ' , [
133- 'package ' => $ package ,
134- 'versionInstallationsData ' => $ versionInstallationsData ,
135- 'installationsTotal ' => $ package ->getInstallations ()->getTotal (),
136- 'installationsLast30Days ' => $ installationsLast30Days ,
137- 'installationsToday ' => $ installationsToday ,
138- ]);
139- }
140-
14154 #[Route('/packages/add-mirroring ' , name: 'dashboard_packages_add_mirroring ' )]
14255 #[IsGranted('ROLE_ADMIN ' )]
14356 public function addMirroring (Request $ request ): Response
@@ -291,18 +204,4 @@ public function delete(string $packageName): Response
291204
292205 return $ this ->redirectToRoute ('dashboard_packages ' );
293206 }
294-
295- private function createPackagePaginator (Request $ request , QueryBuilder $ queryBuilder ): EntityPaginatorInterface
296- {
297- $ paginatorDto = new PaginatorDto (20 , 3 , 1 , true , null );
298- $ paginatorDto ->setPageNumber ($ request ->query ->getInt ('page ' , 1 ));
299-
300- $ paginator = new PackagePaginator (
301- $ this ->container ->get ('router ' ),
302- $ request ->attributes ->get ('_route ' ),
303- $ request ->attributes ->get ('_route_params ' ),
304- );
305-
306- return $ paginator ->paginate ($ paginatorDto , $ queryBuilder );
307- }
308207}
0 commit comments