Pārlūkot izejas kodu

Add type filter to package list

Jordi Boggiano 12 gadi atpakaļ
vecāks
revīzija
9078b517a0

+ 8 - 4
src/Packagist/WebBundle/Controller/WebController.php

@@ -156,11 +156,15 @@ class WebController extends Controller
      */
     public function listAction(Request $req)
     {
-        $packageNames = $this->getDoctrine()
-            ->getRepository('PackagistWebBundle:Package')
-            ->getPackageNames();
+        $repo = $this->getDoctrine()->getRepository('PackagistWebBundle:Package');
+
+        if ($req->query->get('type')) {
+            $names = $repo->getPackageNamesByType($req->query->get('type'));
+        } else {
+            $names = array_keys($repo->getPackageNames());
+        }
 
-        return new Response(json_encode(array('packageNames' => array_keys($packageNames))), 200);
+        return new JsonResponse(array('packageNames' => $names));
     }
 
     /**

+ 20 - 0
src/Packagist/WebBundle/Entity/PackageRepository.php

@@ -66,6 +66,26 @@ class PackageRepository extends EntityRepository
         return $this->packageNames = $names;
     }
 
+    public function getPackageNamesByType($type)
+    {
+        $query = $this->getEntityManager()
+            ->createQuery("SELECT p.name FROM Packagist\WebBundle\Entity\Package p WHERE p.type = :type")
+            ->setParameters(array('type' => $type));
+
+        $names = array();
+        foreach ($query->getScalarResult() as $row) {
+            $names[] = $row['name'];
+        }
+
+        if (defined('SORT_FLAG_CASE')) {
+            sort($names, SORT_STRING | SORT_FLAG_CASE);
+        } else {
+            sort($names, SORT_STRING);
+        }
+
+        return $names;
+    }
+
     public function getStalePackages()
     {
         $conn = $this->getEntityManager()->getConnection();