<?php
namespace App\Repository;
use App\Entity\Lead;
use DateInterval;
use DateTime;
use DateTimeZone;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\Query\Expr\Func;
use Doctrine\Persistence\ManagerRegistry;
/**
* @method Lead|null find($id, $lockMode = null, $lockVersion = null)
* @method Lead|null findOneBy(array $criteria, array $orderBy = null)
* @method Lead[] findAll()
* @method Lead[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class LeadRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Lead::class);
}
public function dateInterval($start, $end=null)
{
$query = $this->createQueryBuilder('l');
if($end != null){
$query = $query
->andWhere('l.created_at < :end')
->setParameter('end', $end);
}
$query = $query
->andWhere('l.created_at > :start')
->setParameter('start', $start)
->getQuery()
->getResult();
return $query;
}
public function findByToken($token, $order, $sort, $user = null)
{
$query = $this->createQueryBuilder('l');
if (null !== $user) {
$query = $query
->andWhere('l.user = :id')
->setParameter('id', $user);
}
$query = $query
->andWhere('l.token IN (:token)')
->setParameter('token', $token)
->orderBy($order, $sort)
->getQuery()
->getResult();
return $query;
}
public function findByTokenMap($token, $order, $sort, $user = null, $verified)
{
$query = $this->createQueryBuilder('l');
$params =
[
'token' => $token,
'verified' => $verified
];
if (null !== $user) {
$query = $query
->andWhere('l.user = :id');
$params['id'] = $user;
}
$query = $query
->andWhere('l.token IN (:token)')
->andWhere('l.verified = :verified')
->setParameters($params)
->orderBy($order, $sort)
->getQuery()
->getResult();
return $query;
}
public function getAllMarker($id, $parent_id, $verified)
{
$q = $this->createQueryBuilder('l');
if ($id === $parent_id) {
$q->andWhere('l.possessor = :id');
} else {
$q->andwhere('l.user_id = :id');
}
$q->andWhere('l.verified = :verified')
->setParameters([
'id' => $id,
'verified' => $verified
]);
return $q->getQuery()->getResult();
}
public function findSpam($latlng, $token)
{
$interval = new DateTime(date('Y-m-d H:i:s', time() - 3600));
return $this->createQueryBuilder('l')
->andWhere('l.lat_lng = :latlng')
->andWhere('l.token = :token')
->andWhere('l.created_at > :interval')
->andWhere('l.verified = 0')
->setParameters([
'latlng' => $latlng,
'token' => $token,
'interval' => $interval,
])
->orderBy('l.created_at', 'DESC')
->getQuery()
->getResult();
}
// REFONTE Système
public function findAllLeads($user, $order, $sort, $search = "", $where = [])
{
$query = $this->createQueryBuilder('l');
if ($search != "") {
$fields = [
'l.street',
'l.street_number',
'l.zipcode',
'l.city',
'l.name',
'l.last_name',
'l.email',
'l.phone',
];
$search = explode(' ', $search);
// $query = $query
// ->addSelect('CONCAT(l.street, \' \', l.street_number, \' \', l.zipcode, \' \', l.city, \' \', l.name, \' \', l.last_name, \' \', l.email, \' \', l.phone) AS search ');
for ($i = 0; $i < count($search); $i++) {
$query = $query
->andWhere('CONCAT_WS(l.street, \' \', l.street_number, \' \', l.zipcode, \' \', l.city, \' \', l.name, \' \', l.last_name, \' \', l.email, \' \', l.phone) LIKE :search' . $i)
->setParameter('search' . $i, '%' . trim($search[$i]) . '%');
}
}
if (!empty($where)) {
foreach ($where as $key => $values) {
if($key == 'created_at'){
if($values[0] != '0'){
$query->andWhere('l.created_at > :val1')
->setParameter('val1', $values[0]);
}
if($values[1] != '0'){
$query->andWhere('l.created_at < :val2')
->setParameter('val2', $values[1]);
}
}else{
$query->andWhere('l.' . $key . ' IN (:values' . $key . ')')
->setParameter('values' . $key, $values)
->andWhere('l.' . $key . ' IS NOT NULL');
}
}
}
if (in_array('ROLE_SUPER_ADMIN', $user->getRoles())) {
$query = $query
->andWhere('l.possessor = :id')
->setParameter('id', $user->getId());
} else {
$query = $query
->andWhere('l.user = :id')
->setParameter('id', $user->getId());
}
$query
->orderBy($order, $sort);
$query->getQuery()
->getResult();
return $query;
}
public function findLeadsBetweenDate($date1, $date2, $user){
return $this->createQueryBuilder('l')
->where('l.user = :user')
->andWhere('l.created_at BETWEEN :date1 AND :date2')
->setParameters([
'date1' => $date1,
'date2' => $date2,
'user' => $user->getId()
])
->getQuery()->getResult();
}
public function findLeadsWithMandat($user){
return $this->createQueryBuilder('l')
->where('l.user = :user')
->andWhere('l.mandat is not NULL')
->setParameters([
'user' => $user->getId()
])
->getQuery()->getResult();
}
}