<?php
declare(strict_types=1);
/*
* Copyright (C) Office National de Publication et de Communication - All Rights Reserved
*
* Unauthorized copying of this file, via any medium is strictly prohibited by law
* This file is proprietary and confidential
*/
namespace App\Repository;
use App\Entity\ItemsInsertion;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @method null|ItemsInsertion find($id, $lockMode = null, $lockVersion = null)
* @method null|ItemsInsertion findOneBy(array $criteria, array $orderBy = null)
* @method ItemsInsertion[] findAll()
* @method ItemsInsertion[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
final class ItemsInsertionRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, ItemsInsertion::class);
}
public function getDiplomes($niveau = null, array $filieres = null) {
$q = $this->createQueryBuilder('ii');
if ($filieres != null) {
$sql = "";
$n = count($filieres);
$i = 0;
foreach ($filieres as $filiere) {
$sql .= " ii.pere LIKE '$filiere%' ";
if(++$i < $n)
$sql .= " OR ";
}
$q->andWhere($sql);
} else {
$q->andWhere('ii.id LIKE :niveau');
$q->setParameter('niveau', $niveau . '%');
}
return $q->groupBy('ii.identifiant')->getQuery()->enableResultCache(3600)->getResult();
}
public function getDiplomeLibelle($niveau) {
return $this->createQueryBuilder('ii')
->andWhere(" ii.identifiant LIKE :niveau ")
->orWhere("ii.slug LIKE :niveau ")
->setParameter('niveau', $niveau . '%')
->setMaxResults(1)
->getQuery()
->enableResultCache(3600)
->getOneOrNullResult()
;
}
public function getDiplomePlus(int $limit = 20): array
{
$builder = $this->createQueryBuilder('ii');
$builder
->select('ii')
->andWhere('ii.diplomePlus = 1')
->setMaxResults($limit)
->orderBy('RAND()')
;
return $builder
->getQuery()
->getResult();
}
public function getDiplomePlusByEtablissements($etabs): array
{
$builder = $this->createQueryBuilder('ii');
$builder
->select('ii')
->andWhere('ii.etablissement IN (:etabs)')
->andWhere('ii.diplomePlus = 1')
->setParameter('etabs', $etabs)
->orderBy('RAND()')
;
return $builder
->getQuery()
->enableResultCache(3600)
->getResult();
}
}