<?php
namespace App\Repository;
use App\Entity\Article;
use App\Entity\WebsiteLanguage;
use Doctrine\Persistence\ManagerRegistry;
use App\Repository\WebsiteLanguageRepository;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
/**
* @method Article|null find($id, $lockMode = null, $lockVersion = null)
* @method Article|null findOneBy(array $criteria, array $orderBy = null)
* @method Article[] findAll()
* @method Article[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function getArticles($published)
{
return $this->createQueryBuilder('a')
->where('a.published = :published')
->setParameter('published', $published)
->getQuery();
}
public function getArticlesByLanguage($locale)
{
return $this->createQueryBuilder('a')
->join('a.websiteLanguage', 'w')
->andWhere('w.slug = :locale')
->setParameter('locale', $locale)
->orderBy('a.featuredAt' , 'DESC')
->getQuery()
->getResult();
}
public function getArticleOriginal($published, $original = true)
{
return $this->createQueryBuilder('a')
->where('a.published = :published')
->setParameter('published', $published)
->andWhere('a.original = :original')
->setParameter('original', $original)
->orderBy('a.id', 'DESC')
->getQuery()
->getResult();
}
public function getArticleTranslate($unit)
{
return $this->createQueryBuilder('a')
->where('a.unit = :unit')
->setParameter('unit', $unit)
->getQuery()
->getResult();
}
public function getMyArticles($published, $user)
{
return $this->createQueryBuilder('a')
->where('a.published = :published')
->setParameter('published', $published)
->andWhere('a.author = :author')
->setParameter('author', $user)
->andWhere('a.original = :true')
->setParameter('true', true)
->orWhere('a.reviewer = :reviewer')
->setParameter('reviewer', $user)
->getQuery()
->getResult();
}
public function getFourFeaturedArticles($locale)
{
return $this->createQueryBuilder('a')
->where('a.published = :published')
->setParameter('published', true)
->andWhere('a.featured = true')
->join('a.websiteLanguage', 'w')
->andWhere('w.slug = :locale')
->setParameter('locale', $locale)
->orderBy('a.featuredAt' , 'DESC')
->setMaxResults(4)
->getQuery()
->getResult();
}
public function getLatestArticles($locale, $limit)
{
return $this->createQueryBuilder('a')
->where('a.published = :published')
->setParameter('published', true)
->join('a.websiteLanguage', 'w')
->andWhere('w.slug = :locale')
->setParameter('locale', $locale)
->orderBy('a.createdDate' , 'DESC')
->setMaxResults($limit)
->getQuery()
->getResult();
}
public function getNumberOfCategorizedArticles($locale, $category, $number = 4, $slug = '')
{
$query = $this->createQueryBuilder('a');
if ($category || count($category) > 0) {
$query->orWhere(':category MEMBER OF a.categories')
->setParameter('category', $category);
}
return $query
->join('a.websiteLanguage', 'w')
->andWhere('w.slug = :locale')
->setParameter('locale', $locale)
->andWhere('a.slug NOT LIKE :slug')
->setParameter('slug', $slug)
->andWhere('a.published = :published')
->setParameter('published', true)
->orderBy('a.createdDate' , 'DESC')
->setMaxResults($number)
->getQuery()->getResult();
}
public function getLatestNews($locale)
{
return $this->createQueryBuilder('a')
->where('a.published = :published')
->setParameter('published', true)
->join('a.websiteLanguage', 'w')
->andWhere('w.slug = :locale')
->setParameter('locale', $locale)
->orderBy('a.createdDate' , 'DESC')
->getQuery();
}
public function getTopDeals($locale, $category)
{
return $this->createQueryBuilder('a')
->where('a.published = :published')
->setParameter('published', true)
->andWhere(':category MEMBER OF a.categories')
->setParameter('category', $category)
->join('a.websiteLanguage', 'w')
->andWhere('w.slug = :locale')
->setParameter('locale', $locale)
->orderBy('a.createdDate' , 'DESC')
->getQuery();
}
public function getSearchedArticles($locale, $search)
{
return $this->createQueryBuilder('a')
->where('a.published = :published')
->setParameter('published', true)
->andWhere('a.title LIKE :search')
->setParameter('search', '%' . $search->getTitle() . '%')
->join('a.websiteLanguage', 'w')
->andWhere('w.slug = :locale')
->setParameter('locale', $locale)
->orderBy('a.createdDate' , 'DESC')
->getQuery();
}
public function findCategoryArticles($locale, $category)
{
return $this->createQueryBuilder('a')
->where('a.published = :published')
->setParameter('published', true)
->join('a.websiteLanguage', 'w')
->andWhere('w.slug = :locale')
->setParameter('locale', $locale)
->andWhere(':category MEMBER OF a.categories')
->setParameter('category', $category)
->orderBy('a.createdDate' , 'DESC')
->getQuery();
}
public function getSearchedCategoryArticles($locale, $search, $category)
{
return $this->createQueryBuilder('a')
->where('a.published = :published')
->setParameter('published', true)
->andWhere('a.title LIKE :search')
->setParameter('search', '%' . $search->getTitle() . '%')
->join('a.websiteLanguage', 'w')
->andWhere('w.slug = :locale')
->setParameter('locale', $locale)
->andWhere(':category MEMBER OF a.categories')
->setParameter('category', $category)
->orderBy('a.createdDate' , 'DESC')
->getQuery();
}
public function getReviewCount()
{
return $this->createQueryBuilder('a')
->where('a.status = :review')
->setParameter('review', 'review')
->select('count(a.id)')
->getQuery()
->getSingleScalarResult();
}
public function getArticleToTranslate()
{
return $this->createQueryBuilder('a')
->where('a.status = :translate')
->setParameter('translate', 'translate')
->orderBy('a.id', 'DESC')
->getQuery()
->getResult();
}
public function getLocaleArticleByUnit($unit, $locale) {
return $this->createQueryBuilder('a')
->where('a.unit = :unit')
->setParameter('unit', $unit)
->join('a.websiteLanguage', 'w')
->andWhere('w.slug = :locale')
->setParameter('locale', $locale)
->getQuery()
->getOneOrNullResult();
}
}