mirror of
https://github.com/wallabag/wallabag.git
synced 2025-10-20 19:52:09 +00:00
Merge remote-tracking branch 'origin/master' into 2.4
This commit is contained in:
commit
5419a8368e
61 changed files with 3813 additions and 1509 deletions
|
@ -142,7 +142,7 @@ class EntryRepository extends EntityRepository
|
|||
*
|
||||
* @return Pagerfanta
|
||||
*/
|
||||
public function findEntries($userId, $isArchived = null, $isStarred = null, $isPublic = null, $sort = 'created', $order = 'ASC', $since = 0, $tags = '')
|
||||
public function findEntries($userId, $isArchived = null, $isStarred = null, $isPublic = null, $sort = 'created', $order = 'asc', $since = 0, $tags = '')
|
||||
{
|
||||
$qb = $this->createQueryBuilder('e')
|
||||
->leftJoin('e.tags', 't')
|
||||
|
@ -185,6 +185,10 @@ class EntryRepository extends EntityRepository
|
|||
}
|
||||
}
|
||||
|
||||
if (!\in_array(strtolower($order), ['asc', 'desc'], true)) {
|
||||
throw new \Exception('Order "' . $order . '" parameter is wrong, allowed: asc or desc');
|
||||
}
|
||||
|
||||
if ('created' === $sort) {
|
||||
$qb->orderBy('e.id', $order);
|
||||
} elseif ('updated' === $sort) {
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
namespace Wallabag\CoreBundle\Repository;
|
||||
|
||||
use Doctrine\ORM\EntityRepository;
|
||||
use Doctrine\ORM\QueryBuilder;
|
||||
use Wallabag\CoreBundle\Entity\Tag;
|
||||
|
||||
class TagRepository extends EntityRepository
|
||||
|
@ -45,12 +46,8 @@ class TagRepository extends EntityRepository
|
|||
*/
|
||||
public function findAllTags($userId)
|
||||
{
|
||||
$ids = $this->createQueryBuilder('t')
|
||||
$ids = $this->getQueryBuilderByUser($userId)
|
||||
->select('t.id')
|
||||
->leftJoin('t.entries', 'e')
|
||||
->where('e.user = :userId')->setParameter('userId', $userId)
|
||||
->groupBy('t.id')
|
||||
->orderBy('t.slug')
|
||||
->getQuery()
|
||||
->getArrayResult();
|
||||
|
||||
|
@ -71,18 +68,30 @@ class TagRepository extends EntityRepository
|
|||
*/
|
||||
public function findAllFlatTagsWithNbEntries($userId)
|
||||
{
|
||||
return $this->createQueryBuilder('t')
|
||||
return $this->getQueryBuilderByUser($userId)
|
||||
->select('t.id, t.label, t.slug, count(e.id) as nbEntries')
|
||||
->distinct(true)
|
||||
->leftJoin('t.entries', 'e')
|
||||
->where('e.user = :userId')
|
||||
->groupBy('t.id')
|
||||
->orderBy('t.slug')
|
||||
->setParameter('userId', $userId)
|
||||
->getQuery()
|
||||
->getArrayResult();
|
||||
}
|
||||
|
||||
public function findByLabelsAndUser($labels, $userId)
|
||||
{
|
||||
$qb = $this->getQueryBuilderByUser($userId)
|
||||
->select('t.id');
|
||||
|
||||
$ids = $qb->andWhere($qb->expr()->in('t.label', $labels))
|
||||
->getQuery()
|
||||
->getArrayResult();
|
||||
|
||||
$tags = [];
|
||||
foreach ($ids as $id) {
|
||||
$tags[] = $this->find($id);
|
||||
}
|
||||
|
||||
return $tags;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used only in test case to get a tag for our entry.
|
||||
*
|
||||
|
@ -101,13 +110,9 @@ class TagRepository extends EntityRepository
|
|||
|
||||
public function findForArchivedArticlesByUser($userId)
|
||||
{
|
||||
$ids = $this->createQueryBuilder('t')
|
||||
$ids = $this->getQueryBuilderByUser($userId)
|
||||
->select('t.id')
|
||||
->leftJoin('t.entries', 'e')
|
||||
->where('e.user = :userId')->setParameter('userId', $userId)
|
||||
->andWhere('e.isArchived = true')
|
||||
->groupBy('t.id')
|
||||
->orderBy('t.slug')
|
||||
->getQuery()
|
||||
->getArrayResult();
|
||||
|
||||
|
@ -118,4 +123,20 @@ class TagRepository extends EntityRepository
|
|||
|
||||
return $tags;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve a sorted list of tags used by a user.
|
||||
*
|
||||
* @param int $userId
|
||||
*
|
||||
* @return QueryBuilder
|
||||
*/
|
||||
private function getQueryBuilderByUser($userId)
|
||||
{
|
||||
return $this->createQueryBuilder('t')
|
||||
->leftJoin('t.entries', 'e')
|
||||
->where('e.user = :userId')->setParameter('userId', $userId)
|
||||
->groupBy('t.id')
|
||||
->orderBy('t.slug');
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue