瀏覽代碼

Fixed issues from code review and allowed tag and type to filter simultaneously in the packages webpage

Mike van Riel 13 年之前
父節點
當前提交
229b598322

+ 3 - 3
src/Packagist/WebBundle/Controller/ApiController.php

@@ -37,15 +37,15 @@ class ApiController extends Controller
     {
         $em = $this->get('doctrine')->getEntityManager();
 
-        $filter_fields = array();
+        $filterFields = array();
         if ($this->getRequest()->get('type')) {
-            $filter_fields['type'] = $this->getRequest()->get('type');
+            $filterFields['type'] = $this->getRequest()->get('type');
         }
 
         gc_enable();
 
         $packages = $em->getRepository('Packagist\WebBundle\Entity\Package')
-            ->getFullPackages(null, $filter_fields);
+            ->getFullPackages(null, $filterFields);
 
         $notifyUrl = $this->generateUrl('track_download', array('name' => 'VND/PKG'));
 

+ 23 - 10
src/Packagist/WebBundle/Controller/WebController.php

@@ -64,26 +64,38 @@ class WebController extends Controller
         $repository = $this->getDoctrine()->getRepository('PackagistWebBundle:Package');
         $packages = $repository->getBaseQueryBuilder();
         $view = 'PackagistWebBundle:Web:browse.html.twig';
-        $extra_view_options = array();
+        $extraViewOptions = array();
 
-        if ($tag = $req->query->get('tag')) {
+        $type = $req->query->get('type');
+        $tag = $req->query->get('tag');
+        $page = $req->query->get('page', 1);
+
+        if ($tag) {
             $packages = $this->getDoctrine()
                 ->getRepository('PackagistWebBundle:Package')
                 ->findByTag($tag);
-            $view               = 'PackagistWebBundle:Web:tag.html.twig';
-            $extra_view_options = array('tag' => $tag);
-        } elseif ($type = $req->query->get('type')) {
-            $packages->where('p.type=:type')->setParameter('type', $type);
-            $view               = 'PackagistWebBundle:Web:type.html.twig';
-            $extra_view_options = array('type' => $type);
+            $view = 'PackagistWebBundle:Web:tag.html.twig';
+            $extraViewOptions['tag'] = $tag;
+        }
+
+        if ($type) {
+            // this andWhere either tags onto the $packages defined in the $tag
+            // if-statement, or if tags onto the $packages defined at the start
+            // of the method
+            $packages->andWhere('p.type=:type')->setParameter('type', $type);
+            $view = 'PackagistWebBundle:Web:type.html.twig';
+            $extraViewOptions['type'] = $type;
+        }
+
+        if ($tag && $type) {
+            $view = 'PackagistWebBundle:Web:tagAndType.html.twig';
         }
 
-        $page = $req->query->get('page', 1);
         return $this->render(
             $view,
             array_merge(
                 array('packages' => $this->setupPager($packages, $page)),
-                $extra_view_options
+                $extraViewOptions
             )
         );
     }
@@ -100,6 +112,7 @@ class WebController extends Controller
         $paginator = new Pagerfanta(new DoctrineORMAdapter($query, true));
         $paginator->setMaxPerPage(15);
         $paginator->setCurrentPage($page, false, true);
+
         return $paginator;
     }
 

+ 5 - 0
src/Packagist/WebBundle/Resources/views/Web/tagAndType.html.twig

@@ -0,0 +1,5 @@
+{% extends "PackagistWebBundle:Web:list.html.twig" %}
+
+{% block content_title %}
+    <h1>Packages of type {{ type }} and tagged with {{ tag }}</h1>
+{% endblock %}