3 namespace Wallabag\CoreBundle\Controller
;
5 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route
;
6 use Symfony\Bundle\FrameworkBundle\Controller\Controller
;
7 use Symfony\Component\HttpFoundation\Request
;
8 use Wallabag\CoreBundle\Entity\Entry
;
9 use Wallabag\CoreBundle\Service\Extractor
;
10 use Wallabag\CoreBundle\Form\Type\NewEntryType
;
11 use Wallabag\CoreBundle\Form\Type\EditEntryType
;
12 use Wallabag\CoreBundle\Filter\EntryFilterType
;
13 use Pagerfanta\Adapter\DoctrineORMAdapter
;
14 use Pagerfanta\Pagerfanta
;
16 class EntryController
extends Controller
19 * @param Request $request
21 * @Route("/new", name="new_entry")
23 * @return \Symfony\Component\HttpFoundation\Response
25 public function addEntryAction(Request
$request)
27 $entry = new Entry($this->getUser());
29 $form = $this->createForm(new NewEntryType(), $entry);
31 $form->handleRequest($request);
33 if ($form->isValid()) {
34 $content = Extractor
::extract($entry->getUrl());
36 $entry->setTitle($content->getTitle());
37 $entry->setContent($content->getBody());
39 $em = $this->getDoctrine()->getManager();
43 $this->get('session')->getFlashBag()->add(
48 return $this->redirect($this->generateUrl('homepage'));
51 return $this->render('WallabagCoreBundle:Entry:new.html.twig', array(
52 'form' => $form->createView(),
57 * Edit an entry content.
59 * @param Request $request
62 * @Route("/edit/{id}", requirements={"id" = "\d+"}, name="edit")
64 * @return \Symfony\Component\HttpFoundation\Response
66 public function editEntryAction(Request
$request, Entry
$entry)
68 $this->checkUserAction($entry);
70 $form = $this->createForm(new EditEntryType(), $entry);
72 $form->handleRequest($request);
74 if ($form->isValid()) {
75 $em = $this->getDoctrine()->getManager();
79 $this->get('session')->getFlashBag()->add(
84 return $this->redirect($this->generateUrl('view', array('id' => $entry->getId())));
87 return $this->render('WallabagCoreBundle:Entry:edit.html.twig', array(
88 'form' => $form->createView(),
93 * Shows unread entries for current user.
95 * @param Request $request
98 * @Route("/unread/list/{page}", name="unread", defaults={"page" = "1"})
100 * @return \Symfony\Component\HttpFoundation\Response
102 public function showUnreadAction(Request
$request, $page)
104 $form = $this->get('form.factory')->create(new EntryFilterType());
106 $filterBuilder = $this->getDoctrine()
107 ->getRepository('WallabagCoreBundle:Entry')
108 ->findUnreadByUser($this->getUser()->getId());
110 if ($request->query
->has($form->getName())) {
111 // manually bind values from the request
112 $form->submit($request->query
->get($form->getName()));
114 // build the query from the given form object
115 $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $filterBuilder);
118 $pagerAdapter = new DoctrineORMAdapter($filterBuilder->getQuery());
119 $entries = new Pagerfanta($pagerAdapter);
121 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
122 $entries->setCurrentPage($page);
124 return $this->render(
125 'WallabagCoreBundle:Entry:entries.html.twig',
127 'form' => $form->createView(),
128 'entries' => $entries,
129 'currentPage' => $page
135 * Shows read entries for current user.
137 * @param Request $request
140 * @Route("/archive/list/{page}", name="archive", defaults={"page" = "1"})
142 * @return \Symfony\Component\HttpFoundation\Response
144 public function showArchiveAction(Request
$request, $page)
146 $form = $this->get('form.factory')->create(new EntryFilterType());
148 $filterBuilder = $this->getDoctrine()
149 ->getRepository('WallabagCoreBundle:Entry')
150 ->findArchiveByUser($this->getUser()->getId());
152 if ($request->query
->has($form->getName())) {
153 // manually bind values from the request
154 $form->submit($request->query
->get($form->getName()));
156 // build the query from the given form object
157 $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $filterBuilder);
160 $pagerAdapter = new DoctrineORMAdapter($filterBuilder->getQuery());
161 $entries = new Pagerfanta($pagerAdapter);
163 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
164 $entries->setCurrentPage($page);
166 return $this->render(
167 'WallabagCoreBundle:Entry:entries.html.twig',
169 'form' => $form->createView(),
170 'entries' => $entries,
171 'currentPage' => $page
177 * Shows starred entries for current user.
179 * @param Request $request
182 * @Route("/starred/list/{page}", name="starred", defaults={"page" = "1"})
184 * @return \Symfony\Component\HttpFoundation\Response
186 public function showStarredAction(Request
$request, $page)
188 $form = $this->get('form.factory')->create(new EntryFilterType());
190 $filterBuilder = $this->getDoctrine()
191 ->getRepository('WallabagCoreBundle:Entry')
192 ->findStarredByUser($this->getUser()->getId());
194 if ($request->query
->has($form->getName())) {
195 // manually bind values from the request
196 $form->submit($request->query
->get($form->getName()));
198 // build the query from the given form object
199 $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $filterBuilder);
202 $pagerAdapter = new DoctrineORMAdapter($filterBuilder->getQuery());
203 $entries = new Pagerfanta($pagerAdapter);
205 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
206 $entries->setCurrentPage($page);
208 return $this->render(
209 'WallabagCoreBundle:Entry:entries.html.twig',
211 'form' => $form->createView(),
212 'entries' => $entries,
213 'currentPage' => $page
219 * Shows entry content.
221 * @param Entry $entry
223 * @Route("/view/{id}", requirements={"id" = "\d+"}, name="view")
225 * @return \Symfony\Component\HttpFoundation\Response
227 public function viewAction(Entry
$entry)
229 $this->checkUserAction($entry);
231 return $this->render(
232 'WallabagCoreBundle:Entry:entry.html.twig',
233 array('entry' => $entry)
238 * Changes read status for an entry.
240 * @param Request $request
241 * @param Entry $entry
243 * @Route("/archive/{id}", requirements={"id" = "\d+"}, name="archive_entry")
245 * @return \Symfony\Component\HttpFoundation\RedirectResponse
247 public function toggleArchiveAction(Request
$request, Entry
$entry)
249 $this->checkUserAction($entry);
251 $entry->toggleArchive();
252 $this->getDoctrine()->getManager()->flush();
254 $this->get('session')->getFlashBag()->add(
259 return $this->redirect($request->headers
->get('referer'));
263 * Changes favorite status for an entry.
265 * @param Request $request
266 * @param Entry $entry
268 * @Route("/star/{id}", requirements={"id" = "\d+"}, name="star_entry")
270 * @return \Symfony\Component\HttpFoundation\RedirectResponse
272 public function toggleStarAction(Request
$request, Entry
$entry)
274 $this->checkUserAction($entry);
276 $entry->toggleStar();
277 $this->getDoctrine()->getManager()->flush();
279 $this->get('session')->getFlashBag()->add(
284 return $this->redirect($request->headers
->get('referer'));
290 * @param Request $request
291 * @param Entry $entry
293 * @Route("/delete/{id}", requirements={"id" = "\d+"}, name="delete_entry")
295 * @return \Symfony\Component\HttpFoundation\RedirectResponse
297 public function deleteEntryAction(Request
$request, Entry
$entry)
299 $this->checkUserAction($entry);
301 $em = $this->getDoctrine()->getManager();
305 $this->get('session')->getFlashBag()->add(
310 return $this->redirect($request->headers
->get('referer'));
314 * Check if the logged user can manage the given entry.
316 * @param Entry $entry
318 private function checkUserAction(Entry
$entry)
320 if ($this->getUser()->getId() != $entry->getUser()->getId()) {
321 throw $this->createAccessDeniedException('You can not access this entry.');