Spaces:
No application file
No application file
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; | |
} | |
} | |