aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Wallabag/CoreBundle/Controller
diff options
context:
space:
mode:
Diffstat (limited to 'src/Wallabag/CoreBundle/Controller')
-rw-r--r--src/Wallabag/CoreBundle/Controller/EntryController.php119
-rw-r--r--src/Wallabag/CoreBundle/Controller/RssController.php73
-rw-r--r--src/Wallabag/CoreBundle/Controller/StaticController.php8
-rw-r--r--src/Wallabag/CoreBundle/Controller/TagController.php50
4 files changed, 142 insertions, 108 deletions
diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php
index 006fa396..b73e9eec 100644
--- a/src/Wallabag/CoreBundle/Controller/EntryController.php
+++ b/src/Wallabag/CoreBundle/Controller/EntryController.php
@@ -102,6 +102,21 @@ class EntryController extends Controller
102 } 102 }
103 103
104 /** 104 /**
105 * Shows all entries for current user.
106 *
107 * @param Request $request
108 * @param int $page
109 *
110 * @Route("/all/list/{page}", name="all", defaults={"page" = "1"})
111 *
112 * @return \Symfony\Component\HttpFoundation\Response
113 */
114 public function showAllAction(Request $request, $page)
115 {
116 return $this->showEntries('all', $request, $page);
117 }
118
119 /**
105 * Shows unread entries for current user. 120 * Shows unread entries for current user.
106 * 121 *
107 * @param Request $request 122 * @param Request $request
@@ -113,34 +128,7 @@ class EntryController extends Controller
113 */ 128 */
114 public function showUnreadAction(Request $request, $page) 129 public function showUnreadAction(Request $request, $page)
115 { 130 {
116 $form = $this->get('form.factory')->create(new EntryFilterType()); 131 return $this->showEntries('unread', $request, $page);
117
118 $filterBuilder = $this->getDoctrine()
119 ->getRepository('WallabagCoreBundle:Entry')
120 ->findUnreadByUser($this->getUser()->getId());
121
122 if ($request->query->has($form->getName())) {
123 // manually bind values from the request
124 $form->submit($request->query->get($form->getName()));
125
126 // build the query from the given form object
127 $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $filterBuilder);
128 }
129
130 $pagerAdapter = new DoctrineORMAdapter($filterBuilder->getQuery());
131 $entries = new Pagerfanta($pagerAdapter);
132
133 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
134 $entries->setCurrentPage($page);
135
136 return $this->render(
137 'WallabagCoreBundle:Entry:entries.html.twig',
138 array(
139 'form' => $form->createView(),
140 'entries' => $entries,
141 'currentPage' => $page,
142 )
143 );
144 } 132 }
145 133
146 /** 134 /**
@@ -155,34 +143,7 @@ class EntryController extends Controller
155 */ 143 */
156 public function showArchiveAction(Request $request, $page) 144 public function showArchiveAction(Request $request, $page)
157 { 145 {
158 $form = $this->get('form.factory')->create(new EntryFilterType()); 146 return $this->showEntries('archive', $request, $page);
159
160 $filterBuilder = $this->getDoctrine()
161 ->getRepository('WallabagCoreBundle:Entry')
162 ->findArchiveByUser($this->getUser()->getId());
163
164 if ($request->query->has($form->getName())) {
165 // manually bind values from the request
166 $form->submit($request->query->get($form->getName()));
167
168 // build the query from the given form object
169 $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $filterBuilder);
170 }
171
172 $pagerAdapter = new DoctrineORMAdapter($filterBuilder->getQuery());
173 $entries = new Pagerfanta($pagerAdapter);
174
175 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
176 $entries->setCurrentPage($page);
177
178 return $this->render(
179 'WallabagCoreBundle:Entry:entries.html.twig',
180 array(
181 'form' => $form->createView(),
182 'entries' => $entries,
183 'currentPage' => $page,
184 )
185 );
186 } 147 }
187 148
188 /** 149 /**
@@ -197,21 +158,55 @@ class EntryController extends Controller
197 */ 158 */
198 public function showStarredAction(Request $request, $page) 159 public function showStarredAction(Request $request, $page)
199 { 160 {
200 $form = $this->get('form.factory')->create(new EntryFilterType()); 161 return $this->showEntries('starred', $request, $page);
162 }
163
164 /**
165 * Global method to retrieve entries depending on the given type
166 * It returns the response to be send.
167 *
168 * @param string $type Entries type: unread, starred or archive
169 * @param Request $request
170 * @param int $page
171 *
172 * @return \Symfony\Component\HttpFoundation\Response
173 */
174 private function showEntries($type, Request $request, $page)
175 {
176 $repository = $this->getDoctrine()->getRepository('WallabagCoreBundle:Entry');
177
178 switch ($type) {
179 case 'starred':
180 $qb = $repository->getBuilderForStarredByUser($this->getUser()->getId());
181 break;
182
183 case 'archive':
184 $qb = $repository->getBuilderForArchiveByUser($this->getUser()->getId());
185 break;
186
187 case 'unread':
188 $qb = $repository->getBuilderForUnreadByUser($this->getUser()->getId());
189 break;
201 190
202 $filterBuilder = $this->getDoctrine() 191 case 'all':
203 ->getRepository('WallabagCoreBundle:Entry') 192 $qb = $repository->getBuilderForAllByUser($this->getUser()->getId());
204 ->findStarredByUser($this->getUser()->getId()); 193 break;
194
195 default:
196 throw new \InvalidArgumentException(sprintf('Type "%s" is not implemented.', $type));
197 }
198
199 $form = $this->get('form.factory')->create(new EntryFilterType());
205 200
206 if ($request->query->has($form->getName())) { 201 if ($request->query->has($form->getName())) {
207 // manually bind values from the request 202 // manually bind values from the request
208 $form->submit($request->query->get($form->getName())); 203 $form->submit($request->query->get($form->getName()));
209 204
210 // build the query from the given form object 205 // build the query from the given form object
211 $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $filterBuilder); 206 $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $qb);
212 } 207 }
213 208
214 $pagerAdapter = new DoctrineORMAdapter($filterBuilder->getQuery()); 209 $pagerAdapter = new DoctrineORMAdapter($qb->getQuery());
215 $entries = new Pagerfanta($pagerAdapter); 210 $entries = new Pagerfanta($pagerAdapter);
216 211
217 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage()); 212 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
diff --git a/src/Wallabag/CoreBundle/Controller/RssController.php b/src/Wallabag/CoreBundle/Controller/RssController.php
index 0558c53b..6121f361 100644
--- a/src/Wallabag/CoreBundle/Controller/RssController.php
+++ b/src/Wallabag/CoreBundle/Controller/RssController.php
@@ -22,22 +22,7 @@ class RssController extends Controller
22 */ 22 */
23 public function showUnreadAction(User $user) 23 public function showUnreadAction(User $user)
24 { 24 {
25 $qb = $this->getDoctrine() 25 return $this->showEntries('unread', $user);
26 ->getRepository('WallabagCoreBundle:Entry')
27 ->findUnreadByUser(
28 $user->getId()
29 );
30
31 $pagerAdapter = new DoctrineORMAdapter($qb->getQuery());
32 $entries = new Pagerfanta($pagerAdapter);
33
34 $perPage = $user->getConfig()->getRssLimit() ?: $this->container->getParameter('rss_limit');
35 $entries->setMaxPerPage($perPage);
36
37 return $this->render('WallabagCoreBundle:Entry:entries.xml.twig', array(
38 'type' => 'unread',
39 'entries' => $entries,
40 ));
41 } 26 }
42 27
43 /** 28 /**
@@ -50,22 +35,7 @@ class RssController extends Controller
50 */ 35 */
51 public function showArchiveAction(User $user) 36 public function showArchiveAction(User $user)
52 { 37 {
53 $qb = $this->getDoctrine() 38 return $this->showEntries('archive', $user);
54 ->getRepository('WallabagCoreBundle:Entry')
55 ->findArchiveByUser(
56 $user->getId()
57 );
58
59 $pagerAdapter = new DoctrineORMAdapter($qb->getQuery());
60 $entries = new Pagerfanta($pagerAdapter);
61
62 $perPage = $user->getConfig()->getRssLimit() ?: $this->container->getParameter('rss_limit');
63 $entries->setMaxPerPage($perPage);
64
65 return $this->render('WallabagCoreBundle:Entry:entries.xml.twig', array(
66 'type' => 'archive',
67 'entries' => $entries,
68 ));
69 } 39 }
70 40
71 /** 41 /**
@@ -78,11 +48,38 @@ class RssController extends Controller
78 */ 48 */
79 public function showStarredAction(User $user) 49 public function showStarredAction(User $user)
80 { 50 {
81 $qb = $this->getDoctrine() 51 return $this->showEntries('starred', $user);
82 ->getRepository('WallabagCoreBundle:Entry') 52 }
83 ->findStarredByUser( 53
84 $user->getId() 54 /**
85 ); 55 * Global method to retrieve entries depending on the given type
56 * It returns the response to be send.
57 *
58 * @param string $type Entries type: unread, starred or archive
59 * @param User $user
60 *
61 * @return \Symfony\Component\HttpFoundation\Response
62 */
63 private function showEntries($type, User $user)
64 {
65 $repository = $this->getDoctrine()->getRepository('WallabagCoreBundle:Entry');
66
67 switch ($type) {
68 case 'starred':
69 $qb = $repository->getBuilderForStarredByUser($user->getId());
70 break;
71
72 case 'archive':
73 $qb = $repository->getBuilderForArchiveByUser($user->getId());
74 break;
75
76 case 'unread':
77 $qb = $repository->getBuilderForUnreadByUser($user->getId());
78 break;
79
80 default:
81 throw new \InvalidArgumentException(sprintf('Type "%s" is not implemented.', $type));
82 }
86 83
87 $pagerAdapter = new DoctrineORMAdapter($qb->getQuery()); 84 $pagerAdapter = new DoctrineORMAdapter($qb->getQuery());
88 $entries = new Pagerfanta($pagerAdapter); 85 $entries = new Pagerfanta($pagerAdapter);
@@ -91,7 +88,7 @@ class RssController extends Controller
91 $entries->setMaxPerPage($perPage); 88 $entries->setMaxPerPage($perPage);
92 89
93 return $this->render('WallabagCoreBundle:Entry:entries.xml.twig', array( 90 return $this->render('WallabagCoreBundle:Entry:entries.xml.twig', array(
94 'type' => 'starred', 91 'type' => $type,
95 'entries' => $entries, 92 'entries' => $entries,
96 )); 93 ));
97 } 94 }
diff --git a/src/Wallabag/CoreBundle/Controller/StaticController.php b/src/Wallabag/CoreBundle/Controller/StaticController.php
index 3b844b44..64875a66 100644
--- a/src/Wallabag/CoreBundle/Controller/StaticController.php
+++ b/src/Wallabag/CoreBundle/Controller/StaticController.php
@@ -28,12 +28,4 @@ class StaticController extends Controller
28 array() 28 array()
29 ); 29 );
30 } 30 }
31
32 /**
33 * @Route("/", name="homepage")
34 */
35 public function apiAction()
36 {
37 return $this->redirect($this->generateUrl('nelmio_api_doc_index'));
38 }
39} 31}
diff --git a/src/Wallabag/CoreBundle/Controller/TagController.php b/src/Wallabag/CoreBundle/Controller/TagController.php
index a342ec0b..fd2069e0 100644
--- a/src/Wallabag/CoreBundle/Controller/TagController.php
+++ b/src/Wallabag/CoreBundle/Controller/TagController.php
@@ -4,10 +4,60 @@ namespace Wallabag\CoreBundle\Controller;
4 4
5use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 5use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
6use Symfony\Bundle\FrameworkBundle\Controller\Controller; 6use Symfony\Bundle\FrameworkBundle\Controller\Controller;
7use Symfony\Component\HttpFoundation\Request;
8use Wallabag\CoreBundle\Form\Type\NewTagType;
9use Wallabag\CoreBundle\Entity\Tag;
10use Wallabag\CoreBundle\Entity\Entry;
7 11
8class TagController extends Controller 12class TagController extends Controller
9{ 13{
10 /** 14 /**
15 * @param Request $request
16 *
17 * @Route("/new-tag/{entry}", requirements={"entry" = "\d+"}, name="new_tag")
18 *
19 * @return \Symfony\Component\HttpFoundation\Response
20 */
21 public function addTagFormAction(Request $request, Entry $entry)
22 {
23 $tag = new Tag($this->getUser());
24 $form = $this->createForm(new NewTagType(), $tag);
25 $form->handleRequest($request);
26
27 if ($form->isValid()) {
28 $existingTag = $this->getDoctrine()
29 ->getRepository('WallabagCoreBundle:Tag')
30 ->findOneByLabelAndUserId($tag->getLabel(), $this->getUser()->getId());
31
32 $em = $this->getDoctrine()->getManager();
33
34 if (is_null($existingTag)) {
35 $entry->addTag($tag);
36 $em->persist($tag);
37 } else {
38 if (!$existingTag->hasEntry($entry)) {
39 $entry->addTag($existingTag);
40 $em->persist($existingTag);
41 }
42 }
43
44 $em->flush();
45
46 $this->get('session')->getFlashBag()->add(
47 'notice',
48 'Tag added'
49 );
50
51 return $this->redirect($this->generateUrl('view', array('id' => $entry->getId())));
52 }
53
54 return $this->render('WallabagCoreBundle:Tag:new_form.html.twig', array(
55 'form' => $form->createView(),
56 'entry' => $entry,
57 ));
58 }
59
60 /**
11 * Shows tags for current user. 61 * Shows tags for current user.
12 * 62 *
13 * @Route("/tag/list", name="tag") 63 * @Route("/tag/list", name="tag")