![]() 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/Model/ |
<?php namespace Mautic\PageBundle\Model; use Doctrine\ORM\EntityManager; use Mautic\CoreBundle\Helper\CoreParametersHelper; use Mautic\CoreBundle\Helper\IpLookupHelper; use Mautic\CoreBundle\Helper\UserHelper; use Mautic\CoreBundle\Model\FormModel; use Mautic\CoreBundle\Security\Permissions\CorePermissions; use Mautic\CoreBundle\Translation\Translator; use Mautic\LeadBundle\Entity\Lead; use Mautic\LeadBundle\Tracker\ContactTracker; use Mautic\PageBundle\Entity\VideoHit; use Mautic\PageBundle\Entity\VideoHitRepository; use Mautic\PageBundle\Event\VideoHitEvent; use Mautic\PageBundle\PageEvents; use Psr\Log\LoggerInterface; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; /** * @extends FormModel<VideoHit> */ class VideoModel extends FormModel { public function __construct( protected IpLookupHelper $ipLookupHelper, protected ContactTracker $contactTracker, EntityManager $em, CorePermissions $security, EventDispatcherInterface $dispatcher, UrlGeneratorInterface $router, Translator $translator, UserHelper $userHelper, LoggerInterface $mauticLogger, CoreParametersHelper $coreParametersHelper ) { parent::__construct($em, $security, $dispatcher, $router, $translator, $userHelper, $mauticLogger, $coreParametersHelper); } public function getHitRepository(): VideoHitRepository { return $this->em->getRepository(VideoHit::class); } public function getPermissionBase(): string { return 'page:pages'; } public function getNameGetter(): string { return 'getTitle'; } /** * @param string $guid * * @return VideoHit */ public function getHitForLeadByGuid(Lead $lead, $guid) { return $this->getHitRepository()->getHitForLeadByGuid($lead, $guid); } /** * @param Request $request * @param string $code * * @throws \Doctrine\ORM\ORMException * @throws \Exception */ public function hitVideo($request, $code = '200'): void { // don't skew results with in-house hits if (!$this->security->isAnonymous()) { // return; } $lead = $this->contactTracker->getContact(); $guid = $request->get('guid'); $hit = ($lead) ? $this->getHitForLeadByGuid($lead, $guid) : new VideoHit(); $hit->setGuid($guid); $hit->setDateHit(new \DateTime()); $hit->setDuration($request->get('duration')); $hit->setUrl($request->get('url')); $hit->setTimeWatched($request->get('total_watched')); // check for existing IP $ipAddress = $this->ipLookupHelper->getIpAddress(); $hit->setIpAddress($ipAddress); // Store query array $query = $request->query->all(); unset($query['d']); $hit->setQuery($query); if ($lead) { $hit->setLead($lead); } // glean info from the IP address if ($details = $ipAddress->getIpDetails()) { $hit->setCountry($details['country']); $hit->setRegion($details['region']); $hit->setCity($details['city']); $hit->setIsp($details['isp']); $hit->setOrganization($details['organization']); } $hit->setCode($code); if (!$hit->getReferer()) { $hit->setReferer($request->server->get('HTTP_REFERER')); } $hit->setUserAgent($request->server->get('HTTP_USER_AGENT')); $hit->setRemoteHost($request->server->get('REMOTE_HOST')); // get a list of the languages the user prefers $browserLanguages = $request->server->get('HTTP_ACCEPT_LANGUAGE'); if (!empty($browserLanguages)) { $languages = explode(',', $browserLanguages); foreach ($languages as $k => $l) { if (($pos = strpos(';q=', $l)) !== false) { // remove weights $languages[$k] = substr($l, 0, $pos); } } $hit->setBrowserLanguages($languages); } // Wrap in a try/catch to prevent deadlock errors on busy servers try { $this->em->persist($hit); $this->em->flush(); } catch (\Exception $exception) { if (MAUTIC_ENV === 'dev') { throw $exception; } else { $this->logger->error( $exception->getMessage(), ['exception' => $exception] ); } } if ($this->dispatcher->hasListeners(PageEvents::VIDEO_ON_HIT)) { $event = new VideoHitEvent($hit, $request, $code); $this->dispatcher->dispatch($event, PageEvents::VIDEO_ON_HIT); } } }