/**
* Given a type, create and configure the interval container
*
* @param integer $type Type of calculation
*
* @return IntervalContainer
*/
public function getIntervalContainer($type)
{
$intervalContainer = IntervalContainer::create();
$now = new DateTime();
switch ($type) {
/**
* Today
*/
case AdminPanelTypes::PANEL_TYPE_TODAY:
break;
/**
* Yesterday
*/
/**
* Yesterday
*/
case AdminPanelTypes::PANEL_TYPE_YESTERDAY:
$intervalContainer->setStartDay(DateTime::createFromFormat('U', strtotime("-1 day"), $now->getTimezone()));
break;
/**
* Last 7 days
*/
/**
* Last 7 days
*/
case AdminPanelTypes::PANEL_TYPE_LAST_WEEK:
$intervalContainer->setStartDay(DateTime::createFromFormat('U', strtotime("-6 day"), $now->getTimezone()))->setElementsIntervalFormat(['PT', 1, 'H'])->setIterations(167)->setElementsGrouping(3)->setChartElementsSeparation(8)->setChartLegendFormat('M. j');
break;
/**
* Last 30 days
*/
/**
* Last 30 days
*/
case AdminPanelTypes::PANEL_TYPE_LAST_MONTH:
$intervalContainer->setStartDay(DateTime::createFromFormat('U', strtotime("-29 day"), $now->getTimezone()))->setElementsIntervalFormat(['P', 1, 'D'])->setIterations(29)->setElementsFormat('Y-m-d')->setChartElementsSeparation(4)->setChartLegendFormat('M. j');
break;
/**
* Last 90 days
*/
/**
* Last 90 days
*/
case AdminPanelTypes::PANEL_TYPE_LAST_QUARTER:
$intervalContainer->setStartDay(DateTime::createFromFormat('U', strtotime("-89 day"), $now->getTimezone()))->setElementsIntervalFormat(['P', 1, 'D'])->setIterations(89)->setElementsFormat('Y-m-d')->setChartElementsSeparation(8)->setChartLegendFormat('M. j');
break;
}
$intervalContainer->resetHourStartDay();
$startDay = $intervalContainer->getStartDay();
$iterations = $intervalContainer->getIterations();
$elementsIntervalFormat = $intervalContainer->getElementsIntervalFormat();
$elementsFormat = $intervalContainer->getElementsFormat();
$elementsGrouping = $intervalContainer->getElementsGrouping();
$timeElements = [$startDay];
for ($i = 1; $i <= $iterations; $i++) {
$time = clone $startDay;
$time->add(new \DateInterval($elementsIntervalFormat[0] . $i * $elementsIntervalFormat[1] . $elementsIntervalFormat[2]));
$timeElements[] = $time;
}
$timeElement = reset($timeElements);
while ($timeElement instanceof \DateTime) {
$firstTimeElement = clone $timeElement;
$elementFormatted = $timeElement->format($elementsFormat);
$intervalContainer->addElement($elementFormatted);
$groupedPartials = [$elementFormatted];
for ($k = 1; $k < $elementsGrouping; $k++) {
$timeElement = next($timeElements);
$elementFormatted = $timeElement->format($elementsFormat);
$intervalContainer->addElement($elementFormatted);
$groupedPartials[] = $elementFormatted;
}
$intervalContainer->addPartialInterval(PartialInterval::create($groupedPartials, $firstTimeElement));
$timeElement = next($timeElements);
}
return $intervalContainer;
}