Spaces:
No application file
No application file
namespace Mautic\StatsBundle\Aggregate\Helper; | |
use Mautic\StatsBundle\Aggregate\Collection\DAO\StatDAO; | |
class CalculatorHelper | |
{ | |
/** | |
* @throws \Exception | |
*/ | |
public static function getYearLabel($year, $labelFormat): string | |
{ | |
return (new \DateTime(self::getYearDateString($year)))->format($labelFormat); | |
} | |
public static function getYearDateString($year): string | |
{ | |
return "$year-01-01 00:00:00"; | |
} | |
/** | |
* @param string $lastYear | |
* @param string $thisYear | |
* @param string $labelFormat | |
* | |
* @throws \Exception | |
*/ | |
public static function fillInMissingYears(StatDAO $statDAO, $lastYear, $thisYear, $labelFormat): void | |
{ | |
if (!$lastYear) { | |
return; | |
} | |
$lastYear = new \DateTime(self::getYearDateString($lastYear)); | |
$thisYear = new \DateTime(self::getYearDateString($thisYear)); | |
if (!isset($statDAO->getStats()[$lastYear->format($labelFormat)])) { | |
$statDAO->addStat($lastYear->format($labelFormat), 0); | |
} | |
while ($lastYear < $thisYear) { | |
$lastYear->modify('+1 year'); | |
$statDAO->addStat($lastYear->format($labelFormat), 0); | |
} | |
} | |
/** | |
* @throws \Exception | |
*/ | |
public static function getMonthLabel($month, $labelFormat): string | |
{ | |
return (new \DateTime(self::getMonthDateString($month)))->format($labelFormat); | |
} | |
public static function getMonthDateString($month): string | |
{ | |
return "$month-01 00:00:00"; | |
} | |
/** | |
* @param string $lastMonth | |
* @param string $thisMonth | |
* @param string $labelFormat | |
* | |
* @throws \Exception | |
*/ | |
public static function fillInMissingMonths(StatDAO $statDAO, $lastMonth, $thisMonth, $labelFormat): void | |
{ | |
if (!$lastMonth) { | |
return; | |
} | |
$lastMonth = new \DateTime(self::getMonthDateString($lastMonth)); | |
$thisMonth = new \DateTime(self::getMonthDateString($thisMonth)); | |
if (!isset($statDAO->getStats()[$lastMonth->format($labelFormat)])) { | |
$statDAO->addStat($lastMonth->format($labelFormat), 0); | |
} | |
while ($lastMonth < $thisMonth) { | |
$lastMonth->modify('+1 month'); | |
$statDAO->addStat($lastMonth->format($labelFormat), 0); | |
} | |
} | |
/** | |
* @throws \Exception | |
*/ | |
public static function getDayLabel($day, $labelFormat): string | |
{ | |
return (new \DateTime(self::getDayDateString($day)))->format($labelFormat); | |
} | |
public static function getDayDateString($day): string | |
{ | |
return "$day 00:00:00"; | |
} | |
/** | |
* @param string $date | |
* | |
* @throws \Exception | |
*/ | |
public static function getWeekFromDayString($date): string | |
{ | |
return (new \DateTime($date))->format('Y-W'); | |
} | |
/** | |
* @param string $date | |
* @param string $labelFormat | |
* | |
* @throws \Exception | |
*/ | |
public static function getWeekLabel($date, $labelFormat = 'Y-W'): string | |
{ | |
return (new \DateTime(self::getWeekDateString($date)))->format($labelFormat); | |
} | |
public static function getWeekDateString($date): string | |
{ | |
if (!preg_match('/^([0-9]{4})-([0-9]{2})$/', $date, $matches)) { | |
throw new \InvalidArgumentException('Invalid argument, Y-W format is required.'); | |
} | |
$year = $matches[1]; | |
$week = $matches[2]; | |
return date('Y-m-d 00:00:00', strtotime($year.'W'.$week.'1')); | |
} | |
/** | |
* @param string $yesterday | |
* @param string $today | |
* @param string $labelFormat | |
* | |
* @throws \Exception | |
*/ | |
public static function fillInMissingWeeks(StatDAO $statDAO, $yesterday, $today, $labelFormat): void | |
{ | |
if (!$yesterday) { | |
return; | |
} | |
$yesterday = new \DateTime(self::getWeekDateString($yesterday)); | |
$today = new \DateTime(self::getWeekDateString($today)); | |
while ($yesterday < $today) { | |
$statDAO->addStat($yesterday->format($labelFormat), 0); | |
$yesterday->modify('+1 week'); | |
} | |
} | |
/** | |
* @param string $yesterday | |
* @param string $today | |
* @param string $labelFormat | |
* | |
* @throws \Exception | |
*/ | |
public static function fillInMissingDays(StatDAO $statDAO, $yesterday, $today, $labelFormat): void | |
{ | |
if (!$yesterday) { | |
return; | |
} | |
$yesterday = (new \DateTime(self::getDayDateString($yesterday)))->modify('-1 day'); | |
$today = new \DateTime(self::getDayDateString($today)); | |
while ($yesterday < $today) { | |
$yesterday->modify('+1 day'); | |
$statDAO->addStat($yesterday->format($labelFormat), 0); | |
} | |
} | |
/** | |
* @throws \Exception | |
*/ | |
public static function getHourLabel($hour, $labelFormat): string | |
{ | |
return (new \DateTime(self::getHourDateString($hour)))->format($labelFormat); | |
} | |
public static function getHourDateString($hour): string | |
{ | |
return "$hour:00:00"; | |
} | |
/** | |
* @param string $lastHour | |
* @param string $thisHour | |
* @param string $labelFormat | |
* | |
* @throws \Exception | |
*/ | |
public static function fillInMissingHours(StatDAO $statDAO, $lastHour, $thisHour, $labelFormat): void | |
{ | |
if (!$lastHour) { | |
return; | |
} | |
$lastHour = new \DateTime(self::getHourDateString($lastHour)); | |
$thisHour = new \DateTime(self::getHourDateString($thisHour)); | |
while ($lastHour < $thisHour) { | |
$lastHour->modify('+1 hour'); | |
$statDAO->addStat($lastHour->format($labelFormat), 0); | |
} | |
} | |
} | |