Spaces:
No application file
No application file
File size: 2,297 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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
<?php
namespace Mautic\LeadBundle\Tracker\Service\ContactTrackingService;
use Mautic\CoreBundle\Helper\CookieHelper;
use Mautic\LeadBundle\Entity\Lead;
use Mautic\LeadBundle\Entity\LeadDeviceRepository;
use Mautic\LeadBundle\Entity\LeadRepository;
use Mautic\LeadBundle\Entity\MergeRecordRepository;
use Symfony\Component\HttpFoundation\RequestStack;
/**
* Used to ensure that contacts tracked under the old method are continued to be tracked under the new.
*/
final class ContactTrackingService implements ContactTrackingServiceInterface
{
public function __construct(
private CookieHelper $cookieHelper,
private LeadDeviceRepository $leadDeviceRepository,
private LeadRepository $leadRepository,
private MergeRecordRepository $mergeRecordRepository,
private RequestStack $requestStack
) {
}
/**
* @return Lead|null
*/
public function getTrackedLead()
{
$request = $this->requestStack->getCurrentRequest();
if (null === $request) {
return null;
}
$trackingId = $this->getTrackedIdentifier();
if (null === $trackingId) {
return null;
}
$leadId = $this->cookieHelper->getCookie($trackingId, null);
if (null === $leadId) {
$leadId = $request->get('mtc_id', null);
if (null === $leadId) {
return null;
}
}
$lead = $this->leadRepository->getEntity($leadId);
if (null === $lead) {
// Check if this contact was merged into another and if so, return the new contact
$lead = $this->mergeRecordRepository->findMergedContact($leadId);
if (null === $lead) {
return null;
}
// Hydrate fields with custom field data
$fields = $this->leadRepository->getFieldValues($lead->getId());
$lead->setFields($fields);
}
$anotherDeviceAlreadyTracked = $this->leadDeviceRepository->isAnyLeadDeviceTracked($lead);
return $anotherDeviceAlreadyTracked ? null : $lead;
}
/**
* @return string|null
*/
public function getTrackedIdentifier()
{
return $this->cookieHelper->getCookie('mautic_session_id', null);
}
}
|