Spaces:
No application file
No application file
namespace Mautic\StatsBundle\Aggregate; | |
use Mautic\StatsBundle\Aggregate\Collection\DAO\StatDAO; | |
use Mautic\StatsBundle\Aggregate\Collection\DAO\StatsDAO; | |
use Mautic\StatsBundle\Aggregate\Helper\CalculatorHelper; | |
class Calculator | |
{ | |
public function __construct( | |
private StatsDAO $statsDAO, | |
private ?\DateTimeInterface $fromDateTime = null, | |
private ?\DateTimeInterface $toDateTime = null | |
) { | |
} | |
/** | |
* @param string $labelFormat | |
* | |
* @throws \Exception | |
*/ | |
public function getSumsByYear($labelFormat = 'Y'): StatDAO | |
{ | |
$statDAO = new StatDAO(); | |
$lastYear = $this->fromDateTime ? $this->fromDateTime->format('Y') : null; | |
foreach ($this->statsDAO->getYears() as $thisYear => $stats) { | |
CalculatorHelper::fillInMissingYears($statDAO, $lastYear, $thisYear, $labelFormat); | |
$statDAO->addStat( | |
CalculatorHelper::getYearLabel($thisYear, $labelFormat), | |
$stats->getSum() | |
); | |
$lastYear = $thisYear; | |
} | |
if ($this->toDateTime) { | |
CalculatorHelper::fillInMissingYears($statDAO, $lastYear, $this->toDateTime->format('Y'), $labelFormat); | |
} | |
return $statDAO; | |
} | |
/** | |
* @param string $labelFormat | |
* | |
* @throws \Exception | |
*/ | |
public function getSumsByMonth($labelFormat = 'Y-m'): StatDAO | |
{ | |
$statDAO = new StatDAO(); | |
$lastMonth = $this->fromDateTime ? $this->fromDateTime->format('Y-m') : null; | |
foreach ($this->statsDAO->getMonths() as $thisMonth => $stats) { | |
CalculatorHelper::fillInMissingMonths($statDAO, $lastMonth, $thisMonth, $labelFormat); | |
$statDAO->addStat( | |
CalculatorHelper::getMonthLabel($thisMonth, $labelFormat), | |
$stats->getSum() | |
); | |
$lastMonth = $thisMonth; | |
} | |
if ($this->toDateTime) { | |
CalculatorHelper::fillInMissingMonths($statDAO, $lastMonth, $this->toDateTime->format('Y-m'), $labelFormat); | |
} | |
return $statDAO; | |
} | |
/** | |
* @param string $labelFormat | |
* | |
* @throws \Exception | |
*/ | |
public function getSumsByDay($labelFormat = 'Y-m-d'): StatDAO | |
{ | |
$statDAO = new StatDAO(); | |
$yesterday = $this->fromDateTime ? $this->fromDateTime->format('Y-m-d') : null; | |
foreach ($this->statsDAO->getDays() as $today => $stats) { | |
CalculatorHelper::fillInMissingDays($statDAO, $yesterday, $today, $labelFormat); | |
$statDAO->addStat( | |
CalculatorHelper::getDayLabel($today, $labelFormat), | |
$stats->getSum() | |
); | |
$yesterday = $today; | |
} | |
if ($this->toDateTime) { | |
CalculatorHelper::fillInMissingDays($statDAO, $yesterday, $this->toDateTime->format('Y-m-d'), $labelFormat); | |
} | |
return $statDAO; | |
} | |
/** | |
* @param string $labelFormat | |
* | |
* @throws \Exception | |
*/ | |
public function getSumsByWeek($labelFormat = 'Y-W'): StatDAO | |
{ | |
$statDAO = new StatDAO(); | |
$yesterday = $this->fromDateTime ? $this->fromDateTime->format('Y-W') : null; | |
foreach ($this->statsDAO->getWeeks() as $today => $stats) { | |
CalculatorHelper::fillInMissingWeeks($statDAO, $yesterday, $today, $labelFormat); | |
$statDAO->addStat( | |
$today, | |
$stats->getCount() | |
); | |
$yesterday = $today; | |
} | |
$yesterday = (new \DateTime(CalculatorHelper::getWeekDateString($yesterday)))->modify('+1 week')->format('Y-W'); | |
if ($this->toDateTime) { | |
/** @var \DateTime $tomorrow */ | |
$tomorrow = clone $this->toDateTime; | |
CalculatorHelper::fillInMissingWeeks($statDAO, $yesterday, $tomorrow->modify('+1 week')->format('Y-W'), $labelFormat); | |
} | |
return $statDAO; | |
} | |
/** | |
* @param string $labelFormat | |
* | |
* @throws \Exception | |
*/ | |
public function getCountsByHour($labelFormat = 'Y-m-d H'): StatDAO | |
{ | |
$statDAO = new StatDAO(); | |
$lastHour = $this->fromDateTime ? $this->fromDateTime->format('Y-m-d H') : null; | |
foreach ($this->statsDAO->getHours() as $thisHour => $stats) { | |
CalculatorHelper::fillInMissingHours($statDAO, $lastHour, $thisHour, $labelFormat); | |
$statDAO->addStat( | |
CalculatorHelper::getHourLabel($thisHour, $labelFormat), | |
$stats->getCount() | |
); | |
$lastHour = $thisHour; | |
} | |
if ($this->toDateTime) { | |
CalculatorHelper::fillInMissingHours($statDAO, $lastHour, $this->toDateTime->format('Y-m-d H'), $labelFormat); | |
} | |
return $statDAO; | |
} | |
public function getSum(): StatDAO | |
{ | |
$statDAO = new StatDAO(); | |
$sum = 0; | |
foreach ($this->statsDAO->getYears() as $stats) { | |
$sum += $stats->getSum(); | |
} | |
return $statDAO; | |
} | |
} | |