Spaces:
No application file
No application file
File size: 1,793 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
<?php
namespace Mautic\SmsBundle\Helper;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\DBAL\ArrayParameterType;
use Doctrine\DBAL\Connection;
use Mautic\CoreBundle\Helper\PhoneNumberHelper;
use Mautic\LeadBundle\Entity\LeadRepository;
use Mautic\SmsBundle\Exception\NumberNotFoundException;
class ContactHelper
{
public function __construct(
private LeadRepository $leadRepository,
private Connection $connection,
private PhoneNumberHelper $phoneNumberHelper
) {
}
/**
* @param string $number
*
* @throws NumberNotFoundException
*/
public function findContactsByNumber($number): ArrayCollection
{
// Who knows what the number was originally formatted as so let's try a few
$searchForNumbers = $this->phoneNumberHelper->getFormattedNumberList($number);
$qb = $this->connection->createQueryBuilder();
$foundContacts = $qb->select('l.id')
->from(MAUTIC_TABLE_PREFIX.'leads', 'l')
->where(
$qb->expr()->or(
'l.mobile IN (:numbers)',
'l.phone IN (:numbers)'
)
)
->setParameter('numbers', $searchForNumbers, ArrayParameterType::STRING)
->executeQuery()
->fetchAllAssociative();
$ids = array_column($foundContacts, 'id');
if (0 === count($ids)) {
throw new NumberNotFoundException($number);
}
$collection = new ArrayCollection();
/** @var Lead[] $contacts */
$contacts = $this->leadRepository->getEntities(['ids' => $ids]);
foreach ($contacts as $contact) {
$collection->set($contact->getId(), $contact);
}
return $collection;
}
}
|