diff options
Diffstat (limited to 'src/Wallabag/CoreBundle/Controller/EntryController.php')
-rw-r--r-- | src/Wallabag/CoreBundle/Controller/EntryController.php | 119 |
1 files changed, 57 insertions, 62 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()); |