- $entries = $this->getDoctrine()
- ->getRepository('WallabagCoreBundle:Entry')
- ->findStarredByUser(
- $user->getId(),
- 0,
- $user->getConfig()->getRssLimit() ?: $this->container->getParameter('rss_limit')
- );
+ $repository = $this->getDoctrine()->getRepository('WallabagCoreBundle:Entry');
+
+ switch ($type) {
+ case 'starred':
+ $qb = $repository->getBuilderForStarredByUser($user->getId());
+ break;
+
+ case 'archive':
+ $qb = $repository->getBuilderForArchiveByUser($user->getId());
+ break;
+
+ case 'unread':
+ $qb = $repository->getBuilderForUnreadByUser($user->getId());
+ break;
+
+ default:
+ throw new \InvalidArgumentException(sprintf('Type "%s" is not implemented.', $type));
+ }
+
+ $pagerAdapter = new DoctrineORMAdapter($qb->getQuery(), true, false);
+ $entries = new Pagerfanta($pagerAdapter);
+
+ $perPage = $user->getConfig()->getRssLimit() ?: $this->getParameter('wallabag_core.rss_limit');
+ $entries->setMaxPerPage($perPage);
+
+ $url = $this->generateUrl(
+ $type.'_rss',
+ [
+ 'username' => $user->getUsername(),
+ 'token' => $user->getConfig()->getRssToken(),
+ ],
+ UrlGeneratorInterface::ABSOLUTE_URL
+ );
+
+ try {
+ $entries->setCurrentPage((int) $page);
+ } catch (OutOfRangeCurrentPageException $e) {
+ if ($page > 1) {
+ return $this->redirect($url.'?page='.$entries->getNbPages(), 302);
+ }
+ }