From 2686457448372543fdf4f1fc54c4fd20f0f02c2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Fri, 7 Aug 2015 22:20:30 +0200 Subject: store estimated reading time / filters on reading time --- .../CoreBundle/Controller/EntryController.php | 66 ++++++++++++++++++++-- .../CoreBundle/Controller/RssController.php | 17 +++++- 2 files changed, 74 insertions(+), 9 deletions(-) (limited to 'src/Wallabag/CoreBundle/Controller') diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php index 29e0ffb0..8894690c 100644 --- a/src/Wallabag/CoreBundle/Controller/EntryController.php +++ b/src/Wallabag/CoreBundle/Controller/EntryController.php @@ -9,6 +9,9 @@ use Wallabag\CoreBundle\Entity\Entry; use Wallabag\CoreBundle\Service\Extractor; 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 { @@ -89,22 +92,39 @@ class EntryController extends Controller /** * 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($page) + public function showUnreadAction(Request $request, $page) { - $entries = $this->getDoctrine() + $form = $this->get('form.factory')->create(new EntryFilterType()); + + $filterBuilder = $this->getDoctrine() ->getRepository('WallabagCoreBundle:Entry') ->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( + 'form' => $form->createView(), 'entries' => $entries, 'currentPage' => $page ) @@ -114,22 +134,39 @@ class EntryController extends Controller /** * Shows read entries for current user. * + * @param Request $request + * @param int $page + * * @Route("/archive/list/{page}", name="archive", defaults={"page" = "1"}) * * @return \Symfony\Component\HttpFoundation\Response */ - public function showArchiveAction($page) + public function showArchiveAction(Request $request, $page) { - $entries = $this->getDoctrine() + $form = $this->get('form.factory')->create(new EntryFilterType()); + + $filterBuilder = $this->getDoctrine() ->getRepository('WallabagCoreBundle:Entry') ->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( + 'form' => $form->createView(), 'entries' => $entries, 'currentPage' => $page ) @@ -139,22 +176,39 @@ class EntryController extends Controller /** * Shows starred entries for current user. * + * @param Request $request + * @param int $page + * * @Route("/starred/list/{page}", name="starred", defaults={"page" = "1"}) * * @return \Symfony\Component\HttpFoundation\Response */ - public function showStarredAction($page) + public function showStarredAction(Request $request, $page) { - $entries = $this->getDoctrine() + $form = $this->get('form.factory')->create(new EntryFilterType()); + + $filterBuilder = $this->getDoctrine() ->getRepository('WallabagCoreBundle:Entry') ->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( + 'form' => $form->createView(), 'entries' => $entries, 'currentPage' => $page ) diff --git a/src/Wallabag/CoreBundle/Controller/RssController.php b/src/Wallabag/CoreBundle/Controller/RssController.php index 8428dce0..0558c53b 100644 --- a/src/Wallabag/CoreBundle/Controller/RssController.php +++ b/src/Wallabag/CoreBundle/Controller/RssController.php @@ -7,6 +7,8 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Wallabag\CoreBundle\Entity\User; use Wallabag\CoreBundle\Entity\Entry; +use Pagerfanta\Adapter\DoctrineORMAdapter; +use Pagerfanta\Pagerfanta; class RssController extends Controller { @@ -20,12 +22,15 @@ class RssController extends Controller */ public function showUnreadAction(User $user) { - $entries = $this->getDoctrine() + $qb = $this->getDoctrine() ->getRepository('WallabagCoreBundle:Entry') ->findUnreadByUser( $user->getId() ); + $pagerAdapter = new DoctrineORMAdapter($qb->getQuery()); + $entries = new Pagerfanta($pagerAdapter); + $perPage = $user->getConfig()->getRssLimit() ?: $this->container->getParameter('rss_limit'); $entries->setMaxPerPage($perPage); @@ -45,12 +50,15 @@ class RssController extends Controller */ public function showArchiveAction(User $user) { - $entries = $this->getDoctrine() + $qb = $this->getDoctrine() ->getRepository('WallabagCoreBundle:Entry') ->findArchiveByUser( $user->getId() ); + $pagerAdapter = new DoctrineORMAdapter($qb->getQuery()); + $entries = new Pagerfanta($pagerAdapter); + $perPage = $user->getConfig()->getRssLimit() ?: $this->container->getParameter('rss_limit'); $entries->setMaxPerPage($perPage); @@ -70,12 +78,15 @@ class RssController extends Controller */ public function showStarredAction(User $user) { - $entries = $this->getDoctrine() + $qb = $this->getDoctrine() ->getRepository('WallabagCoreBundle:Entry') ->findStarredByUser( $user->getId() ); + $pagerAdapter = new DoctrineORMAdapter($qb->getQuery()); + $entries = new Pagerfanta($pagerAdapter); + $perPage = $user->getConfig()->getRssLimit() ?: $this->container->getParameter('rss_limit'); $entries->setMaxPerPage($perPage); -- cgit v1.2.3