]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Adds pagerfanta paginator everywhere, modifies article routing. Change API for is_sta... 1250/head
authorFrancois Gravelaine <francois@obtao.com>
Mon, 27 Jul 2015 21:20:32 +0000 (23:20 +0200)
committerFrancois Gravelaine <francois@obtao.com>
Tue, 28 Jul 2015 21:23:49 +0000 (23:23 +0200)
app/config/routing.yml
src/Wallabag/ApiBundle/Controller/WallabagRestController.php
src/Wallabag/CoreBundle/Controller/EntryController.php
src/Wallabag/CoreBundle/Controller/RssController.php
src/Wallabag/CoreBundle/Repository/EntryRepository.php
src/Wallabag/CoreBundle/Resources/views/Entry/entries.html.twig
src/Wallabag/CoreBundle/Resources/views/themes/baggy/public/css/main.css
src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php

index 8710e97f97995440e1fc2e232512c5d024e61f4f..e8bf08a570a7314866a2bf25baa08bfe75c7975d 100644 (file)
@@ -6,10 +6,6 @@ app:
     resource: @WallabagCoreBundle/Controller/
     type:     annotation
 
-homepage:
-    pattern:   /
-    defaults:  { _controller: WallabagCoreBundle:Entry:showUnread }
-
 doc-api:
     resource: "@NelmioApiDocBundle/Resources/config/routing.yml"
     prefix: /api/doc
@@ -17,8 +13,10 @@ doc-api:
 login:
     pattern:   /login
     defaults:  { _controller: WallabagCoreBundle:Security:login }
+
 login_check:
     pattern:   /login_check
+
 logout:
     path:   /logout
 
@@ -26,3 +24,9 @@ rest :
     type : rest
     resource : "routing_rest.yml"
     prefix : /api
+
+homepage:
+    pattern:   "/{page}"
+    defaults:  { _controller: WallabagCoreBundle:Entry:showUnread, page : 1 }
+    requirements:
+        page:  \d+
index 2f5923c8bd99b31b4293794de14103562d4b6dd8..692a4ae0e5de37d449f85d60a5be1a87aed7c31f 100644 (file)
@@ -189,8 +189,8 @@ class WallabagRestController extends Controller
         $this->validateUserAccess($entry->getUser()->getId(), $this->getUser()->getId());
 
         $title      = $request->request->get('title');
