]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Links on each tag in Tags view
authorNicolas LÅ“uillet <nicolas@loeuillet.org>
Thu, 14 Apr 2016 13:03:22 +0000 (15:03 +0200)
committerJeremy Benoist <jeremy.benoist@gmail.com>
Tue, 23 Aug 2016 05:24:42 +0000 (07:24 +0200)
src/Wallabag/CoreBundle/Controller/EntryController.php
src/Wallabag/CoreBundle/Controller/ExportController.php
src/Wallabag/CoreBundle/Controller/TagController.php
src/Wallabag/CoreBundle/Helper/PreparePagerForEntries.php [new file with mode: 0644]
src/Wallabag/CoreBundle/Resources/config/services.yml
src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig
src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/tags.html.twig

index ccdf940669bde3d5aa00073256c5607e8ba1805c..93db0d6caa117d1d0ba9442c8b4a3ea66ace11c8 100644 (file)
@@ -4,7 +4,6 @@ namespace Wallabag\CoreBundle\Controller;
 
 use Pagerfanta\Adapter\DoctrineORMAdapter;
 use Pagerfanta\Exception\OutOfRangeCurrentPageException;
-use Pagerfanta\Pagerfanta;
 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
 use Symfony\Bundle\FrameworkBundle\Controller\Controller;
 use Symfony\Component\HttpFoundation\Request;
@@ -257,9 +256,10 @@ class EntryController extends Controller
         }
 
         $pagerAdapter = new DoctrineORMAdapter($qb->getQuery());
-        $entries = new Pagerfanta($pagerAdapter);
 
-        $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
+        $entries = $this->get('wallabag_core.helper.prepare_pager_for_entries')
+            ->prepare($pagerAdapter, $page);
+
         try {
             $entries->setCurrentPage($page);
         } catch (OutOfRangeCurrentPageException $e) {
index 944c755def342a0a8b1b99484df7776212d5ed25..959b308d8bc0e5cff8bfce213b9e8f50c2970e19 100644 (file)
@@ -46,7 +46,7 @@ class ExportController extends Controller
      *
      * @Route("/export/{category}.{format}", name="export_entries", requirements={
      *     "format": "epub|mobi|pdf|json|xml|txt|csv",
-     *     "category": "all|unread|starred|archive"
+     *     "category": "all|unread|starred|archive|tag_entries"
      * })
      *
      * @return \Symfony\Component\HttpFoundation\Response
index 8645fb442621b933a10df0d127c5919b4cecd3d6..b6514ea6e68b9ff23018f740d012b69d599b791e 100644 (file)
@@ -2,12 +2,15 @@
 
 namespace Wallabag\CoreBundle\Controller;
 
+use Pagerfanta\Adapter\ArrayAdapter;
+use Pagerfanta\Exception\OutOfRangeCurrentPageException;
 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
 use Symfony\Bundle\FrameworkBundle\Controller\Controller;
 use Symfony\Component\HttpFoundation\Request;
 use Wallabag\CoreBundle\Entity\Entry;
 use Wallabag\CoreBundle\Entity\Tag;
 use Wallabag\CoreBundle\Form\Type\NewTagType;
+use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
 
 class TagController extends Controller
 {
@@ -90,4 +93,41 @@ class TagController extends Controller
             ]
         );
     }
+
+    /**
+     * @param Tag $tag
+     * @param int $page
+     *
+     * @Route("/tag/list/{slug}/{page}", name="tag_entries", defaults={"page" = "1"})
+     * @ParamConverter("tag", options={"mapping": {"slug": "slug"}})
+     *
+     * @return \Symfony\Component\HttpFoundation\Response
+     */
+    public function showEntriesForTagAction(Tag $tag, $page, Request $request)
+    {
+        $pagerAdapter = new ArrayAdapter($tag->getEntries()->toArray());
+
+        $entries = $this->get('wallabag_core.helper.prepare_pager_for_entries')
+            ->prepare($pagerAdapter, $page);
+
+        try {
+            $entries->setCurrentPage($page);
+        } catch (OutOfRangeCurrentPageException $e) {
+            if ($page > 1) {
+                return $this->redirect($this->generateUrl($request->get('_route'), [
+                    'slug' => $tag->getSlug(),
+                    'page' => $entries->getNbPages(),
+                ]), 302);
+            }
+        }
+
+        return $this->render(
+            'WallabagCoreBundle:Entry:entries.html.twig',
+            [
+                'form' => null,
+                'entries' => $entries,
+                'currentPage' => $page,
+            ]
+        );
+    }
 }
diff --git a/src/Wallabag/CoreBundle/Helper/PreparePagerForEntries.php b/src/Wallabag/CoreBundle/Helper/PreparePagerForEntries.php
new file mode 100644 (file)
index 0000000..f9066be
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+
+namespace Wallabag\CoreBundle\Helper;
+
+use Pagerfanta\Adapter\AdapterInterface;
+use Pagerfanta\Pagerfanta;
+use Symfony\Component\Routing\Router;
+use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
+
+class PreparePagerForEntries
+{
+    private $user;
+    private $router;
+
+    public function __construct(TokenStorage $token, Router $router)
+    {
+        $this->user = $token->getToken()->getUser();
+        $this->router = $router;
+    }
+
+    /**
+     * @param AdapterInterface $adapter
+     * @param int              $page
+     *
+     * @return null|Pagerfanta
+     */
+    public function prepare(AdapterInterface $adapter, $page = 1)
+    {
+        $entries = new Pagerfanta($adapter);
+        $entries->setMaxPerPage($this->user->getConfig()->getItemsPerPage());
+
+        return $entries;
+    }
+}
index f8835198caff7d55ffa12a9a5bf1bf64aef0be8f..e95ef4520f990cf174765179eda7dc197d53cd21 100644 (file)
@@ -119,3 +119,9 @@ services:
         class: Wallabag\CoreBundle\Helper\Redirect
         arguments:
             - "@router"
+
+    wallabag_core.helper.prepare_pager_for_entries:
+        class: Wallabag\CoreBundle\Helper\PreparePagerForEntries
+        arguments:
+            - "@security.token_storage"
+            - "@router"
index eca8924ec6149845bbc473a5f0e0f56d14c4a365..a0a0b02f1144d4e55a7d9f59818f1613601b86cc 100644 (file)
     </div>
 
     <!-- Filters -->
+    {% if form is not null %}
     <div id="filters" class="side-nav fixed right-aligned">
         <form action="{{ path('all') }}">
 
 
         </form>
     </div>
-    {% include "WallabagCoreBundle:Entry:pager.html.twig" with {'entries': entries} %}
+    {% endif %}
+
 {% endblock %}
index d958c4b85e51aaf3067791b13ce925a11ee2ca72..9495f5436d2f996f1ceee825fb75fd2f83d4fde4 100644 (file)
@@ -9,7 +9,7 @@
     <br />
     <ul class="row data">
     {% for tag in tags %}
-        <li id="tag-{{ tag.id|e }}" class="col l4 m6 s12">{{tag.label}} ({{ tag.getEntriesByUserId(app.user.id) | length }})</li>
+        <li id="tag-{{ tag.id|e }}" class="col l4 m6 s12"><a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{tag.label}} ({{ tag.entries.getValues | length }})</a></li>
     {% endfor %}
     </ul>
 {% endblock %}