<?php
namespace App\Repository;
use App\Entity\Contacts;
use App\Service\Securizer;
use Doctrine\ORM\ORMException;
use Doctrine\ORM\QueryBuilder;
use Doctrine\ORM\OptimisticLockException;
use Doctrine\Persistence\ManagerRegistry;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
/**
* @method Contacts|null find($id, $lockMode = null, $lockVersion = null)
* @method Contacts|null findOneBy(array $criteria, array $orderBy = null)
* @method Contacts[] findAll()
* @method Contacts[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class ContactsRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Contacts::class);
}
/**
* @throws ORMException
* @throws OptimisticLockException
*/
public function add(Contacts $entity, bool $flush = true): void
{
$this->_em->persist($entity);
if ($flush) {
$this->_em->flush();
}
}
/**
* @throws ORMException
* @throws OptimisticLockException
*/
public function remove(Contacts $entity, bool $flush = true): void
{
$this->_em->remove($entity);
if ($flush) {
$this->_em->flush();
}
}
protected function genericRequestOrder(QueryBuilder $queryBuilder)
{
$response = $queryBuilder->select('c')
->getQuery()
->getResult();
return $response;
}
public function findContactTous($user, Securizer $securizer): array
{
$idClientUser = $user->getIdClient();
if ($securizer->isGranted($user, "ROLE_TECH")) {
$contacts = $this->findAll();
} else if ($securizer->isGranted($user, "ROLE_CLIENT")) {
$contacts = $this->findBy(['idClient' => $idClientUser]);
} else {
$contacts = [$this->find($idClientUser)];
}
return $contacts;
}
public function findContactActif($user, Securizer $securizer): array
{
$idClientUser = $user->getIdClient();
if ($securizer->isGranted($user, "ROLE_TECH")) {
$contacts = $this->findby(['archive' => false]);
} else {
$contacts = $this->findBy(['idClient' => $idClientUser, 'archive' => false]);
}
return $contacts;
}
public function findContactArchiver($user, Securizer $securizer): array
{
$idClientUser = $user->getIdClient();
if ($securizer->isGranted($user, "ROLE_TECH")) {
$contacts = $this->findby(['archive' => true]);
} else {
$contacts = $this->findBy(['idClient' => $idClientUser, 'archive' => true]);
}
return $contacts;
}
public function globalSearch(String $search, $user, Securizer $securizer): array
{
if ($securizer->isGranted($user, "ROLE_TECH")) {
$queryBuilder = ($this->createQueryBuilder('c')
->where('c.nom LIKE :search')
->orWhere('c.prenom LIKE :search')
->andWhere('c.archive = false')
->setParameter('search', '%' . $search . '%')
);
}
return $this->genericRequestOrder($queryBuilder);
}
}