|
@@ -61,27 +61,59 @@ class WebController extends Controller
|
|
|
*/
|
|
|
public function browseAction(Request $req)
|
|
|
{
|
|
|
- if ($tag = $req->query->get('tag')) {
|
|
|
+ $repository = $this->getDoctrine()->getRepository('PackagistWebBundle:Package');
|
|
|
+ $packages = $repository->getBaseQueryBuilder();
|
|
|
+ $view = 'PackagistWebBundle:Web:browse.html.twig';
|
|
|
+ $extraViewOptions = array();
|
|
|
+
|
|
|
+ $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);
|
|
|
+ ->getQueryBuilderByTag($tag);
|
|
|
+ $view = 'PackagistWebBundle:Web:tag.html.twig';
|
|
|
+ $extraViewOptions['tag'] = $tag;
|
|
|
+ }
|
|
|
|
|
|
- $paginator = new Pagerfanta(new DoctrineORMAdapter($packages, true));
|
|
|
- $paginator->setMaxPerPage(15);
|
|
|
- $paginator->setCurrentPage($req->query->get('page', 1), false, true);
|
|
|
+ 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;
|
|
|
+ }
|
|
|
|
|
|
- return $this->render('PackagistWebBundle:Web:tag.html.twig', array('packages' => $paginator, 'tag' => $tag));
|
|
|
+ if ($tag && $type) {
|
|
|
+ $view = 'PackagistWebBundle:Web:tagAndType.html.twig';
|
|
|
}
|
|
|
|
|
|
- $packages = $this->getDoctrine()
|
|
|
- ->getRepository('PackagistWebBundle:Package')
|
|
|
- ->getBaseQueryBuilder();
|
|
|
+ return $this->render(
|
|
|
+ $view,
|
|
|
+ array_merge(
|
|
|
+ array('packages' => $this->setupPager($packages, $page)),
|
|
|
+ $extraViewOptions
|
|
|
+ )
|
|
|
+ );
|
|
|
+ }
|
|
|
|
|
|
- $paginator = new Pagerfanta(new DoctrineORMAdapter($packages, true));
|
|
|
+ /**
|
|
|
+ * Initializes the pager for a query.
|
|
|
+ *
|
|
|
+ * @param \Doctrine\ORM\QueryBuilder $query Query for packages
|
|
|
+ * @param int $page Pagenumber to retrieve.
|
|
|
+ * @return \Pagerfanta\Pagerfanta
|
|
|
+ */
|
|
|
+ protected function setupPager($query, $page)
|
|
|
+ {
|
|
|
+ $paginator = new Pagerfanta(new DoctrineORMAdapter($query, true));
|
|
|
$paginator->setMaxPerPage(15);
|
|
|
- $paginator->setCurrentPage($req->query->get('page', 1), false, true);
|
|
|
+ $paginator->setCurrentPage($page, false, true);
|
|
|
|
|
|
- return $this->render('PackagistWebBundle:Web:browse.html.twig', array('packages' => $paginator));
|
|
|
+ return $paginator;
|
|
|
}
|
|
|
|
|
|
/**
|