Jordi Boggiano 13 лет назад
Родитель
Сommit
c4fe2f2e8b

+ 33 - 4
src/Packagist/WebBundle/Controller/UserController.php

@@ -14,8 +14,11 @@ namespace Packagist\WebBundle\Controller;
 
 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 use Symfony\Bundle\FrameworkBundle\Controller\Controller;
+use Symfony\Component\HttpFoundation\Request;
 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
+use Pagerfanta\Pagerfanta;
+use Pagerfanta\Adapter\DoctrineORMAdapter;
 
 /**
  * @author Jordi Boggiano <j.boggiano@seld.be>
@@ -24,9 +27,9 @@ class UserController extends Controller
 {
     /**
      * @Template()
-     * @Route("/user/{name}/packages", name="user_packages")
+     * @Route("/users/{name}/packages/", name="user_packages")
      */
-    public function packagesAction($name)
+    public function packagesAction(Request $req, $name)
     {
         $user = $this->getDoctrine()
             ->getRepository('PackagistWebBundle:User')
@@ -36,10 +39,36 @@ class UserController extends Controller
             throw new NotFoundHttpException('The requested user, '.$name.', could not be found.');
         }
 
+        return array('packages' => $this->getUserPackages($req, $user), 'user' => $user);
+    }
+
+    /**
+     * @Template()
+     * @Route("/users/{name}/", name="user_profile")
+     */
+    public function profileAction(Request $req, $name)
+    {
+        $user = $this->getDoctrine()
+            ->getRepository('PackagistWebBundle:User')
+            ->findOneByUsername($name);
+
+        if (!$user) {
+            throw new NotFoundHttpException('The requested user, '.$name.', could not be found.');
+        }
+
+        return array('packages' => $this->getUserPackages($req, $user), 'user' => $user);
+    }
+
+    protected function getUserPackages($req, $user)
+    {
         $packages = $this->getDoctrine()
             ->getRepository('PackagistWebBundle:Package')
-            ->findByMaintainer($user);
+            ->getQueryBuilderByMaintainer($user);
+
+        $paginator = new Pagerfanta(new DoctrineORMAdapter($packages, true));
+        $paginator->setMaxPerPage(15);
+        $paginator->setCurrentPage($req->query->get('page', 1), false, true);
 
-        return array('packages' => $packages, 'user' => $user);
+        return $paginator;
     }
 }

+ 2 - 2
src/Packagist/WebBundle/Entity/PackageRepository.php

@@ -47,14 +47,14 @@ class PackageRepository extends EntityRepository
             ->setParameters(array($name));
     }
 
-    public function findByMaintainer(User $user)
+    public function getQueryBuilderByMaintainer(User $user)
     {
         $qb = $this->getBaseQueryBuilder()
             // eliminate maintainers & tags from the select, because of the groupBy
             ->select('p, v')
             ->where('m.id = ?0')
             ->setParameters(array($user->getId()));
-        return $qb->getQuery()->getResult();
+        return $qb;
     }
 
     public function getBaseQueryBuilder()

+ 2 - 4
src/Packagist/WebBundle/Resources/views/User/packages.html.twig

@@ -1,7 +1,5 @@
-{% extends "PackagistWebBundle:Web:index.html.twig" %}
+{% extends "PackagistWebBundle:Web:list.html.twig" %}
 
 {% block content_title %}
-    <div class="box clearfix">
-        <h1>Packages maintained by {{ user.username }}</h1>
-    </div>
+    <h1>Packages maintained by {{ user.username }}</h1>
 {% endblock %}

+ 17 - 0
src/Packagist/WebBundle/Resources/views/User/profile.html.twig

@@ -0,0 +1,17 @@
+{% extends "PackagistWebBundle::layout.html.twig" %}
+
+{% import "PackagistWebBundle::macros.html.twig" as macros %}
+
+
+{% block content %}
+    <div class="box clearfix">
+        <h1>{{ user.username }}</h1>
+        <p>Member since {{ user.createdAt|date('M d, Y') }}
+        <h2>Packages</h2>
+        {% if packages|length %}
+            {{ macros.listPackages(packages, paginate is not defined or paginate) }}
+        {% else %}
+            <p>No packages found.</p>
+        {% endif %}
+    </div>
+{% endblock %}

+ 2 - 2
src/Packagist/WebBundle/Resources/views/Web/viewPackage.html.twig

@@ -22,9 +22,9 @@
             <p class="details">
                 <span>Maintainer{{ package.maintainers|length > 1 ? 's' : '' }}:</span>
                 {% for maintainer in package.maintainers %}
-                    {{ maintainer.username }}{{ loop.last ? '' : ', ' }}
+                    <a href="{{ path('user_profile', {'name': maintainer.username}) }}">{{ maintainer.username }}</a>{{ loop.last ? '' : ', ' }}
                 {% endfor %}
-                {% if form is defined %}<a id="add-maintainer" href="{{ path('add_maintainer', {'name': package.name}) }}">Add Maintainer</a>{% endif %}
+                {% if form is defined %}(<a id="add-maintainer" href="{{ path('add_maintainer', {'name': package.name}) }}">add maintainer</a>){% endif %}
                 <br />
                 {% if package.versions|length and package.versions[0].homepage %}
                     <span>Homepage:</span> <a href="{{ package.versions[0].homepage }}">{{ package.versions[0].homepage|replace({'http://': ''}) }}</a><br />