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-entry", name="new_entry")
20 * @return \Symfony\Component\HttpFoundation\Response
22 public function addEntryFormAction(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_form.html.twig', array(
49 'form' => $form->createView(),
54 * @param Request $request
56 * @Route("/new", name="new")
58 * @return \Symfony\Component\HttpFoundation\Response
60 public function addEntryAction(Request
$request)
62 return $this->render('WallabagCoreBundle:Entry:new.html.twig');
66 * Edit an entry content.
68 * @param Request $request
71 * @Route("/edit/{id}", requirements={"id" = "\d+"}, name="edit")
73 * @return \Symfony\Component\HttpFoundation\Response
75 public function editEntryAction(Request
$request, Entry
$entry)
77 $this->checkUserAction($entry);
79 $form = $this->createForm(new EditEntryType(), $entry);
81 $form->handleRequest($request);
83 if ($form->isValid()) {
84 $em = $this->getDoctrine()->getManager();
88 $this->get('session')->getFlashBag()->add(
93 return $this->redirect($this->generateUrl('view', array('id' => $entry->getId())));
96 return $this->render('WallabagCoreBundle:Entry:edit.html.twig', array(
97 'form' => $form->createView(),
102 * Shows unread entries for current user.
104 * @Route("/unread/list/{page}", name="unread", defaults={"page" = "1"})
106 * @return \Symfony\Component\HttpFoundation\Response
108 public function showUnreadAction($page)
110 $entries = $this->getDoctrine()
111 ->getRepository('WallabagCoreBundle:Entry')
112 ->findUnreadByUser($this->getUser()->getId());
114 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
115 $entries->setCurrentPage($page);
117 return $this->render(
118 'WallabagCoreBundle:Entry:entries.html.twig',
120 'entries' => $entries,
121 'currentPage' => $page
127 * Shows read entries for current user.
129 * @Route("/archive/list/{page}", name="archive", defaults={"page" = "1"})
131 * @return \Symfony\Component\HttpFoundation\Response
133 public function showArchiveAction($page)
135 $entries = $this->getDoctrine()
136 ->getRepository('WallabagCoreBundle:Entry')
137 ->findArchiveByUser($this->getUser()->getId());
139 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
140 $entries->setCurrentPage($page);
142 return $this->render(
143 'WallabagCoreBundle:Entry:entries.html.twig',
145 'entries' => $entries,
146 'currentPage' => $page
152 * Shows starred entries for current user.
154 * @Route("/starred/list/{page}", name="starred", defaults={"page" = "1"})
156 * @return \Symfony\Component\HttpFoundation\Response
158 public function showStarredAction($page)
160 $entries = $this->getDoctrine()
161 ->getRepository('WallabagCoreBundle:Entry')
162 ->findStarredByUser($this->getUser()->getId());
164 $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
165 $entries->setCurrentPage($page);
167 return $this->render(
168 'WallabagCoreBundle:Entry:entries.html.twig',
170 'entries' => $entries,
171 'currentPage' => $page
177 * Shows entry content.
179 * @param Entry $entry
181 * @Route("/view/{id}", requirements={"id" = "\d+"}, name="view")
183 * @return \Symfony\Component\HttpFoundation\Response
185 public function viewAction(Entry
$entry)
187 $this->checkUserAction($entry);
189 return $this->render(
190 'WallabagCoreBundle:Entry:entry.html.twig',
191 array('entry' => $entry)
196 * Changes read status for an entry.
198 * @param Request $request
199 * @param Entry $entry
201 * @Route("/archive/{id}", requirements={"id" = "\d+"}, name="archive_entry")
203 * @return \Symfony\Component\HttpFoundation\RedirectResponse
205 public function toggleArchiveAction(Request
$request, Entry
$entry)
207 $this->checkUserAction($entry);
209 $entry->toggleArchive();
210 $this->getDoctrine()->getManager()->flush();
212 $this->get('session')->getFlashBag()->add(
217 return $this->redirect($request->headers
->get('referer'));
221 * Changes favorite status for an entry.
223 * @param Request $request
224 * @param Entry $entry
226 * @Route("/star/{id}", requirements={"id" = "\d+"}, name="star_entry")
228 * @return \Symfony\Component\HttpFoundation\RedirectResponse
230 public function toggleStarAction(Request
$request, Entry
$entry)
232 $this->checkUserAction($entry);
234 $entry->toggleStar();
235 $this->getDoctrine()->getManager()->flush();
237 $this->get('session')->getFlashBag()->add(
242 return $this->redirect($request->headers
->get('referer'));
248 * @param Request $request
249 * @param Entry $entry
251 * @Route("/delete/{id}", requirements={"id" = "\d+"}, name="delete_entry")
253 * @return \Symfony\Component\HttpFoundation\RedirectResponse
255 public function deleteEntryAction(Request
$request, Entry
$entry)
257 $this->checkUserAction($entry);
259 $em = $this->getDoctrine()->getManager();
263 $this->get('session')->getFlashBag()->add(
268 return $this->redirect($request->headers
->get('referer'));
272 * Check if the logged user can manage the given entry.
274 * @param Entry $entry
276 private function checkUserAction(Entry
$entry)
278 if ($this->getUser()->getId() != $entry->getUser()->getId()) {
279 throw $this->createAccessDeniedException('You can not access this entry.');