use Symfony\Component\HttpFoundation\Request;
use Wallabag\CoreBundle\Entity\Entry;
use Wallabag\CoreBundle\Service\Extractor;
-use Wallabag\CoreBundle\Helper\Url;
+use Wallabag\CoreBundle\Form\Type\NewEntryType;
+use Wallabag\CoreBundle\Form\Type\EditEntryType;
+use Wallabag\CoreBundle\Filter\EntryFilterType;
+use Pagerfanta\Adapter\DoctrineORMAdapter;
+use Pagerfanta\Pagerfanta;
class EntryController extends Controller
{
/**
* @param Request $request
*
- * @Route("/new", name="new_entry")
+ * @Route("/new-entry", name="new_entry")
*
* @return \Symfony\Component\HttpFoundation\Response
*/
- public function addEntryAction(Request $request)
+ public function addEntryFormAction(Request $request)
{
$entry = new Entry($this->getUser());
- $form = $this->createFormBuilder($entry)
- ->add('url', 'url')
- ->add('save', 'submit')
- ->getForm();
+ $form = $this->createForm(new NewEntryType(), $entry);
$form->handleRequest($request);
return $this->redirect($this->generateUrl('homepage'));
}
- return $this->render('WallabagCoreBundle:Entry:new.html.twig', array(
+ return $this->render('WallabagCoreBundle:Entry:new_form.html.twig', array(
'form' => $form->createView(),
));
}
/**
- * Shows unread entries for current user
+ * @param Request $request
*
- * @Route("/unread", name="unread")
+ * @Route("/new", name="new")
*
* @return \Symfony\Component\HttpFoundation\Response
*/
- public function showUnreadAction()
+ public function addEntryAction(Request $request)
{
- // TODO change pagination
- $entries = $this->getDoctrine()
+ return $this->render('WallabagCoreBundle:Entry:new.html.twig');
+ }
+
+ /**
+ * Edit an entry content.
+ *
+ * @param Request $request
+ * @param Entry $entry
+ *
+ * @Route("/edit/{id}", requirements={"id" = "\d+"}, name="edit")
+ *
+ * @return \Symfony\Component\HttpFoundation\Response
+ */
+ public function editEntryAction(Request $request, Entry $entry)
+ {
+ $this->checkUserAction($entry);
+
+ $form = $this->createForm(new EditEntryType(), $entry);
+
+ $form->handleRequest($request);
+
+ if ($form->isValid()) {
+ $em = $this->getDoctrine()->getManager();
+ $em->persist($entry);
+ $em->flush();
+
+ $this->get('session')->getFlashBag()->add(
+ 'notice',
+ 'Entry updated'
+ );
+
+ return $this->redirect($this->generateUrl('view', array('id' => $entry->getId())));
+ }
+
+ return $this->render('WallabagCoreBundle:Entry:edit.html.twig', array(
+ 'form' => $form->createView(),
+ ));
+ }
+
+ /**
+ * Shows unread entries for current user.
+ *
+ * @param Request $request
+ * @param int $page
+ *
+ * @Route("/unread/list/{page}", name="unread", defaults={"page" = "1"})
+ *
+ * @return \Symfony\Component\HttpFoundation\Response
+ */
+ public function showUnreadAction(Request $request, $page)
+ {
+ $form = $this->get('form.factory')->create(new EntryFilterType());
+
+ $filterBuilder = $this->getDoctrine()
->getRepository('WallabagCoreBundle:Entry')
- ->findUnreadByUser($this->getUser()->getId(), 0);
+ ->findUnreadByUser($this->getUser()->getId());
+
+ if ($request->query->has($form->getName())) {
+ // manually bind values from the request
+ $form->submit($request->query->get($form->getName()));
+
+ // build the query from the given form object
+ $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $filterBuilder);
+ }
+
+ $pagerAdapter = new DoctrineORMAdapter($filterBuilder->getQuery());
+ $entries = new Pagerfanta($pagerAdapter);
+
+ $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
+ $entries->setCurrentPage($page);
return $this->render(
'WallabagCoreBundle:Entry:entries.html.twig',
- array('entries' => $entries)
+ array(
+ 'form' => $form->createView(),
+ 'entries' => $entries,
+ 'currentPage' => $page
+ )
);
}
/**
- * Shows read entries for current user
+ * Shows read entries for current user.
+ *
+ * @param Request $request
+ * @param int $page
*
- * @Route("/archive", name="archive")
+ * @Route("/archive/list/{page}", name="archive", defaults={"page" = "1"})
*
* @return \Symfony\Component\HttpFoundation\Response
*/
- public function showArchiveAction()
+ public function showArchiveAction(Request $request, $page)
{
- // TODO change pagination
- $entries = $this->getDoctrine()
+ $form = $this->get('form.factory')->create(new EntryFilterType());
+
+ $filterBuilder = $this->getDoctrine()
->getRepository('WallabagCoreBundle:Entry')
- ->findArchiveByUser($this->getUser()->getId(), 0);
+ ->findArchiveByUser($this->getUser()->getId());
+
+ if ($request->query->has($form->getName())) {
+ // manually bind values from the request
+ $form->submit($request->query->get($form->getName()));
+
+ // build the query from the given form object
+ $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $filterBuilder);
+ }
+
+ $pagerAdapter = new DoctrineORMAdapter($filterBuilder->getQuery());
+ $entries = new Pagerfanta($pagerAdapter);
+
+ $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
+ $entries->setCurrentPage($page);
return $this->render(
'WallabagCoreBundle:Entry:entries.html.twig',
- array('entries' => $entries)
+ array(
+ 'form' => $form->createView(),
+ 'entries' => $entries,
+ 'currentPage' => $page
+ )
);
}
/**
- * Shows starred entries for current user
+ * Shows starred entries for current user.
+ *
+ * @param Request $request
+ * @param int $page
*
- * @Route("/starred", name="starred")
+ * @Route("/starred/list/{page}", name="starred", defaults={"page" = "1"})
*
* @return \Symfony\Component\HttpFoundation\Response
*/
- public function showStarredAction()
+ public function showStarredAction(Request $request, $page)
{
- // TODO change pagination
- $entries = $this->getDoctrine()
+ $form = $this->get('form.factory')->create(new EntryFilterType());
+
+ $filterBuilder = $this->getDoctrine()
->getRepository('WallabagCoreBundle:Entry')
- ->findStarredByUser($this->getUser()->getId(), 0);
+ ->findStarredByUser($this->getUser()->getId());
+
+ if ($request->query->has($form->getName())) {
+ // manually bind values from the request
+ $form->submit($request->query->get($form->getName()));
+
+ // build the query from the given form object
+ $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $filterBuilder);
+ }
+
+ $pagerAdapter = new DoctrineORMAdapter($filterBuilder->getQuery());
+ $entries = new Pagerfanta($pagerAdapter);
+
+ $entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
+ $entries->setCurrentPage($page);
return $this->render(
'WallabagCoreBundle:Entry:entries.html.twig',
- array('entries' => $entries)
+ array(
+ 'form' => $form->createView(),
+ 'entries' => $entries,
+ 'currentPage' => $page
+ )
);
}
/**
- * Shows entry content
+ * Shows entry content.
*
* @param Entry $entry
*
}
/**
- * Changes read status for an entry
+ * Changes read status for an entry.
*
* @param Request $request
* @param Entry $entry
}
/**
- * Changes favorite status for an entry
+ * Changes favorite status for an entry.
*
* @param Request $request
* @param Entry $entry
}
/**
- * Deletes entry
+ * Deletes entry.
*
* @param Request $request
* @param Entry $entry
{
$this->checkUserAction($entry);
- $entry->setDeleted(1);
- $this->getDoctrine()->getManager()->flush();
+ $em = $this->getDoctrine()->getManager();
+ $em->remove($entry);
+ $em->flush();
$this->get('session')->getFlashBag()->add(
'notice',
}
/**
- * Check if the logged user can manage the given entry
+ * Check if the logged user can manage the given entry.
*
* @param Entry $entry
*/
private function checkUserAction(Entry $entry)
{
if ($this->getUser()->getId() != $entry->getUser()->getId()) {
- throw $this->createAccessDeniedException('You can not use this entry.');
+ throw $this->createAccessDeniedException('You can not access this entry.');
}
}
}