55use CodedMonkey \Dirigent \Attribute \IsGrantedAccess ;
66use CodedMonkey \Dirigent \Doctrine \Entity \Package ;
77use CodedMonkey \Dirigent \Doctrine \Entity \PackageFetchStrategy ;
8+ use CodedMonkey \Dirigent \Doctrine \Entity \Registry ;
89use CodedMonkey \Dirigent \Doctrine \Repository \PackageRepository ;
10+ use CodedMonkey \Dirigent \Doctrine \Repository \RegistryRepository ;
911use CodedMonkey \Dirigent \EasyAdmin \PackagePaginator ;
1012use CodedMonkey \Dirigent \Form \PackageAddMirroringFormType ;
1113use CodedMonkey \Dirigent \Form \PackageAddVcsFormType ;
1921use Symfony \Component \Messenger \MessageBusInterface ;
2022use Symfony \Component \Routing \Attribute \Route ;
2123use Symfony \Component \Security \Http \Attribute \IsGranted ;
24+ use function Symfony \Component \String \u ;
2225
2326class DashboardPackagesController extends AbstractController
2427{
@@ -32,19 +35,46 @@ public function __construct(
3235
3336 #[Route('/packages ' , name: 'dashboard_packages ' )]
3437 #[IsGrantedAccess]
35- public function list (Request $ request ): Response
38+ public function list (Request $ request, RegistryRepository $ registryRepository ): Response
3639 {
3740 $ queryBuilder = $ this ->packageRepository ->createQueryBuilder ('package ' );
41+ $ filtersActive = false ;
42+
43+ if ($ request ->query ->has ('query ' )) {
44+ $ filtersActive = true ;
45+ $ searchQuery = $ request ->query ->getString ('query ' );
46+ $ searchQuery = u ($ searchQuery )->lower ();
3847
39- if (null !== $ query = $ request ->query ->get ('query ' )) {
4048 $ queryBuilder ->andWhere ($ queryBuilder ->expr ()->like ('package.name ' , ':query ' ));
41- $ queryBuilder ->setParameter ('query ' , "% {$ query }% " );
49+ $ queryBuilder ->setParameter ('query ' , "% {$ searchQuery }% " );
50+ }
51+
52+ if ($ request ->query ->has ('registry ' )) {
53+ $ registryId = $ request ->query ->getInt ('registry ' );
54+
55+ if (0 === $ registryId ) {
56+ $ filtersActive = true ;
57+ $ selectedRegistry = 'local ' ;
58+
59+ $ queryBuilder ->andWhere ($ queryBuilder ->expr ()->isNull ('package.mirrorRegistry ' ));
60+ } elseif (null !== $ selectedRegistry = $ registryRepository ->find ($ registryId )) {
61+ $ filtersActive = true ;
62+
63+ $ queryBuilder ->andWhere ($ queryBuilder ->expr ()->eq ('package.mirrorRegistry ' , ':registry ' ));
64+ $ queryBuilder ->setParameter ('registry ' , $ selectedRegistry );
65+ }
4266 }
4367
4468 $ paginator = PackagePaginator::fromRequest ($ request , $ queryBuilder , $ this ->container ->get ('router ' ));
4569
70+ $ registries = $ this ->entityManager ->getRepository (Registry::class)->findAll ();
71+
4672 return $ this ->render ('dashboard/packages/list.html.twig ' , [
73+ 'filtersActive ' => $ filtersActive ,
4774 'paginator ' => $ paginator ,
75+ 'registries ' => $ registries ,
76+ 'searchQuery ' => $ searchQuery ?? null ,
77+ 'selectedRegistry ' => $ selectedRegistry ?? null ,
4878 ]);
4979 }
5080
0 commit comments