ソースを参照

Merge user profile stuff with previous changes

Jordi Boggiano 14 年 前
コミット
fdba0fcbb0

+ 10 - 6
src/Packagist/WebBundle/Controller/UserController.php

@@ -21,18 +21,22 @@ class UserController extends Controller
 {
     /**
      * @Template()
-     * @Route("/user/{id}/packages", name="user_packages")
+     * @Route("/user/{name}/packages", name="user_packages")
      */
-    public function packagesAction($id)
+    public function packagesAction($name)
     {
         $user = $this->getDoctrine()
             ->getRepository('PackagistWebBundle:User')
-            ->findOneById($id);
+            ->findOneByUsername($name);
 
-        if (empty($user)) {
-            throw new NotFoundHttpException();
+        if (!$user) {
+            throw new NotFoundHttpException('The requested user, '.$name.', could not be found.');
         }
 
-        return array('user' => $user);
+        $packages = $this->getDoctrine()
+            ->getRepository('PackagistWebBundle:Package')
+            ->findByMaintainer($user);
+
+        return array('packages' => $packages, 'user' => $user);
     }
 }

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

@@ -46,6 +46,17 @@ class PackageRepository extends EntityRepository
         return $qb->getQuery()->getResult();
     }
 
+    public function findByMaintainer(User $user)
+    {
+        $qb = $this->getBaseQueryBuilder()
+            // eliminate maintainers from the select, otherwise only $user is visible in the results' maintainers
+            ->select('p, v, t')
+            ->where('m.id = ?0')
+            ->groupBy('p.id')
+            ->setParameters(array($user->getId()));
+        return $qb->getQuery()->getResult();
+    }
+
     private function getBaseQueryBuilder()
     {
         $qb = $this->getEntityManager()->createQueryBuilder();

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

@@ -1,24 +1,5 @@
-{% extends "PackagistWebBundle::layout.html.twig" %}
+{% extends "PackagistWebBundle:Web:index.html.twig" %}
 
-{% block content %}
-    <h1>Packages by {{ user.username }}</h1>
-    {% for package in user.packages %}
-        <section class="package">
-            <h2>{{ package.name }}</h2>
-            {% if package.versions[0] is defined %}
-                <p class="description">{{ package.versions[0].description }}</p>
-                <p class="license">License: {{ package.versions[0].license|default("Unknown") }}</p>
-                <p class="links">
-                    {% 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 %}{{ tag.name }}{{ loop.last ? '' : ', ' }}{% endfor %}
-                </p>
-            {% elseif package.crawledAt == null %}
-                This package has not been crawled yet, some information is missing.
-            {% else %}
-                This package has no released version yet, and little information is available yet.
-            {% endif %}
-        </section>
-    {% endfor %}
-{% endblock %}
+{% block content_title %}
+<h1>Packages maintained by {{ user.username }}</h1>
+{% endblock %}

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

@@ -22,8 +22,7 @@
 
             <p class="maintainers">Maintainer{{ package.maintainers|length > 1 ? 's' : '' }}:
             {% for maintainer in package.maintainers %}
-                <a href="{{ url("user_packages", { "id" : maintainer.id }) }}">{{ maintainer.username }}</a>{{ loop.last ? '' : ', ' }}
-                {{ maintainer.username }}{{ loop.last ? '' : ', ' }}
+                <a href="{{ url("user_packages", { "name" : maintainer.username }) }}">{{ maintainer.username }}</a>{{ loop.last ? '' : ', ' }}
             {% endfor %}</p>
         </section>
     {% else %}