![]() 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/plugins/MauticFocusBundle/Entity/ |
<?php namespace MauticPlugin\MauticFocusBundle\Entity; use Mautic\CoreBundle\Entity\CommonRepository; use Mautic\LeadBundle\Entity\TimelineTrait; /** * @extends CommonRepository<Stat> */ class StatRepository extends CommonRepository { use TimelineTrait; /** * Fetch the base stat data from the database. * * @param int $id * * @return mixed */ public function getStats($id, $type, $fromDate = null) { $q = $this->createQueryBuilder('s'); $expr = $q->expr()->andX( $q->expr()->eq('IDENTITY(s.focus)', (int) $id), $q->expr()->eq('s.type', ':type') ); if ($fromDate) { $expr->add( $q->expr()->gte('s.dateAdded', ':fromDate') ); $q->setParameter('fromDate', $fromDate); } $q->where($expr) ->setParameter('type', $type); return $q->getQuery()->getArrayResult(); } public function getViewsCount(int $id): int { $q = $this->_em->getConnection()->createQueryBuilder(); $q->select('COUNT(s.id) as views_count') ->from(MAUTIC_TABLE_PREFIX.'focus_stats', 's'); $expr = $q->expr()->and( $q->expr()->eq('s.focus_id', ':id'), $q->expr()->eq('s.type', ':type') ); $q->where($expr) ->setParameter('id', $id) ->setParameter('type', Stat::TYPE_NOTIFICATION); return (int) $q->executeQuery()->fetchOne(); } public function getUniqueViewsCount(int $id): int { $q = $this->_em->getConnection()->createQueryBuilder(); $q->select('COUNT(DISTINCT s.lead_id) as views_count') ->from(MAUTIC_TABLE_PREFIX.'focus_stats', 's'); $expr = $q->expr()->and( $q->expr()->eq('s.focus_id', ':id'), $q->expr()->eq('s.type', ':type') ); $q->where($expr) ->setParameter('id', $id) ->setParameter('type', Stat::TYPE_NOTIFICATION); return (int) $q->executeQuery()->fetchOne(); } public function getClickThroughCount(int $id): int { $q = $this->_em->getConnection()->createQueryBuilder(); $q->select('COUNT(DISTINCT s.lead_id) as click_through_count') ->from(MAUTIC_TABLE_PREFIX.'focus_stats', 's'); $expr = $q->expr()->and( $q->expr()->eq('s.focus_id', ':id'), $q->expr()->eq('s.type', ':type') ); $q->where($expr) ->setParameter('id', $id) ->setParameter('type', Stat::TYPE_CLICK); return (int) $q->executeQuery()->fetchOne(); } /** * @param array<string, mixed> $options * * @return array<string, mixed> */ public function getStatsViewByLead(?int $leadId=null, array $options = []): array { return $this->getStatsByLeadAndType(Stat::TYPE_NOTIFICATION, $leadId, $options); } /** * @param array<string, mixed> $options * * @return array<string, mixed> */ public function getStatsClickByLead(?int $leadId=null, array $options = []): array { return $this->getStatsByLeadAndType(Stat::TYPE_CLICK, $leadId, $options); } /** * @param array<string, mixed> $options * * @return array<string, mixed> */ private function getStatsByLeadAndType(string $type, ?int $leadId=null, array $options = []): array { $q = $this->getEntityManager()->getConnection()->createQueryBuilder(); $q->from(MAUTIC_TABLE_PREFIX.'focus_stats', 's') ->select('s.id, s.lead_id, s.type, s.date_added, f.id as focus_id, f.name as focus_name') ->leftJoin('s', MAUTIC_TABLE_PREFIX.'focus', 'f', 's.focus_id=f.id'); $q->where($q->expr()->eq('s.type', ':type')); if ($leadId) { $q->andWhere($q->expr()->eq('s.lead_id', (int) $leadId)); } $q->setParameter('type', $type); if (isset($options['search']) && $options['search']) { $q->andWhere($q->expr()->or( $q->expr()->like('f.name', $q->expr()->literal($options['search'].'%')), $q->expr()->eq('s.type', $q->expr()->literal($options['search'])) )); } return $this->getTimelineResults($q, $options, 'f.name', 's.date_added'); } }