![]() 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/EmailBundle/Stats/Helper/ |
<?php namespace Mautic\EmailBundle\Stats\Helper; use Doctrine\DBAL\ArrayParameterType; use Doctrine\DBAL\Connection; use Doctrine\DBAL\Query\QueryBuilder; use Mautic\CoreBundle\Doctrine\Provider\GeneratedColumnsProviderInterface; use Mautic\CoreBundle\Helper\Chart\ChartQuery; use Mautic\CoreBundle\Helper\Chart\DateRangeUnitTrait; use Mautic\CoreBundle\Helper\UserHelper; use Mautic\EmailBundle\Stats\FetchOptions\EmailStatOptions; use Mautic\StatsBundle\Aggregate\Collection\StatCollection; use Mautic\StatsBundle\Aggregate\Collector; abstract class AbstractHelper implements StatHelperInterface { use FilterTrait; use DateRangeUnitTrait; public function __construct( private Collector $collector, Connection $connection, protected GeneratedColumnsProviderInterface $generatedColumnsProvider, private UserHelper $userHelper ) { $this->connection = $connection; } /** * @return array * * @throws \Exception */ public function fetchStats(\DateTime $fromDateTime, \DateTime $toDateTime, EmailStatOptions $options) { $statCollection = $this->collector->fetchStats($this->getName(), $fromDateTime, $toDateTime, $options); $calculator = $statCollection->getCalculator($fromDateTime, $toDateTime); $stats = match ($this->getTimeUnitFromDateRange($fromDateTime, $toDateTime)) { 'Y' => $calculator->getSumsByYear(), 'm' => $calculator->getSumsByMonth(), 'W' => $calculator->getSumsByWeek(), 'd' => $calculator->getSumsByDay(), default => $calculator->getCountsByHour(), }; // Chart.js only care about the values return array_values($stats->getStats()); } /** * @return ChartQuery */ protected function getQuery(\DateTime $fromDateTime, \DateTime $toDateTime) { $unit = $this->getTimeUnitFromDateRange($fromDateTime, $toDateTime); if ('W' == $unit) { // We won't support week storage, we will store it by date $unit = 'd'; } $query = new ChartQuery($this->connection, $fromDateTime, $toDateTime, $unit); $query->setGeneratedColumnProvider($this->generatedColumnsProvider); return $query; } /** * Joins the email table and limits created_by to currently logged in user. * * @param string $emailIdColumn */ protected function limitQueryToCreator(QueryBuilder $q, $emailIdColumn = 't.email_id') { $q->join('t', MAUTIC_TABLE_PREFIX.'emails', 'e', 'e.id = '.$emailIdColumn) ->andWhere('e.created_by = :userId') ->setParameter('userId', $this->userHelper->getUser()->getId()); } /** * @param string $column * @param string $prefix */ protected function limitQueryToEmailIds(QueryBuilder $q, array $ids, $column, $prefix) { if (0 === count($ids)) { return; } if (1 === count($ids)) { $q->andWhere("$prefix.$column = :email_id"); $q->setParameter('email_id', $ids[0]); return; } $q->andWhere("$prefix.$column IN (:email_ids)"); $q->setParameter('email_ids', $ids, ArrayParameterType::INTEGER); } /** * @throws \Exception */ protected function fetchAndBindToCollection(QueryBuilder $q, StatCollection $statCollection) { $results = $q->executeQuery()->fetchAllAssociative(); foreach ($results as $result) { $statCollection->addStatByDateTimeStringInUTC($result['date'], $result['count']); } } }