-        $isArchived = $request->request->get('archive');
-        $isStarred  = $request->request->get('star');
+        $isArchived = $request->request->get('is_archived');
+        $isStarred  = $request->request->get('is_starred');
 
         if (!is_null($title)) {
             $entry->setTitle($title);
index 4a7a0644a364b851942537b2b9fe44c65d2c3357..49714d0249cb9330e119bdf896212ed14b700bef 100644 (file)
@@ -89,60 +89,72 @@ class EntryController extends Controller
     /**
      * Shows unread entries for current user.
      *
-     * @Route("/unread", name="unread")
+     * @Route("/unread/list/{page}", name="unread", defaults={"page" = "1"})
      *
      * @return \Symfony\Component\HttpFoundation\Response
      */
-    public function showUnreadAction()
+    public function showUnreadAction($page)
     {
-        // TODO change pagination
         $entries = $this->getDoctrine()
             ->getRepository('WallabagCoreBundle:Entry')
-            ->findUnreadByUser($this->getUser()->getId(), 0);
+            ->findUnreadByUser($this->getUser()->getId());
+
+        $entries->setCurrentPage($page);
 
         return $this->render(
             'WallabagCoreBundle:Entry:entries.html.twig',
-            array('entries' => $entries)
+            array(
+                'entries'       => $entries,
+                'currentPage'   => $page
+            )
         );
     }
 
     /**
      * Shows read entries for current user.
      *
-     * @Route("/archive", name="archive")
+     * @Route("/archive/list/{page}", name="archive", defaults={"page" = "1"})
      *
      * @return \Symfony\Component\HttpFoundation\Response
      */
-    public function showArchiveAction()
+    public function showArchiveAction($page)
     {
-        // TODO change pagination
         $entries = $this->getDoctrine()
             ->getRepository('WallabagCoreBundle:Entry')
-            ->findArchiveByUser($this->getUser()->getId(), 0);
+            ->findArchiveByUser($this->getUser()->getId());
+
+        $entries->setCurrentPage($page);
 
         return $this->render(
             'WallabagCoreBundle:Entry:entries.html.twig',
-            array('entries' => $entries)
+            array(
+                'entries'       => $entries,
+                'currentPage'   => $page
+            )
         );
     }
 
     /**
      * Shows starred entries for current user.
      *
-     * @Route("/starred", name="starred")
+     * @Route("/starred/list/{page}", name="starred", defaults={"page" = "1"})
      *
      * @return \Symfony\Component\HttpFoundation\Response
      */
-    public function showStarredAction()
+    public function showStarredAction($page)
     {
-        // TODO change pagination
         $entries = $this->getDoctrine()
             ->getRepository('WallabagCoreBundle:Entry')
-            ->findStarredByUser($this->getUser()->getId(), 0);
+            ->findStarredByUser($this->getUser()->getId());
+
+        $entries->setCurrentPage($page);
 
         return $this->render(
             'WallabagCoreBundle:Entry:entries.html.twig',
-            array('entries' => $entries)
+            array(
+                'entries'       => $entries,
+                'currentPage'   => $page
+            )
         );
     }
 
index 86754e157e7b6ff0d1079b452d59209ab28d3660..8428dce0029799efead316ab0c12d693de4ef41e 100644 (file)
@@ -23,11 +23,12 @@ class RssController extends Controller
         $entries = $this->getDoctrine()
             ->getRepository('WallabagCoreBundle:Entry')
             ->findUnreadByUser(
-                $user->getId(),
-                0,
-                $user->getConfig()->getRssLimit() ?: $this->container->getParameter('rss_limit')
+                $user->getId()
             );
 
+        $perPage = $user->getConfig()->getRssLimit() ?: $this->container->getParameter('rss_limit');
+        $entries->setMaxPerPage($perPage);
+
         return $this->render('WallabagCoreBundle:Entry:entries.xml.twig', array(
             'type' => 'unread',
             'entries' => $entries,
@@ -47,11 +48,12 @@ class RssController extends Controller
         $entries = $this->getDoctrine()
             ->getRepository('WallabagCoreBundle:Entry')
             ->findArchiveByUser(
-                $user->getId(),
-                0,
-                $user->getConfig()->getRssLimit() ?: $this->container->getParameter('rss_limit')
+                $user->getId()
             );
 
+        $perPage = $user->getConfig()->getRssLimit() ?: $this->container->getParameter('rss_limit');
+        $entries->setMaxPerPage($perPage);
+
         return $this->render('WallabagCoreBundle:Entry:entries.xml.twig', array(
             'type' => 'archive',
             'entries' => $entries,
@@ -71,11 +73,12 @@ class RssController extends Controller
         $entries = $this->getDoctrine()
             ->getRepository('WallabagCoreBundle:Entry')
             ->findStarredByUser(
-                $user->getId(),
-                0,
-                $user->getConfig()->getRssLimit() ?: $this->container->getParameter('rss_limit')
+                $user->getId()
             );
 
+        $perPage = $user->getConfig()->getRssLimit() ?: $this->container->getParameter('rss_limit');
+        $entries->setMaxPerPage($perPage);
+
         return $this->render('WallabagCoreBundle:Entry:entries.xml.twig', array(
             'type' => 'starred',
             'entries' => $entries,
index 1335e808666bc05eb63042d84b080482d7dff368..a4514d9e791c0ffd04a39df8b4e45d2377e377d2 100644 (file)
@@ -3,7 +3,6 @@
 namespace Wallabag\CoreBundle\Repository;
 
 use Doctrine\ORM\EntityRepository;
-use Doctrine\ORM\Tools\Pagination\Paginator;
 use Pagerfanta\Adapter\DoctrineORMAdapter;
 use Pagerfanta\Pagerfanta;
 
@@ -13,77 +12,66 @@ class EntryRepository extends EntityRepository
      * Retrieves unread entries for a user.
      *
      * @param int $userId
-     * @param int $firstResult
-     * @param int $maxResults
      *
-     * @return Paginator
+     * @return Pagerfanta
      */
-    public function findUnreadByUser($userId, $firstResult, $maxResults = 12)
+    public function findUnreadByUser($userId)
     {
         $qb = $this->createQueryBuilder('e')
-            ->setFirstResult($firstResult)
-            ->setMaxResults($maxResults)
             ->leftJoin('e.user', 'u')
             ->where('e.isArchived = false')
             ->andWhere('u.id =:userId')->setParameter('userId', $userId)
             ->orderBy('e.id', 'desc')
             ->getQuery();
 
-        $paginator = new Paginator($qb);
+        $pagerAdapter = new DoctrineORMAdapter($qb);
 
-        return $paginator;
+        return new Pagerfanta($pagerAdapter);
     }
 
     /**
      * Retrieves read entries for a user.
      *
      * @param int $userId
-     * @param int $firstResult
-     * @param int $maxResults
      *
-     * @return Paginator
+     * @return Pagerfanta
      */
-    public function findArchiveByUser($userId, $firstResult, $maxResults = 12)
+    public function findArchiveByUser($userId)
     {
         $qb = $this->createQueryBuilder('e')
             ->select('e')
-            ->setFirstResult($firstResult)
-            ->setMaxResults($maxResults)
             ->leftJoin('e.user', 'u')
             ->where('e.isArchived = true')
             ->andWhere('u.id =:userId')->setParameter('userId', $userId)
             ->orderBy('e.id', 'desc')
             ->getQuery();
 
-        $paginator = new Paginator($qb);
+        $pagerAdapter = new DoctrineORMAdapter($qb);
 
-        return $paginator;
+        return new Pagerfanta($pagerAdapter);
     }
 
     /**
      * Retrieves starred entries for a user.
      *
      * @param int $userId
-     * @param int $firstResult
-     * @param int $maxResults
      *
-     * @return Paginator
+     * @return Pagerfanta
      */
-    public function findStarredByUser($userId, $firstResult, $maxResults = 12)
+    public function findStarredByUser($userId)
     {
+
         $qb = $this->createQueryBuilder('e')
             ->select('e')
-            ->setFirstResult($firstResult)
-            ->setMaxResults($maxResults)
             ->leftJoin('e.user', 'u')
             ->where('e.isStarred = true')
             ->andWhere('u.id =:userId')->setParameter('userId', $userId)
             ->orderBy('e.id', 'desc')
             ->getQuery();
 
-        $paginator = new Paginator($qb);
+        $pagerAdapter = new DoctrineORMAdapter($qb);
 
-        return $paginator;
+        return new Pagerfanta($pagerAdapter);
     }
 
     /**
index acb964205428bc78cf7160056b4fc44a63268b83..bf3caf097279e42433134e6325fbc22a85f874d8 100644 (file)
@@ -8,9 +8,9 @@
         <div class="results">
             <div class="nb-results">{{ entries.count }} {% trans %}entries{% endtrans %}</div>
             <div class="pagination">
-                {% for p in range(1, entries.count) %}
+                {% for p in range(1, entries.nbPages) %}
                     <li>
-                        <a href="{{ path(app.request.attributes.get('_route'), {'page': p}) }}">{{ p }}</a>
+                        <a href="{{ path(app.request.attributes.get('_route'), {'page': p}) }}" class="{{ currentPage == p ? 'current':''}}" >{{ p }}</a>
                     </li>
                 {% endfor %}
             </div>
index ff1a36a141554a4237c28d0d02229798b5cc42a6..e2844ccc9773b07131bbeb2dcfe4494d0310a26d 100755 (executable)
@@ -537,6 +537,16 @@ footer a {
   display: none;
 }
 
+.pagination .current {
+  height: 25px;
+  padding: 4px 8px;
+  border: 1px solid #d5d5d5;
+  text-decoration: none;
+  font-weight: bold;
+  color: #000;
+  background-color: #ccc;
+}
+
 /* ==========================================================================
   2.1 = "save a link" related styles
   ========================================================================== */
index 904e2a5cfb6bb6b088deb5be22acc1fe6ecf0ac0..2cd501306ef3594f88363a4ba9347a131fc27e76 100644 (file)
@@ -78,7 +78,7 @@ class EntryControllerTest extends WallabagCoreTestCase
         $this->logInAs('admin');
         $client = $this->getClient();
 
-        $client->request('GET', '/archive');
+        $client->request('GET', '/archive/list');
 
         $this->assertEquals(200, $client->getResponse()->getStatusCode());
     }
@@ -88,7 +88,7 @@ class EntryControllerTest extends WallabagCoreTestCase
         $this->logInAs('admin');
         $client = $this->getClient();
 
-        $client->request('GET', '/starred');
+        $client->request('GET', '/starred/list');
 
         $this->assertEquals(200, $client->getResponse()->getStatusCode());
     }