|
3 | 3 | namespace CodedMonkey\Dirigent\Controller\Dashboard; |
4 | 4 |
|
5 | 5 | use CodedMonkey\Dirigent\Attribute\IsGrantedAccess; |
6 | | -use CodedMonkey\Dirigent\Doctrine\Entity\Dependent; |
7 | 6 | use CodedMonkey\Dirigent\Doctrine\Entity\Package; |
8 | 7 | use CodedMonkey\Dirigent\Doctrine\Entity\PackageFetchStrategy; |
9 | | -use CodedMonkey\Dirigent\Doctrine\Entity\Provider; |
10 | 8 | use CodedMonkey\Dirigent\Doctrine\Entity\Registry; |
11 | | -use CodedMonkey\Dirigent\Doctrine\Entity\Suggester; |
12 | 9 | use CodedMonkey\Dirigent\Doctrine\Repository\PackageRepository; |
13 | 10 | use CodedMonkey\Dirigent\EasyAdmin\PackagePaginator; |
14 | 11 | use CodedMonkey\Dirigent\Form\PackageAddMirroringFormType; |
15 | 12 | use CodedMonkey\Dirigent\Form\PackageAddVcsFormType; |
16 | 13 | use CodedMonkey\Dirigent\Form\PackageFormType; |
17 | 14 | use CodedMonkey\Dirigent\Message\UpdatePackage; |
18 | 15 | use CodedMonkey\Dirigent\Package\PackageMetadataResolver; |
19 | | -use Composer\Semver\VersionParser; |
20 | 16 | use Doctrine\ORM\EntityManagerInterface; |
21 | 17 | use EasyCorp\Bundle\EasyAdminBundle\Dto\PaginatorDto; |
22 | 18 | use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator; |
@@ -71,149 +67,6 @@ public function list(Request $request): Response |
71 | 67 | ]); |
72 | 68 | } |
73 | 69 |
|
74 | | - #[Route('/dashboard/packages/info/{packageName}/{packageVersion}', name: 'dashboard_packages_info', requirements: ['packageName' => '[a-z0-9_.-]+/[a-z0-9_.-]+'])] |
75 | | - #[IsGrantedAccess] |
76 | | - public function info(string $packageName, ?string $packageVersion = null): Response |
77 | | - { |
78 | | - $package = $this->packageRepository->findOneBy(['name' => $packageName]); |
79 | | - |
80 | | - $versions = $package->getVersions()->toArray(); |
81 | | - $latestVersion = $package->getDefaultVersion(); |
82 | | - |
83 | | - usort($versions, Package::class . '::sortVersions'); |
84 | | - |
85 | | - if (null !== $packageVersion) { |
86 | | - $version = $package->getVersion((new VersionParser())->normalize($packageVersion)); |
87 | | - } else { |
88 | | - $version = $package->getLatestVersion(); |
89 | | - } |
90 | | - |
91 | | - $dependentCount = $this->entityManager->getRepository(Dependent::class)->count(['dependentPackageName' => $package->getName()]); |
92 | | - $implementationCount = $this->entityManager->getRepository(Provider::class)->count(['providedPackageName' => $package->getName() . '-implementation']); |
93 | | - $providerCount = $this->entityManager->getRepository(Provider::class)->count(['providedPackageName' => $package->getName()]); |
94 | | - $suggesterCount = $this->entityManager->getRepository(Suggester::class)->count(['suggestedPackageName' => $package->getName()]); |
95 | | - |
96 | | - return $this->render('dashboard/packages/package_info.html.twig', [ |
97 | | - 'package' => $package, |
98 | | - 'latestVersion' => $latestVersion, |
99 | | - 'version' => $version, |
100 | | - |
101 | | - 'dependentCount' => $dependentCount, |
102 | | - 'implementationCount' => $implementationCount, |
103 | | - 'providerCount' => $providerCount, |
104 | | - 'suggesterCount' => $suggesterCount, |
105 | | - ]); |
106 | | - } |
107 | | - |
108 | | - #[Route('/dashboard/packages/versions/{packageName}', name: 'dashboard_packages_versions', requirements: ['packageName' => '[a-z0-9_.-]+/[a-z0-9_.-]+'])] |
109 | | - #[IsGrantedAccess] |
110 | | - public function versions(string $packageName): Response |
111 | | - { |
112 | | - $package = $this->packageRepository->findOneBy(['name' => $packageName]); |
113 | | - $versions = $package->getVersions()->toArray(); |
114 | | - |
115 | | - usort($versions, Package::class . '::sortVersions'); |
116 | | - |
117 | | - return $this->render('dashboard/packages/package_versions.html.twig', [ |
118 | | - 'package' => $package, |
119 | | - 'versions' => $versions, |
120 | | - ]); |
121 | | - } |
122 | | - |
123 | | - #[Route('/dashboard/packages/dependents/{packageName}', name: 'dashboard_packages_dependents', requirements: ['packageName' => '[a-z0-9_.-]+/[a-z0-9_.-]+'])] |
124 | | - #[IsGrantedAccess] |
125 | | - public function dependents(Request $request, string $packageName): Response |
126 | | - { |
127 | | - $package = $this->packageRepository->findOneBy(['name' => $packageName]); |
128 | | - |
129 | | - $dependentRepository = $this->entityManager->getRepository(Dependent::class); |
130 | | - $queryBuilder = $dependentRepository->createQueryBuilder('dependent'); |
131 | | - $queryBuilder |
132 | | - ->leftJoin('dependent.package', 'package') |
133 | | - ->andWhere('dependent.dependentPackageName = :packageName') |
134 | | - ->setParameter('packageName', $package->getName()) |
135 | | - ->addOrderBy('package.name', 'ASC'); |
136 | | - |
137 | | - $paginatorDto = new PaginatorDto(20, 3, 1, true, null); |
138 | | - $paginatorDto->setPageNumber($request->query->getInt('page', 1)); |
139 | | - $paginator = (new PackagePaginator($this->adminUrlGenerator))->paginate($paginatorDto, $queryBuilder); |
140 | | - $dependents = $paginator->getResults(); |
141 | | - |
142 | | - return $this->render('dashboard/packages/package_dependents.html.twig', [ |
143 | | - 'package' => $package, |
144 | | - 'dependents' => $dependents, |
145 | | - 'paginator' => $paginator, |
146 | | - ]); |
147 | | - } |
148 | | - |
149 | | - #[Route('/dashboard/packages/suggesters/{packageName}', name: 'dashboard_packages_suggesters', requirements: ['packageName' => '[a-z0-9_.-]+/[a-z0-9_.-]+'])] |
150 | | - #[IsGrantedAccess] |
151 | | - public function suggesters(Request $request, string $packageName): Response |
152 | | - { |
153 | | - $package = $this->packageRepository->findOneBy(['name' => $packageName]); |
154 | | - |
155 | | - $suggesterRepository = $this->entityManager->getRepository(Suggester::class); |
156 | | - $queryBuilder = $suggesterRepository->createQueryBuilder('suggester'); |
157 | | - $queryBuilder |
158 | | - ->leftJoin('suggester.package', 'package') |
159 | | - ->andWhere('suggester.suggestedPackageName = :packageName') |
160 | | - ->setParameter('packageName', $package->getName()) |
161 | | - ->addOrderBy('package.name', 'ASC'); |
162 | | - |
163 | | - $paginatorDto = new PaginatorDto(20, 3, 1, true, null); |
164 | | - $paginatorDto->setPageNumber($request->query->getInt('page', 1)); |
165 | | - $paginator = (new PackagePaginator($this->adminUrlGenerator))->paginate($paginatorDto, $queryBuilder); |
166 | | - $suggesters = $paginator->getResults(); |
167 | | - |
168 | | - return $this->render('dashboard/packages/package_suggesters.html.twig', [ |
169 | | - 'package' => $package, |
170 | | - 'suggesters' => $suggesters, |
171 | | - 'paginator' => $paginator, |
172 | | - ]); |
173 | | - } |
174 | | - |
175 | | - #[Route('/dashboard/packages/statistics/{packageName}', name: 'dashboard_packages_statistics', requirements: ['packageName' => '[a-z0-9_.-]+/[a-z0-9_.-]+'])] |
176 | | - #[IsGrantedAccess] |
177 | | - public function statistics(string $packageName): Response |
178 | | - { |
179 | | - $package = $this->packageRepository->findOneBy(['name' => $packageName]); |
180 | | - |
181 | | - $versionInstallationsData = []; |
182 | | - |
183 | | - foreach ($package->getVersions() as $version) { |
184 | | - $majorVersion = $version->getMajorVersion(); |
185 | | - |
186 | | - $versionInstallationsData[$majorVersion] ??= []; |
187 | | - |
188 | | - foreach ($version->getInstallations()->getData() as $key => $installations) { |
189 | | - $versionInstallationsData[$majorVersion][$key] ??= 0; |
190 | | - $versionInstallationsData[$majorVersion][$key] += $installations; |
191 | | - } |
192 | | - } |
193 | | - |
194 | | - $today = new \DateTimeImmutable(); |
195 | | - $todayKey = $today->format('Ymd'); |
196 | | - $installationsToday = $package->getInstallations()->getData()[$todayKey] ?? 0; |
197 | | - |
198 | | - $installationsLast30Days = 0; |
199 | | - $date = new \DateTimeImmutable('-30 days'); |
200 | | - |
201 | | - while ($date <= $today) { |
202 | | - $dateKey = $date->format('Ymd'); |
203 | | - $installationsLast30Days += $package->getInstallations()->getData()[$dateKey] ?? 0; |
204 | | - |
205 | | - $date = $date->modify('+1 day'); |
206 | | - } |
207 | | - |
208 | | - return $this->render('dashboard/packages/package_statistics.html.twig', [ |
209 | | - 'package' => $package, |
210 | | - 'versionInstallationsData' => $versionInstallationsData, |
211 | | - 'installationsTotal' => $package->getInstallations()->getTotal(), |
212 | | - 'installationsLast30Days' => $installationsLast30Days, |
213 | | - 'installationsToday' => $installationsToday, |
214 | | - ]); |
215 | | - } |
216 | | - |
217 | 70 | #[Route('/dashboard/packages/add-mirroring', name: 'dashboard_packages_add_mirroring')] |
218 | 71 | #[IsGranted('ROLE_ADMIN')] |
219 | 72 | public function addMirroring(Request $request): Response |
|
0 commit comments