diff options
Diffstat (limited to 'src/Wallabag/CoreBundle/Controller')
-rw-r--r-- | src/Wallabag/CoreBundle/Controller/RssController.php | 81 |
1 files changed, 74 insertions, 7 deletions
diff --git a/src/Wallabag/CoreBundle/Controller/RssController.php b/src/Wallabag/CoreBundle/Controller/RssController.php index 5f7502fc..090eccab 100644 --- a/src/Wallabag/CoreBundle/Controller/RssController.php +++ b/src/Wallabag/CoreBundle/Controller/RssController.php | |||
@@ -3,13 +3,16 @@ | |||
3 | namespace Wallabag\CoreBundle\Controller; | 3 | namespace Wallabag\CoreBundle\Controller; |
4 | 4 | ||
5 | use Pagerfanta\Adapter\DoctrineORMAdapter; | 5 | use Pagerfanta\Adapter\DoctrineORMAdapter; |
6 | use Pagerfanta\Adapter\ArrayAdapter; | ||
6 | use Pagerfanta\Exception\OutOfRangeCurrentPageException; | 7 | use Pagerfanta\Exception\OutOfRangeCurrentPageException; |
7 | use Pagerfanta\Pagerfanta; | 8 | use Pagerfanta\Pagerfanta; |
8 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; | 9 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; |
9 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | 10 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; |
10 | use Symfony\Component\HttpFoundation\Request; | 11 | use Symfony\Component\HttpFoundation\Request; |
12 | use Symfony\Component\HttpFoundation\Response; | ||
11 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | 13 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; |
12 | use Wallabag\CoreBundle\Entity\Entry; | 14 | use Wallabag\CoreBundle\Entity\Entry; |
15 | use Wallabag\CoreBundle\Entity\Tag; | ||
13 | use Wallabag\UserBundle\Entity\User; | 16 | use Wallabag\UserBundle\Entity\User; |
14 | use Symfony\Component\Routing\Generator\UrlGeneratorInterface; | 17 | use Symfony\Component\Routing\Generator\UrlGeneratorInterface; |
15 | 18 | ||
@@ -31,7 +34,7 @@ class RssController extends Controller | |||
31 | /** | 34 | /** |
32 | * Shows read entries for current user. | 35 | * Shows read entries for current user. |
33 | * | 36 | * |
34 | * @Route("/{username}/{token}/archive.xml", name="archive_rss") | 37 | * @Route("/{username}/{token}/archive.xml", name="archive_rss", defaults={"_format"="xml"}) |
35 | * @ParamConverter("user", class="WallabagUserBundle:User", converter="username_rsstoken_converter") | 38 | * @ParamConverter("user", class="WallabagUserBundle:User", converter="username_rsstoken_converter") |
36 | * | 39 | * |
37 | * @return \Symfony\Component\HttpFoundation\Response | 40 | * @return \Symfony\Component\HttpFoundation\Response |
@@ -44,7 +47,7 @@ class RssController extends Controller | |||
44 | /** | 47 | /** |
45 | * Shows starred entries for current user. | 48 | * Shows starred entries for current user. |
46 | * | 49 | * |
47 | * @Route("/{username}/{token}/starred.xml", name="starred_rss") | 50 | * @Route("/{username}/{token}/starred.xml", name="starred_rss", defaults={"_format"="xml"}) |
48 | * @ParamConverter("user", class="WallabagUserBundle:User", converter="username_rsstoken_converter") | 51 | * @ParamConverter("user", class="WallabagUserBundle:User", converter="username_rsstoken_converter") |
49 | * | 52 | * |
50 | * @return \Symfony\Component\HttpFoundation\Response | 53 | * @return \Symfony\Component\HttpFoundation\Response |
@@ -55,6 +58,65 @@ class RssController extends Controller | |||
55 | } | 58 | } |
56 | 59 | ||
57 | /** | 60 | /** |
61 | * Shows entries associated to a tag for current user. | ||
62 | * | ||
63 | * @Route("/{username}/{token}/tags/{slug}.xml", name="tag_rss", defaults={"_format"="xml"}) | ||
64 | * @ParamConverter("user", class="WallabagUserBundle:User", converter="username_rsstoken_converter") | ||
65 | * @ParamConverter("tag", options={"mapping": {"slug": "slug"}}) | ||
66 | * | ||
67 | * @return \Symfony\Component\HttpFoundation\Response | ||
68 | */ | ||
69 | public function showTagsAction(Request $request, User $user, Tag $tag) | ||
70 | { | ||
71 | $page = $request->query->get('page', 1); | ||
72 | |||
73 | $url = $this->generateUrl( | ||
74 | 'tag_rss', | ||
75 | [ | ||
76 | 'username' => $user->getUsername(), | ||
77 | 'token' => $user->getConfig()->getRssToken(), | ||
78 | 'slug' => $tag->getSlug(), | ||
79 | ], | ||
80 | UrlGeneratorInterface::ABSOLUTE_URL | ||
81 | ); | ||
82 | |||
83 | $entriesByTag = $this->get('wallabag_core.entry_repository')->findAllByTagId( | ||
84 | $user->getId(), | ||
85 | $tag->getId() | ||
86 | ); | ||
87 | |||
88 | $pagerAdapter = new ArrayAdapter($entriesByTag); | ||
89 | |||
90 | $entries = $this->get('wallabag_core.helper.prepare_pager_for_entries')->prepare( | ||
91 | $pagerAdapter, | ||
92 | $user | ||
93 | ); | ||
94 | |||
95 | if (null === $entries) { | ||
96 | throw $this->createNotFoundException('No entries found?'); | ||
97 | } | ||
98 | |||
99 | try { | ||
100 | $entries->setCurrentPage($page); | ||
101 | } catch (OutOfRangeCurrentPageException $e) { | ||
102 | if ($page > 1) { | ||
103 | return $this->redirect($url.'?page='.$entries->getNbPages(), 302); | ||
104 | } | ||
105 | } | ||
106 | |||
107 | return $this->render( | ||
108 | '@WallabagCore/themes/common/Entry/entries.xml.twig', | ||
109 | [ | ||
110 | 'url_html' => $this->generateUrl('tag_entries', ['slug' => $tag->getSlug()], UrlGeneratorInterface::ABSOLUTE_URL), | ||
111 | 'type' => 'tag ('.$tag->getLabel().')', | ||
112 | 'url' => $url, | ||
113 | 'entries' => $entries, | ||
114 | ], | ||
115 | new Response('', 200, ['Content-Type' => 'application/rss+xml']) | ||
116 | ); | ||
117 | } | ||
118 | |||
119 | /** | ||
58 | * Global method to retrieve entries depending on the given type | 120 | * Global method to retrieve entries depending on the given type |
59 | * It returns the response to be send. | 121 | * It returns the response to be send. |
60 | * | 122 | * |
@@ -108,10 +170,15 @@ class RssController extends Controller | |||
108 | } | 170 | } |
109 | } | 171 | } |
110 | 172 | ||
111 | return $this->render('@WallabagCore/themes/common/Entry/entries.xml.twig', [ | 173 | return $this->render( |
112 | 'type' => $type, | 174 | '@WallabagCore/themes/common/Entry/entries.xml.twig', |
113 | 'url' => $url, | 175 | [ |
114 | 'entries' => $entries, | 176 | 'url_html' => $this->generateUrl($type, [], UrlGeneratorInterface::ABSOLUTE_URL), |
115 | ]); | 177 | 'type' => $type, |
178 | 'url' => $url, | ||
179 | 'entries' => $entries, | ||
180 | ], | ||
181 | new Response('', 200, ['Content-Type' => 'application/rss+xml']) | ||
182 | ); | ||
116 | } | 183 | } |
117 | } | 184 | } |