diff options
Diffstat (limited to 'src/Wallabag/CoreBundle/Controller')
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 | ||
5 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | 5 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; |
6 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | 6 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; |
7 | use Symfony\Component\HttpFoundation\Request; | ||
8 | use Wallabag\CoreBundle\Form\Type\NewTagType; | ||
9 | use Wallabag\CoreBundle\Entity\Tag; | ||
10 | use Wallabag\CoreBundle\Entity\Entry; | ||
7 | 11 | ||
8 | class TagController extends Controller | 12 | class 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") |