Browse Source

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

Mike van Riel 13 năm trước cách đây
mục cha
commit
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 %}