X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2FWallabag%2FCoreBundle%2FRepository%2FEntryRepository.php;h=a4514d9e791c0ffd04a39df8b4e45d2377e377d2;hb=7fc14130c706fae27c5643a016b23de2bf29910d;hp=f4c803f991c2e38fb41d510aa5f44ff3e197e1ae;hpb=29c4517f7a8ed08239e5bee3d6c3fa823a83d102;p=github%2Fwallabag%2Fwallabag.git diff --git a/src/Wallabag/CoreBundle/Repository/EntryRepository.php b/src/Wallabag/CoreBundle/Repository/EntryRepository.php index f4c803f9..a4514d9e 100644 --- a/src/Wallabag/CoreBundle/Repository/EntryRepository.php +++ b/src/Wallabag/CoreBundle/Repository/EntryRepository.php @@ -2,113 +2,127 @@ namespace Wallabag\CoreBundle\Repository; -use Doctrine\ORM\Query; use Doctrine\ORM\EntityRepository; -use Doctrine\ORM\Tools\Pagination\Paginator; +use Pagerfanta\Adapter\DoctrineORMAdapter; +use Pagerfanta\Pagerfanta; class EntryRepository extends EntityRepository { /** - * Retrieves unread entries for a user + * Retrieves unread entries for a user. * - * @param $userId - * @param $firstResult - * @param int $maxResults - * @return Paginator + * @param int $userId + * + * @return Pagerfanta */ - public function findUnreadByUser($userId, $firstResult, $maxResults = 12) + public function findUnreadByUser($userId) { $qb = $this->createQueryBuilder('e') - ->select('e') - ->setFirstResult($firstResult) - ->setMaxResults($maxResults) + ->leftJoin('e.user', 'u') ->where('e.isArchived = false') - ->andWhere('e.userId =:userId')->setParameter('userId', $userId) - ->andWhere('e.isDeleted=false') - ->orderBy('e.createdAt', 'desc') + ->andWhere('u.id =:userId')->setParameter('userId', $userId) + ->orderBy('e.id', 'desc') ->getQuery(); - $paginator = new Paginator($qb); + $pagerAdapter = new DoctrineORMAdapter($qb); - return $paginator; + return new Pagerfanta($pagerAdapter); } /** - * Retrieves read entries for a user + * Retrieves read entries for a user. + * + * @param int $userId * - * @param $userId - * @param $firstResult - * @param int $maxResults - * @return Paginator + * @return Pagerfanta */ - public function findArchiveByUser($userId, $firstResult, $maxResults = 12) + public function findArchiveByUser($userId) { $qb = $this->createQueryBuilder('e') ->select('e') - ->setFirstResult($firstResult) - ->setMaxResults($maxResults) + ->leftJoin('e.user', 'u') ->where('e.isArchived = true') - ->andWhere('e.userId =:userId')->setParameter('userId', $userId) - ->andWhere('e.isDeleted=false') - ->orderBy('e.createdAt', 'desc') + ->andWhere('u.id =:userId')->setParameter('userId', $userId) + ->orderBy('e.id', 'desc') ->getQuery(); - $paginator = new Paginator($qb); + $pagerAdapter = new DoctrineORMAdapter($qb); - return $paginator; + return new Pagerfanta($pagerAdapter); } /** - * Retrieves starred entries for a user + * Retrieves starred entries for a user. * - * @param $userId - * @param $firstResult - * @param int $maxResults - * @return Paginator + * @param int $userId + * + * @return Pagerfanta */ - public function findStarredByUser($userId, $firstResult, $maxResults = 12) + public function findStarredByUser($userId) { + $qb = $this->createQueryBuilder('e') ->select('e') - ->setFirstResult($firstResult) - ->setMaxResults($maxResults) + ->leftJoin('e.user', 'u') ->where('e.isStarred = true') - ->andWhere('e.userId =:userId')->setParameter('userId', $userId) - ->andWhere('e.isDeleted=false') - ->orderBy('e.createdAt', 'desc') + ->andWhere('u.id =:userId')->setParameter('userId', $userId) + ->orderBy('e.id', 'desc') ->getQuery(); - $paginator = new Paginator($qb); + $pagerAdapter = new DoctrineORMAdapter($qb); - return $paginator; + return new Pagerfanta($pagerAdapter); } - public function findEntries($userId, $isArchived, $isStarred, $isDeleted, $sort, $order) + /** + * Find Entries. + * + * @param int $userId + * @param bool $isArchived + * @param bool $isStarred + * @param string $sort + * @param string $order + * + * @return array + */ + public function findEntries($userId, $isArchived = null, $isStarred = null, $sort = 'created', $order = 'ASC') { $qb = $this->createQueryBuilder('e') - ->select('e') - ->where('e.userId =:userId')->setParameter('userId', $userId); + ->where('e.user =:userId')->setParameter('userId', $userId); - if (!is_null($isArchived)) { - $qb->andWhere('e.isArchived =:isArchived')->setParameter('isArchived', $isArchived); + if (null !== $isArchived) { + $qb->andWhere('e.isArchived =:isArchived')->setParameter('isArchived', (bool) $isArchived); } - if (!is_null($isStarred)) { - $qb->andWhere('e.isStarred =:isStarred')->setParameter('isStarred', $isStarred); - } - - if (!is_null($isDeleted)) { - $qb->andWhere('e.isDeleted =:isDeleted')->setParameter('isDeleted', $isDeleted); + if (null !== $isStarred) { + $qb->andWhere('e.isStarred =:isStarred')->setParameter('isStarred', (bool) $isStarred); } if ('created' === $sort) { - $qb->orderBy('e.createdAt', $order); + $qb->orderBy('e.id', $order); } elseif ('updated' === $sort) { $qb->orderBy('e.updatedAt', $order); } - return $qb - ->getQuery() - ->getResult(Query::HYDRATE_ARRAY); + $pagerAdapter = new DoctrineORMAdapter($qb); + + return new Pagerfanta($pagerAdapter); + } + + /** + * Fetch an entry with a tag. Only used for tests. + * + * @return Entry + */ + public function findOneWithTags($userId) + { + $qb = $this->createQueryBuilder('e') + ->innerJoin('e.tags', 't') + ->innerJoin('e.user', 'u') + ->addSelect('t', 'u') + ->where('e.user=:userId')->setParameter('userId', $userId) + ; + + return $qb->getQuery()->getResult(); } }