Selaa lähdekoodia

implement /packages/{vendor} (closes #52)

Igor Wiedler 13 vuotta sitten
vanhempi
commit
f3ba67e38e

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

@@ -143,9 +143,30 @@ class WebController extends Controller
 
     /**
      * @Template()
-     * @Route("/packages/{name}", name="view", requirements={"name"="[A-Za-z0-9/_-]+"})
+     * @Route("/packages/{vendor}/", name="view_vendor", requirements={"vendor"="[A-Za-z0-9_.-]+"})
      */
-    public function viewAction($name)
+    public function viewVendorAction($vendor)
+    {
+        $packages = $this->getDoctrine()
+            ->getRepository('PackagistWebBundle:Package')
+            ->createQueryBuilder('p')
+            ->where('p.name LIKE ?0')
+            ->setParameters(array($vendor.'/%'))
+            ->getQuery()
+            ->getResult();
+
+        if (!$packages) {
+            throw new NotFoundHttpException('The requested vendor, '.$vendor.', was not found.');
+        }
+
+        return array('packages' => $packages, 'vendor' => $vendor, 'paginate' => false);
+    }
+
+    /**
+     * @Template()
+     * @Route("/packages/{name}", name="view_package", requirements={"name"="[A-Za-z0-9_.-]+/[A-Za-z0-9/_.-]+"})
+     */
+    public function viewPackageAction($name)
     {
         $package = $this->getDoctrine()
             ->getRepository('PackagistWebBundle:Package')

+ 10 - 0
src/Packagist/WebBundle/Entity/Package.php

@@ -180,6 +180,16 @@ class Package
         return $this->name;
     }
 
+    /**
+     * Get vendor
+     *
+     * @return string $vendor
+     */
+    public function getVendor()
+    {
+        return preg_replace('{/.*$}', '', $this->name);
+    }
+
     /**
      * Set description
      *

+ 8 - 5
src/Packagist/WebBundle/Resources/views/Web/list.html.twig

@@ -9,10 +9,10 @@
                     <li class="has-popup">
                         <section>
                             {% if package.versions|length and package.versions[0].description|length %}
-                                <h1 class="has-description"><a href="{{ url('view', { 'name' : package.name }) }}">{{ package.name }}</a></h1>
+                                <h1 class="has-description"><a href="{{ path('view_package', { 'name' : package.name }) }}">{{ package.name }}</a></h1>
                                 <p class="package-description">{{ package.versions[0].description }}</p>
                             {% else %}
-                                <h1><a href="{{ url('view', { 'name' : package.name }) }}">{{ package.name }}</a></h1>
+                                <h1><a href="{{ path('view_package', { 'name' : package.name }) }}">{{ package.name }}</a></h1>
                             {% endif %}
                             <div class="package-details"><div>
                             {% if package.versions|length %}
@@ -22,7 +22,7 @@
                                     {% if package.versions[0].homepage %}
                                         Homepage: <a href="{{ package.versions[0].homepage }}">{{ package.versions[0].homepage|replace({'http://': ''}) }}</a><br />
                                     {% endif %}
-                                    Tags: {% for tag in package.versions[0].tags %}<a href="{{ url("browse", { "tag" : tag.name }) }}">{{ tag.name }}</a>{{ loop.last ? '' : ', ' }}{% endfor %}
+                                    Tags: {% for tag in package.versions[0].tags %}<a href="{{ path("browse", { "tag" : tag.name }) }}">{{ tag.name }}</a>{{ loop.last ? '' : ', ' }}{% endfor %}
                                 </p>
                             {% elseif package.crawledAt is null %}
                                 <p>This package has not been crawled yet, some information is missing.</p>
@@ -32,13 +32,16 @@
 
                             <p class="maintainers">Maintainer{{ package.maintainers|length > 1 ? 's' : '' }}:
                             {% for maintainer in package.maintainers %}
-                                <a href="{{ url("user_packages", { "name" : maintainer.username }) }}">{{ maintainer.username }}</a>{{ loop.last ? '' : ', ' }}
+                                <a href="{{ path("user_packages", { "name" : maintainer.username }) }}">{{ maintainer.username }}</a>{{ loop.last ? '' : ', ' }}
                             {% endfor %}</p>
                             </div></div>
                         </section>
                     </li>
                 {% endfor %}
-                {{ pagerfanta(packages, 'default', {'proximity': 2}) }}
+
+                {% if paginate is defined and paginate %}
+                    {{ pagerfanta(packages, 'default', {'proximity': 2}) }}
+                {% endif %}
             </ul>
         {% else %}
             <p>No packages found.</p>

+ 1 - 0
src/Packagist/WebBundle/Resources/views/Web/view.html.twig → src/Packagist/WebBundle/Resources/views/Web/viewPackage.html.twig

@@ -7,6 +7,7 @@
 {% block content %}
     <div class="box clearfix">
         <div class="package">
+            <p style="float: right;"><a href="{{ path("view_vendor", {"vendor": package.vendor}) }}">View more packages from {{ package.vendor }}.</a></p>
             <h1>{{ package.name }}</h1>
             <p class="maintainers">Maintainer{{ package.maintainers|length > 1 ? 's' : '' }}:
             {% for maintainer in package.maintainers %}

+ 3 - 0
src/Packagist/WebBundle/Resources/views/Web/viewVendor.html.twig

@@ -0,0 +1,3 @@
+{% extends "PackagistWebBundle:Web:list.html.twig" %}
+
+{% block content_title %}<h1>Packages from {{ vendor }}</h1>{% endblock %}