aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Wallabag/CoreBundle/Controller
diff options
context:
space:
mode:
authorThomas Citharel <tcit@tcit.fr>2017-06-13 18:48:10 +0200
committerJeremy Benoist <jeremy.benoist@gmail.com>2019-04-25 13:46:31 +0200
commit531c8d0a5c55fa93438e227a7d349235fbd31d28 (patch)
treede2ff4a1e09161a5bbec32170471190e836d3bbc /src/Wallabag/CoreBundle/Controller
parent522e37ad274361dde697da13a92ff3f846599822 (diff)
downloadwallabag-531c8d0a5c55fa93438e227a7d349235fbd31d28.tar.gz
wallabag-531c8d0a5c55fa93438e227a7d349235fbd31d28.tar.zst
wallabag-531c8d0a5c55fa93438e227a7d349235fbd31d28.zip
Changed RSS to Atom feed and improve paging
Diffstat (limited to 'src/Wallabag/CoreBundle/Controller')
-rw-r--r--src/Wallabag/CoreBundle/Controller/ConfigController.php24
-rw-r--r--src/Wallabag/CoreBundle/Controller/FeedController.php (renamed from src/Wallabag/CoreBundle/Controller/RssController.php)89
2 files changed, 64 insertions, 49 deletions
diff --git a/src/Wallabag/CoreBundle/Controller/ConfigController.php b/src/Wallabag/CoreBundle/Controller/ConfigController.php
index 9257ab18..3b281d48 100644
--- a/src/Wallabag/CoreBundle/Controller/ConfigController.php
+++ b/src/Wallabag/CoreBundle/Controller/ConfigController.php
@@ -14,7 +14,7 @@ use Wallabag\CoreBundle\Entity\Config;
14use Wallabag\CoreBundle\Entity\TaggingRule; 14use Wallabag\CoreBundle\Entity\TaggingRule;
15use Wallabag\CoreBundle\Form\Type\ChangePasswordType; 15use Wallabag\CoreBundle\Form\Type\ChangePasswordType;
16use Wallabag\CoreBundle\Form\Type\ConfigType; 16use Wallabag\CoreBundle\Form\Type\ConfigType;
17use Wallabag\CoreBundle\Form\Type\RssType; 17use Wallabag\CoreBundle\Form\Type\FeedType;
18use Wallabag\CoreBundle\Form\Type\TaggingRuleType; 18use Wallabag\CoreBundle\Form\Type\TaggingRuleType;
19use Wallabag\CoreBundle\Form\Type\UserInformationType; 19use Wallabag\CoreBundle\Form\Type\UserInformationType;
20use Wallabag\CoreBundle\Tools\Utils; 20use Wallabag\CoreBundle\Tools\Utils;
@@ -92,17 +92,17 @@ class ConfigController extends Controller
92 return $this->redirect($this->generateUrl('config') . '#set3'); 92 return $this->redirect($this->generateUrl('config') . '#set3');
93 } 93 }
94 94
95 // handle rss information 95 // handle feed information
96 $rssForm = $this->createForm(RssType::class, $config, ['action' => $this->generateUrl('config') . '#set2']); 96 $feedForm = $this->createForm(FeedType::class, $config, ['action' => $this->generateUrl('config') . '#set2']);
97 $rssForm->handleRequest($request); 97 $feedForm->handleRequest($request);
98 98
99 if ($rssForm->isSubmitted() && $rssForm->isValid()) { 99 if ($feedForm->isSubmitted() && $feedForm->isValid()) {
100 $em->persist($config); 100 $em->persist($config);
101 $em->flush(); 101 $em->flush();
102 102
103 $this->addFlash( 103 $this->addFlash(
104 'notice', 104 'notice',
105 'flashes.config.notice.rss_updated' 105 'flashes.config.notice.feed_updated'
106 ); 106 );
107 107
108 return $this->redirect($this->generateUrl('config') . '#set2'); 108 return $this->redirect($this->generateUrl('config') . '#set2');
@@ -143,14 +143,14 @@ class ConfigController extends Controller
143 return $this->render('WallabagCoreBundle:Config:index.html.twig', [ 143 return $this->render('WallabagCoreBundle:Config:index.html.twig', [
144 'form' => [ 144 'form' => [
145 'config' => $configForm->createView(), 145 'config' => $configForm->createView(),
146 'rss' => $rssForm->createView(), 146 'feed' => $feedForm->createView(),
147 'pwd' => $pwdForm->createView(), 147 'pwd' => $pwdForm->createView(),
148 'user' => $userForm->createView(), 148 'user' => $userForm->createView(),
149 'new_tagging_rule' => $newTaggingRule->createView(), 149 'new_tagging_rule' => $newTaggingRule->createView(),
150 ], 150 ],
151 'rss' => [ 151 'feed' => [
152 'username' => $user->getUsername(), 152 'username' => $user->getUsername(),
153 'token' => $config->getRssToken(), 153 'token' => $config->getFeedToken(),
154 ], 154 ],
155 'twofactor_auth' => $this->getParameter('twofactor_auth'), 155 'twofactor_auth' => $this->getParameter('twofactor_auth'),
156 'wallabag_url' => $this->getParameter('domain_name'), 156 'wallabag_url' => $this->getParameter('domain_name'),
@@ -281,19 +281,19 @@ class ConfigController extends Controller
281 public function generateTokenAction(Request $request) 281 public function generateTokenAction(Request $request)
282 { 282 {
283 $config = $this->getConfig(); 283 $config = $this->getConfig();
284 $config->setRssToken(Utils::generateToken()); 284 $config->setFeedToken(Utils::generateToken());
285 285
286 $em = $this->getDoctrine()->getManager(); 286 $em = $this->getDoctrine()->getManager();
287 $em->persist($config); 287 $em->persist($config);
288 $em->flush(); 288 $em->flush();
289 289
290 if ($request->isXmlHttpRequest()) { 290 if ($request->isXmlHttpRequest()) {
291 return new JsonResponse(['token' => $config->getRssToken()]); 291 return new JsonResponse(['token' => $config->getFeedToken()]);
292 } 292 }
293 293
294 $this->addFlash( 294 $this->addFlash(
295 'notice', 295 'notice',
296 'flashes.config.notice.rss_token_updated' 296 'flashes.config.notice.feed_token_updated'
297 ); 297 );
298 298
299 return $this->redirect($this->generateUrl('config') . '#set2'); 299 return $this->redirect($this->generateUrl('config') . '#set2');
diff --git a/src/Wallabag/CoreBundle/Controller/RssController.php b/src/Wallabag/CoreBundle/Controller/FeedController.php
index 1c831c03..9d55a9b7 100644
--- a/src/Wallabag/CoreBundle/Controller/RssController.php
+++ b/src/Wallabag/CoreBundle/Controller/FeedController.php
@@ -15,56 +15,68 @@ use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
15use Wallabag\CoreBundle\Entity\Tag; 15use Wallabag\CoreBundle\Entity\Tag;
16use Wallabag\UserBundle\Entity\User; 16use Wallabag\UserBundle\Entity\User;
17 17
18class RssController extends Controller 18class FeedController extends Controller
19{ 19{
20 /** 20 /**
21 * Shows unread entries for current user. 21 * Shows unread entries for current user.
22 * 22 *
23 * @Route("/{username}/{token}/unread.xml", name="unread_rss", defaults={"_format"="xml"}) 23 * @Route("/feed/{username}/{token}/unread/{page}", name="unread_feed", defaults={"page": 1})
24 * @ParamConverter("user", class="WallabagUserBundle:User", converter="username_rsstoken_converter") 24 * @Route("/{username}/{token}/unread.xml", defaults={"page": 1})
25 * @ParamConverter("user", class="WallabagUserBundle:User", converter="username_feed_token_converter")
26 *
27 * @param User $user
28 * @param $page
25 * 29 *
26 * @return \Symfony\Component\HttpFoundation\Response 30 * @return \Symfony\Component\HttpFoundation\Response
27 */ 31 */
28 public function showUnreadRSSAction(Request $request, User $user) 32 public function showUnreadFeedAction(User $user, $page)
29 { 33 {
30 return $this->showEntries('unread', $user, $request->query->get('page', 1)); 34 return $this->showEntries('unread', $user, $page);
31 } 35 }
32 36
33 /** 37 /**
34 * Shows read entries for current user. 38 * Shows read entries for current user.
35 * 39 *
36 * @Route("/{username}/{token}/archive.xml", name="archive_rss", defaults={"_format"="xml"}) 40 * @Route("/feed/{username}/{token}/archive/{page}", name="archive_feed", defaults={"page": 1})
37 * @ParamConverter("user", class="WallabagUserBundle:User", converter="username_rsstoken_converter") 41 * @Route("/{username}/{token}/archive.xml", defaults={"page": 1})
42 * @ParamConverter("user", class="WallabagUserBundle:User", converter="username_feed_token_converter")
43 *
44 * @param User $user
45 * @param $page
38 * 46 *
39 * @return \Symfony\Component\HttpFoundation\Response 47 * @return \Symfony\Component\HttpFoundation\Response
40 */ 48 */
41 public function showArchiveRSSAction(Request $request, User $user) 49 public function showArchiveFeedAction(User $user, $page)
42 { 50 {
43 return $this->showEntries('archive', $user, $request->query->get('page', 1)); 51 return $this->showEntries('archive', $user, $page);
44 } 52 }
45 53
46 /** 54 /**
47 * Shows starred entries for current user. 55 * Shows starred entries for current user.
48 * 56 *
49 * @Route("/{username}/{token}/starred.xml", name="starred_rss", defaults={"_format"="xml"}) 57 * @Route("/feed/{username}/{token}/starred/{page}", name="starred_feed", defaults={"page": 1})
50 * @ParamConverter("user", class="WallabagUserBundle:User", converter="username_rsstoken_converter") 58 * @Route("/{username}/{token}/starred.xml", defaults={"page": 1})
59 * @ParamConverter("user", class="WallabagUserBundle:User", converter="username_feed_token_converter")
60 *
61 * @param User $user
62 * @param $page
51 * 63 *
52 * @return \Symfony\Component\HttpFoundation\Response 64 * @return \Symfony\Component\HttpFoundation\Response
53 */ 65 */
54 public function showStarredRSSAction(Request $request, User $user) 66 public function showStarredFeedAction(User $user, $page)
55 { 67 {
56 return $this->showEntries('starred', $user, $request->query->get('page', 1)); 68 return $this->showEntries('starred', $user, $page);
57 } 69 }
58 70
59 /** 71 /**
60 * Shows all entries for current user. 72 * Shows all entries for current user.
61 * 73 *
62 * @Route("/{username}/{token}/all.xml", name="all_rss", defaults={"_format"="xml"}) 74 * @Route("/{username}/{token}/all.xml", name="all_feed", defaults={"_format"="xml"})
63 * @ParamConverter("user", class="WallabagUserBundle:User", converter="username_rsstoken_converter") 75 * @ParamConverter("user", class="WallabagUserBundle:User", converter="username_feed_token_converter")
64 * 76 *
65 * @return \Symfony\Component\HttpFoundation\Response 77 * @return \Symfony\Component\HttpFoundation\Response
66 */ 78 */
67 public function showAllRSSAction(Request $request, User $user) 79 public function showAllFeedAction(Request $request, User $user)
68 { 80 {
69 return $this->showEntries('all', $user, $request->query->get('page', 1)); 81 return $this->showEntries('all', $user, $request->query->get('page', 1));
70 } 82 }
@@ -72,21 +84,21 @@ class RssController extends Controller
72 /** 84 /**
73 * Shows entries associated to a tag for current user. 85 * Shows entries associated to a tag for current user.
74 * 86 *
75 * @Route("/{username}/{token}/tags/{slug}.xml", name="tag_rss", defaults={"_format"="xml"}) 87 * @Route("/{username}/{token}/tags/{slug}.xml", name="tag_feed", defaults={"_format"="xml"})
76 * @ParamConverter("user", class="WallabagUserBundle:User", converter="username_rsstoken_converter") 88 * @ParamConverter("user", class="WallabagUserBundle:User", converter="username_feed_token_converter")
77 * @ParamConverter("tag", options={"mapping": {"slug": "slug"}}) 89 * @ParamConverter("tag", options={"mapping": {"slug": "slug"}})
78 * 90 *
79 * @return \Symfony\Component\HttpFoundation\Response 91 * @return \Symfony\Component\HttpFoundation\Response
80 */ 92 */
81 public function showTagsAction(Request $request, User $user, Tag $tag) 93 public function showTagsFeedAction(Request $request, User $user, Tag $tag)
82 { 94 {
83 $page = $request->query->get('page', 1); 95 $page = $request->query->get('page', 1);
84 96
85 $url = $this->generateUrl( 97 $url = $this->generateUrl(
86 'tag_rss', 98 'tag_feed',
87 [ 99 [
88 'username' => $user->getUsername(), 100 'username' => $user->getUsername(),
89 'token' => $user->getConfig()->getRssToken(), 101 'token' => $user->getConfig()->getFeedToken(),
90 'slug' => $tag->getSlug(), 102 'slug' => $tag->getSlug(),
91 ], 103 ],
92 UrlGeneratorInterface::ABSOLUTE_URL 104 UrlGeneratorInterface::ABSOLUTE_URL
@@ -119,12 +131,15 @@ class RssController extends Controller
119 return $this->render( 131 return $this->render(
120 '@WallabagCore/themes/common/Entry/entries.xml.twig', 132 '@WallabagCore/themes/common/Entry/entries.xml.twig',
121 [ 133 [
122 'url_html' => $this->generateUrl('tag_entries', ['slug' => $tag->getSlug()], UrlGeneratorInterface::ABSOLUTE_URL), 134 'type' => 'tag',
123 'type' => 'tag (' . $tag->getLabel() . ')',
124 'url' => $url, 135 'url' => $url,
125 'entries' => $entries, 136 'entries' => $entries,
137 'user' => $user->getUsername(),
138 'domainName' => $this->getParameter('domain_name'),
139 'version' => $this->getParameter('wallabag_core.version'),
140 'tag' => $tag->getSlug(),
126 ], 141 ],
127 new Response('', 200, ['Content-Type' => 'application/rss+xml']) 142 new Response('', 200, ['Content-Type' => 'application/atom+xml'])
128 ); 143 );
129 } 144 }
130 145
@@ -162,14 +177,14 @@ class RssController extends Controller
162 $pagerAdapter = new DoctrineORMAdapter($qb->getQuery(), true, false); 177 $pagerAdapter = new DoctrineORMAdapter($qb->getQuery(), true, false);
163 $entries = new Pagerfanta($pagerAdapter); 178 $entries = new Pagerfanta($pagerAdapter);
164 179
165 $perPage = $user->getConfig()->getRssLimit() ?: $this->getParameter('wallabag_core.rss_limit'); 180 $perPage = $user->getConfig()->getFeedLimit() ?: $this->getParameter('wallabag_core.Feed_limit');
166 $entries->setMaxPerPage($perPage); 181 $entries->setMaxPerPage($perPage);
167 182
168 $url = $this->generateUrl( 183 $url = $this->generateUrl(
169 $type . '_rss', 184 $type . '_feed',
170 [ 185 [
171 'username' => $user->getUsername(), 186 'username' => $user->getUsername(),
172 'token' => $user->getConfig()->getRssToken(), 187 'token' => $user->getConfig()->getFeedToken(),
173 ], 188 ],
174 UrlGeneratorInterface::ABSOLUTE_URL 189 UrlGeneratorInterface::ABSOLUTE_URL
175 ); 190 );
@@ -178,19 +193,19 @@ class RssController extends Controller
178 $entries->setCurrentPage((int) $page); 193 $entries->setCurrentPage((int) $page);
179 } catch (OutOfRangeCurrentPageException $e) { 194 } catch (OutOfRangeCurrentPageException $e) {
180 if ($page > 1) { 195 if ($page > 1) {
181 return $this->redirect($url . '?page=' . $entries->getNbPages(), 302); 196 return $this->redirect($url . '/' . $entries->getNbPages());
182 } 197 }
183 } 198 }
184 199
185 return $this->render( 200 return $this->render('@WallabagCore/themes/common/Entry/entries.xml.twig', [
186 '@WallabagCore/themes/common/Entry/entries.xml.twig', 201 'type' => $type,
187 [ 202 'url' => $url,
188 'url_html' => $this->generateUrl($type, [], UrlGeneratorInterface::ABSOLUTE_URL), 203 'entries' => $entries,
189 'type' => $type, 204 'user' => $user->getUsername(),
190 'url' => $url, 205 'domainName' => $this->getParameter('domain_name'),
191 'entries' => $entries, 206 'version' => $this->getParameter('wallabag_core.version'),
192 ], 207 ],
193 new Response('', 200, ['Content-Type' => 'application/rss+xml']) 208 new Response('', 200, ['Content-Type' => 'application/atom+xml'])
194 ); 209 );
195 } 210 }
196} 211}