X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2FWallabag%2FCoreBundle%2FRepository%2FEntryRepository.php;h=82eb947462ea1db1e7653d9ffc725313c04ab127;hb=86719c63bf47686ca55020e6b0443344de36d45a;hp=e658a359ef216fe5ff3572395dbdb8cc4b0ab8c2;hpb=4059a061c0c8cc787f71e96aef2ab01599d3241d;p=github%2Fwallabag%2Fwallabag.git diff --git a/src/Wallabag/CoreBundle/Repository/EntryRepository.php b/src/Wallabag/CoreBundle/Repository/EntryRepository.php index e658a359..82eb9474 100644 --- a/src/Wallabag/CoreBundle/Repository/EntryRepository.php +++ b/src/Wallabag/CoreBundle/Repository/EntryRepository.php @@ -122,6 +122,8 @@ class EntryRepository extends EntityRepository /** * Fetch an entry with a tag. Only used for tests. * + * @param int $userId + * * @return Entry */ public function findOneWithTags($userId) @@ -185,7 +187,9 @@ class EntryRepository extends EntityRepository * Remove a tag from all user entries. * * We need to loop on each entry attached to the given tag to remove it, since Doctrine doesn't know EntryTag entity because it's a ManyToMany relation. - * It could be faster with one query but I don't know how to retrieve the table name `entry_tag` which can have a prefix. + * It could be faster with one query but I don't know how to retrieve the table name `entry_tag` which can have a prefix: + * + * DELETE et FROM entry_tag et WHERE et.entry_id IN ( SELECT e.id FROM entry e WHERE e.user_id = :userId ) AND et.tag_id = :tagId * * @param int $userId * @param Tag $tag @@ -203,14 +207,6 @@ class EntryRepository extends EntityRepository } $this->getEntityManager()->flush(); - - // An other solution can be to use raw query but I can't find a way to retrieve the `entry_tag` table name since it can be prefixed.... - // $sql = 'DELETE et FROM entry_tag et WHERE et.entry_id IN ( SELECT e.id FROM entry e WHERE e.user_id = :userId ) AND et.tag_id = :tagId'; - // $stmt = $this->getEntityManager()->getConnection()->prepare($sql); - // $stmt->execute([ - // 'userId' => $userId, - // 'tagId' => $tag->getId(), - // ]); } /** @@ -229,4 +225,45 @@ class EntryRepository extends EntityRepository ->getQuery() ->getResult(); } + + /** + * Find an entry by its url and its owner. + * If it exists, return the entry otherwise return false. + * + * @param $url + * @param $userId + * + * @return array|bool + */ + public function findByUrlAndUserId($url, $userId) + { + $res = $this->createQueryBuilder('e') + ->where('e.url = :url')->setParameter('url', $url) + ->andWhere('e.user = :user_id')->setParameter('user_id', $userId) + ->getQuery() + ->getResult(); + + if (count($res)) { + return current($res); + } + + return false; + } + + /** + * Count all entries for a user. + * + * @param int $userId + * + * @return integer + */ + public function countAllEntriesByUsername($userId) + { + $qb = $this->createQueryBuilder('e') + ->select('count(e)') + ->where('e.user=:userId')->setParameter('userId', $userId) + ; + + return $qb->getQuery()->getSingleScalarResult(); + } }