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
;
13 class EntryController
extends Controller
16 * @param Request $request
18 * @Route("/new", name="new_entry")
20 * @return \Symfony\Component\HttpFoundation\Response
22 public function addEntryAction(Request
$request)
24 $entry = new Entry($this->getUser());
26 $form = $this->createForm(new NewEntryType(), $entry);
28 $form->handleRequest($request);
30 if ($form->isValid()) {
31 $content = Extractor
::extract($entry->getUrl());
33 $entry->setTitle($content->getTitle());
34 $entry->setContent($content->getBody());
36 $em = $this->getDoctrine()->getManager();
40 $this->get('session')->getFlashBag()->add(
45 return $this->redirect($this->generateUrl('homepage'));
48 return $this->render('WallabagCoreBundle:Entry:new.html.twig', array(
49 'form' => $form->createView(),
54 * Edit an entry content.
56 * @param Request $request
59 * @Route("/edit/{id}", requirements={"id" = "\d+"}, name="edit")
61 * @return \Symfony\Component\HttpFoundation\Response
63 public function editEntryAction(Request
$request, Entry
$entry)
65 $this->checkUserAction($entry);
67 $form = $this->createForm(new EditEntryType(), $entry);
69 $form->handleRequest($request);
71 if ($form->isValid()) {
72 $em = $this->getDoctrine()->getManager();
76 $this->get('session')->getFlashBag()->add(
81 return $this->redirect($this->generateUrl('view', array('id' => $entry->getId())));
84 return $this->render('WallabagCoreBundle:Entry:edit.html.twig', array(
85 'form' => $form->createView(),
90 * Shows unread entries for current user.
92 * @Route("/unread/list/{page}", name="unread", defaults={"page" = "1"})
94 * @return \Symfony\Component\HttpFoundation\Response
96 public function showUnreadAction($page)
98 $entries = $this->getDoctrine()
99 ->getRepository('WallabagCoreBundle:Entry')
100 ->findUnreadByUser($this->getUser()->getId());
102 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
103 $entries->setCurrentPage($page);
105 return $this->render(
106 'WallabagCoreBundle:Entry:entries.html.twig',
108 'entries' => $entries,
109 'currentPage' => $page
115 * Shows read entries for current user.
117 * @Route("/archive/list/{page}", name="archive", defaults={"page" = "1"})
119 * @return \Symfony\Component\HttpFoundation\Response
121 public function showArchiveAction($page)
123 $entries = $this->getDoctrine()
124 ->getRepository('WallabagCoreBundle:Entry')
125 ->findArchiveByUser($this->getUser()->getId());
127 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
128 $entries->setCurrentPage($page);
130 return $this->render(
131 'WallabagCoreBundle:Entry:entries.html.twig',
133 'entries' => $entries,
134 'currentPage' => $page
140 * Shows starred entries for current user.
142 * @Route("/starred/list/{page}", name="starred", defaults={"page" = "1"})
144 * @return \Symfony\Component\HttpFoundation\Response
146 public function showStarredAction($page)
148 $entries = $this->getDoctrine()
149 ->getRepository('WallabagCoreBundle:Entry')
150 ->findStarredByUser($this->getUser()->getId());
152 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
153 $entries->setCurrentPage($page);
155 return $this->render(
156 'WallabagCoreBundle:Entry:entries.html.twig',
158 'entries' => $entries,
159 'currentPage' => $page
165 * Shows entry content.
167 * @param Entry $entry
169 * @Route("/view/{id}", requirements={"id" = "\d+"}, name="view")
171 * @return \Symfony\Component\HttpFoundation\Response
173 public function viewAction(Entry
$entry)
175 $this->checkUserAction($entry);
177 return $this->render(
178 'WallabagCoreBundle:Entry:entry.html.twig',
179 array('entry' => $entry)
184 * Changes read status for an entry.
186 * @param Request $request
187 * @param Entry $entry
189 * @Route("/archive/{id}", requirements={"id" = "\d+"}, name="archive_entry")
191 * @return \Symfony\Component\HttpFoundation\RedirectResponse
193 public function toggleArchiveAction(Request
$request, Entry
$entry)
195 $this->checkUserAction($entry);
197 $entry->toggleArchive();
198 $this->getDoctrine()->getManager()->flush();
200 $this->get('session')->getFlashBag()->add(
205 return $this->redirect($request->headers
->get('referer'));
209 * Changes favorite status for an entry.
211 * @param Request $request
212 * @param Entry $entry
214 * @Route("/star/{id}", requirements={"id" = "\d+"}, name="star_entry")
216 * @return \Symfony\Component\HttpFoundation\RedirectResponse
218 public function toggleStarAction(Request
$request, Entry
$entry)
220 $this->checkUserAction($entry);
222 $entry->toggleStar();
223 $this->getDoctrine()->getManager()->flush();
225 $this->get('session')->getFlashBag()->add(
230 return $this->redirect($request->headers
->get('referer'));
236 * @param Request $request
237 * @param Entry $entry
239 * @Route("/delete/{id}", requirements={"id" = "\d+"}, name="delete_entry")
241 * @return \Symfony\Component\HttpFoundation\RedirectResponse
243 public function deleteEntryAction(Request
$request, Entry
$entry)
245 $this->checkUserAction($entry);
247 $em = $this->getDoctrine()->getManager();
251 $this->get('session')->getFlashBag()->add(
256 return $this->redirect($request->headers
->get('referer'));
260 * Check if the logged user can manage the given entry.
262 * @param Entry $entry
264 private function checkUserAction(Entry
$entry)
266 if ($this->getUser()->getId() != $entry->getUser()->getId()) {
267 throw $this->createAccessDeniedException('You can not access this entry.');