Spaces:
No application file
No application file
namespace Mautic\LeadBundle\Entity; | |
use Mautic\CoreBundle\Entity\CommonRepository; | |
/** | |
* @extends CommonRepository<ListLead> | |
*/ | |
class ListLeadRepository extends CommonRepository | |
{ | |
/** | |
* Updates lead ID (e.g. after a lead merge). | |
*/ | |
public function updateLead($fromLeadId, $toLeadId): void | |
{ | |
// First check to ensure the $toLead doesn't already exist | |
$results = $this->_em->getConnection()->createQueryBuilder() | |
->select('l.leadlist_id') | |
->from(MAUTIC_TABLE_PREFIX.'lead_lists_leads', 'l') | |
->where('l.lead_id = '.$toLeadId) | |
->executeQuery() | |
->fetchAllAssociative(); | |
$lists = []; | |
foreach ($results as $r) { | |
$lists[] = $r['leadlist_id']; | |
} | |
$q = $this->_em->getConnection()->createQueryBuilder(); | |
$q->update(MAUTIC_TABLE_PREFIX.'lead_lists_leads') | |
->set('lead_id', (int) $toLeadId) | |
->where('lead_id = '.(int) $fromLeadId); | |
if (!empty($lists)) { | |
$q->andWhere( | |
$q->expr()->notIn('leadlist_id', $lists) | |
)->executeStatement(); | |
// Delete remaining leads as the new lead already belongs | |
$this->_em->getConnection()->createQueryBuilder() | |
->delete(MAUTIC_TABLE_PREFIX.'lead_lists_leads') | |
->where('lead_id = '.(int) $fromLeadId) | |
->executeStatement(); | |
} else { | |
$q->executeStatement(); | |
} | |
} | |
/** | |
* @param mixed[] $filters | |
*/ | |
public function getContactsCountBySegment(int $segmentId, array $filters = []): int | |
{ | |
$qb = $this->createQueryBuilder('ll'); | |
$qb->select('count(ll.list) as count') | |
->where('ll.list = :segmentId') | |
->setParameter('segmentId', $segmentId); | |
foreach ($filters as $colName => $val) { | |
$entityFieldName = lcfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $colName)))); | |
$qb->andWhere(sprintf('ll.%s=:%s', $entityFieldName, $entityFieldName)); | |
$qb->setParameter($entityFieldName, $val); | |
} | |
return (int) $qb->getQuery()->getSingleScalarResult(); | |
} | |
} | |