<?php
namespace App\Repository\Webfactory\Actualites;
use App\Entity\Webfactory\Actualites\WebfactoryActualite;
use App\Entity\Webfactory\Actualites\WebfactoryActualiteCategory;
use App\Entity\Webfactory\Actualites\WebfactoryActualiteContenu;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\Query\Expr\Join;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<WebfactoryActualite>
*
* @method WebfactoryActualite|null find($id, $lockMode = null, $lockVersion = null)
* @method WebfactoryActualite|null findOneBy(array $criteria, array $orderBy = null)
* @method WebfactoryActualite[] findAll()
* @method WebfactoryActualite[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class WebfactoryActualiteRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, WebfactoryActualite::class);
}
/**
* Factory Api widget Actualités : Retourne les articles de l'adh en fonction de la catégorie et de la pagination
* @param $adherent
* @param null $start
* @param null $limit
* @param $category
* @param string $lang
* @return array
*/
public function paginateArticlesByCategory($adherent, $start = null, $limit = null, $category, string $lang = 'fr'): array
{
$queryBuilder = $this->createQueryBuilder('a')
->join(WebfactoryActualiteCategory::class, 'categ', Join::WITH, 'a.actualiteCategory = categ.id')
->where('a.adherent = :adherent')
// ->andWhere('a.lang = :lang')
->andWhere('categ.id = :categ')
->andWhere('a.active = :active')
->orderBy('a.updated_at', 'DESC')
->setParameters([
'adherent' => $adherent,
// 'lang' => $lang,
'categ' => $category,
"active" => 1
]);
$allArticles = $queryBuilder->getQuery()->getResult();
if (!is_null($start) && !is_null($limit)) {
$queryBuilder
->setMaxResults($limit)
->setFirstResult($start);
}
$paginateArticles = $queryBuilder->getQuery()->getResult();
return ['count' => count($allArticles), 'articles' => $paginateArticles];
}
public function findLastActu($adherent, $limit = null): array
{
$queryBuilder = $this->createQueryBuilder('a')
->where('a.adherent = :adherent')
->andWhere('a.active = :active')
->setParameter("active", 1)
->orderBy('a.updated_at', 'DESC')
->setParameter('adherent', $adherent);
$queryBuilder->setMaxResults($limit);
return $queryBuilder->getQuery()->getResult();
}
public function findByLang($adherent, string $lang): array
{
$queryBuilder = $this->createQueryBuilder('a')
->join('a.webfactoryActualiteContenus', 'wac')
->where('a.adherent = :adherent')
->setParameters([
'adherent' => $adherent
])
->orderBy('wac.updated_at', 'desc');
return $queryBuilder->getQuery()->getResult();
}
public function countActuCustom($adherent): int
{
$queryBuilder = $this->createQueryBuilder('a')
->select('COUNT(a.id)')
->where('a.adherent = :adherent')
->andWhere('a.active = :active')
->andWhere('a.articleBibliotheque IS NULL')
->setParameter("active", 1)
->setParameter('adherent', $adherent);
return $queryBuilder->getQuery()->getSingleScalarResult();
}
public function findCateByLang($id, string $lang)
{
$queryBuilder = $this->createQueryBuilder('a')
->select('acc.name, acc.id, acc.lang')
->join('a.actualiteCategory', 'ac', 'ac.webfactoryActualites')
->join('ac.webfactoryActualiteCategoryContenus', 'acc', 'acc.webfactory_category')
->where('a.id = :id')
->andWhere('a.active = :active')
->andWhere('acc.lang = :lang')
->setParameters(['id' => $id, 'active' => 1, 'lang' => $lang])
->orderBy('ac.updated_at', 'desc');
return current($queryBuilder->getQuery()->getResult());
}
}