Files
CloudOps/docker-compose/mautic-setup/mautic-backup-files/docroot/app/bundles/CampaignBundle/Controller/CampaignMetricsController.php

108 lines
4.3 KiB
PHP
Executable File

<?php
declare(strict_types=1);
namespace Mautic\CampaignBundle\Controller;
use Mautic\CampaignBundle\Model\CampaignModel;
use Mautic\CoreBundle\Helper\Chart\BarChart;
use Mautic\CoreBundle\Helper\CoreParametersHelper;
use Mautic\CoreBundle\Helper\DateTimeHelper;
use Mautic\CoreBundle\Translation\Translator;
use Mautic\EmailBundle\Stats\EmailPeriodMetrics;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class CampaignMetricsController extends AbstractController
{
public function __construct(
private Translator $translator,
private CoreParametersHelper $coreParametersHelper,
) {
}
public function emailWeekdaysAction(
EmailPeriodMetrics $emailPeriodMetrics,
CampaignModel $model,
int $objectId,
string $dateFrom = '',
string $dateTo = '',
): Response {
$entity = $model->getEntity($objectId);
$eventsIds = $entity->getEmailSendEvents()->getKeys();
$dateFromObject = new \DateTimeImmutable($dateFrom);
$dateToObject = new \DateTimeImmutable($dateTo);
$dateTimeHelper = new DateTimeHelper();
$defaultTimezoneOffset = $dateTimeHelper->getLocalDateTime()->format('Z');
$stats = $emailPeriodMetrics->emailMetricsPerWeekdayByCampaignEvents($eventsIds, $dateFromObject, $dateToObject, $defaultTimezoneOffset);
$chart = new BarChart([
$this->translator->trans('mautic.core.date.monday'),
$this->translator->trans('mautic.core.date.tuesday'),
$this->translator->trans('mautic.core.date.wednesday'),
$this->translator->trans('mautic.core.date.thursday'),
$this->translator->trans('mautic.core.date.friday'),
$this->translator->trans('mautic.core.date.saturday'),
$this->translator->trans('mautic.core.date.sunday'),
]);
$chart->setDataset($this->translator->trans('mautic.email.sent'), array_column($stats, 'sent_count'));
$chart->setDataset($this->translator->trans('mautic.email.read'), array_column($stats, 'read_count'));
$chart->setDataset($this->translator->trans('mautic.email.click'), array_column($stats, 'hit_count'));
return $this->render(
'@MauticCore/Helper/chart.html.twig',
[
'chartData' => $chart->render(),
'chartType' => 'bar',
'chartHeight' => 300,
]
);
}
public function emailHoursAction(
EmailPeriodMetrics $emailPeriodMetrics,
CampaignModel $model,
int $objectId,
string $dateFrom = '',
string $dateTo = '',
): Response {
$entity = $model->getEntity($objectId);
$eventsIds = $entity->getEmailSendEvents()->getKeys();
$dateFromObject = new \DateTimeImmutable($dateFrom);
$dateToObject = new \DateTimeImmutable($dateTo);
$dateTimeHelper = new DateTimeHelper();
$defaultTimezoneOffset = $dateTimeHelper->getLocalDateTime()->format('Z');
$stats = $emailPeriodMetrics->emailMetricsPerHourByCampaignEvents($eventsIds, $dateFromObject, $dateToObject, $defaultTimezoneOffset);
$hoursRange = range(0, 23);
$labels = [];
$timeFormat = $this->coreParametersHelper->get('date_format_timeonly');
foreach ($hoursRange as $hour) {
$startTime = (new \DateTime())->setTime($hour, 0);
$endTime = (new \DateTime())->setTime(($hour + 1) % 24, 0);
$labels[] = $startTime->format($timeFormat).' - '.$endTime->format($timeFormat);
}
$chart = new BarChart($labels);
$chart->setDataset($this->translator->trans('mautic.email.sent'), array_column($stats, 'sent_count'));
$chart->setDataset($this->translator->trans('mautic.email.read'), array_column($stats, 'read_count'));
$chart->setDataset($this->translator->trans('mautic.email.click'), array_column($stats, 'hit_count'));
return $this->render(
'@MauticCore/Helper/chart.html.twig',
[
'chartData' => $chart->render(),
'chartType' => 'hour',
'chartHeight' => 300,
]
);
}
}