![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/app/bundles/PageBundle/Helper/ |
<?php namespace Mautic\PageBundle\Helper; use Mautic\CoreBundle\Factory\MauticFactory; use Mautic\PageBundle\Entity\Hit; use Mautic\PageBundle\Entity\Page; class PointActionHelper { /** * @param MauticFactory $factory */ public static function validatePageHit($factory, $eventDetails, $action): bool { $pageHit = $eventDetails->getPage(); if ($pageHit instanceof Page) { /** @var \Mautic\PageBundle\Model\PageModel $pageModel */ $pageModel = $factory->getModel('page'); [$parent, $children] = $pageHit->getVariants(); // use the parent (self or configured parent) $pageHitId = $parent->getId(); } else { $pageHitId = 0; } // If no pages are selected, the pages array does not exist if (isset($action['properties']['pages'])) { $limitToPages = $action['properties']['pages']; } if (!empty($limitToPages) && !in_array($pageHitId, $limitToPages)) { // no points change return false; } return true; } /** * @param MauticFactory $factory */ public static function validateUrlHit($factory, $eventDetails, $action): bool { $changePoints = []; $url = $eventDetails->getUrl(); $limitToUrl = html_entity_decode(trim($action['properties']['page_url'])); if (!$limitToUrl || !fnmatch($limitToUrl, $url)) { // no points change return false; } $hitRepository = $factory->getEntityManager()->getRepository(Hit::class); $lead = $eventDetails->getLead(); $urlWithSqlWC = str_replace('*', '%', $limitToUrl); if (isset($action['properties']['first_time']) && true === $action['properties']['first_time']) { $hitStats = $hitRepository->getDwellTimesForUrl($urlWithSqlWC, ['leadId' => $lead->getId()]); if (isset($hitStats['count']) && $hitStats['count']) { $changePoints['first_time'] = false; } else { $changePoints['first_time'] = true; } } $now = new \DateTime(); if ($action['properties']['returns_within'] || $action['properties']['returns_after']) { // get the latest hit only when it's needed $latestHit = $hitRepository->getLatestHit(['leadId' => $lead->getId(), $urlWithSqlWC, 'second_to_last' => $eventDetails->getId()]); } else { $latestHit = null; } if ($action['properties']['accumulative_time']) { if (!isset($hitStats)) { $hitStats = $hitRepository->getDwellTimesForUrl($urlWithSqlWC, ['leadId' => $lead->getId()]); } if (isset($hitStats['sum'])) { if ($action['properties']['accumulative_time'] <= $hitStats['sum']) { $changePoints['accumulative_time'] = true; } else { $changePoints['accumulative_time'] = false; } } else { $changePoints['accumulative_time'] = false; } } if ($action['properties']['page_hits']) { if (!isset($hitStats)) { $hitStats = $hitRepository->getDwellTimesForUrl($urlWithSqlWC, ['leadId' => $lead->getId()]); } if (isset($hitStats['count']) && $hitStats['count'] >= $action['properties']['page_hits']) { $changePoints['page_hits'] = true; } else { $changePoints['page_hits'] = false; } } if ($action['properties']['returns_within']) { if ($latestHit && $now->getTimestamp() - $latestHit->getTimestamp() <= $action['properties']['returns_within']) { $changePoints['returns_within'] = true; } else { $changePoints['returns_within'] = false; } } if ($action['properties']['returns_after']) { if ($latestHit && $now->getTimestamp() - $latestHit->getTimestamp() >= $action['properties']['returns_after']) { $changePoints['returns_after'] = true; } else { $changePoints['returns_after'] = false; } } // return true only if all configured options are true return !in_array(false, $changePoints); } }