Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace ErstiesAdmin\Forms;
- class TimerangeFilterForm extends \CMS\FilterForm {
- public function __construct() {
- parent::__construct('get');
- $end = new \DateTime();
- $start = clone($end);
- $start->modify('-1 week');
- $_GET['start'] = @$_GET['start'] ?: $start->format("d.m.Y");
- $_GET['end'] = @$_GET['end'] ?: $end->format("d.m.Y");
- $this
- ->fieldset()
- ->select('range', _t('Range'), [
- _t('Last Week') => 'last_week',
- _t('Last Month') => 'last_month',
- _t('Last Year') => 'last_year',
- _t('Select Week') => 'week',
- _t('Select Month') => 'month',
- _t('Select Year') => 'year',
- _t('Free Select') => 'free'
- ], '', false, [
- 'id' => 'events_chart_range_type',
- ])
- ->select('week', _t('Select week'), $this->getWeekOptions(15), '', false, [
- 'class' => 'chart_select chart_select-week',
- ])
- ->select('month', _t('Select month'), $this->getMonthOptions(12), '', false, [
- 'class' => 'chart_select chart_select-month',
- ])
- ->select('year', _t('Select year'), $this->getYearOptions(5), '', false, [
- 'class' => 'chart_select chart_select-year',
- ])
- ->text_date('start', _t('Start'), '', $start, [
- 'class' => 'chart_select chart_select-free',
- ])
- ->text_date('end', _t('End'), '', $end, [
- 'class' => 'chart_select chart_select-free',
- ])
- ->select('step', _t('Step'), [
- _t('Day') => 'day',
- _t('Week') => 'week',
- _t('Month') => 'month',
- _t('Year') => 'year',
- ], '');
- }
- public function validate() {
- if (parent::validate()) {
- $range = $this->values['range'];
- switch ($range) {
- case 'last_week':
- $end = new \DateTime();
- $start = clone($end);
- $start->modify('-1 week');
- break;
- case 'last_month':
- $end = new \DateTime();
- $start = clone($end);
- $start->modify('-1 month');
- break;
- case 'last_year':
- $end = new \DateTime();
- $start = clone($end);
- $start->modify('-1 year');
- break;
- case 'week':
- case 'month':
- case 'year':
- $arr = explode('-', $this->values[$range]);
- $start = new \DateTime($arr[0]);
- $end = new \DateTime($arr[1]);
- break;
- case 'free':
- default:
- $start = $this->values['start'] ?: $this->start;
- $end = $this->values['end'] ?: $this->end;
- break;
- }
- $start = \Ersties\DateTimeHelper::roundDownTimeToStep($start, $this->values['step']);
- $end = \Ersties\DateTimeHelper::roundUpTimeToStep($end, $this->values['step']);
- $this->values['start'] = $start;
- $this->values['end'] = $end;
- return true;
- }
- return false;
- }
- public function getChartBlankData($emptyItemData = 0) {
- $daterange = $this->getDatePeriod();
- $emptyChartData = [];
- foreach($daterange as $datetime) {
- $datetime->setTime(0, 0, 0);
- $emptyChartData[($datetime->getTimestamp() + $datetime->getOffset()) * 1000] = $emptyItemData;
- }
- ksort($emptyChartData);
- return $emptyChartData;
- }
- private function getWeekOptions($count) {
- $latestWeeks = [];
- $dateTo = new \DateTime();
- $dateTo->setTime(0, 0, 0);
- $dateTo = \Ersties\DateTimeHelper::getWeekFirstDay($dateTo);
- $dateFrom = clone($dateTo);
- $dateFrom->modify("-$count weeks");
- $dateTo->setTime(23, 59, 59);
- $daterange = new \DatePeriod($dateFrom, new \DateInterval('P7D'), $dateTo);
- foreach ($daterange as $date) {
- $date2 = clone $date;
- $date2 = \Ersties\DateTimeHelper::getWeekLastDay($date2);
- $date2->setTime(23, 59, 59);
- $latestWeeks[$date->format('d F Y') . ' - ' . $date2->format('d F Y')] = $date->format('d.m.Y') . '-' . $date2->format('d.m.Y');
- }
- return array_reverse($latestWeeks, true);
- }
- private function getMonthOptions($count) {
- $latestMonths = [];
- $dateTo = new \DateTime();
- $dateTo->setTime(0, 0, 0);
- $dateTo = \Ersties\DateTimeHelper::getMonthFirstDay($dateTo);
- $dateFrom = clone($dateTo);
- $dateFrom->modify("-$count months");
- $dateTo->setTime(23, 59, 59);
- $daterange = new \DatePeriod($dateFrom, new \DateInterval('P1M'), $dateTo);
- foreach ($daterange as $date) {
- $date2 = clone $date;
- $date2 = \Ersties\DateTimeHelper::getMonthLastDay($date2);
- $date2->setTime(23, 59, 59);
- $latestMonths[$date->format('F Y')] = $date->format('d.m.Y') . '-' . $date2->format('d.m.Y');
- }
- return array_reverse($latestMonths, true);
- }
- private function getYearOptions($count) {
- $latestMonths = [];
- $dateTo = new \DateTime();
- $dateTo->setTime(0, 0, 0);
- $dateTo = \Ersties\DateTimeHelper::getYearFirstDay($dateTo);
- $dateFrom = clone($dateTo);
- $dateFrom->modify("-$count years");
- $dateTo->setTime(23, 59, 59);
- $daterange = new \DatePeriod($dateFrom, new \DateInterval('P1Y'), $dateTo);
- foreach ($daterange as $date) {
- $date2 = clone $date;
- $date2 = \Ersties\DateTimeHelper::getYearLastDay($date2);
- $date2->setTime(23, 59, 59);
- $latestMonths[$date->format('Y')] = $date->format('d.m.Y') . '-' . $date2->format('d.m.Y');
- }
- return array_reverse($latestMonths, true);
- }
- public function getDatePeriod() {
- switch($this->values['step']) {
- case 'week':
- $dateInterval = new \DateInterval('P7D');
- break;
- case 'month':
- $dateInterval = new \DateInterval('P1M');
- break;
- case 'year':
- $dateInterval = new \DateInterval('P1Y');
- break;
- case 'day':
- $dateInterval = new \DateInterval('P1D');
- break;
- default:
- $dateInterval = new \DateInterval('P1D');
- break;
- }
- return new \DatePeriod($this->values['start'], $dateInterval, $this->values['end']);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement