Browse Source

Add vendor filtering for the list API

Jordi Boggiano 12 years ago
parent
commit
40dbe609bd

+ 2 - 0
src/Packagist/WebBundle/Controller/WebController.php

@@ -160,6 +160,8 @@ class WebController extends Controller
 
         if ($req->query->get('type')) {
             $names = $repo->getPackageNamesByType($req->query->get('type'));
+        } elseif ($req->query->get('vendor')) {
+            $names = $repo->getPackageNamesByVendor($req->query->get('vendor'));
         } else {
             $names = array_keys($repo->getPackageNames());
         }

+ 16 - 6
src/Packagist/WebBundle/Entity/PackageRepository.php

@@ -49,15 +49,11 @@ class PackageRepository extends EntityRepository
         }
 
         if (!is_array($names)) {
-            $names = array();
-
             $query = $this->getEntityManager()
                 ->createQuery("SELECT p.name FROM Packagist\WebBundle\Entity\Package p");
 
-            foreach ($query->getScalarResult() as $package) {
-                $names[$package['name']] = strtolower($package['name']);
-            }
-
+            $names = $this->getPackageNamesForQuery($query);
+            $names = array_combine($names, array_map('strtolower', $names));
             if ($apc) {
                 apc_store('packagist_package_names', $names, 3600);
             }
@@ -72,6 +68,20 @@ class PackageRepository extends EntityRepository
             ->createQuery("SELECT p.name FROM Packagist\WebBundle\Entity\Package p WHERE p.type = :type")
             ->setParameters(array('type' => $type));
 
+        return $this->getPackageNamesForQuery($query);
+    }
+
+    public function getPackageNamesByVendor($vendor)
+    {
+        $query = $this->getEntityManager()
+            ->createQuery("SELECT p.name FROM Packagist\WebBundle\Entity\Package p WHERE p.name LIKE :vendor")
+            ->setParameters(array('vendor' => $vendor.'/%'));
+
+        return $this->getPackageNamesForQuery($query);
+    }
+
+    private function getPackageNamesForQuery($query)
+    {
         $names = array();
         foreach ($query->getScalarResult() as $row) {
             $names[] = $row['name'];